@hot-updater/plugin-core 0.36.7 → 1.0.0-rc.0

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 (161) hide show
  1. package/dist/assetStorageLayout.cjs +36 -18
  2. package/dist/assetStorageLayout.d.cts +21 -6
  3. package/dist/assetStorageLayout.d.mts +21 -6
  4. package/dist/assetStorageLayout.mjs +36 -18
  5. package/dist/bundleStorageLayout.cjs +2 -3
  6. package/dist/bundleStorageLayout.mjs +2 -3
  7. package/dist/contentAddressedAssets.cjs +5 -0
  8. package/dist/contentAddressedAssets.d.cts +2 -1
  9. package/dist/contentAddressedAssets.d.mts +2 -1
  10. package/dist/contentAddressedAssets.mjs +5 -1
  11. package/dist/createDatabasePlugin.cjs +775 -284
  12. package/dist/createDatabasePlugin.d.cts +20 -64
  13. package/dist/createDatabasePlugin.d.mts +20 -64
  14. package/dist/createDatabasePlugin.mjs +773 -284
  15. package/dist/createStorageKeyBuilder.cjs +9 -2
  16. package/dist/createStorageKeyBuilder.mjs +9 -2
  17. package/dist/createStoragePlugin.cjs +6 -145
  18. package/dist/createStoragePlugin.d.cts +7 -52
  19. package/dist/createStoragePlugin.d.mts +7 -52
  20. package/dist/createStoragePlugin.mjs +5 -143
  21. package/dist/databaseClient.cjs +112 -0
  22. package/dist/databaseClient.d.cts +33 -0
  23. package/dist/databaseClient.d.mts +33 -0
  24. package/dist/databaseClient.mjs +110 -0
  25. package/dist/databaseClientReads.cjs +113 -0
  26. package/dist/databaseClientReads.mjs +112 -0
  27. package/dist/databaseClientUpdates.cjs +39 -0
  28. package/dist/databaseClientUpdates.d.cts +11 -0
  29. package/dist/databaseClientUpdates.d.mts +11 -0
  30. package/dist/databaseClientUpdates.mjs +36 -0
  31. package/dist/databaseJsonValue.cjs +37 -0
  32. package/dist/databaseJsonValue.d.cts +5 -0
  33. package/dist/databaseJsonValue.d.mts +5 -0
  34. package/dist/databaseJsonValue.mjs +37 -0
  35. package/dist/databaseMetadata.cjs +13 -0
  36. package/dist/databaseMetadata.mjs +12 -0
  37. package/dist/databasePluginCrud.cjs +86 -0
  38. package/dist/databasePluginCrud.d.cts +1 -0
  39. package/dist/databasePluginCrud.d.mts +1 -0
  40. package/dist/databasePluginCrud.mjs +86 -0
  41. package/dist/databasePluginCrudValidation.d.cts +1 -0
  42. package/dist/databasePluginCrudValidation.d.mts +1 -0
  43. package/dist/databasePluginCrudValidationErrors.cjs +10 -0
  44. package/dist/databasePluginCrudValidationErrors.d.cts +9 -0
  45. package/dist/databasePluginCrudValidationErrors.d.mts +9 -0
  46. package/dist/databasePluginCrudValidationErrors.mjs +10 -0
  47. package/dist/databasePluginCrudValidationFields.cjs +291 -0
  48. package/dist/databasePluginCrudValidationFields.d.cts +1 -0
  49. package/dist/databasePluginCrudValidationFields.d.mts +1 -0
  50. package/dist/databasePluginCrudValidationFields.mjs +281 -0
  51. package/dist/databasePluginCrudValidationMutations.cjs +88 -0
  52. package/dist/databasePluginCrudValidationMutations.d.cts +1 -0
  53. package/dist/databasePluginCrudValidationMutations.d.mts +1 -0
  54. package/dist/databasePluginCrudValidationMutations.mjs +82 -0
  55. package/dist/databasePluginCrudValidationQueries.cjs +103 -0
  56. package/dist/databasePluginCrudValidationQueries.d.cts +1 -0
  57. package/dist/databasePluginCrudValidationQueries.d.mts +1 -0
  58. package/dist/databasePluginCrudValidationQueries.mjs +97 -0
  59. package/dist/databasePluginCrudValidationRows.cjs +55 -0
  60. package/dist/databasePluginCrudValidationRows.d.cts +1 -0
  61. package/dist/databasePluginCrudValidationRows.d.mts +1 -0
  62. package/dist/databasePluginCrudValidationRows.mjs +53 -0
  63. package/dist/databasePluginTransaction.cjs +7 -0
  64. package/dist/databasePluginTransaction.mjs +7 -0
  65. package/dist/databaseRows.cjs +149 -0
  66. package/dist/databaseRows.d.cts +34 -0
  67. package/dist/databaseRows.d.mts +34 -0
  68. package/dist/databaseRows.mjs +141 -0
  69. package/dist/index.cjs +76 -24
  70. package/dist/index.d.cts +22 -12
  71. package/dist/index.d.mts +22 -12
  72. package/dist/index.mjs +21 -14
  73. package/dist/internal.cjs +6 -0
  74. package/dist/internal.d.cts +9 -0
  75. package/dist/internal.d.mts +9 -0
  76. package/dist/internal.mjs +3 -0
  77. package/dist/node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.cjs +345 -0
  78. package/dist/node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.mjs +341 -0
  79. package/dist/paginateBundles.d.cts +6 -4
  80. package/dist/paginateBundles.d.mts +6 -4
  81. package/dist/parseStorageUri.cjs +46 -30
  82. package/dist/parseStorageUri.d.cts +20 -17
  83. package/dist/parseStorageUri.d.mts +20 -17
  84. package/dist/parseStorageUri.mjs +46 -30
  85. package/dist/queryBundles.cjs +1 -7
  86. package/dist/queryBundles.d.cts +3 -1
  87. package/dist/queryBundles.d.mts +3 -1
  88. package/dist/queryBundles.mjs +1 -7
  89. package/dist/releaseCatalogCompiler.cjs +391 -0
  90. package/dist/releaseCatalogCompiler.d.cts +55 -0
  91. package/dist/releaseCatalogCompiler.d.mts +55 -0
  92. package/dist/releaseCatalogCompiler.mjs +386 -0
  93. package/dist/releaseCatalogMutation.cjs +303 -0
  94. package/dist/releaseCatalogMutation.d.cts +86 -0
  95. package/dist/releaseCatalogMutation.d.mts +86 -0
  96. package/dist/releaseCatalogMutation.mjs +297 -0
  97. package/dist/releaseManagement.cjs +231 -0
  98. package/dist/releaseManagement.d.cts +48 -0
  99. package/dist/releaseManagement.d.mts +48 -0
  100. package/dist/releaseManagement.mjs +224 -0
  101. package/dist/remoteBundleSigning.cjs +296 -0
  102. package/dist/remoteBundleSigning.d.cts +43 -0
  103. package/dist/remoteBundleSigning.d.mts +43 -0
  104. package/dist/remoteBundleSigning.mjs +291 -0
  105. package/dist/requestBundleCache.cjs +22 -0
  106. package/dist/requestBundleCache.d.cts +9 -0
  107. package/dist/requestBundleCache.d.mts +9 -0
  108. package/dist/requestBundleCache.mjs +22 -0
  109. package/dist/semverSatisfies.cjs +3 -4
  110. package/dist/semverSatisfies.mjs +1 -1
  111. package/dist/storageDownloadPath.cjs +48 -0
  112. package/dist/storageDownloadPath.d.cts +15 -0
  113. package/dist/storageDownloadPath.d.mts +15 -0
  114. package/dist/storageDownloadPath.mjs +46 -0
  115. package/dist/types/database.d.cts +4 -0
  116. package/dist/types/database.d.mts +4 -0
  117. package/dist/types/databaseFields.cjs +92 -0
  118. package/dist/types/databaseFields.d.cts +12 -0
  119. package/dist/types/databaseFields.d.mts +12 -0
  120. package/dist/types/databaseFields.mjs +92 -0
  121. package/dist/types/databaseOperations.d.cts +173 -0
  122. package/dist/types/databaseOperations.d.mts +173 -0
  123. package/dist/types/databasePlugin.d.cts +240 -0
  124. package/dist/types/databasePlugin.d.mts +240 -0
  125. package/dist/types/databaseQuery.d.cts +47 -0
  126. package/dist/types/databaseQuery.d.mts +47 -0
  127. package/dist/types/databaseRows.d.cts +120 -0
  128. package/dist/types/databaseRows.d.mts +120 -0
  129. package/dist/types/index.d.cts +120 -162
  130. package/dist/types/index.d.mts +120 -162
  131. package/dist/types/internal.d.cts +7 -0
  132. package/dist/types/internal.d.mts +7 -0
  133. package/dist/types/public.d.cts +3 -0
  134. package/dist/types/public.d.mts +3 -0
  135. package/dist/uuidv7.cjs +9 -0
  136. package/dist/uuidv7.d.cts +4 -1
  137. package/dist/uuidv7.d.mts +4 -1
  138. package/dist/uuidv7.mjs +8 -1
  139. package/package.json +10 -5
  140. package/dist/bundleUnitOfWork.cjs +0 -158
  141. package/dist/bundleUnitOfWork.mjs +0 -158
  142. package/dist/bundleUnitOfWorkStore.cjs +0 -15
  143. package/dist/bundleUnitOfWorkStore.mjs +0 -15
  144. package/dist/createBlobDatabasePlugin.cjs +0 -382
  145. package/dist/createBlobDatabasePlugin.d.cts +0 -29
  146. package/dist/createBlobDatabasePlugin.d.mts +0 -29
  147. package/dist/createBlobDatabasePlugin.mjs +0 -381
  148. package/dist/legacyAssetStorageLayout.cjs +0 -12
  149. package/dist/legacyAssetStorageLayout.mjs +0 -12
  150. package/dist/requestUpdateBundleState.cjs +0 -26
  151. package/dist/requestUpdateBundleState.d.cts +0 -12
  152. package/dist/requestUpdateBundleState.d.mts +0 -12
  153. package/dist/requestUpdateBundleState.mjs +0 -24
  154. package/dist/resolveUpdateInfoFromBundles.cjs +0 -14
  155. package/dist/resolveUpdateInfoFromBundles.d.cts +0 -16
  156. package/dist/resolveUpdateInfoFromBundles.d.mts +0 -16
  157. package/dist/resolveUpdateInfoFromBundles.mjs +0 -13
  158. package/dist/storageProfile.cjs +0 -15
  159. package/dist/storageProfile.d.cts +0 -9
  160. package/dist/storageProfile.d.mts +0 -9
  161. package/dist/storageProfile.mjs +0 -12
