@mathrunet/masamune_cloudflare_turso 3.2.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 (172) hide show
  1. package/CHANGELOG.md +363 -0
  2. package/LICENSE +21 -0
  3. package/README.md +213 -0
  4. package/dist/functions/test.d.ts +1 -0
  5. package/dist/functions/test.js +71 -0
  6. package/dist/functions/test.js.map +1 -0
  7. package/dist/functions/turso.d.ts +1 -0
  8. package/dist/functions/turso.js +50 -0
  9. package/dist/functions/turso.js.map +1 -0
  10. package/dist/functions/turso_token.d.ts +1 -0
  11. package/dist/functions/turso_token.js +40 -0
  12. package/dist/functions/turso_token.js.map +1 -0
  13. package/dist/functions.d.ts +21 -0
  14. package/dist/functions.js +24 -0
  15. package/dist/functions.js.map +1 -0
  16. package/dist/index.d.ts +15 -0
  17. package/dist/index.js +31 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/lib/api.d.ts +183 -0
  20. package/dist/lib/api.js +144 -0
  21. package/dist/lib/api.js.map +1 -0
  22. package/dist/lib/crud.d.ts +10 -0
  23. package/dist/lib/crud.js +203 -0
  24. package/dist/lib/crud.js.map +1 -0
  25. package/dist/lib/exntensions/firestore.extension.d.ts +247 -0
  26. package/dist/lib/exntensions/firestore.extension.js +386 -0
  27. package/dist/lib/exntensions/firestore.extension.js.map +1 -0
  28. package/dist/lib/exntensions/string.extension.d.ts +214 -0
  29. package/dist/lib/exntensions/string.extension.js +223 -0
  30. package/dist/lib/exntensions/string.extension.js.map +1 -0
  31. package/dist/lib/model_field_value/converters/basic_converter.d.ts +49 -0
  32. package/dist/lib/model_field_value/converters/basic_converter.js +51 -0
  33. package/dist/lib/model_field_value/converters/basic_converter.js.map +1 -0
  34. package/dist/lib/model_field_value/converters/enum_converter.d.ts +49 -0
  35. package/dist/lib/model_field_value/converters/enum_converter.js +51 -0
  36. package/dist/lib/model_field_value/converters/enum_converter.js.map +1 -0
  37. package/dist/lib/model_field_value/converters/model_counter_converter.d.ts +49 -0
  38. package/dist/lib/model_field_value/converters/model_counter_converter.js +216 -0
  39. package/dist/lib/model_field_value/converters/model_counter_converter.js.map +1 -0
  40. package/dist/lib/model_field_value/converters/model_date_converter.d.ts +49 -0
  41. package/dist/lib/model_field_value/converters/model_date_converter.js +271 -0
  42. package/dist/lib/model_field_value/converters/model_date_converter.js.map +1 -0
  43. package/dist/lib/model_field_value/converters/model_date_range_converter.d.ts +49 -0
  44. package/dist/lib/model_field_value/converters/model_date_range_converter.js +225 -0
  45. package/dist/lib/model_field_value/converters/model_date_range_converter.js.map +1 -0
  46. package/dist/lib/model_field_value/converters/model_geo_value_converter.d.ts +49 -0
  47. package/dist/lib/model_field_value/converters/model_geo_value_converter.js +216 -0
  48. package/dist/lib/model_field_value/converters/model_geo_value_converter.js.map +1 -0
  49. package/dist/lib/model_field_value/converters/model_image_uri_converter.d.ts +49 -0
  50. package/dist/lib/model_field_value/converters/model_image_uri_converter.js +184 -0
  51. package/dist/lib/model_field_value/converters/model_image_uri_converter.js.map +1 -0
  52. package/dist/lib/model_field_value/converters/model_locale_converter.d.ts +51 -0
  53. package/dist/lib/model_field_value/converters/model_locale_converter.js +228 -0
  54. package/dist/lib/model_field_value/converters/model_locale_converter.js.map +1 -0
  55. package/dist/lib/model_field_value/converters/model_localized_value_converter.d.ts +49 -0
  56. package/dist/lib/model_field_value/converters/model_localized_value_converter.js +145 -0
  57. package/dist/lib/model_field_value/converters/model_localized_value_converter.js.map +1 -0
  58. package/dist/lib/model_field_value/converters/model_ref_base_converter.d.ts +49 -0
  59. package/dist/lib/model_field_value/converters/model_ref_base_converter.js +159 -0
  60. package/dist/lib/model_field_value/converters/model_ref_base_converter.js.map +1 -0
  61. package/dist/lib/model_field_value/converters/model_search_converter.d.ts +49 -0
  62. package/dist/lib/model_field_value/converters/model_search_converter.js +138 -0
  63. package/dist/lib/model_field_value/converters/model_search_converter.js.map +1 -0
  64. package/dist/lib/model_field_value/converters/model_server_command_base_converter.d.ts +49 -0
  65. package/dist/lib/model_field_value/converters/model_server_command_base_converter.js +119 -0
  66. package/dist/lib/model_field_value/converters/model_server_command_base_converter.js.map +1 -0
  67. package/dist/lib/model_field_value/converters/model_time_converter.d.ts +49 -0
  68. package/dist/lib/model_field_value/converters/model_time_converter.js +271 -0
  69. package/dist/lib/model_field_value/converters/model_time_converter.js.map +1 -0
  70. package/dist/lib/model_field_value/converters/model_time_range_converter.d.ts +49 -0
  71. package/dist/lib/model_field_value/converters/model_time_range_converter.js +225 -0
  72. package/dist/lib/model_field_value/converters/model_time_range_converter.js.map +1 -0
  73. package/dist/lib/model_field_value/converters/model_timestamp_converter.d.ts +66 -0
  74. package/dist/lib/model_field_value/converters/model_timestamp_converter.js +297 -0
  75. package/dist/lib/model_field_value/converters/model_timestamp_converter.js.map +1 -0
  76. package/dist/lib/model_field_value/converters/model_timestamp_range_converter.d.ts +49 -0
  77. package/dist/lib/model_field_value/converters/model_timestamp_range_converter.js +225 -0
  78. package/dist/lib/model_field_value/converters/model_timestamp_range_converter.js.map +1 -0
  79. package/dist/lib/model_field_value/converters/model_token_converter.d.ts +48 -0
  80. package/dist/lib/model_field_value/converters/model_token_converter.js +137 -0
  81. package/dist/lib/model_field_value/converters/model_token_converter.js.map +1 -0
  82. package/dist/lib/model_field_value/converters/model_uri_converter.d.ts +49 -0
  83. package/dist/lib/model_field_value/converters/model_uri_converter.js +184 -0
  84. package/dist/lib/model_field_value/converters/model_uri_converter.js.map +1 -0
  85. package/dist/lib/model_field_value/converters/model_vector_value_converter.d.ts +49 -0
  86. package/dist/lib/model_field_value/converters/model_vector_value_converter.js +125 -0
  87. package/dist/lib/model_field_value/converters/model_vector_value_converter.js.map +1 -0
  88. package/dist/lib/model_field_value/converters/model_video_uri_converter.d.ts +49 -0
  89. package/dist/lib/model_field_value/converters/model_video_uri_converter.js +184 -0
  90. package/dist/lib/model_field_value/converters/model_video_uri_converter.js.map +1 -0
  91. package/dist/lib/model_field_value/converters/null_converter.d.ts +49 -0
  92. package/dist/lib/model_field_value/converters/null_converter.js +72 -0
  93. package/dist/lib/model_field_value/converters/null_converter.js.map +1 -0
  94. package/dist/lib/model_field_value/default_model_field_value_converter.d.ts +155 -0
  95. package/dist/lib/model_field_value/default_model_field_value_converter.js +303 -0
  96. package/dist/lib/model_field_value/default_model_field_value_converter.js.map +1 -0
  97. package/dist/lib/model_field_value/model_field_value.d.ts +467 -0
  98. package/dist/lib/model_field_value/model_field_value.js +665 -0
  99. package/dist/lib/model_field_value/model_field_value.js.map +1 -0
  100. package/dist/lib/model_field_value/model_field_value_converter.d.ts +117 -0
  101. package/dist/lib/model_field_value/model_field_value_converter.js +49 -0
  102. package/dist/lib/model_field_value/model_field_value_converter.js.map +1 -0
  103. package/dist/lib/regions.d.ts +6 -0
  104. package/dist/lib/regions.js +3 -0
  105. package/dist/lib/regions.js.map +1 -0
  106. package/dist/lib/request.d.ts +12 -0
  107. package/dist/lib/request.js +213 -0
  108. package/dist/lib/request.js.map +1 -0
  109. package/dist/lib/rules.d.ts +32 -0
  110. package/dist/lib/rules.js +299 -0
  111. package/dist/lib/rules.js.map +1 -0
  112. package/dist/lib/schema.d.ts +15 -0
  113. package/dist/lib/schema.js +141 -0
  114. package/dist/lib/schema.js.map +1 -0
  115. package/dist/lib/src/call_process_function_base.d.ts +39 -0
  116. package/dist/lib/src/call_process_function_base.js +72 -0
  117. package/dist/lib/src/call_process_function_base.js.map +1 -0
  118. package/dist/lib/src/firebase_loader.d.ts +30 -0
  119. package/dist/lib/src/firebase_loader.js +96 -0
  120. package/dist/lib/src/firebase_loader.js.map +1 -0
  121. package/dist/lib/src/firestore_base.d.ts +114 -0
  122. package/dist/lib/src/firestore_base.js +363 -0
  123. package/dist/lib/src/firestore_base.js.map +1 -0
  124. package/dist/lib/src/firestore_triggered_process_function_base.d.ts +40 -0
  125. package/dist/lib/src/firestore_triggered_process_function_base.js +72 -0
  126. package/dist/lib/src/firestore_triggered_process_function_base.js.map +1 -0
  127. package/dist/lib/src/functions_base.d.ts +327 -0
  128. package/dist/lib/src/functions_base.js +63 -0
  129. package/dist/lib/src/functions_base.js.map +1 -0
  130. package/dist/lib/src/functions_data.d.ts +10 -0
  131. package/dist/lib/src/functions_data.js +19 -0
  132. package/dist/lib/src/functions_data.js.map +1 -0
  133. package/dist/lib/src/request_process_function_base.d.ts +39 -0
  134. package/dist/lib/src/request_process_function_base.js +70 -0
  135. package/dist/lib/src/request_process_function_base.js.map +1 -0
  136. package/dist/lib/src/request_process_workders_base.d.ts +37 -0
  137. package/dist/lib/src/request_process_workders_base.js +27 -0
  138. package/dist/lib/src/request_process_workders_base.js.map +1 -0
  139. package/dist/lib/src/schedule_process_function_base.d.ts +33 -0
  140. package/dist/lib/src/schedule_process_function_base.js +71 -0
  141. package/dist/lib/src/schedule_process_function_base.js.map +1 -0
  142. package/dist/lib/src/sql_api_base.d.ts +185 -0
  143. package/dist/lib/src/sql_api_base.js +83 -0
  144. package/dist/lib/src/sql_api_base.js.map +1 -0
  145. package/dist/lib/src/workers_base.d.ts +74 -0
  146. package/dist/lib/src/workers_base.js +57 -0
  147. package/dist/lib/src/workers_base.js.map +1 -0
  148. package/dist/lib/src/workers_data.d.ts +10 -0
  149. package/dist/lib/src/workers_data.js +21 -0
  150. package/dist/lib/src/workers_data.js.map +1 -0
  151. package/dist/lib/token.d.ts +12 -0
  152. package/dist/lib/token.js +123 -0
  153. package/dist/lib/token.js.map +1 -0
  154. package/dist/lib/turso_client.d.ts +14 -0
  155. package/dist/lib/turso_client.js +130 -0
  156. package/dist/lib/turso_client.js.map +1 -0
  157. package/dist/lib/types.d.ts +71 -0
  158. package/dist/lib/types.js +3 -0
  159. package/dist/lib/types.js.map +1 -0
  160. package/dist/lib/utils.d.ts +82 -0
  161. package/dist/lib/utils.js +141 -0
  162. package/dist/lib/utils.js.map +1 -0
  163. package/dist/workers/test.d.ts +1 -0
  164. package/dist/workers/test.js +14 -0
  165. package/dist/workers/test.js.map +1 -0
  166. package/dist/workers/turso.d.ts +1 -0
  167. package/dist/workers/turso.js +50 -0
  168. package/dist/workers/turso.js.map +1 -0
  169. package/dist/workers/turso_token.d.ts +1 -0
  170. package/dist/workers/turso_token.js +40 -0
  171. package/dist/workers/turso_token.js.map +1 -0
  172. package/package.json +55 -0
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RulesEngine = void 0;
4
+ exports.createTursoRulesEngine = createTursoRulesEngine;
5
+ exports.buildRulesPath = buildRulesPath;
6
+ exports.normalizeHttpMethodToRulesOperation = normalizeHttpMethodToRulesOperation;
7
+ exports.normalizeRulesOperation = normalizeRulesOperation;
8
+ exports.expandRulesOperation = expandRulesOperation;
9
+ exports.filterAllowedScope = filterAllowedScope;
10
+ class RulesEngine {
11
+ constructor(config) {
12
+ this.config = normalizeRulesConfig(config);
13
+ }
14
+ config;
15
+ async evaluate(input) {
16
+ const operation = normalizeRulesOperation(input.operation);
17
+ const matches = Object.keys(this.config.rules)
18
+ .map((rulePath) => matchRulePath(rulePath, input.path))
19
+ .filter((match) => match.matched)
20
+ .sort(compareRulePathMatch);
21
+ if (matches.length === 0) {
22
+ return { allowed: false };
23
+ }
24
+ const resolved = resolveInheritedRule(matches.map((match) => ({
25
+ rulePath: match.rulePath,
26
+ entry: this.config.rules[match.rulePath],
27
+ })));
28
+ const access = resolveAccessRule(resolved.entry, operation);
29
+ if (!access) {
30
+ return {
31
+ allowed: false,
32
+ rulePath: resolved.rulePath,
33
+ };
34
+ }
35
+ return {
36
+ allowed: await evaluateAccessRule(access, input.authentication, input.fetchDocument),
37
+ rulePath: resolved.rulePath,
38
+ access,
39
+ };
40
+ }
41
+ }
42
+ exports.RulesEngine = RulesEngine;
43
+ function createTursoRulesEngine(config) {
44
+ return new RulesEngine(config);
45
+ }
46
+ function buildRulesPath({ database, table, indexKey, }) {
47
+ return [
48
+ "database",
49
+ encodePathSegment(database),
50
+ "table",
51
+ encodePathSegment(table),
52
+ encodePathSegment(indexKey),
53
+ ].join("/");
54
+ }
55
+ function normalizeHttpMethodToRulesOperation(method) {
56
+ switch (method.toUpperCase()) {
57
+ case "GET":
58
+ return "get";
59
+ case "POST":
60
+ return "create";
61
+ case "PUT":
62
+ return "update";
63
+ case "DELETE":
64
+ return "delete";
65
+ default:
66
+ throw new Error(`Unsupported HTTP method for rules: ${method}`);
67
+ }
68
+ }
69
+ function normalizeRulesOperation(operation) {
70
+ switch (operation) {
71
+ case "read":
72
+ return "get";
73
+ case "write":
74
+ return "create";
75
+ case "get":
76
+ case "create":
77
+ case "update":
78
+ case "delete":
79
+ return operation;
80
+ }
81
+ }
82
+ function expandRulesOperation(operation) {
83
+ switch (operation) {
84
+ case "read":
85
+ return ["get"];
86
+ case "write":
87
+ return ["create", "update", "delete"];
88
+ case "get":
89
+ case "create":
90
+ case "update":
91
+ case "delete":
92
+ return [operation];
93
+ }
94
+ }
95
+ async function filterAllowedScope({ engine, database, scope, authentication, }) {
96
+ const allowed = [];
97
+ for (const item of scope) {
98
+ const operations = [];
99
+ for (const operationKey of item.operations) {
100
+ const expanded = expandRulesOperation(operationKey);
101
+ const results = await Promise.all(expanded.map((operation) => {
102
+ return engine.evaluate({
103
+ path: buildRulesPath({
104
+ database,
105
+ table: item.table,
106
+ indexKey: "*",
107
+ }),
108
+ operation,
109
+ authentication,
110
+ });
111
+ }));
112
+ if (results.every((result) => result.allowed)) {
113
+ operations.push(operationKey);
114
+ }
115
+ }
116
+ if (operations.length > 0) {
117
+ allowed.push({
118
+ table: item.table,
119
+ operations,
120
+ });
121
+ }
122
+ }
123
+ return allowed;
124
+ }
125
+ function normalizeRulesConfig(config) {
126
+ if (!config) {
127
+ return {
128
+ version: "1",
129
+ rules: {
130
+ "database/**": {
131
+ read: "deny",
132
+ write: "deny",
133
+ },
134
+ },
135
+ };
136
+ }
137
+ if (typeof config.version !== "string" || !isRecord(config.rules)) {
138
+ throw new Error("Invalid rules config.");
139
+ }
140
+ for (const path of Object.keys(config.rules)) {
141
+ validateRulePath(path);
142
+ }
143
+ return config;
144
+ }
145
+ function matchRulePath(rulePath, requestPath) {
146
+ validateRulePath(rulePath);
147
+ const ruleSegments = splitPath(rulePath);
148
+ const requestSegments = splitPath(requestPath);
149
+ let literalSegments = 0;
150
+ let wildcardSegments = 0;
151
+ let deepWildcardSegments = 0;
152
+ for (let i = 0; i < ruleSegments.length; i++) {
153
+ const ruleSegment = ruleSegments[i];
154
+ if (ruleSegment === "**") {
155
+ deepWildcardSegments = 1;
156
+ return {
157
+ matched: true,
158
+ rulePath,
159
+ literalSegments,
160
+ wildcardSegments,
161
+ deepWildcardSegments,
162
+ matchedSegments: requestSegments.length,
163
+ };
164
+ }
165
+ const requestSegment = requestSegments[i];
166
+ if (requestSegment === undefined) {
167
+ return createUnmatched(rulePath);
168
+ }
169
+ if (ruleSegment === "*") {
170
+ wildcardSegments++;
171
+ continue;
172
+ }
173
+ if (ruleSegment !== requestSegment) {
174
+ return createUnmatched(rulePath);
175
+ }
176
+ literalSegments++;
177
+ }
178
+ if (ruleSegments.length !== requestSegments.length) {
179
+ return createUnmatched(rulePath);
180
+ }
181
+ return {
182
+ matched: true,
183
+ rulePath,
184
+ literalSegments,
185
+ wildcardSegments,
186
+ deepWildcardSegments,
187
+ matchedSegments: requestSegments.length,
188
+ };
189
+ }
190
+ function compareRulePathMatch(a, b) {
191
+ if (a.literalSegments !== b.literalSegments) {
192
+ return b.literalSegments - a.literalSegments;
193
+ }
194
+ if (a.deepWildcardSegments !== b.deepWildcardSegments) {
195
+ return a.deepWildcardSegments - b.deepWildcardSegments;
196
+ }
197
+ if (a.wildcardSegments !== b.wildcardSegments) {
198
+ return a.wildcardSegments - b.wildcardSegments;
199
+ }
200
+ if (a.matchedSegments !== b.matchedSegments) {
201
+ return b.matchedSegments - a.matchedSegments;
202
+ }
203
+ return a.rulePath.localeCompare(b.rulePath);
204
+ }
205
+ function resolveInheritedRule(matches) {
206
+ const inherited = {};
207
+ let rulePath = matches[0]?.rulePath ?? "";
208
+ for (const match of [...matches].reverse()) {
209
+ if (!match.entry) {
210
+ continue;
211
+ }
212
+ rulePath = match.rulePath;
213
+ for (const [operation, access] of Object.entries(match.entry)) {
214
+ inherited[operation] = access;
215
+ }
216
+ }
217
+ return {
218
+ rulePath,
219
+ entry: inherited,
220
+ };
221
+ }
222
+ function resolveAccessRule(entry, operation) {
223
+ for (const operationKey of resolveRulesOperation(operation)) {
224
+ const access = entry[operationKey];
225
+ if (access) {
226
+ return access;
227
+ }
228
+ }
229
+ return undefined;
230
+ }
231
+ function resolveRulesOperation(operation) {
232
+ switch (operation) {
233
+ case "get":
234
+ return ["get", "read"];
235
+ case "create":
236
+ return ["create", "write"];
237
+ case "update":
238
+ return ["update", "write"];
239
+ case "delete":
240
+ return ["delete", "write"];
241
+ }
242
+ }
243
+ async function evaluateAccessRule(access, authentication, fetchDocument) {
244
+ switch (access) {
245
+ case "deny":
246
+ return false;
247
+ case "allow":
248
+ return true;
249
+ case "authenticated":
250
+ return !!authentication?.uid;
251
+ default: {
252
+ const uid = authentication?.uid;
253
+ if (!uid || !fetchDocument) {
254
+ return false;
255
+ }
256
+ const document = await fetchDocument();
257
+ return document?.[access.field] === uid;
258
+ }
259
+ }
260
+ }
261
+ function validateRulePath(path) {
262
+ if (path.length === 0 || path.startsWith("/") || path.endsWith("/")) {
263
+ throw new Error(`Invalid rule path: ${path}`);
264
+ }
265
+ const segments = path.split("/");
266
+ if (segments.some((segment) => segment.length === 0)) {
267
+ throw new Error(`Invalid rule path: ${path}`);
268
+ }
269
+ const deepWildcardIndex = segments.indexOf("**");
270
+ if (deepWildcardIndex >= 0 && deepWildcardIndex !== segments.length - 1) {
271
+ throw new Error(`'**' must be the last segment in rule path: ${path}`);
272
+ }
273
+ }
274
+ function splitPath(path) {
275
+ if (path.length === 0 || path.startsWith("/") || path.endsWith("/")) {
276
+ return [];
277
+ }
278
+ return path.split("/");
279
+ }
280
+ function createUnmatched(rulePath) {
281
+ return {
282
+ matched: false,
283
+ rulePath,
284
+ literalSegments: 0,
285
+ wildcardSegments: 0,
286
+ deepWildcardSegments: 0,
287
+ matchedSegments: 0,
288
+ };
289
+ }
290
+ function encodePathSegment(segment) {
291
+ if (segment.length === 0 || segment.includes("/")) {
292
+ throw new Error(`Invalid path segment: ${segment}`);
293
+ }
294
+ return segment;
295
+ }
296
+ function isRecord(value) {
297
+ return typeof value === "object" && value !== null;
298
+ }
299
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/lib/rules.ts"],"names":[],"mappings":";;;AAmEA,wDAEC;AAED,wCAgBC;AAED,kFAaC;AAED,0DAYC;AAED,oDAYC;AAED,gDAuCC;AA3ID,MAAa,WAAW;IACtB,YAAY,MAAgC;QAC1C,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAEgB,MAAM,CAAc;IAErC,KAAK,CAAC,QAAQ,CAAC,KAA2B;QACxC,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;aAC3C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;aACtD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;aAChC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5D,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;SACzC,CAAC,CAAC,CAAC,CAAC;QACL,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;YACpF,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,MAAM;SACP,CAAC;IACJ,CAAC;CACF;AAjCD,kCAiCC;AAED,SAAgB,sBAAsB,CAAC,MAAgC;IACrE,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,KAAK,EACL,QAAQ,GAKT;IACC,OAAO;QACL,UAAU;QACV,iBAAiB,CAAC,QAAQ,CAAC;QAC3B,OAAO;QACP,iBAAiB,CAAC,KAAK,CAAC;QACxB,iBAAiB,CAAC,QAAQ,CAAC;KAC5B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,SAAgB,mCAAmC,CAAC,MAAc;IAChE,QAAQ,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB;YACE,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAgB,uBAAuB,CAAC,SAA6C;IACnF,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC;QAClB,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CAAC,SAA4B;IAC/D,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxC,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,EACvC,MAAM,EACN,QAAQ,EACR,KAAK,EACL,cAAc,GAMf;IACC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAwB,EAAE,CAAC;QAC3C,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC3D,OAAO,MAAM,CAAC,QAAQ,CAAC;oBACrB,IAAI,EAAE,cAAc,CAAC;wBACnB,QAAQ;wBACR,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,QAAQ,EAAE,GAAG;qBACd,CAAC;oBACF,SAAS;oBACT,cAAc;iBACf,CAAC,CAAC;YACL,CAAC,CAAC,CAAC,CAAC;YACJ,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,MAA6B,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAgC;IAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE;gBACL,aAAa,EAAE;oBACb,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM;iBACd;aACF;SACF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,WAAmB;IAC1D,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,eAAe,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,oBAAoB,GAAG,CAAC,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ;gBACR,eAAe;gBACf,gBAAgB;gBAChB,oBAAoB;gBACpB,eAAe,EAAE,eAAe,CAAC,MAAM;aACxC,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;YACxB,gBAAgB,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,WAAW,KAAK,cAAc,EAAE,CAAC;YACnC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,eAAe,EAAE,CAAC;IACpB,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;QACnD,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ;QACR,eAAe;QACf,gBAAgB;QAChB,oBAAoB;QACpB,eAAe,EAAE,eAAe,CAAC,MAAM;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,CAAgB,EAAE,CAAgB;IAC9D,IAAI,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,CAAC,oBAAoB,KAAK,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACtD,OAAO,CAAC,CAAC,oBAAoB,GAAG,CAAC,CAAC,oBAAoB,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC9C,OAAO,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC;IACjD,CAAC;IACD,IAAI,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC;IAC/C,CAAC;IACD,OAAO,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAA8D;IAE9D,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,IAAI,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC1B,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,SAAS,CAAC,SAA8B,CAAC,GAAG,MAAM,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,SAAS;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAiB,EAAE,SAAyB;IACrE,KAAK,MAAM,YAAY,IAAI,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAyB;IACtD,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7B,KAAK,QAAQ;YACX,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7B,KAAK,QAAQ;YACX,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAuB,EACvB,cAAkD,EAClD,aAAuF;IAEvF,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,KAAK,eAAe;YAClB,OAAO,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC;QAC/B,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,GAAG,GAAG,cAAc,EAAE,GAAG,CAAC;YAChC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;YACvC,OAAO,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,iBAAiB,IAAI,CAAC,IAAI,iBAAiB,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,QAAQ;QACR,eAAe,EAAE,CAAC;QAClB,gBAAgB,EAAE,CAAC;QACnB,oBAAoB,EAAE,CAAC;QACvB,eAAe,EAAE,CAAC;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { SqlValue, TursoClient } from "./turso_client";
2
+ export interface ColumnDefinition {
3
+ name: string;
4
+ type: string;
5
+ }
6
+ export declare function ensureTableSchema({ client, table, value, autoCreateTable, autoMigrateAddColumns, }: {
7
+ client: TursoClient;
8
+ table: string;
9
+ value: Record<string, unknown>;
10
+ autoCreateTable: boolean;
11
+ autoMigrateAddColumns: boolean;
12
+ }): Promise<void>;
13
+ export declare function encodeSqlValue(value: unknown): SqlValue;
14
+ export declare function decodeRow(row: Record<string, unknown>): Record<string, unknown>;
15
+ export declare function quoteIdentifier(identifier: string): string;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureTableSchema = ensureTableSchema;
4
+ exports.encodeSqlValue = encodeSqlValue;
5
+ exports.decodeRow = decodeRow;
6
+ exports.quoteIdentifier = quoteIdentifier;
7
+ const request_1 = require("./request");
8
+ const reservedFields = new Set(["id", "created_at", "updated_at"]);
9
+ async function ensureTableSchema({ client, table, value, autoCreateTable, autoMigrateAddColumns, }) {
10
+ const tableName = (0, request_1.validateIdentifier)(table, "table");
11
+ const columns = buildColumnDefinitions(value);
12
+ if (autoCreateTable) {
13
+ await createTableIfNotExists(client, tableName, columns);
14
+ await createMigrationTableIfNotExists(client);
15
+ }
16
+ if (autoMigrateAddColumns) {
17
+ await addMissingColumns(client, tableName, columns);
18
+ }
19
+ }
20
+ function encodeSqlValue(value) {
21
+ if (value === null || value === undefined) {
22
+ return null;
23
+ }
24
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
25
+ return value;
26
+ }
27
+ if (typeof value === "bigint") {
28
+ return value;
29
+ }
30
+ if (value instanceof Date) {
31
+ return value.toISOString();
32
+ }
33
+ return JSON.stringify(value);
34
+ }
35
+ function decodeRow(row) {
36
+ const result = {};
37
+ for (const [key, value] of Object.entries(row)) {
38
+ if (typeof value === "bigint") {
39
+ result[key] = value.toString();
40
+ }
41
+ else {
42
+ result[key] = value;
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+ function buildColumnDefinitions(value) {
48
+ return Object.entries(value)
49
+ .filter(([key]) => !reservedFields.has(key))
50
+ .map(([key, item]) => ({
51
+ name: (0, request_1.validateIdentifier)(key, "column"),
52
+ type: inferSqlType(item),
53
+ }));
54
+ }
55
+ function inferSqlType(value) {
56
+ if (typeof value === "number") {
57
+ return Number.isInteger(value) ? "INTEGER" : "REAL";
58
+ }
59
+ if (typeof value === "boolean") {
60
+ return "INTEGER";
61
+ }
62
+ if (typeof value === "bigint") {
63
+ return "INTEGER";
64
+ }
65
+ return "TEXT";
66
+ }
67
+ async function createTableIfNotExists(client, table, columns) {
68
+ const columnSql = columns
69
+ .map((column) => `${quoteIdentifier(column.name)} ${column.type}`)
70
+ .join(", ");
71
+ const additionalColumns = columnSql.length > 0 ? `, ${columnSql}` : "";
72
+ await client.execute(`CREATE TABLE IF NOT EXISTS ${quoteIdentifier(table)} (` +
73
+ "id TEXT PRIMARY KEY, " +
74
+ "created_at INTEGER, " +
75
+ "updated_at INTEGER" +
76
+ additionalColumns +
77
+ ")");
78
+ }
79
+ async function createMigrationTableIfNotExists(client) {
80
+ await client.execute("CREATE TABLE IF NOT EXISTS __masamune_schema_migrations (" +
81
+ "id TEXT PRIMARY KEY, " +
82
+ "database_name TEXT, " +
83
+ "table_name TEXT, " +
84
+ "column_name TEXT, " +
85
+ "column_type TEXT, " +
86
+ "operation TEXT, " +
87
+ "created_at INTEGER" +
88
+ ")");
89
+ }
90
+ async function addMissingColumns(client, table, columns) {
91
+ const existing = await getColumns(client, table);
92
+ for (const column of columns) {
93
+ const current = existing.get(column.name);
94
+ if (!current) {
95
+ await client.execute(`ALTER TABLE ${quoteIdentifier(table)} ADD COLUMN ${quoteIdentifier(column.name)} ${column.type}`);
96
+ await client.execute({
97
+ sql: "INSERT OR IGNORE INTO __masamune_schema_migrations " +
98
+ "(id, database_name, table_name, column_name, column_type, operation, created_at) " +
99
+ "VALUES (?, ?, ?, ?, ?, ?, ?)",
100
+ args: [
101
+ `${table}:${column.name}`,
102
+ "",
103
+ table,
104
+ column.name,
105
+ column.type,
106
+ "add_column",
107
+ Date.now(),
108
+ ],
109
+ });
110
+ continue;
111
+ }
112
+ if (!isCompatibleType(current, column.type)) {
113
+ throw new request_1.HttpError(400, `Column type mismatch: ${column.name}`);
114
+ }
115
+ }
116
+ }
117
+ async function getColumns(client, table) {
118
+ const result = await client.execute(`PRAGMA table_info(${quoteIdentifier(table)})`);
119
+ const columns = new Map();
120
+ for (const row of result.rows) {
121
+ const name = row.name;
122
+ const type = row.type;
123
+ if (typeof name === "string" && typeof type === "string") {
124
+ columns.set(name, type.toUpperCase());
125
+ }
126
+ }
127
+ return columns;
128
+ }
129
+ function isCompatibleType(existing, next) {
130
+ if (existing === next) {
131
+ return true;
132
+ }
133
+ if (existing === "TEXT") {
134
+ return true;
135
+ }
136
+ return false;
137
+ }
138
+ function quoteIdentifier(identifier) {
139
+ return `"${(0, request_1.validateIdentifier)(identifier, "identifier").replace(/"/g, "\"\"")}"`;
140
+ }
141
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import * as functions from "firebase-functions/v2";
2
+ import { FunctionsBase, HttpFunctionsOptions } from "./functions_base";
3
+ export { CallableRequest } from "firebase-functions/v2/https";
4
+ /**
5
+ * Base class for defining the data of Functions for executing the Call method of Functions.
6
+ *
7
+ * FunctionsのCallメソッド実行用のFunctionのデータを定義するためのベースクラス。
8
+ */
9
+ export declare abstract class CallProcessFunctionBase extends FunctionsBase {
10
+ /**
11
+ * Base class for defining the data of Functions for executing the Call method of Functions.
12
+ *
13
+ * FunctionsのCallメソッド実行用のFunctionのデータを定義するためのベースクラス。
14
+ */
15
+ constructor(options?: HttpFunctionsOptions);
16
+ /**
17
+ * Specify the actual contents of the process.
18
+ *
19
+ * 実際の処理の中身を指定します。
20
+ *
21
+ * @param {any} query
22
+ * Query passed to Functions.
23
+ *
24
+ * Functionsに渡されたクエリ。
25
+ *
26
+ * @returns {{ [key: string]: any }}
27
+ * Return value of the process.
28
+ *
29
+ * 処理の戻り値。
30
+ */
31
+ abstract process(query: functions.https.CallableRequest<any>): Promise<{
32
+ [key: string]: any;
33
+ }>;
34
+ abstract id: string;
35
+ data: {
36
+ [key: string]: any;
37
+ };
38
+ build(regions: string[]): Function;
39
+ }
@@ -0,0 +1,72 @@
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.CallProcessFunctionBase = void 0;
37
+ const functions = __importStar(require("firebase-functions/v2"));
38
+ const functions_base_1 = require("./functions_base");
39
+ /**
40
+ * Base class for defining the data of Functions for executing the Call method of Functions.
41
+ *
42
+ * FunctionsのCallメソッド実行用のFunctionのデータを定義するためのベースクラス。
43
+ */
44
+ class CallProcessFunctionBase extends functions_base_1.FunctionsBase {
45
+ /**
46
+ * Base class for defining the data of Functions for executing the Call method of Functions.
47
+ *
48
+ * FunctionsのCallメソッド実行用のFunctionのデータを定義するためのベースクラス。
49
+ */
50
+ constructor(options = {}) {
51
+ super({ options: options });
52
+ }
53
+ data = {};
54
+ build(regions) {
55
+ const options = this.options;
56
+ return functions.https.onCall({
57
+ region: options?.region ?? regions,
58
+ timeoutSeconds: options?.timeoutSeconds,
59
+ memory: options?.memory,
60
+ minInstances: options?.minInstances,
61
+ concurrency: options?.concurrency,
62
+ maxInstances: options?.maxInstances,
63
+ serviceAccount: options?.serviceAccount ?? undefined,
64
+ enforceAppCheck: options?.enforceAppCheck ?? undefined,
65
+ consumeAppCheckToken: options?.consumeAppCheckToken ?? undefined,
66
+ }, async (query) => {
67
+ return this.process(query);
68
+ });
69
+ }
70
+ }
71
+ exports.CallProcessFunctionBase = CallProcessFunctionBase;
72
+ //# sourceMappingURL=call_process_function_base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call_process_function_base.js","sourceRoot":"","sources":["../../../src/lib/src/call_process_function_base.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AACnD,qDAAyF;AAIzF;;;;GAIG;AACH,MAAsB,uBAAwB,SAAQ,8BAAa;IAC/D;;;;OAIG;IACH,YAAY,UAAgC,EAAE;QAC1C,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;IAoBD,IAAI,GAA2B,EAAE,CAAC;IAClC,KAAK,CAAC,OAAiB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAkD,CAAC;QACxE,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,CACzB;YACI,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,OAAO;YAClC,cAAc,EAAE,OAAO,EAAE,cAAc;YACvC,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,SAAS;YACpD,eAAe,EAAE,OAAO,EAAE,eAAe,IAAI,SAAS;YACtD,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,IAAI,SAAS;SACnE,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACZ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CACJ,CAAC;IACN,CAAC;CACJ;AAhDD,0DAgDC"}
@@ -0,0 +1,30 @@
1
+ import * as firestore from "firebase-admin/firestore";
2
+ import { Bucket } from '@google-cloud/storage';
3
+ /**
4
+ * Loads the Firestore instance.
5
+ *
6
+ * Firestoreインスタンスを読み込みます。
7
+ *
8
+ * @param databaseId
9
+ * Firestore Database ID.
10
+ *
11
+ * FirestoreのデータベースID。
12
+ *
13
+ * @returns
14
+ * Firestore instance.
15
+ *
16
+ * Firestoreインスタンス。
17
+ */
18
+ export declare function firestoreLoader(databaseId: string | null | undefined): firestore.Firestore;
19
+ /**
20
+ * Loads the Storage instance.
21
+ *
22
+ * Storageインスタンスを読み込みます。
23
+ *
24
+ * @param bucketId
25
+ * StorageのバケットID。
26
+ *
27
+ * @returns
28
+ * Storageインスタンス。
29
+ */
30
+ export declare function storageLoader(bucketId: string): Bucket;