Skip to content
This repository was archived by the owner on Feb 10, 2023. It is now read-only.

Commit 5c821a8

Browse files
committed
feat(extract-url): Finalize URL extraction
1 parent e3c6ade commit 5c821a8

File tree

2 files changed

+62
-12
lines changed

2 files changed

+62
-12
lines changed

spec/urlhandler.common.spec.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import {
2+
extractAppURL
3+
} from '../urlhandler.common';
4+
5+
6+
describe('extractAppURL', function () {
7+
it('should handle empty url', function () {
8+
let url = null;
9+
let result = extractAppURL(url);
10+
expect(result).toBeNull();
11+
});
12+
it('should handle empty path and param', function () {
13+
let url = 'app://';
14+
let result = extractAppURL(url);
15+
expect(result.path).toBeNull();
16+
expect(result.params.size).toBe(0);
17+
});
18+
it('should split url into path only', function () {
19+
let url = 'app://config';
20+
let result = extractAppURL(url);
21+
expect(result.path).toBe('config');
22+
expect(result.params.size).toBe(0);
23+
});
24+
it('should split url into path and param', function () {
25+
let url = 'app://config?dev=true';
26+
let result = extractAppURL(url);
27+
expect(result.path).toBe('config');
28+
expect(result.params.get('dev')).toBe('true');
29+
});
30+
it('should split url into path and two params', function () {
31+
let url = 'app://config?dev=true&test=abc';
32+
let result = extractAppURL(url);
33+
expect(result.path).toBe('config');
34+
expect(result.params.get('dev')).toBe('true');
35+
expect(result.params.get('test')).toBe('abc');
36+
});
37+
});

urlhandler.common.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,33 @@
11
import { AppURL, UrlHandlerCallback } from './urlhandler';
22
var URL_HANDLER_CB: UrlHandlerCallback;
33

4+
/**
5+
* Extract url string param to a nice object
6+
* @param urlParam to parse
7+
* @returns AppURL object or null if invalid was used
8+
*/
49
export function extractAppURL(urlParam: any): AppURL {
5-
let url = <String>urlParam,
6-
params = new Map<String, String>(),
7-
path = url.substring(url.indexOf('//') + 2, url.indexOf('?')),
8-
parameters = url.substring(url.indexOf('?') + 1).split('&');
9-
// create JSON object
10-
for (let i = 0, len = parameters.length; i < len; i++) {
11-
let paramData = params[i].split('=');
12-
params.set(paramData[0], paramData[1] ? paramData[1] : null);
10+
if (!!urlParam) {
11+
let url = urlParam.toString(),
12+
params = new Map<String, String>(),
13+
urlWithPath = url.indexOf('//') < url.length - 2,
14+
urlWithParams = url.indexOf('?') !== -1,
15+
path = urlWithPath ? url.substring(url.indexOf('//') + 2, urlWithParams ? url.indexOf('?') : url.length) : null,
16+
parameters = url.substring(url.indexOf('?') + 1).split('&');
17+
// create JSON object
18+
if (urlWithParams) {
19+
for (let i = 0, len = parameters.length; i < len; i++) {
20+
let paramData = parameters[i].split('=');
21+
params.set(paramData[0], paramData[1] ? paramData[1] : null);
22+
}
23+
}
24+
return {
25+
params: params,
26+
path: path
27+
};
28+
} else {
29+
return null;
1330
}
14-
return {
15-
params: params,
16-
path: path
17-
};
1831
}
1932

2033
export function handleOpenURL(handler: UrlHandlerCallback): void {

0 commit comments

Comments
 (0)