@_nazmiforreal/flutter-ota 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/flutter-patcher.js +37 -39
- package/dart-src/packages/cli-tools/.dart_tool/package_config.json +496 -0
- package/dart-src/packages/cli-tools/.dart_tool/package_graph.json +743 -0
- package/dart-src/packages/cli-tools/.gitkeep +0 -0
- package/dart-src/packages/cli-tools/bin/flutter_patcher.dart +9 -0
- package/dart-src/packages/cli-tools/lib/flutter_patcher_cli.dart +73 -0
- package/dart-src/packages/cli-tools/lib/src/backend.dart +162 -0
- package/dart-src/packages/cli-tools/lib/src/cli_base.dart +56 -0
- package/dart-src/packages/cli-tools/lib/src/commands/build.dart +99 -0
- package/dart-src/packages/cli-tools/lib/src/commands/bundle.dart +151 -0
- package/dart-src/packages/cli-tools/lib/src/commands/channel.dart +140 -0
- package/dart-src/packages/cli-tools/lib/src/commands/config_command.dart +113 -0
- package/dart-src/packages/cli-tools/lib/src/commands/console.dart +55 -0
- package/dart-src/packages/cli-tools/lib/src/commands/deploy.dart +95 -0
- package/dart-src/packages/cli-tools/lib/src/commands/doctor.dart +48 -0
- package/dart-src/packages/cli-tools/lib/src/commands/fingerprint.dart +29 -0
- package/dart-src/packages/cli-tools/lib/src/commands/init.dart +82 -0
- package/dart-src/packages/cli-tools/lib/src/commands/keys.dart +55 -0
- package/dart-src/packages/cli-tools/lib/src/commands/migrate.dart +132 -0
- package/dart-src/packages/cli-tools/lib/src/commands/rollback.dart +41 -0
- package/dart-src/packages/cli-tools/lib/src/config.dart +715 -0
- package/dart-src/packages/cli-tools/lib/src/operations.dart +206 -0
- package/dart-src/packages/cli-tools/lib/src/pack.dart +417 -0
- package/dart-src/packages/cli-tools/lib/src/sign.dart +60 -0
- package/dart-src/packages/cli-tools/lib/src/util.dart +86 -0
- package/dart-src/packages/cli-tools/migrations/cloudflare/0001_hot-updater_init.sql +16 -0
- package/dart-src/packages/cli-tools/migrations/cloudflare/0002_hot-updater_0.13.0.sql +8 -0
- package/dart-src/packages/cli-tools/migrations/cloudflare/0003_hot-updater_0.18.0.sql +38 -0
- package/dart-src/packages/cli-tools/migrations/cloudflare/0004_hot-updater_0.29.0.sql +11 -0
- package/dart-src/packages/cli-tools/migrations/cloudflare/0005_hot-updater_0.31.0.sql +24 -0
- package/dart-src/packages/cli-tools/migrations/cloudflare/bundles.sql +42 -0
- package/dart-src/packages/cli-tools/migrations/supabase/20250103114225_init.sql +228 -0
- package/dart-src/packages/cli-tools/migrations/supabase/20250314000000_hot-updater_0.13.0.sql +134 -0
- package/dart-src/packages/cli-tools/migrations/supabase/20250516000000_hot-updater_0.18.0.sql +194 -0
- package/dart-src/packages/cli-tools/migrations/supabase/20251014000000_hot-updater_0.21.0.sql +184 -0
- package/dart-src/packages/cli-tools/migrations/supabase/20260401000000_hot-updater_0.29.0.sql +503 -0
- package/dart-src/packages/cli-tools/migrations/supabase/20260414000000_hot-updater_0.30.0.sql +50 -0
- package/dart-src/packages/cli-tools/migrations/supabase/20260422000000_hot-updater_0.31.0.sql +20 -0
- package/dart-src/packages/cli-tools/migrations/supabase/20260520014100_hot-updater_rls.sql +48 -0
- package/dart-src/packages/cli-tools/pubspec.lock +638 -0
- package/dart-src/packages/cli-tools/pubspec.yaml +37 -0
- package/dart-src/packages/core/lib/flutter_patcher_core.dart +29 -0
- package/dart-src/packages/core/lib/src/app_update_info.dart +111 -0
- package/dart-src/packages/core/lib/src/bundle.dart +191 -0
- package/dart-src/packages/core/lib/src/bundle_artifacts.dart +39 -0
- package/dart-src/packages/core/lib/src/bundle_patch_artifact.dart +47 -0
- package/dart-src/packages/core/lib/src/changed_asset.dart +77 -0
- package/dart-src/packages/core/lib/src/get_bundles_args.dart +78 -0
- package/dart-src/packages/core/lib/src/metadata.dart +31 -0
- package/dart-src/packages/core/lib/src/patch_info.dart +284 -0
- package/dart-src/packages/core/lib/src/platform.dart +15 -0
- package/dart-src/packages/core/lib/src/rollout.dart +209 -0
- package/dart-src/packages/core/lib/src/semver.dart +70 -0
- package/dart-src/packages/core/lib/src/semver_range.dart +358 -0
- package/dart-src/packages/core/lib/src/semver_version.dart +94 -0
- package/dart-src/packages/core/lib/src/status.dart +24 -0
- package/dart-src/packages/core/lib/src/strategy.dart +10 -0
- package/dart-src/packages/core/lib/src/update_bundle_params.dart +30 -0
- package/dart-src/packages/core/lib/src/uuid.dart +45 -0
- package/dart-src/packages/core/pubspec.lock +381 -0
- package/dart-src/packages/core/pubspec.yaml +9 -0
- package/dart-src/packages/core/tool/dbg.dart +6 -0
- package/dart-src/plugins/aws/.gitkeep +0 -0
- package/dart-src/plugins/aws/lib/flutter_patcher_aws.dart +12 -0
- package/dart-src/plugins/aws/lib/src/aws_cloudfront_client.dart +207 -0
- package/dart-src/plugins/aws/lib/src/aws_cloudfront_signer.dart +130 -0
- package/dart-src/plugins/aws/lib/src/aws_config.dart +59 -0
- package/dart-src/plugins/aws/lib/src/aws_database.dart +198 -0
- package/dart-src/plugins/aws/lib/src/aws_lambda_edge_storage.dart +72 -0
- package/dart-src/plugins/aws/lib/src/aws_s3_client.dart +312 -0
- package/dart-src/plugins/aws/lib/src/aws_ssm_client.dart +125 -0
- package/dart-src/plugins/aws/lib/src/aws_storage.dart +20 -0
- package/dart-src/plugins/aws/lib/src/aws_storage_profile.dart +123 -0
- package/dart-src/plugins/aws/lib/src/with_cloudfront_signed_url.dart +136 -0
- package/dart-src/plugins/aws/pubspec.lock +435 -0
- package/dart-src/plugins/aws/pubspec.yaml +22 -0
- package/dart-src/plugins/cloudflare/.gitkeep +0 -0
- package/dart-src/plugins/cloudflare/lib/flutter_patcher_cloudflare.dart +18 -0
- package/dart-src/plugins/cloudflare/lib/src/cloudflare_worker_database.dart +29 -0
- package/dart-src/plugins/cloudflare/lib/src/d1_build_where.dart +93 -0
- package/dart-src/plugins/cloudflare/lib/src/d1_bundle_mapper.dart +131 -0
- package/dart-src/plugins/cloudflare/lib/src/d1_client.dart +66 -0
- package/dart-src/plugins/cloudflare/lib/src/d1_config.dart +30 -0
- package/dart-src/plugins/cloudflare/lib/src/d1_database.dart +16 -0
- package/dart-src/plugins/cloudflare/lib/src/d1_database_plugin.dart +314 -0
- package/dart-src/plugins/cloudflare/lib/src/r2_config.dart +50 -0
- package/dart-src/plugins/cloudflare/lib/src/r2_s3_client.dart +287 -0
- package/dart-src/plugins/cloudflare/lib/src/r2_storage.dart +23 -0
- package/dart-src/plugins/cloudflare/lib/src/r2_storage_profile.dart +110 -0
- package/dart-src/plugins/cloudflare/migrations/0001_hot-updater_init.sql +16 -0
- package/dart-src/plugins/cloudflare/migrations/0002_hot-updater_0.13.0.sql +8 -0
- package/dart-src/plugins/cloudflare/migrations/0003_hot-updater_0.18.0.sql +38 -0
- package/dart-src/plugins/cloudflare/migrations/0004_hot-updater_0.29.0.sql +11 -0
- package/dart-src/plugins/cloudflare/migrations/0005_hot-updater_0.31.0.sql +24 -0
- package/dart-src/plugins/cloudflare/pubspec.lock +411 -0
- package/dart-src/plugins/cloudflare/pubspec.yaml +20 -0
- package/dart-src/plugins/cloudflare/sql/bundles.sql +42 -0
- package/dart-src/plugins/plugin-core/lib/flutter_patcher_plugin_core.dart +42 -0
- package/dart-src/plugins/plugin-core/lib/src/asset_storage_layout.dart +94 -0
- package/dart-src/plugins/plugin-core/lib/src/bundle_storage_layout.dart +44 -0
- package/dart-src/plugins/plugin-core/lib/src/bundle_unit_of_work.dart +259 -0
- package/dart-src/plugins/plugin-core/lib/src/bundle_unit_of_work_store.dart +20 -0
- package/dart-src/plugins/plugin-core/lib/src/calculate_pagination.dart +29 -0
- package/dart-src/plugins/plugin-core/lib/src/compression_format.dart +63 -0
- package/dart-src/plugins/plugin-core/lib/src/content_addressed_assets.dart +22 -0
- package/dart-src/plugins/plugin-core/lib/src/create_blob_database_plugin.dart +853 -0
- package/dart-src/plugins/plugin-core/lib/src/create_database_plugin.dart +525 -0
- package/dart-src/plugins/plugin-core/lib/src/create_storage_key_builder.dart +15 -0
- package/dart-src/plugins/plugin-core/lib/src/create_storage_plugin.dart +130 -0
- package/dart-src/plugins/plugin-core/lib/src/filter_compatible_app_versions.dart +18 -0
- package/dart-src/plugins/plugin-core/lib/src/generate_min_bundle_id.dart +19 -0
- package/dart-src/plugins/plugin-core/lib/src/get_update_info.dart +241 -0
- package/dart-src/plugins/plugin-core/lib/src/is_object.dart +5 -0
- package/dart-src/plugins/plugin-core/lib/src/legacy_asset_storage_layout.dart +9 -0
- package/dart-src/plugins/plugin-core/lib/src/paginate_bundles.dart +112 -0
- package/dart-src/plugins/plugin-core/lib/src/parse_storage_uri.dart +44 -0
- package/dart-src/plugins/plugin-core/lib/src/query_bundles.dart +70 -0
- package/dart-src/plugins/plugin-core/lib/src/request_update_bundle_state.dart +62 -0
- package/dart-src/plugins/plugin-core/lib/src/resolve_update_info_from_bundles.dart +43 -0
- package/dart-src/plugins/plugin-core/lib/src/storage_profile.dart +27 -0
- package/dart-src/plugins/plugin-core/lib/src/types.dart +454 -0
- package/dart-src/plugins/plugin-core/lib/src/uuidv7.dart +41 -0
- package/dart-src/plugins/plugin-core/pubspec.lock +396 -0
- package/dart-src/plugins/plugin-core/pubspec.yaml +15 -0
- package/dart-src/plugins/postgres/.gitkeep +0 -0
- package/dart-src/plugins/postgres/lib/flutter_patcher_postgres.dart +17 -0
- package/dart-src/plugins/postgres/lib/src/postgres_bundle_mapper.dart +130 -0
- package/dart-src/plugins/postgres/lib/src/postgres_client.dart +90 -0
- package/dart-src/plugins/postgres/lib/src/postgres_config.dart +35 -0
- package/dart-src/plugins/postgres/lib/src/postgres_database.dart +302 -0
- package/dart-src/plugins/postgres/lib/src/postgres_get_update_info.dart +120 -0
- package/dart-src/plugins/postgres/lib/src/postgres_storage.dart +205 -0
- package/dart-src/plugins/postgres/lib/src/postgres_types.dart +132 -0
- package/dart-src/plugins/postgres/pubspec.lock +427 -0
- package/dart-src/plugins/postgres/pubspec.yaml +18 -0
- package/dart-src/plugins/postgres/sql/bundles.sql +45 -0
- package/dart-src/plugins/postgres/sql/get_target_app_version_list.sql +21 -0
- package/dart-src/plugins/postgres/sql/get_update_info.spec.ts +171 -0
- package/dart-src/plugins/postgres/sql/get_update_info_by_app_version.sql +126 -0
- package/dart-src/plugins/postgres/sql/get_update_info_by_fingerprint_hash.sql +125 -0
- package/dart-src/plugins/postgres/sql/hash_user_id.sql +30 -0
- package/dart-src/plugins/postgres/sql/is_device_eligible.sql +237 -0
- package/dart-src/plugins/postgres/sql/prepareSql.ts +11 -0
- package/dart-src/plugins/standalone/.gitkeep +0 -0
- package/dart-src/plugins/standalone/lib/flutter_patcher_standalone.dart +12 -0
- package/dart-src/plugins/standalone/lib/src/standalone_config.dart +107 -0
- package/dart-src/plugins/standalone/lib/src/standalone_database.dart +233 -0
- package/dart-src/plugins/standalone/lib/src/standalone_storage.dart +175 -0
- package/dart-src/plugins/standalone/pubspec.lock +411 -0
- package/dart-src/plugins/standalone/pubspec.yaml +18 -0
- package/dart-src/plugins/supabase/lib/edge.dart +10 -0
- package/dart-src/plugins/supabase/lib/flutter_patcher_supabase.dart +21 -0
- package/dart-src/plugins/supabase/lib/src/supabase_bundle_mapper.dart +129 -0
- package/dart-src/plugins/supabase/lib/src/supabase_client_adapter.dart +154 -0
- package/dart-src/plugins/supabase/lib/src/supabase_client_http.dart +516 -0
- package/dart-src/plugins/supabase/lib/src/supabase_config.dart +34 -0
- package/dart-src/plugins/supabase/lib/src/supabase_database.dart +422 -0
- package/dart-src/plugins/supabase/lib/src/supabase_edge_function_database.dart +32 -0
- package/dart-src/plugins/supabase/lib/src/supabase_edge_function_storage.dart +99 -0
- package/dart-src/plugins/supabase/lib/src/supabase_signed_url_batcher.dart +145 -0
- package/dart-src/plugins/supabase/lib/src/supabase_storage.dart +298 -0
- package/dart-src/plugins/supabase/lib/src/types.dart +130 -0
- package/dart-src/plugins/supabase/pubspec.lock +515 -0
- package/dart-src/plugins/supabase/pubspec.yaml +19 -0
- package/dart-src/plugins/supabase/supabase/edge-functions/index.ts +44 -0
- package/dart-src/plugins/supabase/supabase/edge-functions/runtime.docker.integration.spec.ts +968 -0
- package/dart-src/plugins/supabase/supabase/migrations/20250103114225_init.sql +228 -0
- package/dart-src/plugins/supabase/supabase/migrations/20250314000000_hot-updater_0.13.0.sql +134 -0
- package/dart-src/plugins/supabase/supabase/migrations/20250516000000_hot-updater_0.18.0.sql +194 -0
- package/dart-src/plugins/supabase/supabase/migrations/20251014000000_hot-updater_0.21.0.sql +184 -0
- package/dart-src/plugins/supabase/supabase/migrations/20260401000000_hot-updater_0.29.0.sql +503 -0
- package/dart-src/plugins/supabase/supabase/migrations/20260414000000_hot-updater_0.30.0.sql +50 -0
- package/dart-src/plugins/supabase/supabase/migrations/20260422000000_hot-updater_0.31.0.sql +20 -0
- package/dart-src/plugins/supabase/supabase/migrations/20260520014100_hot-updater_rls.sql +48 -0
- package/package.json +2 -1
- package/scripts/postinstall.js +32 -23
- /package/bin/{flutter-patcher-linux → flutter-patcher-linux-x64} +0 -0
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
# Generated by pub
|
|
2
|
+
# See https://dart.dev/tools/pub/glossary#lockfile
|
|
3
|
+
packages:
|
|
4
|
+
_fe_analyzer_shared:
|
|
5
|
+
dependency: transitive
|
|
6
|
+
description:
|
|
7
|
+
name: _fe_analyzer_shared
|
|
8
|
+
sha256: "9a3386eea899815698dd55995277cf7cb8572ee52b399a6edfb7ae2b50e5fc19"
|
|
9
|
+
url: "https://pub.dev"
|
|
10
|
+
source: hosted
|
|
11
|
+
version: "105.0.0"
|
|
12
|
+
analyzer:
|
|
13
|
+
dependency: transitive
|
|
14
|
+
description:
|
|
15
|
+
name: analyzer
|
|
16
|
+
sha256: "62993bed6eadbe9596c5c20d5c167e7bc563c5fe266657a04ddeb93bdb84f4c9"
|
|
17
|
+
url: "https://pub.dev"
|
|
18
|
+
source: hosted
|
|
19
|
+
version: "14.1.0"
|
|
20
|
+
args:
|
|
21
|
+
dependency: transitive
|
|
22
|
+
description:
|
|
23
|
+
name: args
|
|
24
|
+
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
|
|
25
|
+
url: "https://pub.dev"
|
|
26
|
+
source: hosted
|
|
27
|
+
version: "2.7.0"
|
|
28
|
+
async:
|
|
29
|
+
dependency: transitive
|
|
30
|
+
description:
|
|
31
|
+
name: async
|
|
32
|
+
sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
|
|
33
|
+
url: "https://pub.dev"
|
|
34
|
+
source: hosted
|
|
35
|
+
version: "2.13.1"
|
|
36
|
+
boolean_selector:
|
|
37
|
+
dependency: transitive
|
|
38
|
+
description:
|
|
39
|
+
name: boolean_selector
|
|
40
|
+
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
|
|
41
|
+
url: "https://pub.dev"
|
|
42
|
+
source: hosted
|
|
43
|
+
version: "2.1.2"
|
|
44
|
+
cli_config:
|
|
45
|
+
dependency: transitive
|
|
46
|
+
description:
|
|
47
|
+
name: cli_config
|
|
48
|
+
sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
|
|
49
|
+
url: "https://pub.dev"
|
|
50
|
+
source: hosted
|
|
51
|
+
version: "0.2.0"
|
|
52
|
+
collection:
|
|
53
|
+
dependency: transitive
|
|
54
|
+
description:
|
|
55
|
+
name: collection
|
|
56
|
+
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
|
57
|
+
url: "https://pub.dev"
|
|
58
|
+
source: hosted
|
|
59
|
+
version: "1.19.1"
|
|
60
|
+
convert:
|
|
61
|
+
dependency: transitive
|
|
62
|
+
description:
|
|
63
|
+
name: convert
|
|
64
|
+
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
|
|
65
|
+
url: "https://pub.dev"
|
|
66
|
+
source: hosted
|
|
67
|
+
version: "3.1.2"
|
|
68
|
+
coverage:
|
|
69
|
+
dependency: transitive
|
|
70
|
+
description:
|
|
71
|
+
name: coverage
|
|
72
|
+
sha256: "956a3de0725ca232ad353565a8290d3357592bf4250f6f298a185e2d949c5d3d"
|
|
73
|
+
url: "https://pub.dev"
|
|
74
|
+
source: hosted
|
|
75
|
+
version: "1.15.1"
|
|
76
|
+
crypto:
|
|
77
|
+
dependency: "direct main"
|
|
78
|
+
description:
|
|
79
|
+
name: crypto
|
|
80
|
+
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
|
|
81
|
+
url: "https://pub.dev"
|
|
82
|
+
source: hosted
|
|
83
|
+
version: "3.0.7"
|
|
84
|
+
file:
|
|
85
|
+
dependency: transitive
|
|
86
|
+
description:
|
|
87
|
+
name: file
|
|
88
|
+
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
|
|
89
|
+
url: "https://pub.dev"
|
|
90
|
+
source: hosted
|
|
91
|
+
version: "7.0.1"
|
|
92
|
+
flutter_patcher_core:
|
|
93
|
+
dependency: "direct main"
|
|
94
|
+
description:
|
|
95
|
+
path: "../../packages/core"
|
|
96
|
+
relative: true
|
|
97
|
+
source: path
|
|
98
|
+
version: "0.1.0"
|
|
99
|
+
flutter_patcher_plugin_core:
|
|
100
|
+
dependency: "direct main"
|
|
101
|
+
description:
|
|
102
|
+
path: "../plugin-core"
|
|
103
|
+
relative: true
|
|
104
|
+
source: path
|
|
105
|
+
version: "0.0.1"
|
|
106
|
+
frontend_server_client:
|
|
107
|
+
dependency: transitive
|
|
108
|
+
description:
|
|
109
|
+
name: frontend_server_client
|
|
110
|
+
sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
|
|
111
|
+
url: "https://pub.dev"
|
|
112
|
+
source: hosted
|
|
113
|
+
version: "4.0.0"
|
|
114
|
+
glob:
|
|
115
|
+
dependency: transitive
|
|
116
|
+
description:
|
|
117
|
+
name: glob
|
|
118
|
+
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
|
|
119
|
+
url: "https://pub.dev"
|
|
120
|
+
source: hosted
|
|
121
|
+
version: "2.1.3"
|
|
122
|
+
http:
|
|
123
|
+
dependency: "direct main"
|
|
124
|
+
description:
|
|
125
|
+
name: http
|
|
126
|
+
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
|
|
127
|
+
url: "https://pub.dev"
|
|
128
|
+
source: hosted
|
|
129
|
+
version: "1.6.0"
|
|
130
|
+
http_multi_server:
|
|
131
|
+
dependency: transitive
|
|
132
|
+
description:
|
|
133
|
+
name: http_multi_server
|
|
134
|
+
sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
|
|
135
|
+
url: "https://pub.dev"
|
|
136
|
+
source: hosted
|
|
137
|
+
version: "3.2.2"
|
|
138
|
+
http_parser:
|
|
139
|
+
dependency: transitive
|
|
140
|
+
description:
|
|
141
|
+
name: http_parser
|
|
142
|
+
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
|
143
|
+
url: "https://pub.dev"
|
|
144
|
+
source: hosted
|
|
145
|
+
version: "4.1.2"
|
|
146
|
+
io:
|
|
147
|
+
dependency: transitive
|
|
148
|
+
description:
|
|
149
|
+
name: io
|
|
150
|
+
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
|
|
151
|
+
url: "https://pub.dev"
|
|
152
|
+
source: hosted
|
|
153
|
+
version: "1.0.5"
|
|
154
|
+
lints:
|
|
155
|
+
dependency: "direct dev"
|
|
156
|
+
description:
|
|
157
|
+
name: lints
|
|
158
|
+
sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
|
|
159
|
+
url: "https://pub.dev"
|
|
160
|
+
source: hosted
|
|
161
|
+
version: "4.0.0"
|
|
162
|
+
logging:
|
|
163
|
+
dependency: transitive
|
|
164
|
+
description:
|
|
165
|
+
name: logging
|
|
166
|
+
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
|
|
167
|
+
url: "https://pub.dev"
|
|
168
|
+
source: hosted
|
|
169
|
+
version: "1.3.0"
|
|
170
|
+
matcher:
|
|
171
|
+
dependency: transitive
|
|
172
|
+
description:
|
|
173
|
+
name: matcher
|
|
174
|
+
sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd"
|
|
175
|
+
url: "https://pub.dev"
|
|
176
|
+
source: hosted
|
|
177
|
+
version: "0.12.20"
|
|
178
|
+
meta:
|
|
179
|
+
dependency: transitive
|
|
180
|
+
description:
|
|
181
|
+
name: meta
|
|
182
|
+
sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9"
|
|
183
|
+
url: "https://pub.dev"
|
|
184
|
+
source: hosted
|
|
185
|
+
version: "1.19.0"
|
|
186
|
+
mime:
|
|
187
|
+
dependency: transitive
|
|
188
|
+
description:
|
|
189
|
+
name: mime
|
|
190
|
+
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
|
|
191
|
+
url: "https://pub.dev"
|
|
192
|
+
source: hosted
|
|
193
|
+
version: "1.0.6"
|
|
194
|
+
node_preamble:
|
|
195
|
+
dependency: transitive
|
|
196
|
+
description:
|
|
197
|
+
name: node_preamble
|
|
198
|
+
sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
|
|
199
|
+
url: "https://pub.dev"
|
|
200
|
+
source: hosted
|
|
201
|
+
version: "2.0.2"
|
|
202
|
+
package_config:
|
|
203
|
+
dependency: transitive
|
|
204
|
+
description:
|
|
205
|
+
name: package_config
|
|
206
|
+
sha256: ffcf4cf3d6c0b74ac43708d9f56625506e8a68aa935abe9d267a7330f320eb5d
|
|
207
|
+
url: "https://pub.dev"
|
|
208
|
+
source: hosted
|
|
209
|
+
version: "3.0.0"
|
|
210
|
+
path:
|
|
211
|
+
dependency: "direct main"
|
|
212
|
+
description:
|
|
213
|
+
name: path
|
|
214
|
+
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
|
|
215
|
+
url: "https://pub.dev"
|
|
216
|
+
source: hosted
|
|
217
|
+
version: "1.9.1"
|
|
218
|
+
pool:
|
|
219
|
+
dependency: transitive
|
|
220
|
+
description:
|
|
221
|
+
name: pool
|
|
222
|
+
sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
|
|
223
|
+
url: "https://pub.dev"
|
|
224
|
+
source: hosted
|
|
225
|
+
version: "1.5.2"
|
|
226
|
+
pub_semver:
|
|
227
|
+
dependency: transitive
|
|
228
|
+
description:
|
|
229
|
+
name: pub_semver
|
|
230
|
+
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
|
|
231
|
+
url: "https://pub.dev"
|
|
232
|
+
source: hosted
|
|
233
|
+
version: "2.2.0"
|
|
234
|
+
shelf:
|
|
235
|
+
dependency: transitive
|
|
236
|
+
description:
|
|
237
|
+
name: shelf
|
|
238
|
+
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
|
|
239
|
+
url: "https://pub.dev"
|
|
240
|
+
source: hosted
|
|
241
|
+
version: "1.4.2"
|
|
242
|
+
shelf_packages_handler:
|
|
243
|
+
dependency: transitive
|
|
244
|
+
description:
|
|
245
|
+
name: shelf_packages_handler
|
|
246
|
+
sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
|
|
247
|
+
url: "https://pub.dev"
|
|
248
|
+
source: hosted
|
|
249
|
+
version: "3.0.2"
|
|
250
|
+
shelf_static:
|
|
251
|
+
dependency: transitive
|
|
252
|
+
description:
|
|
253
|
+
name: shelf_static
|
|
254
|
+
sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
|
|
255
|
+
url: "https://pub.dev"
|
|
256
|
+
source: hosted
|
|
257
|
+
version: "1.1.3"
|
|
258
|
+
shelf_web_socket:
|
|
259
|
+
dependency: transitive
|
|
260
|
+
description:
|
|
261
|
+
name: shelf_web_socket
|
|
262
|
+
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
|
|
263
|
+
url: "https://pub.dev"
|
|
264
|
+
source: hosted
|
|
265
|
+
version: "3.0.0"
|
|
266
|
+
source_map_stack_trace:
|
|
267
|
+
dependency: transitive
|
|
268
|
+
description:
|
|
269
|
+
name: source_map_stack_trace
|
|
270
|
+
sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b
|
|
271
|
+
url: "https://pub.dev"
|
|
272
|
+
source: hosted
|
|
273
|
+
version: "2.1.2"
|
|
274
|
+
source_maps:
|
|
275
|
+
dependency: transitive
|
|
276
|
+
description:
|
|
277
|
+
name: source_maps
|
|
278
|
+
sha256: "14c2945847669b44089bb1222f66873d7ff7103c58911917f2a63c5a62327898"
|
|
279
|
+
url: "https://pub.dev"
|
|
280
|
+
source: hosted
|
|
281
|
+
version: "0.10.14"
|
|
282
|
+
source_span:
|
|
283
|
+
dependency: transitive
|
|
284
|
+
description:
|
|
285
|
+
name: source_span
|
|
286
|
+
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
|
|
287
|
+
url: "https://pub.dev"
|
|
288
|
+
source: hosted
|
|
289
|
+
version: "1.10.2"
|
|
290
|
+
stack_trace:
|
|
291
|
+
dependency: transitive
|
|
292
|
+
description:
|
|
293
|
+
name: stack_trace
|
|
294
|
+
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
|
295
|
+
url: "https://pub.dev"
|
|
296
|
+
source: hosted
|
|
297
|
+
version: "1.12.1"
|
|
298
|
+
stream_channel:
|
|
299
|
+
dependency: transitive
|
|
300
|
+
description:
|
|
301
|
+
name: stream_channel
|
|
302
|
+
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
|
303
|
+
url: "https://pub.dev"
|
|
304
|
+
source: hosted
|
|
305
|
+
version: "2.1.4"
|
|
306
|
+
string_scanner:
|
|
307
|
+
dependency: transitive
|
|
308
|
+
description:
|
|
309
|
+
name: string_scanner
|
|
310
|
+
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
|
311
|
+
url: "https://pub.dev"
|
|
312
|
+
source: hosted
|
|
313
|
+
version: "1.4.1"
|
|
314
|
+
term_glyph:
|
|
315
|
+
dependency: transitive
|
|
316
|
+
description:
|
|
317
|
+
name: term_glyph
|
|
318
|
+
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
|
319
|
+
url: "https://pub.dev"
|
|
320
|
+
source: hosted
|
|
321
|
+
version: "1.2.2"
|
|
322
|
+
test:
|
|
323
|
+
dependency: "direct dev"
|
|
324
|
+
description:
|
|
325
|
+
name: test
|
|
326
|
+
sha256: "0d5ba5602ec3baa28c8ce365e1efc5575969c765f45c554a3e167dc7945b9c30"
|
|
327
|
+
url: "https://pub.dev"
|
|
328
|
+
source: hosted
|
|
329
|
+
version: "1.31.2"
|
|
330
|
+
test_api:
|
|
331
|
+
dependency: transitive
|
|
332
|
+
description:
|
|
333
|
+
name: test_api
|
|
334
|
+
sha256: "475610b2aa23c19687cce2961e44b0cc57cafe220f67c2b80201231b2a07fbe7"
|
|
335
|
+
url: "https://pub.dev"
|
|
336
|
+
source: hosted
|
|
337
|
+
version: "0.7.13"
|
|
338
|
+
test_core:
|
|
339
|
+
dependency: transitive
|
|
340
|
+
description:
|
|
341
|
+
name: test_core
|
|
342
|
+
sha256: a39c204a4fc7a7ccb04a2b985e359fda3cc37e45e0b8ac61c3fb1a05aa832132
|
|
343
|
+
url: "https://pub.dev"
|
|
344
|
+
source: hosted
|
|
345
|
+
version: "0.6.19"
|
|
346
|
+
typed_data:
|
|
347
|
+
dependency: transitive
|
|
348
|
+
description:
|
|
349
|
+
name: typed_data
|
|
350
|
+
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
|
351
|
+
url: "https://pub.dev"
|
|
352
|
+
source: hosted
|
|
353
|
+
version: "1.4.0"
|
|
354
|
+
vm_service:
|
|
355
|
+
dependency: transitive
|
|
356
|
+
description:
|
|
357
|
+
name: vm_service
|
|
358
|
+
sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0"
|
|
359
|
+
url: "https://pub.dev"
|
|
360
|
+
source: hosted
|
|
361
|
+
version: "15.3.0"
|
|
362
|
+
watcher:
|
|
363
|
+
dependency: transitive
|
|
364
|
+
description:
|
|
365
|
+
name: watcher
|
|
366
|
+
sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635"
|
|
367
|
+
url: "https://pub.dev"
|
|
368
|
+
source: hosted
|
|
369
|
+
version: "1.2.1"
|
|
370
|
+
web:
|
|
371
|
+
dependency: transitive
|
|
372
|
+
description:
|
|
373
|
+
name: web
|
|
374
|
+
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
|
|
375
|
+
url: "https://pub.dev"
|
|
376
|
+
source: hosted
|
|
377
|
+
version: "1.1.1"
|
|
378
|
+
web_socket:
|
|
379
|
+
dependency: transitive
|
|
380
|
+
description:
|
|
381
|
+
name: web_socket
|
|
382
|
+
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
|
|
383
|
+
url: "https://pub.dev"
|
|
384
|
+
source: hosted
|
|
385
|
+
version: "1.0.1"
|
|
386
|
+
web_socket_channel:
|
|
387
|
+
dependency: transitive
|
|
388
|
+
description:
|
|
389
|
+
name: web_socket_channel
|
|
390
|
+
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
|
|
391
|
+
url: "https://pub.dev"
|
|
392
|
+
source: hosted
|
|
393
|
+
version: "3.0.3"
|
|
394
|
+
webkit_inspection_protocol:
|
|
395
|
+
dependency: transitive
|
|
396
|
+
description:
|
|
397
|
+
name: webkit_inspection_protocol
|
|
398
|
+
sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
|
|
399
|
+
url: "https://pub.dev"
|
|
400
|
+
source: hosted
|
|
401
|
+
version: "1.2.1"
|
|
402
|
+
yaml:
|
|
403
|
+
dependency: transitive
|
|
404
|
+
description:
|
|
405
|
+
name: yaml
|
|
406
|
+
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
|
407
|
+
url: "https://pub.dev"
|
|
408
|
+
source: hosted
|
|
409
|
+
version: "3.1.3"
|
|
410
|
+
sdks:
|
|
411
|
+
dart: ">=3.11.0 <4.0.0"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: flutter_patcher_cloudflare
|
|
2
|
+
description: Cloudflare D1 + R2 storage plugins for flutter_patcher (faithful port of hot-updater plugins/cloudflare).
|
|
3
|
+
version: 0.1.0
|
|
4
|
+
publish_to: none
|
|
5
|
+
|
|
6
|
+
environment:
|
|
7
|
+
sdk: ">=3.3.0 <4.0.0"
|
|
8
|
+
|
|
9
|
+
dependencies:
|
|
10
|
+
flutter_patcher_core:
|
|
11
|
+
path: ../../packages/core
|
|
12
|
+
flutter_patcher_plugin_core:
|
|
13
|
+
path: ../../plugins/plugin-core
|
|
14
|
+
crypto: ^3.0.0
|
|
15
|
+
http: ^1.2.0
|
|
16
|
+
path: ^1.9.0
|
|
17
|
+
|
|
18
|
+
dev_dependencies:
|
|
19
|
+
test: ^1.25.0
|
|
20
|
+
lints: ^4.0.0
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
-- HotUpdater.bundles
|
|
2
|
+
|
|
3
|
+
CREATE TABLE bundles (
|
|
4
|
+
id TEXT PRIMARY KEY,
|
|
5
|
+
platform TEXT NOT NULL CHECK (platform IN ('ios', 'android')),
|
|
6
|
+
target_app_version TEXT,
|
|
7
|
+
should_force_update INTEGER NOT NULL CHECK (should_force_update IN (0, 1)),
|
|
8
|
+
enabled INTEGER NOT NULL CHECK (enabled IN (0, 1)),
|
|
9
|
+
file_hash TEXT NOT NULL,
|
|
10
|
+
git_commit_hash TEXT,
|
|
11
|
+
message TEXT,
|
|
12
|
+
channel TEXT NOT NULL DEFAULT 'production',
|
|
13
|
+
storage_uri TEXT NOT NULL,
|
|
14
|
+
fingerprint_hash TEXT,
|
|
15
|
+
metadata JSONB DEFAULT '{}',
|
|
16
|
+
manifest_storage_uri TEXT,
|
|
17
|
+
manifest_file_hash TEXT,
|
|
18
|
+
asset_base_storage_uri TEXT,
|
|
19
|
+
rollout_cohort_count INTEGER DEFAULT 1000
|
|
20
|
+
CHECK (rollout_cohort_count >= 0 AND rollout_cohort_count <= 1000),
|
|
21
|
+
target_cohorts TEXT,
|
|
22
|
+
CHECK ((target_app_version IS NOT NULL) OR (fingerprint_hash IS NOT NULL))
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
CREATE TABLE bundle_patches (
|
|
26
|
+
id TEXT PRIMARY KEY,
|
|
27
|
+
bundle_id TEXT NOT NULL,
|
|
28
|
+
base_bundle_id TEXT NOT NULL,
|
|
29
|
+
base_file_hash TEXT NOT NULL,
|
|
30
|
+
patch_file_hash TEXT NOT NULL,
|
|
31
|
+
patch_storage_uri TEXT NOT NULL,
|
|
32
|
+
order_index INTEGER NOT NULL DEFAULT 0,
|
|
33
|
+
FOREIGN KEY (bundle_id) REFERENCES bundles(id) ON DELETE CASCADE,
|
|
34
|
+
FOREIGN KEY (base_bundle_id) REFERENCES bundles(id) ON DELETE CASCADE
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
CREATE INDEX bundles_target_app_version_idx ON bundles(target_app_version);
|
|
38
|
+
CREATE INDEX bundles_fingerprint_hash_idx ON bundles(fingerprint_hash);
|
|
39
|
+
CREATE INDEX bundles_channel_idx ON bundles(channel);
|
|
40
|
+
CREATE INDEX bundles_rollout_idx ON bundles(rollout_cohort_count);
|
|
41
|
+
CREATE INDEX bundle_patches_bundle_id_idx ON bundle_patches(bundle_id);
|
|
42
|
+
CREATE INDEX bundle_patches_base_bundle_id_idx ON bundle_patches(base_bundle_id);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
library;
|
|
2
|
+
|
|
3
|
+
// Re-export core types for convenience.
|
|
4
|
+
export 'package:flutter_patcher_core/flutter_patcher_core.dart'
|
|
5
|
+
show
|
|
6
|
+
Bundle,
|
|
7
|
+
GetBundlesArgs,
|
|
8
|
+
Platform,
|
|
9
|
+
UpdateInfo,
|
|
10
|
+
semverSatisfies;
|
|
11
|
+
|
|
12
|
+
// Plugin-core types.
|
|
13
|
+
export 'src/types.dart';
|
|
14
|
+
|
|
15
|
+
// Helpers.
|
|
16
|
+
export 'src/calculate_pagination.dart';
|
|
17
|
+
export 'src/query_bundles.dart';
|
|
18
|
+
export 'src/paginate_bundles.dart';
|
|
19
|
+
export 'src/filter_compatible_app_versions.dart';
|
|
20
|
+
export 'src/parse_storage_uri.dart';
|
|
21
|
+
export 'src/content_addressed_assets.dart';
|
|
22
|
+
export 'src/compression_format.dart';
|
|
23
|
+
export 'src/storage_profile.dart';
|
|
24
|
+
export 'src/create_storage_key_builder.dart';
|
|
25
|
+
export 'src/is_object.dart';
|
|
26
|
+
export 'src/asset_storage_layout.dart';
|
|
27
|
+
export 'src/bundle_storage_layout.dart';
|
|
28
|
+
export 'src/legacy_asset_storage_layout.dart';
|
|
29
|
+
|
|
30
|
+
// Factories.
|
|
31
|
+
export 'src/bundle_unit_of_work.dart';
|
|
32
|
+
export 'src/bundle_unit_of_work_store.dart'
|
|
33
|
+
show getRequestBundleUnitOfWork, clearUnitOfWorkStore;
|
|
34
|
+
export 'src/request_update_bundle_state.dart';
|
|
35
|
+
export 'src/create_database_plugin.dart';
|
|
36
|
+
export 'src/create_blob_database_plugin.dart';
|
|
37
|
+
export 'src/create_storage_plugin.dart';
|
|
38
|
+
export 'src/generate_min_bundle_id.dart';
|
|
39
|
+
export 'src/uuidv7.dart';
|
|
40
|
+
export 'src/get_update_info.dart';
|
|
41
|
+
export 'src/resolve_update_info_from_bundles.dart';
|
|
42
|
+
export 'src/resolve_update_info_from_bundles.dart';
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import 'content_addressed_assets.dart' show getContentAddressedAssetStoragePath;
|
|
2
|
+
import 'legacy_asset_storage_layout.dart' show getLegacyManifestAssetStoragePath;
|
|
3
|
+
|
|
4
|
+
/// The two supported asset storage layout strategies.
|
|
5
|
+
typedef AssetStorageLayout = String;
|
|
6
|
+
|
|
7
|
+
const String assetLayoutContentAddressed = 'content-addressed';
|
|
8
|
+
const String assetLayoutLegacyFiles = 'legacy-files';
|
|
9
|
+
|
|
10
|
+
/// Whether [assetPath] is a brotli-compressed manifest path
|
|
11
|
+
/// (e.g. `index.android.bundle` → `index.android.bundle.br`).
|
|
12
|
+
bool isBrotliManifestAssetPath(String assetPath) {
|
|
13
|
+
return RegExp(r'(^|/)index\.[^/]+\.bundle$')
|
|
14
|
+
.hasMatch(assetPath.replaceAll('\\', '/'));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/// Append `.br` to brotli manifest asset paths, pass through otherwise.
|
|
18
|
+
String getManifestAssetDownloadPath(String assetPath) {
|
|
19
|
+
return isBrotliManifestAssetPath(assetPath) ? '$assetPath.br' : assetPath;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/// Build a full storage URI by joining a base URI with a relative path.
|
|
23
|
+
///
|
|
24
|
+
/// Segments of [relativePath] are percent-encoded individually.
|
|
25
|
+
String createStorageUriWithRelativePath({
|
|
26
|
+
required String baseStorageUri,
|
|
27
|
+
required String relativePath,
|
|
28
|
+
}) {
|
|
29
|
+
final storageUrl = Uri.parse(baseStorageUri);
|
|
30
|
+
final normalizedBasePath =
|
|
31
|
+
storageUrl.path.replaceAll(RegExp(r'/+$'), '');
|
|
32
|
+
final normalizedRelativePath = relativePath
|
|
33
|
+
.replaceAll('\\', '/')
|
|
34
|
+
.split('/')
|
|
35
|
+
.where((s) => s.isNotEmpty)
|
|
36
|
+
.map(Uri.encodeComponent)
|
|
37
|
+
.join('/');
|
|
38
|
+
|
|
39
|
+
return storageUrl
|
|
40
|
+
.replace(path: '$normalizedBasePath/$normalizedRelativePath')
|
|
41
|
+
.toString();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// Determine the asset storage layout from the base URI.
|
|
45
|
+
///
|
|
46
|
+
/// Returns `'content-addressed'` if the URI path ends with `/assets`,
|
|
47
|
+
/// otherwise `'legacy-files'`.
|
|
48
|
+
AssetStorageLayout getAssetStorageLayout(String assetBaseStorageUri) {
|
|
49
|
+
final pathname =
|
|
50
|
+
Uri.parse(assetBaseStorageUri).path.replaceAll(RegExp(r'/+$'), '');
|
|
51
|
+
return pathname.endsWith('/assets') || pathname == '/assets'
|
|
52
|
+
? assetLayoutContentAddressed
|
|
53
|
+
: assetLayoutLegacyFiles;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/// Convenience check: is the base URI using content-addressed layout?
|
|
57
|
+
bool isContentAddressedAssetBaseStorageUri(String assetBaseStorageUri) {
|
|
58
|
+
return getAssetStorageLayout(assetBaseStorageUri) ==
|
|
59
|
+
assetLayoutContentAddressed;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/// Compute the storage path for a manifest asset, dispatching on layout.
|
|
63
|
+
String getManifestAssetStoragePath({
|
|
64
|
+
required String assetBaseStorageUri,
|
|
65
|
+
required String assetPath,
|
|
66
|
+
required String fileHash,
|
|
67
|
+
}) {
|
|
68
|
+
final layout = getAssetStorageLayout(assetBaseStorageUri);
|
|
69
|
+
|
|
70
|
+
if (layout == assetLayoutContentAddressed) {
|
|
71
|
+
return getContentAddressedAssetStoragePath(
|
|
72
|
+
assetPath: assetPath,
|
|
73
|
+
fileHash: fileHash,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return getLegacyManifestAssetStoragePath(assetPath: assetPath);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/// Build a full storage URI for a manifest asset.
|
|
81
|
+
String resolveManifestAssetStorageUri({
|
|
82
|
+
required String assetBaseStorageUri,
|
|
83
|
+
required String assetPath,
|
|
84
|
+
required String fileHash,
|
|
85
|
+
}) {
|
|
86
|
+
return createStorageUriWithRelativePath(
|
|
87
|
+
baseStorageUri: assetBaseStorageUri,
|
|
88
|
+
relativePath: getManifestAssetStoragePath(
|
|
89
|
+
assetBaseStorageUri: assetBaseStorageUri,
|
|
90
|
+
assetPath: assetPath,
|
|
91
|
+
fileHash: fileHash,
|
|
92
|
+
),
|
|
93
|
+
);
|
|
94
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/// The top-level prefix for bundle storage keys.
|
|
2
|
+
const String bundleStoragePrefix = 'bundles';
|
|
3
|
+
|
|
4
|
+
/// Build a storage key for a bundle, e.g. `bundles/<bundleId>/patch.zip`.
|
|
5
|
+
String createBundleStorageKey(String bundleId, [List<String> relativePaths = const []]) {
|
|
6
|
+
return [bundleStoragePrefix, bundleId, ...relativePaths]
|
|
7
|
+
.where((s) => s.isNotEmpty)
|
|
8
|
+
.join('/');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/// Replace the bundle-id segment in a storage URI with a relative path.
|
|
12
|
+
///
|
|
13
|
+
/// For example, given a storage URI containing `.../bundles/<bundleId>/patch.zip`
|
|
14
|
+
/// and a [relativePath] of `files/manifest.json`, this returns a URI pointing
|
|
15
|
+
/// to `.../files/manifest.json`.
|
|
16
|
+
String createStorageRootUriWithPath(
|
|
17
|
+
String storageUri,
|
|
18
|
+
String bundleId,
|
|
19
|
+
String relativePath,
|
|
20
|
+
) {
|
|
21
|
+
final storageUrl = Uri.parse(storageUri);
|
|
22
|
+
final segments = storageUrl.path.split('/').where((s) => s.isNotEmpty).toList();
|
|
23
|
+
final bundleIndex = segments.lastIndexOf(bundleId);
|
|
24
|
+
if (bundleIndex < 0) {
|
|
25
|
+
throw StateError(
|
|
26
|
+
'Storage URI does not contain bundle id: $bundleId',
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
final rootSegments = segments.sublist(0, bundleIndex);
|
|
31
|
+
if (rootSegments.isNotEmpty && rootSegments.last == bundleStoragePrefix) {
|
|
32
|
+
rootSegments.removeLast();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
final relativeSegments = relativePath
|
|
36
|
+
.split('/')
|
|
37
|
+
.where((s) => s.isNotEmpty)
|
|
38
|
+
.map(Uri.encodeComponent)
|
|
39
|
+
.toList();
|
|
40
|
+
|
|
41
|
+
return storageUrl
|
|
42
|
+
.replace(path: '/${[...rootSegments, ...relativeSegments].join('/')}')
|
|
43
|
+
.toString();
|
|
44
|
+
}
|