Skip to content

Commit 2bb4a3a

Browse files
authored
Merge branch 'master' into ssl-support
2 parents 3ed7e4a + 0b81b04 commit 2bb4a3a

File tree

5 files changed

+87
-8
lines changed

5 files changed

+87
-8
lines changed

api/parts/data/usage.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,6 +1117,16 @@ plugins.register("/sdk/user_properties", async function(ob) {
11171117
userProps.av_major = versionComponents.major;
11181118
userProps.av_minor = versionComponents.minor;
11191119
userProps.av_patch = versionComponents.patch;
1120+
userProps.av_prerel = versionComponents.prerelease;
1121+
userProps.av_build = versionComponents.build;
1122+
}
1123+
else {
1124+
log.w("Invalid app version format: %s", params.qstring.metrics._app_version);
1125+
userProps.av_major = null;
1126+
userProps.av_minor = null;
1127+
userProps.av_patch = null;
1128+
userProps.av_rel = null;
1129+
userProps.av_build = null;
11201130
}
11211131
}
11221132
}

api/utils/common.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2069,19 +2069,16 @@ common.parseAppVersion = function(version) {
20692069
version = String(version);
20702070
}
20712071

2072-
// Ensure version has at least one decimal point
2073-
if (version.indexOf('.') === -1) {
2074-
version += '.0';
2075-
}
2076-
2077-
const parsedVersion = semver.valid(semver.coerce(version));
2078-
if (parsedVersion) {
2079-
const versionObj = semver.parse(parsedVersion);
2072+
const isValid = semver.valid(semver.coerce(version, {includePrerelease: true}));
2073+
if (isValid) {
2074+
const versionObj = semver.parse(semver.coerce(version, {includePrerelease: true}));
20802075
if (versionObj) {
20812076
return {
20822077
major: versionObj.major,
20832078
minor: versionObj.minor,
20842079
patch: versionObj.patch,
2080+
prerelease: versionObj.prerelease,
2081+
build: versionObj.build,
20852082
original: version,
20862083
success: true
20872084
};

plugins/crashes/api/api.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,8 @@ plugins.setConfigs("crashes", {
477477
report.app_version_major = versionComponents.major;
478478
report.app_version_minor = versionComponents.minor;
479479
report.app_version_patch = versionComponents.patch;
480+
report.app_version_prerelease = versionComponents.prerelease;
481+
report.app_version_build = versionComponents.build;
480482
}
481483
}
482484

@@ -526,6 +528,8 @@ plugins.setConfigs("crashes", {
526528
{ name: "app_version_major", type: "n" },
527529
{ name: "app_version_minor", type: "n" },
528530
{ name: "app_version_patch", type: "n" },
531+
{ name: "app_version_prerelease", type: "l" },
532+
{ name: "app_version_build", type: "l" },
529533
{ name: "ram_current", type: "n" },
530534
{ name: "ram_total", type: "n" },
531535
{ name: "disk_current", type: "n" },

test/unit-tests/api.utils.common.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,4 +317,70 @@ describe("Common API utility functions", function() {
317317

318318
});
319319
});
320+
321+
describe('Parsing app version', () => {
322+
it('should not parse invalid semver', () => {
323+
should.deepEqual(common.parseAppVersion('abcd'), { original: 'abcd', success: false });
324+
});
325+
326+
it('should parse semver into its parts', () => {
327+
should.deepEqual(common.parseAppVersion('1.0.0'), {
328+
major: 1,
329+
minor: 0,
330+
patch: 0,
331+
prerelease: [],
332+
build: [],
333+
original: '1.0.0',
334+
success: true,
335+
});
336+
});
337+
338+
it('should coerce incomplete semver', () => {
339+
should.deepEqual(common.parseAppVersion('1'), {
340+
major: 1,
341+
minor: 0,
342+
patch: 0,
343+
prerelease: [],
344+
build: [],
345+
original: '1',
346+
success: true,
347+
});
348+
});
349+
350+
it('should parse semver prerelease', () => {
351+
should.deepEqual(common.parseAppVersion('1.0.0-prerelease'), {
352+
major: 1,
353+
minor: 0,
354+
patch: 0,
355+
prerelease: ['prerelease'],
356+
build: [],
357+
original: '1.0.0-prerelease',
358+
success: true,
359+
});
360+
});
361+
362+
it('should parse semver build', () => {
363+
should.deepEqual(common.parseAppVersion('1.0.0+build'), {
364+
major: 1,
365+
minor: 0,
366+
patch: 0,
367+
prerelease: [],
368+
build: ['build'],
369+
original: '1.0.0+build',
370+
success: true,
371+
});
372+
});
373+
374+
it('should parse semver prerelease and build', () => {
375+
should.deepEqual(common.parseAppVersion('1.0.0-prerelease+build'), {
376+
major: 1,
377+
minor: 0,
378+
patch: 0,
379+
prerelease: ['prerelease'],
380+
build: ['build'],
381+
original: '1.0.0-prerelease+build',
382+
success: true,
383+
});
384+
});
385+
});
320386
});

types/common.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,8 @@ export interface Common {
708708
major?: number;
709709
minor?: number;
710710
patch?: number;
711+
prerelease?: string|number[];
712+
build?: string|number[];
711713
original: string;
712714
success: boolean;
713715
};

0 commit comments

Comments
 (0)