@@ -0,0 +1,22 @@
1
+ //#region src/requestBundleCache.ts
2
+ const createRequestBundleResolver = () => {
3
+ const entries = /* @__PURE__ */ new Map();
4
+ const pendingLoads = /* @__PURE__ */ new Map();
5
+ return { async getById(bundleId, loadBundleById) {
6
+ if (entries.has(bundleId)) return entries.get(bundleId) ?? null;
7
+ const pending = pendingLoads.get(bundleId);
8
+ if (pending) return pending;
9
+ const load = loadBundleById().then((bundle) => {
10
+ pendingLoads.delete(bundleId);
11
+ if (!entries.has(bundleId)) entries.set(bundleId, bundle);
12
+ return entries.get(bundleId) ?? null;
13
+ }, (error) => {
14
+ pendingLoads.delete(bundleId);
15
+ throw error;
16
+ });
17
+ pendingLoads.set(bundleId, load);
18
+ return load;
19
+ } };
20
+ };
21
+ //#endregion
22
+ exports.createRequestBundleResolver = createRequestBundleResolver;
@@ -0,0 +1,9 @@
1
+ import { Bundle } from "./types/index.cjs";
2
+
3
+ //#region src/requestBundleCache.d.ts
4
+ interface RequestBundleResolver {
5
+ readonly getById: (bundleId: string, loadBundleById: () => Promise<Bundle | null>) => Promise<Bundle | null>;
6
+ }
7
+ declare const createRequestBundleResolver: () => RequestBundleResolver;
8
+ //#endregion
9
+ export { createRequestBundleResolver };
@@ -0,0 +1,9 @@
1
+ import { Bundle } from "./types/index.mjs";
2
+
3
+ //#region src/requestBundleCache.d.ts
4
+ interface RequestBundleResolver {
5
+ readonly getById: (bundleId: string, loadBundleById: () => Promise<Bundle | null>) => Promise<Bundle | null>;
6
+ }
7
+ declare const createRequestBundleResolver: () => RequestBundleResolver;
8
+ //#endregion
9
+ export { createRequestBundleResolver };
@@ -0,0 +1,22 @@
1
+ //#region src/requestBundleCache.ts
2
+ const createRequestBundleResolver = () => {
3
+ const entries = /* @__PURE__ */ new Map();
4
+ const pendingLoads = /* @__PURE__ */ new Map();
5
+ return { async getById(bundleId, loadBundleById) {
6
+ if (entries.has(bundleId)) return entries.get(bundleId) ?? null;
7
+ const pending = pendingLoads.get(bundleId);
8
+ if (pending) return pending;
9
+ const load = loadBundleById().then((bundle) => {
10
+ pendingLoads.delete(bundleId);
11
+ if (!entries.has(bundleId)) entries.set(bundleId, bundle);
12
+ return entries.get(bundleId) ?? null;
13
+ }, (error) => {
14
+ pendingLoads.delete(bundleId);
15
+ throw error;
16
+ });
17
+ pendingLoads.set(bundleId, load);
18
+ return load;
19
+ } };
20
+ };
21
+ //#endregion
22
+ export { createRequestBundleResolver };
@@ -1,10 +1,9 @@
1
- require("./_virtual/_rolldown/runtime.cjs");
2
- let verkit = require("verkit");
1
+ const require_index = require("./node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.cjs");
3
2
  //#region src/semverSatisfies.ts
