swallowkit 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +563 -0
  3. package/dist/api/rpc-handler.d.ts +71 -0
  4. package/dist/api/rpc-handler.d.ts.map +1 -0
  5. package/dist/api/rpc-handler.js +205 -0
  6. package/dist/api/rpc-handler.js.map +1 -0
  7. package/dist/cli/commands/build.d.ts +6 -0
  8. package/dist/cli/commands/build.d.ts.map +1 -0
  9. package/dist/cli/commands/build.js +193 -0
  10. package/dist/cli/commands/build.js.map +1 -0
  11. package/dist/cli/commands/dev.d.ts +3 -0
  12. package/dist/cli/commands/dev.d.ts.map +1 -0
  13. package/dist/cli/commands/dev.js +305 -0
  14. package/dist/cli/commands/dev.js.map +1 -0
  15. package/dist/cli/commands/generate.d.ts +4 -0
  16. package/dist/cli/commands/generate.d.ts.map +1 -0
  17. package/dist/cli/commands/generate.js +238 -0
  18. package/dist/cli/commands/generate.js.map +1 -0
  19. package/dist/cli/commands/index.d.ts +9 -0
  20. package/dist/cli/commands/index.d.ts.map +1 -0
  21. package/dist/cli/commands/index.js +18 -0
  22. package/dist/cli/commands/index.js.map +1 -0
  23. package/dist/cli/commands/init.d.ts +7 -0
  24. package/dist/cli/commands/init.d.ts.map +1 -0
  25. package/dist/cli/commands/init.js +383 -0
  26. package/dist/cli/commands/init.js.map +1 -0
  27. package/dist/cli/commands/setup.d.ts +6 -0
  28. package/dist/cli/commands/setup.d.ts.map +1 -0
  29. package/dist/cli/commands/setup.js +254 -0
  30. package/dist/cli/commands/setup.js.map +1 -0
  31. package/dist/cli/index.d.ts +3 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/index.js +32 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/core/config.d.ts +25 -0
  36. package/dist/core/config.d.ts.map +1 -0
  37. package/dist/core/config.js +204 -0
  38. package/dist/core/config.js.map +1 -0
  39. package/dist/database/client.d.ts +46 -0
  40. package/dist/database/client.d.ts.map +1 -0
  41. package/dist/database/client.js +156 -0
  42. package/dist/database/client.js.map +1 -0
  43. package/dist/database/repository.d.ts +71 -0
  44. package/dist/database/repository.d.ts.map +1 -0
  45. package/dist/database/repository.js +89 -0
  46. package/dist/database/repository.js.map +1 -0
  47. package/dist/generator/api-generator.d.ts +53 -0
  48. package/dist/generator/api-generator.d.ts.map +1 -0
  49. package/dist/generator/api-generator.js +284 -0
  50. package/dist/generator/api-generator.js.map +1 -0
  51. package/dist/generator/schema-parser.d.ts +45 -0
  52. package/dist/generator/schema-parser.d.ts.map +1 -0
  53. package/dist/generator/schema-parser.js +198 -0
  54. package/dist/generator/schema-parser.js.map +1 -0
  55. package/dist/generator/templates/azure-functions.d.ts +15 -0
  56. package/dist/generator/templates/azure-functions.d.ts.map +1 -0
  57. package/dist/generator/templates/azure-functions.js +274 -0
  58. package/dist/generator/templates/azure-functions.js.map +1 -0
  59. package/dist/generator/templates/default-server-functions.d.ts +2 -0
  60. package/dist/generator/templates/default-server-functions.d.ts.map +1 -0
  61. package/dist/generator/templates/default-server-functions.js +67 -0
  62. package/dist/generator/templates/default-server-functions.js.map +1 -0
  63. package/dist/hooks/server-function-registry.d.ts +67 -0
  64. package/dist/hooks/server-function-registry.d.ts.map +1 -0
  65. package/dist/hooks/server-function-registry.js +153 -0
  66. package/dist/hooks/server-function-registry.js.map +1 -0
  67. package/dist/hooks/useQuery.d.ts +61 -0
  68. package/dist/hooks/useQuery.d.ts.map +1 -0
  69. package/dist/hooks/useQuery.js +147 -0
  70. package/dist/hooks/useQuery.js.map +1 -0
  71. package/dist/hooks/useServerFn.d.ts +27 -0
  72. package/dist/hooks/useServerFn.d.ts.map +1 -0
  73. package/dist/hooks/useServerFn.js +119 -0
  74. package/dist/hooks/useServerFn.js.map +1 -0
  75. package/dist/index.d.ts +17 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +73 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/schemas/example.d.ts +657 -0
  80. package/dist/schemas/example.d.ts.map +1 -0
  81. package/dist/schemas/example.js +133 -0
  82. package/dist/schemas/example.js.map +1 -0
  83. package/dist/server/todo-functions.d.ts +21 -0
  84. package/dist/server/todo-functions.d.ts.map +1 -0
  85. package/dist/server/todo-functions.js +121 -0
  86. package/dist/server/todo-functions.js.map +1 -0
  87. package/dist/types/index.d.ts +53 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +6 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/package.json +68 -0
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const commands_1 = require("./commands");
6
+ const program = new commander_1.Command();
7
+ program
8
+ .name("swallowkit")
9
+ .description("Azure Static Web Apps向けReact Hooksベースフレームワーク")
10
+ .version("0.1.0");
11
+ // コマンドの登録
12
+ program
13
+ .command("setup")
14
+ .description("必須ツール(Azure CLI, SWA CLI, Cosmos DB Emulator)をインストール")
15
+ .option("-y, --yes", "確認なしで自動インストール", false)
16
+ .action(commands_1.setupCommand);
17
+ program
18
+ .command("init")
19
+ .description("新しいSwallowKitプロジェクトを初期化")
20
+ .option("--name <name>", "プロジェクト名", "swallowkit-app")
21
+ .option("--template <template>", "テンプレート", "basic")
22
+ .action(commands_1.initCommand);
23
+ program.addCommand(commands_1.devCommand);
24
+ program
25
+ .command("build")
26
+ .description("プロダクション用にビルド")
27
+ .option("--output <dir>", "出力ディレクトリ", "dist")
28
+ .action(commands_1.buildCommand);
29
+ program.addCommand(commands_1.generateCommand);
30
+ program.addCommand(commands_1.analyzeCommand);
31
+ program.parse();
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,yCAAkH;AAElH,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,UAAU;AACV,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC;KAC3C,MAAM,CAAC,uBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,eAAe,EAAE,SAAS,EAAE,gBAAgB,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,QAAQ,EAAE,OAAO,CAAC;KAClD,MAAM,CAAC,sBAAW,CAAC,CAAC;AAEvB,OAAO,CAAC,UAAU,CAAC,qBAAU,CAAC,CAAC;AAE/B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,cAAc,CAAC;KAC3B,MAAM,CAAC,gBAAgB,EAAE,UAAU,EAAE,MAAM,CAAC;KAC5C,MAAM,CAAC,uBAAY,CAAC,CAAC;AAExB,OAAO,CAAC,UAAU,CAAC,0BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,yBAAc,CAAC,CAAC;AAEnC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { SwallowKitConfig } from "../types";
2
+ /**
3
+ * 設定ファイルを読み込み
4
+ */
5
+ export declare function loadConfig(configPath?: string): SwallowKitConfig;
6
+ /**
7
+ * 設定ファイルを生成
8
+ */
9
+ export declare function generateConfig(outputPath?: string): void;
10
+ /**
11
+ * 環境変数からの設定読み込み
12
+ */
13
+ export declare function loadConfigFromEnv(): Partial<SwallowKitConfig>;
14
+ /**
15
+ * 完全な設定を取得(ファイル + 環境変数)
16
+ */
17
+ export declare function getFullConfig(configPath?: string): SwallowKitConfig;
18
+ /**
19
+ * 設定の検証
20
+ */
21
+ export declare function validateConfig(config: SwallowKitConfig): {
22
+ valid: boolean;
23
+ errors: string[];
24
+ };
25
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAqB5C;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAiChE;AA0BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,GAAE,MAAiC,GAAG,IAAI,CAsBlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAkC7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAKnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAmB7F"}
@@ -0,0 +1,204 @@
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.loadConfig = loadConfig;
37
+ exports.generateConfig = generateConfig;
38
+ exports.loadConfigFromEnv = loadConfigFromEnv;
39
+ exports.getFullConfig = getFullConfig;
40
+ exports.validateConfig = validateConfig;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ /**
44
+ * デフォルト設定
45
+ */
46
+ const DEFAULT_CONFIG = {
47
+ database: {
48
+ type: "mock",
49
+ },
50
+ api: {
51
+ endpoint: "/api/_swallowkit",
52
+ cors: {
53
+ origin: "*",
54
+ credentials: true,
55
+ },
56
+ },
57
+ functions: {
58
+ outputDir: "api",
59
+ },
60
+ };
61
+ /**
62
+ * 設定ファイルを読み込み
63
+ */
64
+ function loadConfig(configPath) {
65
+ const defaultPaths = [
66
+ "swallowkit.config.json",
67
+ "swallowkit.config.js",
68
+ ".swallowkitrc.json",
69
+ ];
70
+ const paths = configPath ? [configPath] : defaultPaths;
71
+ for (const filePath of paths) {
72
+ const fullPath = path.resolve(process.cwd(), filePath);
73
+ if (fs.existsSync(fullPath)) {
74
+ try {
75
+ console.log(`📋 設定ファイルを読み込み: ${filePath}`);
76
+ if (filePath.endsWith(".json")) {
77
+ const configData = fs.readFileSync(fullPath, "utf-8");
78
+ const userConfig = JSON.parse(configData);
79
+ return mergeConfig(DEFAULT_CONFIG, userConfig);
80
+ }
81
+ else if (filePath.endsWith(".js")) {
82
+ delete require.cache[fullPath];
83
+ const userConfig = require(fullPath);
84
+ return mergeConfig(DEFAULT_CONFIG, userConfig.default || userConfig);
85
+ }
86
+ }
87
+ catch (error) {
88
+ console.warn(`⚠️ 設定ファイルの読み込みに失敗: ${filePath}`, error);
89
+ }
90
+ }
91
+ }
92
+ console.log("📋 デフォルト設定を使用");
93
+ return DEFAULT_CONFIG;
94
+ }
95
+ /**
96
+ * 設定をマージ
97
+ */
98
+ function mergeConfig(defaultConfig, userConfig) {
99
+ return {
100
+ database: {
101
+ ...defaultConfig.database,
102
+ ...userConfig.database,
103
+ },
104
+ api: {
105
+ ...defaultConfig.api,
106
+ ...userConfig.api,
107
+ cors: {
108
+ ...defaultConfig.api?.cors,
109
+ ...userConfig.api?.cors,
110
+ },
111
+ },
112
+ functions: {
113
+ ...defaultConfig.functions,
114
+ ...userConfig.functions,
115
+ },
116
+ };
117
+ }
118
+ /**
119
+ * 設定ファイルを生成
120
+ */
121
+ function generateConfig(outputPath = "swallowkit.config.json") {
122
+ const config = {
123
+ $schema: "https://swallowkit.dev/schema.json",
124
+ database: {
125
+ type: "cosmos",
126
+ connectionString: "your-cosmos-connection-string",
127
+ databaseName: "SwallowKitDB",
128
+ },
129
+ api: {
130
+ endpoint: "/api/_swallowkit",
131
+ cors: {
132
+ origin: ["http://localhost:3000"],
133
+ credentials: true,
134
+ },
135
+ },
136
+ functions: {
137
+ outputDir: "api",
138
+ },
139
+ };
140
+ fs.writeFileSync(outputPath, JSON.stringify(config, null, 2));
141
+ console.log(`✅ 設定ファイルを生成しました: ${outputPath}`);
142
+ }
143
+ /**
144
+ * 環境変数からの設定読み込み
145
+ */
146
+ function loadConfigFromEnv() {
147
+ const config = {};
148
+ // データベース設定
149
+ if (process.env.SWALLOWKIT_DB_TYPE) {
150
+ config.database = {
151
+ ...config.database,
152
+ type: process.env.SWALLOWKIT_DB_TYPE,
153
+ };
154
+ }
155
+ if (process.env.SWALLOWKIT_DB_CONNECTION_STRING) {
156
+ config.database = {
157
+ ...config.database,
158
+ connectionString: process.env.SWALLOWKIT_DB_CONNECTION_STRING,
159
+ };
160
+ }
161
+ if (process.env.SWALLOWKIT_DB_NAME) {
162
+ config.database = {
163
+ ...config.database,
164
+ databaseName: process.env.SWALLOWKIT_DB_NAME,
165
+ };
166
+ }
167
+ // API設定
168
+ if (process.env.SWALLOWKIT_API_ENDPOINT) {
169
+ config.api = {
170
+ ...config.api,
171
+ endpoint: process.env.SWALLOWKIT_API_ENDPOINT,
172
+ };
173
+ }
174
+ return config;
175
+ }
176
+ /**
177
+ * 完全な設定を取得(ファイル + 環境変数)
178
+ */
179
+ function getFullConfig(configPath) {
180
+ const fileConfig = loadConfig(configPath);
181
+ const envConfig = loadConfigFromEnv();
182
+ return mergeConfig(fileConfig, envConfig);
183
+ }
184
+ /**
185
+ * 設定の検証
186
+ */
187
+ function validateConfig(config) {
188
+ const errors = [];
189
+ // データベース設定の検証
190
+ if (config.database?.type === "cosmos") {
191
+ if (!config.database.connectionString) {
192
+ errors.push("Cosmos DB connection string is required when type is 'cosmos'");
193
+ }
194
+ }
195
+ // API設定の検証
196
+ if (config.api?.endpoint && !config.api.endpoint.startsWith("/")) {
197
+ errors.push("API endpoint must start with '/'");
198
+ }
199
+ return {
200
+ valid: errors.length === 0,
201
+ errors,
202
+ };
203
+ }
204
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { Container } from "@azure/cosmos";
2
+ import { SwallowKitConfig } from "../types/index.js";
3
+ /**
4
+ * Cosmos DB クライアントの管理
5
+ */
6
+ export declare class DatabaseClient {
7
+ private config;
8
+ private client;
9
+ private database;
10
+ private containers;
11
+ constructor(config: SwallowKitConfig);
12
+ /**
13
+ * データベースに接続
14
+ */
15
+ connect(): Promise<void>;
16
+ /**
17
+ * コンテナを取得
18
+ */
19
+ getContainer(containerName: string): Promise<Container>;
20
+ /**
21
+ * ドキュメントを作成
22
+ */
23
+ createDocument<T extends Record<string, any>>(containerName: string, document: T): Promise<T>;
24
+ /**
25
+ * ドキュメントを取得
26
+ */
27
+ getDocument<T extends Record<string, any>>(containerName: string, id: string): Promise<T | null>;
28
+ /**
29
+ * ドキュメントを更新
30
+ */
31
+ updateDocument<T extends Record<string, any>>(containerName: string, document: T): Promise<T>;
32
+ /**
33
+ * ドキュメントを削除
34
+ */
35
+ deleteDocument(containerName: string, id: string): Promise<void>;
36
+ /**
37
+ * クエリを実行
38
+ */
39
+ query<T>(containerName: string, query: string, parameters?: any[]): Promise<T[]>;
40
+ /**
41
+ * モック操作(開発時用)
42
+ */
43
+ private mockOperation;
44
+ }
45
+ export declare function getDatabaseClient(config?: SwallowKitConfig): DatabaseClient;
46
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/database/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,SAAS,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,qBAAa,cAAc;IAKb,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,UAAU,CAAqC;gBAEnC,MAAM,EAAE,gBAAgB;IAE5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB9B;;OAEG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAoB7D;;OAEG;IACG,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAUnG;;OAEG;IACG,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBtG;;OAEG;IACG,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAUnG;;OAEG;IACG,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtE;;OAEG;IACG,KAAK,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IActF;;OAEG;IACH,OAAO,CAAC,aAAa;CAgBtB;AAOD,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,cAAc,CAW3E"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatabaseClient = void 0;
4
+ exports.getDatabaseClient = getDatabaseClient;
5
+ const cosmos_1 = require("@azure/cosmos");
6
+ /**
7
+ * Cosmos DB クライアントの管理
8
+ */
9
+ class DatabaseClient {
10
+ constructor(config) {
11
+ this.config = config;
12
+ this.client = null;
13
+ this.database = null;
14
+ this.containers = new Map();
15
+ }
16
+ /**
17
+ * データベースに接続
18
+ */
19
+ async connect() {
20
+ if (this.config.database?.type === "mock") {
21
+ console.log("🔧 モックデータベースを使用中");
22
+ return;
23
+ }
24
+ if (!this.config.database?.connectionString) {
25
+ throw new Error("Cosmos DB connection string が設定されていません");
26
+ }
27
+ this.client = new cosmos_1.CosmosClient(this.config.database.connectionString);
28
+ const databaseName = this.config.database.databaseName || "SwallowKitDB";
29
+ const { database } = await this.client.databases.createIfNotExists({
30
+ id: databaseName,
31
+ });
32
+ this.database = database;
33
+ console.log(`📦 Cosmos DB に接続しました: ${databaseName}`);
34
+ }
35
+ /**
36
+ * コンテナを取得
37
+ */
38
+ async getContainer(containerName) {
39
+ if (this.config.database?.type === "mock") {
40
+ throw new Error("モックモードではコンテナ操作は利用できません");
41
+ }
42
+ if (!this.database) {
43
+ await this.connect();
44
+ }
45
+ if (!this.containers.has(containerName)) {
46
+ const { container } = await this.database.containers.createIfNotExists({
47
+ id: containerName,
48
+ partitionKey: "/id",
49
+ });
50
+ this.containers.set(containerName, container);
51
+ }
52
+ return this.containers.get(containerName);
53
+ }
54
+ /**
55
+ * ドキュメントを作成
56
+ */
57
+ async createDocument(containerName, document) {
58
+ if (this.config.database?.type === "mock") {
59
+ return this.mockOperation("create", document);
60
+ }
61
+ const container = await this.getContainer(containerName);
62
+ const { resource } = await container.items.create(document);
63
+ return resource;
64
+ }
65
+ /**
66
+ * ドキュメントを取得
67
+ */
68
+ async getDocument(containerName, id) {
69
+ if (this.config.database?.type === "mock") {
70
+ return this.mockOperation("get", { id });
71
+ }
72
+ const container = await this.getContainer(containerName);
73
+ try {
74
+ const { resource } = await container.item(id, id).read();
75
+ return resource || null;
76
+ }
77
+ catch (error) {
78
+ if (error.code === 404) {
79
+ return null;
80
+ }
81
+ throw error;
82
+ }
83
+ }
84
+ /**
85
+ * ドキュメントを更新
86
+ */
87
+ async updateDocument(containerName, document) {
88
+ if (this.config.database?.type === "mock") {
89
+ return this.mockOperation("update", document);
90
+ }
91
+ const container = await this.getContainer(containerName);
92
+ const { resource } = await container.items.upsert(document);
93
+ return resource;
94
+ }
95
+ /**
96
+ * ドキュメントを削除
97
+ */
98
+ async deleteDocument(containerName, id) {
99
+ if (this.config.database?.type === "mock") {
100
+ this.mockOperation("delete", { id });
101
+ return;
102
+ }
103
+ const container = await this.getContainer(containerName);
104
+ await container.item(id, id).delete();
105
+ }
106
+ /**
107
+ * クエリを実行
108
+ */
109
+ async query(containerName, query, parameters) {
110
+ if (this.config.database?.type === "mock") {
111
+ return this.mockOperation("query", { query, parameters });
112
+ }
113
+ const container = await this.getContainer(containerName);
114
+ const { resources } = await container.items.query({
115
+ query,
116
+ parameters,
117
+ }).fetchAll();
118
+ return resources;
119
+ }
120
+ /**
121
+ * モック操作(開発時用)
122
+ */
123
+ mockOperation(operation, data) {
124
+ console.log(`🔧 モック ${operation} 操作:`, data);
125
+ // 簡単なモックデータを返す
126
+ switch (operation) {
127
+ case "create":
128
+ case "update":
129
+ return { ...data, id: data.id || Date.now().toString() };
130
+ case "get":
131
+ return { id: data.id, mockData: true };
132
+ case "query":
133
+ return [{ id: "mock1", mockData: true }, { id: "mock2", mockData: true }];
134
+ default:
135
+ return data;
136
+ }
137
+ }
138
+ }
139
+ exports.DatabaseClient = DatabaseClient;
140
+ /**
141
+ * グローバルデータベースクライアント
142
+ */
143
+ let globalDatabaseClient = null;
144
+ function getDatabaseClient(config) {
145
+ if (!globalDatabaseClient) {
146
+ if (!config) {
147
+ // デフォルト設定
148
+ config = {
149
+ database: { type: "mock" },
150
+ };
151
+ }
152
+ globalDatabaseClient = new DatabaseClient(config);
153
+ }
154
+ return globalDatabaseClient;
155
+ }
156
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/database/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zodスキーマベースのデータベース操作ヘルパー
4
+ */
5
+ export declare class SchemaRepository<T extends Record<string, any>> {
6
+ private containerName;
7
+ private schema;
8
+ constructor(containerName: string, schema: z.ZodSchema<T>);
9
+ /**
10
+ * ドキュメントを作成(バリデーション付き)
11
+ */
12
+ create(data: T): Promise<T>;
13
+ /**
14
+ * ドキュメントを取得
15
+ */
16
+ findById(id: string): Promise<T | null>;
17
+ /**
18
+ * ドキュメントを更新(バリデーション付き)
19
+ */
20
+ update(data: T): Promise<T>;
21
+ /**
22
+ * ドキュメントを削除
23
+ */
24
+ delete(id: string): Promise<void>;
25
+ /**
26
+ * 全てのドキュメントを取得
27
+ */
28
+ findAll(): Promise<T[]>;
29
+ /**
30
+ * 条件付きクエリ
31
+ */
32
+ findWhere(condition: string, parameters?: any[]): Promise<T[]>;
33
+ }
34
+ /**
35
+ * 簡単なリポジトリ作成ヘルパー
36
+ */
37
+ export declare function createRepository<T extends Record<string, any>>(containerName: string, schema: z.ZodSchema<T>): SchemaRepository<T>;
38
+ /**
39
+ * よく使われるスキーマの例
40
+ */
41
+ export declare const TodoSchema: z.ZodObject<{
42
+ id: z.ZodString;
43
+ text: z.ZodString;
44
+ completed: z.ZodDefault<z.ZodBoolean>;
45
+ createdAt: z.ZodDefault<z.ZodString>;
46
+ updatedAt: z.ZodDefault<z.ZodString>;
47
+ }, "strip", z.ZodTypeAny, {
48
+ id: string;
49
+ text: string;
50
+ completed: boolean;
51
+ createdAt: string;
52
+ updatedAt: string;
53
+ }, {
54
+ id: string;
55
+ text: string;
56
+ completed?: boolean | undefined;
57
+ createdAt?: string | undefined;
58
+ updatedAt?: string | undefined;
59
+ }>;
60
+ export type Todo = z.infer<typeof TodoSchema>;
61
+ /**
62
+ * Todo専用リポジトリの例
63
+ */
64
+ export declare const TodoRepository: SchemaRepository<{
65
+ id: string;
66
+ text: string;
67
+ completed?: boolean | undefined;
68
+ createdAt?: string | undefined;
69
+ updatedAt?: string | undefined;
70
+ }>;
71
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/database/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,qBAAa,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAEvD,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;gBADN,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAGhC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAMjC;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAU7C;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAMjC;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAW7B;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAOrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5D,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GACrB,gBAAgB,CAAC,CAAC,CAAC,CAErB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;EAMrB,CAAC;AAEH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;EAAwC,CAAC"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TodoRepository = exports.TodoSchema = exports.SchemaRepository = void 0;
4
+ exports.createRepository = createRepository;
5
+ const zod_1 = require("zod");
6
+ const client_1 = require("./client");
7
+ /**
8
+ * Zodスキーマベースのデータベース操作ヘルパー
9
+ */
10
+ class SchemaRepository {
11
+ constructor(containerName, schema) {
12
+ this.containerName = containerName;
13
+ this.schema = schema;
14
+ }
15
+ /**
16
+ * ドキュメントを作成(バリデーション付き)
17
+ */
18
+ async create(data) {
19
+ const validatedData = this.schema.parse(data);
20
+ const client = (0, client_1.getDatabaseClient)();
21
+ return client.createDocument(this.containerName, validatedData);
22
+ }
23
+ /**
24
+ * ドキュメントを取得
25
+ */
26
+ async findById(id) {
27
+ const client = (0, client_1.getDatabaseClient)();
28
+ const document = await client.getDocument(this.containerName, id);
29
+ if (!document)
30
+ return null;
31
+ // データをバリデーション
32
+ return this.schema.parse(document);
33
+ }
34
+ /**
35
+ * ドキュメントを更新(バリデーション付き)
36
+ */
37
+ async update(data) {
38
+ const validatedData = this.schema.parse(data);
39
+ const client = (0, client_1.getDatabaseClient)();
40
+ return client.updateDocument(this.containerName, validatedData);
41
+ }
42
+ /**
43
+ * ドキュメントを削除
44
+ */
45
+ async delete(id) {
46
+ const client = (0, client_1.getDatabaseClient)();
47
+ return client.deleteDocument(this.containerName, id);
48
+ }
49
+ /**
50
+ * 全てのドキュメントを取得
51
+ */
52
+ async findAll() {
53
+ const client = (0, client_1.getDatabaseClient)();
54
+ const documents = await client.query(this.containerName, "SELECT * FROM c");
55
+ // 全てのドキュメントをバリデーション
56
+ return documents.map(doc => this.schema.parse(doc));
57
+ }
58
+ /**
59
+ * 条件付きクエリ
60
+ */
61
+ async findWhere(condition, parameters) {
62
+ const client = (0, client_1.getDatabaseClient)();
63
+ const query = `SELECT * FROM c WHERE ${condition}`;
64
+ const documents = await client.query(this.containerName, query, parameters);
65
+ return documents.map(doc => this.schema.parse(doc));
66
+ }
67
+ }
68
+ exports.SchemaRepository = SchemaRepository;
69
+ /**
70
+ * 簡単なリポジトリ作成ヘルパー
71
+ */
72
+ function createRepository(containerName, schema) {
73
+ return new SchemaRepository(containerName, schema);
74
+ }
75
+ /**
76
+ * よく使われるスキーマの例
77
+ */
78
+ exports.TodoSchema = zod_1.z.object({
79
+ id: zod_1.z.string(),
80
+ text: zod_1.z.string(),
81
+ completed: zod_1.z.boolean().default(false),
82
+ createdAt: zod_1.z.string().default(() => new Date().toISOString()),
83
+ updatedAt: zod_1.z.string().default(() => new Date().toISOString()),
84
+ });
85
+ /**
86
+ * Todo専用リポジトリの例
87
+ */
88
+ exports.TodoRepository = createRepository("todos", exports.TodoSchema);
89
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/database/repository.ts"],"names":[],"mappings":"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"}