native-update 1.3.0 → 1.3.2
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/Readme.md +5 -5
- package/cli/index.js +5 -6
- package/cli/node_modules/.yarn-integrity +16 -0
- package/cli/node_modules/commander/LICENSE +22 -0
- package/cli/node_modules/commander/Readme.md +1148 -0
- package/cli/node_modules/commander/esm.mjs +16 -0
- package/cli/node_modules/commander/index.js +26 -0
- package/cli/node_modules/commander/lib/argument.js +145 -0
- package/cli/node_modules/commander/lib/command.js +2179 -0
- package/cli/node_modules/commander/lib/error.js +43 -0
- package/cli/node_modules/commander/lib/help.js +462 -0
- package/cli/node_modules/commander/lib/option.js +329 -0
- package/cli/node_modules/commander/lib/suggestSimilar.js +100 -0
- package/cli/node_modules/commander/package-support.json +16 -0
- package/cli/node_modules/commander/package.json +80 -0
- package/cli/node_modules/commander/typings/esm.d.mts +3 -0
- package/cli/node_modules/commander/typings/index.d.ts +884 -0
- package/cli/yarn.lock +8 -0
- package/dist/esm/__tests__/delta-processor.test.d.ts +1 -0
- package/dist/esm/__tests__/delta-processor.test.js +77 -0
- package/dist/esm/__tests__/delta-processor.test.js.map +1 -0
- package/dist/esm/__tests__/firestore-schema.test.d.ts +1 -0
- package/dist/esm/__tests__/firestore-schema.test.js +74 -0
- package/dist/esm/__tests__/firestore-schema.test.js.map +1 -0
- package/dist/esm/__tests__/manifest-reader.test.d.ts +1 -0
- package/dist/esm/__tests__/manifest-reader.test.js +271 -0
- package/dist/esm/__tests__/manifest-reader.test.js.map +1 -0
- package/dist/esm/__tests__/rollout-checker.test.d.ts +1 -0
- package/dist/esm/__tests__/rollout-checker.test.js +210 -0
- package/dist/esm/__tests__/rollout-checker.test.js.map +1 -0
- package/dist/esm/core/config.d.ts +26 -0
- package/dist/esm/core/config.js +6 -0
- package/dist/esm/core/config.js.map +1 -1
- package/dist/esm/firestore/firestore-client.d.ts +109 -0
- package/dist/esm/firestore/firestore-client.js +260 -0
- package/dist/esm/firestore/firestore-client.js.map +1 -0
- package/dist/esm/firestore/index.d.ts +11 -0
- package/dist/esm/firestore/index.js +11 -0
- package/dist/esm/firestore/index.js.map +1 -0
- package/dist/esm/firestore/manifest-reader.d.ts +87 -0
- package/dist/esm/firestore/manifest-reader.js +294 -0
- package/dist/esm/firestore/manifest-reader.js.map +1 -0
- package/dist/esm/firestore/schema.d.ts +504 -0
- package/dist/esm/firestore/schema.js +69 -0
- package/dist/esm/firestore/schema.js.map +1 -0
- package/dist/esm/live-update/delta-processor.d.ts +94 -0
- package/dist/esm/live-update/delta-processor.js +212 -0
- package/dist/esm/live-update/delta-processor.js.map +1 -0
- package/dist/esm/live-update/rollout-checker.d.ts +86 -0
- package/dist/esm/live-update/rollout-checker.js +305 -0
- package/dist/esm/live-update/rollout-checker.js.map +1 -0
- package/dist/esm/live-update/version-manager.d.ts +12 -0
- package/dist/esm/live-update/version-manager.js +67 -0
- package/dist/esm/live-update/version-manager.js.map +1 -1
- package/dist/plugin.cjs.js +1 -1
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.esm.js +1 -1
- package/dist/plugin.esm.js.map +1 -1
- package/dist/plugin.js +1 -1
- package/dist/plugin.js.map +1 -1
- package/docs/QUICK_START.md +3 -3
- package/docs/README.md +4 -4
- package/docs/api/API.md +4 -3
- package/docs/getting-started/installation.md +2 -2
- package/docs/play-console-rejection-rules.json +428 -0
- package/package.json +20 -18
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore-client.js","sourceRoot":"","sources":["../../../src/firestore/firestore-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Firestore Module
|
|
3
|
+
*
|
|
4
|
+
* Provides Firestore-based update checking for the native-update plugin.
|
|
5
|
+
* Uses Google's Firebase Firestore free tier for storing update manifests.
|
|
6
|
+
*/
|
|
7
|
+
export type { FirestoreTimestamp, ManifestDocument, ManifestCurrentVersion, ManifestDelta, ManifestPreviousVersion, RolloutConfig, RolloutTargetSegments, RolloutSchedule, AppDocument, ChannelConfig, BuildDocument, FileManifestEntry, DeltaDocument, AnalyticsBatchDocument, ErrorSample, DeviceInfo, UpdateCheckResponse, FirestoreConfig, } from './schema';
|
|
8
|
+
export { COLLECTIONS, getManifestId, getDeltaId, isValidVersion, isValidChecksum, timestampToDate, dateToTimestamp, } from './schema';
|
|
9
|
+
export { FirestoreClient, FirestoreError, FirestoreErrorCode, } from './firestore-client';
|
|
10
|
+
export type { ManifestReaderOptions } from './manifest-reader';
|
|
11
|
+
export { ManifestReader, createManifestReader } from './manifest-reader';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Firestore Module
|
|
3
|
+
*
|
|
4
|
+
* Provides Firestore-based update checking for the native-update plugin.
|
|
5
|
+
* Uses Google's Firebase Firestore free tier for storing update manifests.
|
|
6
|
+
*/
|
|
7
|
+
export { COLLECTIONS, getManifestId, getDeltaId, isValidVersion, isValidChecksum, timestampToDate, dateToTimestamp, } from './schema';
|
|
8
|
+
// Firestore client
|
|
9
|
+
export { FirestoreClient, FirestoreError, FirestoreErrorCode, } from './firestore-client';
|
|
10
|
+
export { ManifestReader, createManifestReader } from './manifest-reader';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/firestore/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwBH,OAAO,EACL,WAAW,EACX,aAAa,EACb,UAAU,EACV,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,UAAU,CAAC;AAElB,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest Reader
|
|
3
|
+
*
|
|
4
|
+
* High-level interface for reading update manifests from Firestore
|
|
5
|
+
* with rollout eligibility checking and delta update support.
|
|
6
|
+
*/
|
|
7
|
+
import type { ManifestDocument, DeviceInfo, UpdateCheckResponse, RolloutConfig } from './schema';
|
|
8
|
+
import { FirestoreClient } from './firestore-client';
|
|
9
|
+
/**
|
|
10
|
+
* Manifest reader options
|
|
11
|
+
*/
|
|
12
|
+
export interface ManifestReaderOptions {
|
|
13
|
+
/** Current app version for comparison */
|
|
14
|
+
currentVersion: string;
|
|
15
|
+
/** Device information for rollout eligibility */
|
|
16
|
+
deviceInfo: DeviceInfo;
|
|
17
|
+
/** Whether to check delta availability */
|
|
18
|
+
checkDeltas?: boolean;
|
|
19
|
+
/** Force refresh (bypass cache) */
|
|
20
|
+
forceRefresh?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Manifest Reader class
|
|
24
|
+
*/
|
|
25
|
+
export declare class ManifestReader {
|
|
26
|
+
private readonly firestoreClient;
|
|
27
|
+
private readonly logger;
|
|
28
|
+
constructor(firestoreClient: FirestoreClient);
|
|
29
|
+
/**
|
|
30
|
+
* Check for updates
|
|
31
|
+
*/
|
|
32
|
+
checkForUpdates(options: ManifestReaderOptions): Promise<UpdateCheckResponse>;
|
|
33
|
+
/**
|
|
34
|
+
* Check rollout eligibility for a device
|
|
35
|
+
*/
|
|
36
|
+
checkRolloutEligibility(rollout: RolloutConfig, deviceInfo: DeviceInfo): Promise<{
|
|
37
|
+
eligible: boolean;
|
|
38
|
+
reason: string;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Check target segments eligibility
|
|
42
|
+
*/
|
|
43
|
+
private checkSegments;
|
|
44
|
+
/**
|
|
45
|
+
* Calculate current percentage for gradual rollout
|
|
46
|
+
*/
|
|
47
|
+
private calculateGradualPercentage;
|
|
48
|
+
/**
|
|
49
|
+
* Get deterministic percentile for a device ID
|
|
50
|
+
* Uses SHA-256 hash for uniform distribution
|
|
51
|
+
*/
|
|
52
|
+
private getDevicePercentile;
|
|
53
|
+
/**
|
|
54
|
+
* Hash a string using SHA-256
|
|
55
|
+
*/
|
|
56
|
+
private hashString;
|
|
57
|
+
/**
|
|
58
|
+
* Convert hash to percentile (0-100)
|
|
59
|
+
* Takes first 8 hex chars and maps to percentage
|
|
60
|
+
*/
|
|
61
|
+
private hashToPercentile;
|
|
62
|
+
/**
|
|
63
|
+
* Compare two semantic versions
|
|
64
|
+
* Returns: -1 if v1 < v2, 0 if equal, 1 if v1 > v2
|
|
65
|
+
*/
|
|
66
|
+
private compareVersions;
|
|
67
|
+
/**
|
|
68
|
+
* Check if v2 is newer than v1
|
|
69
|
+
*/
|
|
70
|
+
private isNewerVersion;
|
|
71
|
+
/**
|
|
72
|
+
* Get raw manifest document
|
|
73
|
+
*/
|
|
74
|
+
getManifest(): Promise<ManifestDocument | null>;
|
|
75
|
+
/**
|
|
76
|
+
* Get manifest for specific app and channel
|
|
77
|
+
*/
|
|
78
|
+
getManifestFor(appId: string, channel: string): Promise<ManifestDocument | null>;
|
|
79
|
+
/**
|
|
80
|
+
* Clear cache
|
|
81
|
+
*/
|
|
82
|
+
clearCache(): void;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create ManifestReader instance
|
|
86
|
+
*/
|
|
87
|
+
export declare function createManifestReader(firestoreClient: FirestoreClient): ManifestReader;
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest Reader
|
|
3
|
+
*
|
|
4
|
+
* High-level interface for reading update manifests from Firestore
|
|
5
|
+
* with rollout eligibility checking and delta update support.
|
|
6
|
+
*/
|
|
7
|
+
import { timestampToDate } from './schema';
|
|
8
|
+
import { Logger } from '../core/logger';
|
|
9
|
+
/**
|
|
10
|
+
* Manifest Reader class
|
|
11
|
+
*/
|
|
12
|
+
export class ManifestReader {
|
|
13
|
+
constructor(firestoreClient) {
|
|
14
|
+
this.firestoreClient = firestoreClient;
|
|
15
|
+
this.logger = Logger.getInstance();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check for updates
|
|
19
|
+
*/
|
|
20
|
+
async checkForUpdates(options) {
|
|
21
|
+
const { currentVersion, deviceInfo, checkDeltas = true } = options;
|
|
22
|
+
try {
|
|
23
|
+
// Clear cache if forced refresh
|
|
24
|
+
if (options.forceRefresh) {
|
|
25
|
+
this.firestoreClient.clearCache();
|
|
26
|
+
}
|
|
27
|
+
// Get manifest from Firestore
|
|
28
|
+
const manifest = await this.firestoreClient.getManifest();
|
|
29
|
+
if (!manifest) {
|
|
30
|
+
this.logger.debug('No manifest found');
|
|
31
|
+
return { updateAvailable: false };
|
|
32
|
+
}
|
|
33
|
+
// Check if update is available
|
|
34
|
+
const updateAvailable = this.isNewerVersion(currentVersion, manifest.current.version);
|
|
35
|
+
if (!updateAvailable) {
|
|
36
|
+
return {
|
|
37
|
+
updateAvailable: false,
|
|
38
|
+
version: manifest.current.version,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Check rollout eligibility
|
|
42
|
+
const rolloutCheck = await this.checkRolloutEligibility(manifest.rollout, deviceInfo);
|
|
43
|
+
if (!rolloutCheck.eligible) {
|
|
44
|
+
return {
|
|
45
|
+
updateAvailable: true,
|
|
46
|
+
version: manifest.current.version,
|
|
47
|
+
rolloutEligible: false,
|
|
48
|
+
rolloutReason: rolloutCheck.reason,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// Build response
|
|
52
|
+
const response = {
|
|
53
|
+
updateAvailable: true,
|
|
54
|
+
version: manifest.current.version,
|
|
55
|
+
bundleUrl: manifest.current.bundleUrl,
|
|
56
|
+
minNativeVersion: manifest.current.minNativeVersion,
|
|
57
|
+
releaseNotes: manifest.current.releaseNotes,
|
|
58
|
+
signature: manifest.current.signature,
|
|
59
|
+
checksum: manifest.current.checksum,
|
|
60
|
+
mandatory: manifest.current.mandatory,
|
|
61
|
+
size: manifest.current.size,
|
|
62
|
+
rolloutEligible: true,
|
|
63
|
+
};
|
|
64
|
+
// Check for delta availability
|
|
65
|
+
if (checkDeltas && manifest.deltas) {
|
|
66
|
+
const delta = manifest.deltas[currentVersion];
|
|
67
|
+
if (delta) {
|
|
68
|
+
response.delta = {
|
|
69
|
+
available: true,
|
|
70
|
+
patchUrl: delta.patchUrl,
|
|
71
|
+
patchSize: delta.patchSize,
|
|
72
|
+
patchChecksum: delta.patchChecksum,
|
|
73
|
+
targetChecksum: delta.targetChecksum,
|
|
74
|
+
};
|
|
75
|
+
this.logger.debug('Delta update available', {
|
|
76
|
+
from: currentVersion,
|
|
77
|
+
to: manifest.current.version,
|
|
78
|
+
patchSize: delta.patchSize,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
response.delta = { available: false };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return response;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this.logger.error('Error checking for updates', error);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check rollout eligibility for a device
|
|
94
|
+
*/
|
|
95
|
+
async checkRolloutEligibility(rollout, deviceInfo) {
|
|
96
|
+
var _a, _b;
|
|
97
|
+
// Check if rollout is enabled
|
|
98
|
+
if (!rollout.enabled) {
|
|
99
|
+
return { eligible: true, reason: 'Rollout not enabled, all devices eligible' };
|
|
100
|
+
}
|
|
101
|
+
// Check time window
|
|
102
|
+
const now = Date.now();
|
|
103
|
+
const startTime = timestampToDate(rollout.startTime).getTime();
|
|
104
|
+
if (now < startTime) {
|
|
105
|
+
return { eligible: false, reason: 'Rollout not started yet' };
|
|
106
|
+
}
|
|
107
|
+
if (rollout.endTime) {
|
|
108
|
+
const endTime = timestampToDate(rollout.endTime).getTime();
|
|
109
|
+
if (now > endTime) {
|
|
110
|
+
return { eligible: false, reason: 'Rollout ended' };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Check scheduled rollout
|
|
114
|
+
if (((_a = rollout.schedule) === null || _a === void 0 ? void 0 : _a.type) === 'scheduled' && rollout.schedule.scheduledTime) {
|
|
115
|
+
const scheduledTime = timestampToDate(rollout.schedule.scheduledTime).getTime();
|
|
116
|
+
if (now < scheduledTime) {
|
|
117
|
+
return { eligible: false, reason: 'Scheduled for later' };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Check target segments
|
|
121
|
+
if (rollout.targetSegments) {
|
|
122
|
+
const segmentCheck = this.checkSegments(rollout.targetSegments, deviceInfo);
|
|
123
|
+
if (!segmentCheck.eligible) {
|
|
124
|
+
return segmentCheck;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Calculate current rollout percentage
|
|
128
|
+
let currentPercentage = rollout.percentage;
|
|
129
|
+
if (((_b = rollout.schedule) === null || _b === void 0 ? void 0 : _b.type) === 'gradual') {
|
|
130
|
+
currentPercentage = this.calculateGradualPercentage(rollout);
|
|
131
|
+
}
|
|
132
|
+
// Check percentage-based eligibility using deterministic hashing
|
|
133
|
+
const devicePercentile = await this.getDevicePercentile(deviceInfo.deviceId);
|
|
134
|
+
if (devicePercentile > currentPercentage) {
|
|
135
|
+
return {
|
|
136
|
+
eligible: false,
|
|
137
|
+
reason: `Device percentile ${devicePercentile.toFixed(1)}% > rollout ${currentPercentage}%`,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return { eligible: true, reason: 'All checks passed' };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check target segments eligibility
|
|
144
|
+
*/
|
|
145
|
+
checkSegments(segments, deviceInfo) {
|
|
146
|
+
// Platform check
|
|
147
|
+
if (segments.platforms && segments.platforms.length > 0) {
|
|
148
|
+
if (!segments.platforms.includes(deviceInfo.platform)) {
|
|
149
|
+
return {
|
|
150
|
+
eligible: false,
|
|
151
|
+
reason: `Platform ${deviceInfo.platform} not targeted`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// App version checks
|
|
156
|
+
if (segments.minAppVersion) {
|
|
157
|
+
if (this.compareVersions(deviceInfo.appVersion, segments.minAppVersion) < 0) {
|
|
158
|
+
return {
|
|
159
|
+
eligible: false,
|
|
160
|
+
reason: `App version below minimum ${segments.minAppVersion}`,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (segments.maxAppVersion) {
|
|
165
|
+
if (this.compareVersions(deviceInfo.appVersion, segments.maxAppVersion) > 0) {
|
|
166
|
+
return {
|
|
167
|
+
eligible: false,
|
|
168
|
+
reason: `App version above maximum ${segments.maxAppVersion}`,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Device ID whitelist
|
|
173
|
+
if (segments.deviceIds && segments.deviceIds.length > 0) {
|
|
174
|
+
if (!segments.deviceIds.includes(deviceInfo.deviceId)) {
|
|
175
|
+
return { eligible: false, reason: 'Device not in whitelist' };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Region check
|
|
179
|
+
if (segments.regions && segments.regions.length > 0) {
|
|
180
|
+
if (!deviceInfo.region || !segments.regions.includes(deviceInfo.region)) {
|
|
181
|
+
return {
|
|
182
|
+
eligible: false,
|
|
183
|
+
reason: `Region ${deviceInfo.region || 'unknown'} not targeted`,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return { eligible: true, reason: 'Segment checks passed' };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Calculate current percentage for gradual rollout
|
|
191
|
+
*/
|
|
192
|
+
calculateGradualPercentage(rollout) {
|
|
193
|
+
var _a, _b;
|
|
194
|
+
if (!((_a = rollout.schedule) === null || _a === void 0 ? void 0 : _a.gradualSteps) || !((_b = rollout.schedule) === null || _b === void 0 ? void 0 : _b.gradualInterval)) {
|
|
195
|
+
return rollout.percentage;
|
|
196
|
+
}
|
|
197
|
+
const startTime = timestampToDate(rollout.startTime).getTime();
|
|
198
|
+
const elapsedHours = (Date.now() - startTime) / (1000 * 60 * 60);
|
|
199
|
+
const intervalHours = rollout.schedule.gradualInterval;
|
|
200
|
+
const stepIndex = Math.floor(elapsedHours / intervalHours);
|
|
201
|
+
const steps = rollout.schedule.gradualSteps;
|
|
202
|
+
if (stepIndex >= steps.length) {
|
|
203
|
+
return steps[steps.length - 1];
|
|
204
|
+
}
|
|
205
|
+
return steps[stepIndex];
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get deterministic percentile for a device ID
|
|
209
|
+
* Uses SHA-256 hash for uniform distribution
|
|
210
|
+
*/
|
|
211
|
+
async getDevicePercentile(deviceId) {
|
|
212
|
+
const hash = await this.hashString(deviceId);
|
|
213
|
+
return this.hashToPercentile(hash);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Hash a string using SHA-256
|
|
217
|
+
*/
|
|
218
|
+
async hashString(input) {
|
|
219
|
+
const encoder = new TextEncoder();
|
|
220
|
+
const data = encoder.encode(input);
|
|
221
|
+
// Use Web Crypto API
|
|
222
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
|
|
223
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
224
|
+
return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Convert hash to percentile (0-100)
|
|
228
|
+
* Takes first 8 hex chars and maps to percentage
|
|
229
|
+
*/
|
|
230
|
+
hashToPercentile(hash) {
|
|
231
|
+
const hashInt = parseInt(hash.substring(0, 8), 16);
|
|
232
|
+
const maxInt = parseInt('ffffffff', 16);
|
|
233
|
+
return (hashInt / maxInt) * 100;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Compare two semantic versions
|
|
237
|
+
* Returns: -1 if v1 < v2, 0 if equal, 1 if v1 > v2
|
|
238
|
+
*/
|
|
239
|
+
compareVersions(v1, v2) {
|
|
240
|
+
// Remove pre-release suffix for comparison
|
|
241
|
+
const cleanV1 = v1.split('-')[0];
|
|
242
|
+
const cleanV2 = v2.split('-')[0];
|
|
243
|
+
const parts1 = cleanV1.split('.').map(Number);
|
|
244
|
+
const parts2 = cleanV2.split('.').map(Number);
|
|
245
|
+
for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
|
|
246
|
+
const p1 = parts1[i] || 0;
|
|
247
|
+
const p2 = parts2[i] || 0;
|
|
248
|
+
if (p1 > p2)
|
|
249
|
+
return 1;
|
|
250
|
+
if (p1 < p2)
|
|
251
|
+
return -1;
|
|
252
|
+
}
|
|
253
|
+
// If versions are equal, check pre-release
|
|
254
|
+
// Pre-release versions are lower than release versions
|
|
255
|
+
const hasPreV1 = v1.includes('-');
|
|
256
|
+
const hasPreV2 = v2.includes('-');
|
|
257
|
+
if (hasPreV1 && !hasPreV2)
|
|
258
|
+
return -1;
|
|
259
|
+
if (!hasPreV1 && hasPreV2)
|
|
260
|
+
return 1;
|
|
261
|
+
return 0;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Check if v2 is newer than v1
|
|
265
|
+
*/
|
|
266
|
+
isNewerVersion(v1, v2) {
|
|
267
|
+
return this.compareVersions(v1, v2) < 0;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Get raw manifest document
|
|
271
|
+
*/
|
|
272
|
+
async getManifest() {
|
|
273
|
+
return this.firestoreClient.getManifest();
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get manifest for specific app and channel
|
|
277
|
+
*/
|
|
278
|
+
async getManifestFor(appId, channel) {
|
|
279
|
+
return this.firestoreClient.getManifestFor(appId, channel);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Clear cache
|
|
283
|
+
*/
|
|
284
|
+
clearCache() {
|
|
285
|
+
this.firestoreClient.clearCache();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Create ManifestReader instance
|
|
290
|
+
*/
|
|
291
|
+
export function createManifestReader(firestoreClient) {
|
|
292
|
+
return new ManifestReader(firestoreClient);
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=manifest-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-reader.js","sourceRoot":"","sources":["../../../src/firestore/manifest-reader.ts"],"names":[],"mappings":"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"}
|