4
3
  const semverSatisfies = (targetAppVersion, currentVersion) => {
5
- const currentCoerce = (0, verkit.coerce)(currentVersion);
4
+ const currentCoerce = require_index.coerce(currentVersion);
6
5
  if (!currentCoerce) return false;
7
- return (0, verkit.satisfies)(currentCoerce, targetAppVersion);
6
+ return require_index.satisfies(currentCoerce, targetAppVersion);
8
7
  };
9
8
  //#endregion
10
9
  exports.semverSatisfies = semverSatisfies;
@@ -1,4 +1,4 @@
1
- import { coerce, satisfies } from "verkit";
1
+ import { coerce, satisfies } from "./node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.mjs";
2
2
  //#region src/semverSatisfies.ts
3
3
  const semverSatisfies = (targetAppVersion, currentVersion) => {
4
4
  const currentCoerce = coerce(currentVersion);
@@ -0,0 +1,48 @@
1
+ //#region src/storageDownloadPath.ts
2
+ const encodeBase64Url = (value) => {
3
+ let binary = "";
4
+ for (const byte of new TextEncoder().encode(value)) binary += String.fromCharCode(byte);
5
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
6
+ };
7
+ const decodeBase64Url = (value) => {
8
+ try {
9
+ const base64 = value.replaceAll("-", "+").replaceAll("_", "/");
10
+ const binary = atob(base64.padEnd(Math.ceil(base64.length / 4) * 4, "="));
11
+ return new TextDecoder(void 0, { fatal: true }).decode(Uint8Array.from(binary, (character) => character.charCodeAt(0)));
12
+ } catch {
13
+ return null;
14
+ }
15
+ };
16
+ const encodeBytes = (bytes) => {
17
+ let binary = "";
18
+ for (const byte of bytes) binary += String.fromCharCode(byte);
19
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
20
+ };
21
+ const createStorageDownloadPath = (storageUri, signature) => `/storage/${encodeBase64Url(storageUri)}/${encodeURIComponent(signature)}`;
22
+ const parseStorageDownloadPath = (path) => {
23
+ const match = /^\/storage\/([^/]+)\/([^/]+)$/.exec(path);
24
+ if (!match) return null;
25
+ const storageUri = decodeBase64Url(match[1]);
26
+ if (storageUri === null) return null;
27
+ try {
28
+ return {
29
+ signature: decodeURIComponent(match[2]),
30
+ storageUri
31
+ };
32
+ } catch {
33
+ return null;
34
+ }
35
+ };
36
+ const createStorageDownloadUrl = (signingKey) => {
37
+ const key = crypto.subtle.importKey("raw", new TextEncoder().encode(signingKey), {
38
+ hash: "SHA-256",
39
+ name: "HMAC"
40
+ }, false, ["sign"]);
41
+ return async ({ storageUri }) => {
42
+ return { url: createStorageDownloadPath(storageUri, encodeBytes(new Uint8Array(await crypto.subtle.sign("HMAC", await key, new TextEncoder().encode(storageUri))))) };
43
+ };
44
+ };
45
+ //#endregion
46
+ exports.createStorageDownloadPath = createStorageDownloadPath;
47
+ exports.createStorageDownloadUrl = createStorageDownloadUrl;
48
+ exports.parseStorageDownloadPath = parseStorageDownloadPath;
@@ -0,0 +1,15 @@
1
+ //#region src/storageDownloadPath.d.ts
2
+ declare const createStorageDownloadPath: (storageUri: string, signature: string) => string;
3
+ declare const parseStorageDownloadPath: (path: string) => {
4
+ signature: string;
5
+ storageUri: string;
6
+ } | null;
7
+ declare const createStorageDownloadUrl: (signingKey: string) => ({
8
+ storageUri
9
+ }: {
10
+ readonly storageUri: string;
11
+ }) => Promise<{
12
+ url: string;
13
+ }>;
14
+ //#endregion
15
+ export { createStorageDownloadPath, createStorageDownloadUrl, parseStorageDownloadPath };
@@ -0,0 +1,15 @@
1
+ //#region src/storageDownloadPath.d.ts
2
+ declare const createStorageDownloadPath: (storageUri: string, signature: string) => string;
3
+ declare const parseStorageDownloadPath: (path: string) => {
4
+ signature: string;
5
+ storageUri: string;
6
+ } | null;
7
+ declare const createStorageDownloadUrl: (signingKey: string) => ({
8
+ storageUri
9
+ }: {
10
+ readonly storageUri: string;
11
+ }) => Promise<{
12
+ url: string;
13
+ }>;
14
+ //#endregion
15
+ export { createStorageDownloadPath, createStorageDownloadUrl, parseStorageDownloadPath };
@@ -0,0 +1,46 @@
1
+ //#region src/storageDownloadPath.ts
2
+ const encodeBase64Url = (value) => {
3
+ let binary = "";
4
+ for (const byte of new TextEncoder().encode(value)) binary += String.fromCharCode(byte);
5
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
6
+ };
7
+ const decodeBase64Url = (value) => {
8
+ try {
9
+ const base64 = value.replaceAll("-", "+").replaceAll("_", "/");
10
+ const binary = atob(base64.padEnd(Math.ceil(base64.length / 4) * 4, "="));
11
+ return new TextDecoder(void 0, { fatal: true }).decode(Uint8Array.from(binary, (character) => character.charCodeAt(0)));
12
+ } catch {
13
+ return null;
14
+ }
15
+ };
16
+ const encodeBytes = (bytes) => {
17
+ let binary = "";
18
+ for (const byte of bytes) binary += String.fromCharCode(byte);
19
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
20
+ };
21
+ const createStorageDownloadPath = (storageUri, signature) => `/storage/${encodeBase64Url(storageUri)}/${encodeURIComponent(signature)}`;
22
+ const parseStorageDownloadPath = (path) => {
23
+ const match = /^\/storage\/([^/]+)\/([^/]+)$/.exec(path);
24
+ if (!match) return null;
25
+ const storageUri = decodeBase64Url(match[1]);
26
+ if (storageUri === null) return null;
27
+ try {
28
+ return {
29
+ signature: decodeURIComponent(match[2]),
30
+ storageUri
31
+ };
32
+ } catch {
33
+ return null;
34
+ }
35
+ };
36
+ const createStorageDownloadUrl = (signingKey) => {
37
+ const key = crypto.subtle.importKey("raw", new TextEncoder().encode(signingKey), {
38
+ hash: "SHA-256",
39
+ name: "HMAC"
40
+ }, false, ["sign"]);
41
+ return async ({ storageUri }) => {
42
+ return { url: createStorageDownloadPath(storageUri, encodeBytes(new Uint8Array(await crypto.subtle.sign("HMAC", await key, new TextEncoder().encode(storageUri))))) };
43
+ };
44
+ };
45
+ //#endregion
46
+ export { createStorageDownloadPath, createStorageDownloadUrl, parseStorageDownloadPath };
@@ -0,0 +1,4 @@
1
+ import { ApiKeyRow, BundleEventRow, BundleEventRowBase, BundlePatchRow, BundleRow, ChannelRow, DatabaseBundleMetadata, DatabaseField, DatabaseJsonObject, DatabaseJsonValue, DatabaseModel, DatabaseModelMap, DatabaseRow, ReleaseCatalogRow, ReleaseRow } from "./databaseRows.cjs";
2
+ import { AnalyticsModel, AnalyticsScanCursor, AnalyticsScanInput, ApiKeyModel, BundleModel, BundleModelQuery, BundlePatchModel, BundleRepository, BundleRepositoryChange, BundleRepositoryCommit, ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, ChannelModel, DatabaseChange, DatabaseCommit, DatabaseCommitExpectation, DatabaseCommitResult, DatabaseModels, DatabasePlugin, ReleaseCatalogModel, ReleaseModel } from "./databasePlugin.cjs";
3
+ import { DatabaseDistinctFields, DatabaseDistinctOn, DatabaseOrderBy, DatabaseSelect, DatabaseSortBy, DatabaseSortClause, DatabaseSortNulls, DatabaseStringComparisonMode, DatabaseWhere, DatabaseWhereConnector, DatabaseWhereOperator, SelectedDatabaseRow } from "./databaseQuery.cjs";
4
+ import { ApiKeyRowUpdate, BundleRowUpdate, CountBundlesDatabaseImplementationInput, CountBundlesDatabaseInput, CountDatabaseImplementationInput, CountDatabaseInput, CountDatabaseModel, CreateDatabaseImplementationInput, CreateDatabaseInput, CreateDatabaseModel, DatabaseCapability, DatabaseDeleteModel, DatabaseFindOneModel, DatabaseImplementationResult, DatabaseModelCapabilities, DatabaseModelsWithCapability, DatabasePluginCrud, DatabasePluginImplementation, DatabaseRowUpdate, DeleteDatabaseImplementationInput, DeleteDatabaseInput, DeleteDatabaseModel, FindManyDatabaseImplementationInput, FindManyDatabaseInput, FindManyDatabaseModel, FindManyDatabasePluginInput, FindOneDatabaseImplementationInput, FindOneDatabaseInput, FindOneDatabaseModel, ReleaseCatalogRowUpdate, ReleaseRowUpdate, SelectedDatabaseInputRow, TransactionDatabasePluginImplementation, UpdateBundleDatabaseImplementationInput, UpdateBundleDatabaseInput, UpdateDatabaseImplementationInput, UpdateDatabaseInput, UpdateDatabaseModel } from "./databaseOperations.cjs";
@@ -0,0 +1,4 @@
1
+ import { ApiKeyRow, BundleEventRow, BundleEventRowBase, BundlePatchRow, BundleRow, ChannelRow, DatabaseBundleMetadata, DatabaseField, DatabaseJsonObject, DatabaseJsonValue, DatabaseModel, DatabaseModelMap, DatabaseRow, ReleaseCatalogRow, ReleaseRow } from "./databaseRows.mjs";
2
+ import { AnalyticsModel, AnalyticsScanCursor, AnalyticsScanInput, ApiKeyModel, BundleModel, BundleModelQuery, BundlePatchModel, BundleRepository, BundleRepositoryChange, BundleRepositoryCommit, ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, ChannelModel, DatabaseChange, DatabaseCommit, DatabaseCommitExpectation, DatabaseCommitResult, DatabaseModels, DatabasePlugin, ReleaseCatalogModel, ReleaseModel } from "./databasePlugin.mjs";
3
+ import { DatabaseDistinctFields, DatabaseDistinctOn, DatabaseOrderBy, DatabaseSelect, DatabaseSortBy, DatabaseSortClause, DatabaseSortNulls, DatabaseStringComparisonMode, DatabaseWhere, DatabaseWhereConnector, DatabaseWhereOperator, SelectedDatabaseRow } from "./databaseQuery.mjs";
4
+ import { ApiKeyRowUpdate, BundleRowUpdate, CountBundlesDatabaseImplementationInput, CountBundlesDatabaseInput, CountDatabaseImplementationInput, CountDatabaseInput, CountDatabaseModel, CreateDatabaseImplementationInput, CreateDatabaseInput, CreateDatabaseModel, DatabaseCapability, DatabaseDeleteModel, DatabaseFindOneModel, DatabaseImplementationResult, DatabaseModelCapabilities, DatabaseModelsWithCapability, DatabasePluginCrud, DatabasePluginImplementation, DatabaseRowUpdate, DeleteDatabaseImplementationInput, DeleteDatabaseInput, DeleteDatabaseModel, FindManyDatabaseImplementationInput, FindManyDatabaseInput, FindManyDatabaseModel, FindManyDatabasePluginInput, FindOneDatabaseImplementationInput, FindOneDatabaseInput, FindOneDatabaseModel, ReleaseCatalogRowUpdate, ReleaseRowUpdate, SelectedDatabaseInputRow, TransactionDatabasePluginImplementation, UpdateBundleDatabaseImplementationInput, UpdateBundleDatabaseInput, UpdateDatabaseImplementationInput, UpdateDatabaseInput, UpdateDatabaseModel } from "./databaseOperations.mjs";
@@ -0,0 +1,92 @@
1
+ //#region src/types/databaseFields.ts
2
+ const databaseFields = {
3
+ bundles: [
4
+ "id",
5
+ "platform",
6
+ "file_hash",
7
+ "git_commit_hash",
8
+ "storage_uri",
9
+ "archive_byte_size",
10
+ "metadata",
11
+ "manifest_storage_uri",
12
+ "manifest_file_hash",
13
+ "asset_base_storage_uri"
14
+ ],
15
+ bundle_patches: [
16
+ "id",
17
+ "bundle_id",
18
+ "base_bundle_id",
19
+ "base_file_hash",
20
+ "patch_file_hash",
21
+ "patch_storage_uri",
22
+ "byte_size",
23
+ "order_index"
24
+ ],
25
+ releases: [
26
+ "id",
27
+ "revision",
28
+ "scope_key",
29
+ "channel_id",
30
+ "platform",
31
+ "kind",
32
+ "bundle_id",
33
+ "strategy",
34
+ "target_app_version",
35
+ "fingerprint_hash",
36
+ "enabled",
37
+ "should_force_update",
38
+ "message",
39
+ "rollout_cohort_count",
40
+ "target_cohorts",
41
+ "operation",
42
+ "source_release_id",
43
+ "created_at_ms",
44
+ "updated_at_ms"
45
+ ],
46
+ release_catalogs: [
47
+ "scope_key",
48
+ "catalog_id",
49
+ "strategy",
50
+ "channel_id",
51
+ "channel_key",
52
+ "platform",
53
+ "fingerprint_hash",
54
+ "generation",
55
+ "payload",
56
+ "catalog_hash",
57
+ "byte_size",
58
+ "is_tombstone",
59
+ "updated_at_ms"
60
+ ],
61
+ channels: ["id", "name"],
62
+ bundle_events: [
63
+ "id",
64
+ "type",
65
+ "install_id",
66
+ "user_id",
67
+ "username",
68
+ "from_bundle_id",
69
+ "from_release_id",
70
+ "to_release_id",
71
+ "to_bundle_id",
72
+ "platform",
73
+ "app_version",
74
+ "channel",
75
+ "cohort",
76
+ "update_strategy",
77
+ "fingerprint_hash",
78
+ "sdk_version",
79
+ "received_at_ms"
80
+ ],
81
+ api_keys: [
82
+ "id",
83
+ "hash",
84
+ "name",
85
+ "prefix",
86
+ "role",
87
+ "created_at_ms",
88
+ "revoked_at_ms"
89
+ ]
90
+ };
91
+ //#endregion
92
+ exports.databaseFields = databaseFields;
@@ -0,0 +1,12 @@
1
+ //#region src/types/databaseFields.d.ts
2
+ declare const databaseFields: {
3
+ readonly bundles: readonly ["id", "platform", "file_hash", "git_commit_hash", "storage_uri", "archive_byte_size", "metadata", "manifest_storage_uri", "manifest_file_hash", "asset_base_storage_uri"];
4
+ readonly bundle_patches: readonly ["id", "bundle_id", "base_bundle_id", "base_file_hash", "patch_file_hash", "patch_storage_uri", "byte_size", "order_index"];
5
+ readonly releases: readonly ["id", "revision", "scope_key", "channel_id", "platform", "kind", "bundle_id", "strategy", "target_app_version", "fingerprint_hash", "enabled", "should_force_update", "message", "rollout_cohort_count", "target_cohorts", "operation", "source_release_id", "created_at_ms", "updated_at_ms"];
6
+ readonly release_catalogs: readonly ["scope_key", "catalog_id", "strategy", "channel_id", "channel_key", "platform", "fingerprint_hash", "generation", "payload", "catalog_hash", "byte_size", "is_tombstone", "updated_at_ms"];
7
+ readonly channels: readonly ["id", "name"];
8
+ readonly bundle_events: readonly ["id", "type", "install_id", "user_id", "username", "from_bundle_id", "from_release_id", "to_release_id", "to_bundle_id", "platform", "app_version", "channel", "cohort", "update_strategy", "fingerprint_hash", "sdk_version", "received_at_ms"];
9
+ readonly api_keys: readonly ["id", "hash", "name", "prefix", "role", "created_at_ms", "revoked_at_ms"];
10
+ };
11
+ //#endregion
12
+ export { databaseFields };
@@ -0,0 +1,12 @@
1
+ //#region src/types/databaseFields.d.ts
2
+ declare const databaseFields: {
3
+ readonly bundles: readonly ["id", "platform", "file_hash", "git_commit_hash", "storage_uri", "archive_byte_size", "metadata", "manifest_storage_uri", "manifest_file_hash", "asset_base_storage_uri"];
4
+ readonly bundle_patches: readonly ["id", "bundle_id", "base_bundle_id", "base_file_hash", "patch_file_hash", "patch_storage_uri", "byte_size", "order_index"];
5
+ readonly releases: readonly ["id", "revision", "scope_key", "channel_id", "platform", "kind", "bundle_id", "strategy", "target_app_version", "fingerprint_hash", "enabled", "should_force_update", "message", "rollout_cohort_count", "target_cohorts", "operation", "source_release_id", "created_at_ms", "updated_at_ms"];
6
+ readonly release_catalogs: readonly ["scope_key", "catalog_id", "strategy", "channel_id", "channel_key", "platform", "fingerprint_hash", "generation", "payload", "catalog_hash", "byte_size", "is_tombstone", "updated_at_ms"];
7
+ readonly channels: readonly ["id", "name"];
8
+ readonly bundle_events: readonly ["id", "type", "install_id", "user_id", "username", "from_bundle_id", "from_release_id", "to_release_id", "to_bundle_id", "platform", "app_version", "channel", "cohort", "update_strategy", "fingerprint_hash", "sdk_version", "received_at_ms"];
9
+ readonly api_keys: readonly ["id", "hash", "name", "prefix", "role", "created_at_ms", "revoked_at_ms"];
10
+ };
11
+ //#endregion
12
+ export { databaseFields };
@@ -0,0 +1,92 @@
1
+ //#region src/types/databaseFields.ts
2
+ const databaseFields = {
3
+ bundles: [
4
+ "id",
5
+ "platform",
6
+ "file_hash",
7
+ "git_commit_hash",
8
+ "storage_uri",
9
+ "archive_byte_size",
10
+ "metadata",
11
+ "manifest_storage_uri",
12
+ "manifest_file_hash",
13
+ "asset_base_storage_uri"
14
+ ],
15
+ bundle_patches: [
16
+ "id",
17
+ "bundle_id",
18
+ "base_bundle_id",
19
+ "base_file_hash",
20
+ "patch_file_hash",
21
+ "patch_storage_uri",
22
+ "byte_size",
23
+ "order_index"
24
+ ],
25
+ releases: [
26
+ "id",
27
+ "revision",
28
+ "scope_key",
29
+ "channel_id",
30
+ "platform",
31
+ "kind",
32
+ "bundle_id",
33
+ "strategy",
34
+ "target_app_version",
35
+ "fingerprint_hash",
36
+ "enabled",
37
+ "should_force_update",
38
+ "message",
39
+ "rollout_cohort_count",
40
+ "target_cohorts",
41
+ "operation",
42
+ "source_release_id",
43
+ "created_at_ms",
44
+ "updated_at_ms"
45
+ ],
46
+ release_catalogs: [
47
+ "scope_key",
48
+ "catalog_id",
49
+ "strategy",
50
+ "channel_id",
51
+ "channel_key",
52
+ "platform",
53
+ "fingerprint_hash",
54
+ "generation",
55
+ "payload",
56
+ "catalog_hash",
57
+ "byte_size",
58
+ "is_tombstone",
59
+ "updated_at_ms"
60
+ ],
61
+ channels: ["id", "name"],
62
+ bundle_events: [
63
+ "id",
64
+ "type",
65
+ "install_id",
66
+ "user_id",
67
+ "username",
68
+ "from_bundle_id",
69
+ "from_release_id",
70
+ "to_release_id",
71
+ "to_bundle_id",
72
+ "platform",
73
+ "app_version",
74
+ "channel",
75
+ "cohort",
76
+ "update_strategy",
77
+ "fingerprint_hash",
78
+ "sdk_version",
79
+ "received_at_ms"
80
+ ],
81
+ api_keys: [
82
+ "id",
83
+ "hash",
84
+ "name",
85
+ "prefix",
86
+ "role",
87
+ "created_at_ms",
88
+ "revoked_at_ms"
89
+ ]
90
+ };
91
+ //#endregion
92
+ export { databaseFields };
@@ -0,0 +1,173 @@
1
+ import { ApiKeyRow, BundleRow, DatabaseModel, DatabaseRow, ReleaseCatalogRow, ReleaseRow } from "./databaseRows.cjs";
2
+ import { ChannelDeleteInput, ChannelDeleteResult, ChannelInsertInput, ChannelInsertResult, DatabaseCommit, DatabaseCommitResult } from "./databasePlugin.cjs";
3
+ import { DatabaseDistinctFields, DatabaseDistinctOn, DatabaseOrderBy, DatabaseSelect, DatabaseWhere, SelectedDatabaseRow } from "./databaseQuery.cjs";
4
+
5
+ //#region src/types/databaseOperations.d.ts
6
+ type DatabaseCapability = "create" | "update" | "delete" | "count" | "findOne" | "findMany";
7
+ type DatabaseModelCapabilities = {
8
+ readonly bundles: {
9
+ readonly create: true;
10
+ readonly update: true;
11
+ readonly delete: true;
12
+ readonly count: true;
13
+ readonly findOne: true;
14
+ readonly findMany: true;
15
+ };
16
+ readonly bundle_patches: {
17
+ readonly create: true;
18
+ readonly update: false;
19
+ readonly delete: true;
20
+ readonly count: true;
21
+ readonly findOne: true;
22
+ readonly findMany: true;
23
+ };
24
+ readonly releases: {
25
+ readonly create: true;
26
+ readonly update: true;
27
+ readonly delete: true;
28
+ readonly count: true;
29
+ readonly findOne: true;
30
+ readonly findMany: true;
31
+ };
32
+ readonly release_catalogs: {
33
+ readonly create: true;
34
+ readonly update: true;
35
+ readonly delete: false;
36
+ readonly count: false;
37
+ readonly findOne: true;
38
+ readonly findMany: true;
39
+ };
40
+ readonly channels: {
41
+ readonly create: true;
42
+ readonly update: false;
43
+ readonly delete: true;
44
+ readonly count: false;
45
+ readonly findOne: true;
46
+ readonly findMany: true;
47
+ };
48
+ readonly bundle_events: {
49
+ readonly create: true;
50
+ readonly update: false;
51
+ readonly delete: false;
52
+ readonly count: false;
53
+ readonly findOne: false;
54
+ readonly findMany: true;
55
+ };
56
+ readonly api_keys: {
57
+ readonly create: true;
58
+ readonly update: true;
59
+ readonly delete: false;
60
+ readonly count: false;
61
+ readonly findOne: true;
62
+ readonly findMany: true;
63
+ };
64
+ };
65
+ type DatabaseModelsWithCapability<TCapability extends DatabaseCapability> = { readonly [TModel in DatabaseModel]: DatabaseModelCapabilities[TModel][TCapability] extends true ? TModel : never }[DatabaseModel];
66
+ type CreateDatabaseModel = DatabaseModelsWithCapability<"create">;
67
+ type UpdateDatabaseModel = DatabaseModelsWithCapability<"update">;
68
+ type DeleteDatabaseModel = DatabaseModelsWithCapability<"delete">;
69
+ type CountDatabaseModel = DatabaseModelsWithCapability<"count">;
70
+ type FindOneDatabaseModel = DatabaseModelsWithCapability<"findOne">;
71
+ type FindManyDatabaseModel = DatabaseModelsWithCapability<"findMany">;
72
+ type DatabaseDeleteModel = DeleteDatabaseModel;
73
+ type DatabaseFindOneModel = FindOneDatabaseModel;
74
+ type CreateDatabaseInputBase<TModel extends CreateDatabaseModel, TSelect extends DatabaseSelect<TModel> | undefined = undefined> = {
75
+ readonly model: TModel;
76
+ readonly data: DatabaseRow<TModel>;
77
+ readonly select?: TSelect;
78
+ };
79
+ type CreateDatabaseInput<TModel extends CreateDatabaseModel, TSelect extends DatabaseSelect<TModel> | undefined = undefined> = CreateDatabaseInputBase<TModel, TSelect> & (TModel extends "channels" | "api_keys" ? {
80
+ readonly onConflict?: "ignore";
81
+ } : {
82
+ readonly onConflict?: never;
83
+ });
84
+ type BundleRowUpdateFields = Partial<Omit<BundleRow, "id">>;
85
+ type ReleaseRowUpdate = Partial<Pick<ReleaseRow, "revision" | "scope_key" | "target_app_version" | "fingerprint_hash" | "enabled" | "should_force_update" | "message" | "rollout_cohort_count" | "target_cohorts" | "updated_at_ms">>;
86
+ type ReleaseCatalogRowUpdate = Omit<ReleaseCatalogRow, "scope_key">;
87
+ type BundleRowUpdate = BundleRowUpdateFields;
88
+ type ApiKeyRowUpdate = Pick<ApiKeyRow, "revoked_at_ms">;
89
+ type DatabaseRowUpdate<TModel extends UpdateDatabaseModel> = {
90
+ readonly bundles: BundleRowUpdate;
91
+ readonly releases: ReleaseRowUpdate;
92
+ readonly release_catalogs: ReleaseCatalogRowUpdate;
93
+ readonly api_keys: ApiKeyRowUpdate;
94
+ }[TModel];
95
+ type UpdateDatabaseInput<TModel extends UpdateDatabaseModel, TSelect extends DatabaseSelect<TModel> | undefined = undefined> = {
96
+ readonly model: TModel;
97
+ readonly where: readonly DatabaseWhere<TModel>[];
98
+ readonly update: DatabaseRowUpdate<TModel>;
99
+ readonly select?: TSelect;
100
+ };
101
+ type UpdateBundleDatabaseInput<TSelect extends DatabaseSelect<"bundles"> | undefined = undefined> = UpdateDatabaseInput<"bundles", TSelect>;
102
+ type DeleteDatabaseInput<TModel extends DeleteDatabaseModel> = {
103
+ readonly model: TModel;
104
+ readonly where: readonly DatabaseWhere<TModel>[];
105
+ };
106
+ type CountDatabaseInput<TModel extends CountDatabaseModel> = {
107
+ readonly model: TModel;
108
+ readonly where?: readonly DatabaseWhere<TModel>[];
109
+ readonly distinct?: DatabaseDistinctFields<TModel>;
110
+ };
111
+ type CountBundlesDatabaseInput = CountDatabaseInput<"bundles">;
112
+ type FindOneDatabaseInput<TModel extends FindOneDatabaseModel, TSelect extends DatabaseSelect<TModel> | undefined = undefined> = {
113
+ readonly model: TModel;
114
+ readonly where?: readonly DatabaseWhere<TModel>[];
115
+ readonly select?: TSelect;
116
+ };
117
+ type FindManyDatabaseInput<TModel extends FindManyDatabaseModel, TSelect extends DatabaseSelect<TModel> | undefined = undefined> = {
118
+ readonly model: TModel;
119
+ readonly where?: readonly DatabaseWhere<TModel>[];
120
+ readonly limit?: number;
121
+ readonly offset?: number;
122
+ readonly orderBy?: DatabaseOrderBy<TModel>;
123
+ readonly distinctOn?: DatabaseDistinctOn<TModel>;
124
+ readonly select?: TSelect;
125
+ };
126
+ type SelectedDatabaseInputRow<TInput extends {
127
+ readonly model: DatabaseModel;
128
+ readonly select?: readonly string[] | undefined;
129
+ }> = SelectedDatabaseRow<TInput["model"], "select" extends keyof TInput ? Extract<TInput["select"], DatabaseSelect<TInput["model"]> | undefined> : undefined>;
130
+ interface DatabasePluginCrud {
131
+ create<TInput extends CreateDatabaseImplementationInput>(input: TInput): Promise<SelectedDatabaseInputRow<TInput>>;
132
+ update<TInput extends UpdateDatabaseImplementationInput>(input: TInput): Promise<SelectedDatabaseInputRow<TInput> | null>;
133
+ delete(input: DeleteDatabaseImplementationInput): Promise<void>;
134
+ count(input: CountDatabaseImplementationInput): Promise<number>;
135
+ findOne<TInput extends FindOneDatabaseImplementationInput>(input: TInput): Promise<SelectedDatabaseInputRow<TInput> | null>;
136
+ findMany<TInput extends FindManyDatabasePluginInput>(input: TInput): Promise<SelectedDatabaseInputRow<TInput>[]>;
137
+ }
138
+ type DatabaseImplementationResult = { readonly [TModel in DatabaseModel]: Partial<DatabaseRow<TModel>> }[DatabaseModel];
139
+ type CreateDatabaseImplementationInput = { readonly [TModel in CreateDatabaseModel]: CreateDatabaseInput<TModel, DatabaseSelect<TModel> | undefined> }[CreateDatabaseModel];
140
+ type UpdateDatabaseImplementationInput = { readonly [TModel in UpdateDatabaseModel]: UpdateDatabaseInput<TModel, DatabaseSelect<TModel> | undefined> }[UpdateDatabaseModel];
141
+ type DeleteDatabaseImplementationInput = { readonly [TModel in DeleteDatabaseModel]: DeleteDatabaseInput<TModel> }[DeleteDatabaseModel];
142
+ type CountDatabaseImplementationInput = { readonly [TModel in CountDatabaseModel]: CountDatabaseInput<TModel> }[CountDatabaseModel];
143
+ type UpdateBundleDatabaseImplementationInput = UpdateDatabaseInput<"bundles", DatabaseSelect<"bundles"> | undefined>;
144
+ type CountBundlesDatabaseImplementationInput = CountDatabaseInput<"bundles">;
145
+ type FindOneDatabaseImplementationInput = { readonly [TModel in FindOneDatabaseModel]: FindOneDatabaseInput<TModel, DatabaseSelect<TModel> | undefined> }[FindOneDatabaseModel];
146
+ type FindManyDatabaseImplementationInput = { readonly [TModel in FindManyDatabaseModel]: Omit<FindManyDatabaseInput<TModel, DatabaseSelect<TModel> | undefined>, "limit" | "offset"> & {
147
+ readonly limit: number;
148
+ readonly offset: number;
149
+ } }[FindManyDatabaseModel];
150
+ type FindManyDatabasePluginInput = { readonly [TModel in FindManyDatabaseModel]: FindManyDatabaseInput<TModel, DatabaseSelect<TModel> | undefined> }[FindManyDatabaseModel];
151
+ interface TransactionDatabasePluginImplementation {
152
+ create(input: CreateDatabaseImplementationInput): Promise<DatabaseImplementationResult>;
153
+ update(input: UpdateDatabaseImplementationInput): Promise<DatabaseImplementationResult | null>;
154
+ delete(input: DeleteDatabaseImplementationInput): Promise<void>;
155
+ count(input: CountDatabaseImplementationInput): Promise<number>;
156
+ findOne(input: FindOneDatabaseImplementationInput): Promise<DatabaseImplementationResult | null>;
157
+ findMany(input: FindManyDatabaseImplementationInput): Promise<readonly DatabaseImplementationResult[]>;
158
+ }
159
+ interface DatabasePluginImplementation {
160
+ create(input: CreateDatabaseImplementationInput): Promise<DatabaseImplementationResult>;
161
+ update(input: UpdateDatabaseImplementationInput): Promise<DatabaseImplementationResult | null>;
162
+ delete(input: DeleteDatabaseImplementationInput): Promise<void>;
163
+ count(input: CountDatabaseImplementationInput): Promise<number>;
164
+ findOne(input: FindOneDatabaseImplementationInput): Promise<DatabaseImplementationResult | null>;
165
+ findMany(input: FindManyDatabaseImplementationInput): Promise<readonly DatabaseImplementationResult[]>;
166
+ insertChannel(input: ChannelInsertInput): Promise<ChannelInsertResult>;
167
+ deleteChannel(input: ChannelDeleteInput): Promise<ChannelDeleteResult>;
168
+ transaction?: <TResult>(callback: (transaction: TransactionDatabasePluginImplementation) => Promise<TResult>) => Promise<TResult>;
169
+ commit?: (input: DatabaseCommit) => Promise<DatabaseCommitResult>;
170
+ dispose?: () => Promise<void>;
171
+ }
172
+ //#endregion
173
+ export { ApiKeyRowUpdate, BundleRowUpdate, CountBundlesDatabaseImplementationInput, CountBundlesDatabaseInput, CountDatabaseImplementationInput, CountDatabaseInput, CountDatabaseModel, CreateDatabaseImplementationInput, CreateDatabaseInput, CreateDatabaseModel, DatabaseCapability, DatabaseDeleteModel, DatabaseFindOneModel, DatabaseImplementationResult, DatabaseModelCapabilities, DatabaseModelsWithCapability, DatabasePluginCrud, DatabasePluginImplementation, DatabaseRowUpdate, DeleteDatabaseImplementationInput, DeleteDatabaseInput, DeleteDatabaseModel, FindManyDatabaseImplementationInput, FindManyDatabaseInput, FindManyDatabaseModel, FindManyDatabasePluginInput, FindOneDatabaseImplementationInput, FindOneDatabaseInput, FindOneDatabaseModel, ReleaseCatalogRowUpdate, ReleaseRowUpdate, SelectedDatabaseInputRow, TransactionDatabasePluginImplementation, UpdateBundleDatabaseImplementationInput, UpdateBundleDatabaseInput, UpdateDatabaseImplementationInput, UpdateDatabaseInput, UpdateDatabaseModel };