@gitpod/gitpod-protocol 0.1.5-se-init.1 → 0.1.5-se-workspaceid.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/lib/util/generate-workspace-id.d.ts +1 -1
- package/lib/util/generate-workspace-id.d.ts.map +1 -1
- package/lib/util/generate-workspace-id.js +18 -2
- package/lib/util/generate-workspace-id.js.map +1 -1
- package/lib/util/generate-workspace-id.spec.js +23 -0
- package/lib/util/generate-workspace-id.spec.js.map +1 -1
- package/lib/util/gitpod-host-url.js +3 -3
- package/package.json +1 -1
- package/pkg-yarn.lock +1 -1
- package/src/util/generate-workspace-id.spec.ts +16 -0
- package/src/util/generate-workspace-id.ts +19 -2
- package/src/util/gitpod-host-url.ts +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function generateWorkspaceID(): Promise<string>;
|
|
1
|
+
export declare function generateWorkspaceID(firstSegment?: string, secondSegment?: string): Promise<string>;
|
|
2
2
|
export declare const colors: string[];
|
|
3
3
|
export declare const animals: string[];
|
|
4
4
|
//# sourceMappingURL=generate-workspace-id.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-workspace-id.d.ts","sourceRoot":"","sources":["../../src/util/generate-workspace-id.ts"],"names":[],"mappings":"AAOA,wBAAsB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"generate-workspace-id.d.ts","sourceRoot":"","sources":["../../src/util/generate-workspace-id.ts"],"names":[],"mappings":"AAOA,wBAAsB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxG;AA2BD,eAAO,MAAM,MAAM,UAsDhB,CAAC;AAEF,eAAO,MAAM,OAAO,UA2XnB,CAAA"}
|
|
@@ -16,12 +16,28 @@ exports.animals = exports.colors = exports.generateWorkspaceID = void 0;
|
|
|
16
16
|
* See License-AGPL.txt in the project root for license information.
|
|
17
17
|
*/
|
|
18
18
|
const randomNumber = require("random-number-csprng");
|
|
19
|
-
function generateWorkspaceID() {
|
|
19
|
+
function generateWorkspaceID(firstSegment, secondSegment) {
|
|
20
20
|
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
-
|
|
21
|
+
const firstSeg = clean(firstSegment) || (yield random(exports.colors));
|
|
22
|
+
const secSeg = clean(secondSegment, Math.min(16, 24 - firstSeg.length)) || (yield random(exports.animals));
|
|
23
|
+
return firstSeg + '-' + secSeg + '-' + (yield random(characters, 8));
|
|
22
24
|
});
|
|
23
25
|
}
|
|
24
26
|
exports.generateWorkspaceID = generateWorkspaceID;
|
|
27
|
+
function clean(segment, maxChars = 16) {
|
|
28
|
+
if (segment) {
|
|
29
|
+
let result = '';
|
|
30
|
+
for (let i = 0; i < segment.length; i++) {
|
|
31
|
+
if (characters.indexOf(segment[i]) !== -1) {
|
|
32
|
+
result += segment[i];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (result.length >= 2) {
|
|
36
|
+
return result.substring(0, maxChars);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
25
41
|
function random(array, length = 1) {
|
|
26
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
27
43
|
var result = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-workspace-id.js","sourceRoot":"","sources":["../../src/util/generate-workspace-id.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;GAIG;AACH,qDAAsD;AAEtD,SAAsB,mBAAmB;;
|
|
1
|
+
{"version":3,"file":"generate-workspace-id.js","sourceRoot":"","sources":["../../src/util/generate-workspace-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,23 @@ let TestGenerateWorkspaceId = class TestGenerateWorkspaceId {
|
|
|
43
43
|
const longestName = `${longestColor}-${longestAnimal}-12345678`;
|
|
44
44
|
expect(longestName.length <= 36, `"${longestName}" is longer than 36 chars (${longestName.length})`).to.be.true;
|
|
45
45
|
}
|
|
46
|
+
testCustomName() {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const data = [
|
|
49
|
+
['foo', 'bar', 'foo-bar-'],
|
|
50
|
+
['f', 'bar', '.{2,16}-bar-'],
|
|
51
|
+
['gitpod-io', 'gitpod', 'gitpodio-gitpod-'],
|
|
52
|
+
['this is rather long and has some "§$"% special chars', 'also here pretty long and needs abbreviation', 'thisisratherlong-alsohere-'],
|
|
53
|
+
['breatheco-de', 'python-flask-api-tutorial', 'breathecode-pythonflaskap-'],
|
|
54
|
+
];
|
|
55
|
+
for (const d of data) {
|
|
56
|
+
const id = yield (0, generate_workspace_id_1.generateWorkspaceID)(d[0], d[1]);
|
|
57
|
+
expect(id).match(new RegExp("^" + d[2]));
|
|
58
|
+
expect(new gitpod_host_url_1.GitpodHostUrl().withWorkspacePrefix(id, "eu").workspaceId).to.equal(id);
|
|
59
|
+
expect(id.length <= 36, `"${id}" is longer than 36 chars (${id.length})`).to.be.true;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
46
63
|
};
|
|
47
64
|
__decorate([
|
|
48
65
|
mocha_typescript_1.test,
|
|
@@ -56,6 +73,12 @@ __decorate([
|
|
|
56
73
|
__metadata("design:paramtypes", []),
|
|
57
74
|
__metadata("design:returntype", void 0)
|
|
58
75
|
], TestGenerateWorkspaceId.prototype, "testLongestName", null);
|
|
76
|
+
__decorate([
|
|
77
|
+
mocha_typescript_1.test,
|
|
78
|
+
__metadata("design:type", Function),
|
|
79
|
+
__metadata("design:paramtypes", []),
|
|
80
|
+
__metadata("design:returntype", Promise)
|
|
81
|
+
], TestGenerateWorkspaceId.prototype, "testCustomName", null);
|
|
59
82
|
TestGenerateWorkspaceId = __decorate([
|
|
60
83
|
mocha_typescript_1.suite
|
|
61
84
|
], TestGenerateWorkspaceId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-workspace-id.spec.js","sourceRoot":"","sources":["../../src/util/generate-workspace-id.spec.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;AAEH,uDAA8C;AAC9C,6BAA4B;AAC5B,mEAA+E;AAC/E,uDAAkD;AAElD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;AAEnB,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAEb,uBAAuB;;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,EAAE,GAAG,MAAM,IAAA,2CAAmB,GAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,+BAAa,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACtF;QACL,CAAC;KAAA;IAEY,eAAe;QACxB,MAAM,YAAY,GAAG,8BAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,aAAa,GAAG,+BAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,GAAG,YAAY,IAAI,aAAa,WAAW,CAAC;QAChE,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,WAAW,8BAA8B,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACpH,CAAC;CAEJ,CAAA;
|
|
1
|
+
{"version":3,"file":"generate-workspace-id.spec.js","sourceRoot":"","sources":["../../src/util/generate-workspace-id.spec.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;AAEH,uDAA8C;AAC9C,6BAA4B;AAC5B,mEAA+E;AAC/E,uDAAkD;AAElD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;AAEnB,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAEb,uBAAuB;;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,EAAE,GAAG,MAAM,IAAA,2CAAmB,GAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,+BAAa,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACtF;QACL,CAAC;KAAA;IAEY,eAAe;QACxB,MAAM,YAAY,GAAG,8BAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,aAAa,GAAG,+BAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,GAAG,YAAY,IAAI,aAAa,WAAW,CAAC;QAChE,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,WAAW,8BAA8B,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACpH,CAAC;IAEkB,cAAc;;YAC7B,MAAM,IAAI,GAAG;gBACT,CAAC,KAAK,EAAC,KAAK,EAAC,UAAU,CAAC;gBACxB,CAAC,GAAG,EAAC,KAAK,EAAC,cAAc,CAAC;gBAC1B,CAAC,WAAW,EAAC,QAAQ,EAAC,kBAAkB,CAAC;gBACzC,CAAC,sDAAsD,EAAC,8CAA8C,EAAC,4BAA4B,CAAC;gBACpI,CAAC,cAAc,EAAE,2BAA2B,EAAE,4BAA4B,CAAC;aAC9E,CAAA;YACD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBAClB,MAAM,EAAE,GAAG,MAAM,IAAA,2CAAmB,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjD,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,+BAAa,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnF,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;aACxF;QACL,CAAC;KAAA;CAEJ,CAAA;AA9BS;IAAL,uBAAI;;;;sEAKJ;AAEK;IAAL,uBAAI;;;;8DAKJ;AAEK;IAAL,uBAAI;;;;6DAcJ;AA9BQ,uBAAuB;IAAnC,wBAAK;GAAO,uBAAuB,CAgCnC;AACD,MAAM,CAAC,OAAO,GAAG,IAAI,uBAAuB,EAAE,CAAA"}
|
|
@@ -8,11 +8,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
8
8
|
exports.GitpodHostUrl = void 0;
|
|
9
9
|
const URL = require('url').URL || window.URL;
|
|
10
10
|
const logging_1 = require("./logging");
|
|
11
|
-
const
|
|
11
|
+
const baseWorkspaceIDRegex = "(([a-f][0-9a-f]{7}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})|([0-9a-z]{2,16}-[0-9a-z]{2,16}-[0-9a-z]{8}))";
|
|
12
12
|
// this pattern matches v4 UUIDs as well as the new generated workspace ids (e.g. pink-panda-ns35kd21)
|
|
13
|
-
const workspaceIDRegex = RegExp(`^${
|
|
13
|
+
const workspaceIDRegex = RegExp(`^${baseWorkspaceIDRegex}$`);
|
|
14
14
|
// this pattern matches URL prefixes of workspaces
|
|
15
|
-
const workspaceUrlPrefixRegex = RegExp(`^([0-9]{4,6}-)?${
|
|
15
|
+
const workspaceUrlPrefixRegex = RegExp(`^([0-9]{4,6}-)?${baseWorkspaceIDRegex}\\.`);
|
|
16
16
|
class GitpodHostUrl {
|
|
17
17
|
constructor(urlParam) {
|
|
18
18
|
if (urlParam === undefined || typeof urlParam === 'string') {
|
package/package.json
CHANGED
package/pkg-yarn.lock
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
"@gitpod/gitpod-protocol@0.1.5":
|
|
6
6
|
version "0.1.5"
|
|
7
|
-
resolved "file:///tmp/cache/
|
|
7
|
+
resolved "file:///tmp/cache/8c97806dc6e23eb022ee6fdacfc714f413a0422f.tar.gz"
|
|
8
8
|
dependencies:
|
|
9
9
|
"@types/react" "17.0.32"
|
|
10
10
|
ajv "^6.5.4"
|
|
@@ -27,5 +27,21 @@ const expect = chai.expect
|
|
|
27
27
|
expect(longestName.length <= 36, `"${longestName}" is longer than 36 chars (${longestName.length})`).to.be.true;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
@test public async testCustomName() {
|
|
31
|
+
const data = [
|
|
32
|
+
['foo','bar','foo-bar-'],
|
|
33
|
+
['f','bar','.{2,16}-bar-'],
|
|
34
|
+
['gitpod-io','gitpod','gitpodio-gitpod-'],
|
|
35
|
+
['this is rather long and has some "§$"% special chars','also here pretty long and needs abbreviation','thisisratherlong-alsohere-'],
|
|
36
|
+
['breatheco-de', 'python-flask-api-tutorial', 'breathecode-pythonflaskap-'],
|
|
37
|
+
]
|
|
38
|
+
for (const d of data) {
|
|
39
|
+
const id = await generateWorkspaceID(d[0], d[1]);
|
|
40
|
+
expect(id).match(new RegExp("^"+d[2]));
|
|
41
|
+
expect(new GitpodHostUrl().withWorkspacePrefix(id, "eu").workspaceId).to.equal(id);
|
|
42
|
+
expect(id.length <= 36, `"${id}" is longer than 36 chars (${id.length})`).to.be.true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
30
46
|
}
|
|
31
47
|
module.exports = new TestGenerateWorkspaceId()
|
|
@@ -5,8 +5,25 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import randomNumber = require("random-number-csprng");
|
|
7
7
|
|
|
8
|
-
export async function generateWorkspaceID(): Promise<string> {
|
|
9
|
-
|
|
8
|
+
export async function generateWorkspaceID(firstSegment?: string, secondSegment?: string): Promise<string> {
|
|
9
|
+
const firstSeg = clean(firstSegment) || await random(colors);
|
|
10
|
+
const secSeg = clean(secondSegment, Math.min(16, 24-firstSeg.length)) || await random(animals);
|
|
11
|
+
return firstSeg+'-'+secSeg+'-'+(await random(characters, 8));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function clean(segment: string | undefined, maxChars: number = 16) {
|
|
15
|
+
if (segment) {
|
|
16
|
+
let result = '';
|
|
17
|
+
for (let i =0; i < segment.length; i++) {
|
|
18
|
+
if (characters.indexOf(segment[i]) !== -1) {
|
|
19
|
+
result += segment[i];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (result.length >= 2) {
|
|
23
|
+
return result.substring(0, maxChars);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
10
27
|
}
|
|
11
28
|
|
|
12
29
|
async function random(array: string[], length: number = 1): Promise<string> {
|
|
@@ -12,13 +12,13 @@ export interface UrlChange {
|
|
|
12
12
|
}
|
|
13
13
|
export type UrlUpdate = UrlChange | Partial<URL>;
|
|
14
14
|
|
|
15
|
-
const
|
|
15
|
+
const baseWorkspaceIDRegex = "(([a-f][0-9a-f]{7}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})|([0-9a-z]{2,16}-[0-9a-z]{2,16}-[0-9a-z]{8}))";
|
|
16
16
|
|
|
17
17
|
// this pattern matches v4 UUIDs as well as the new generated workspace ids (e.g. pink-panda-ns35kd21)
|
|
18
|
-
const workspaceIDRegex = RegExp(`^${
|
|
18
|
+
const workspaceIDRegex = RegExp(`^${baseWorkspaceIDRegex}$`);
|
|
19
19
|
|
|
20
20
|
// this pattern matches URL prefixes of workspaces
|
|
21
|
-
const workspaceUrlPrefixRegex = RegExp(`^([0-9]{4,6}-)?${
|
|
21
|
+
const workspaceUrlPrefixRegex = RegExp(`^([0-9]{4,6}-)?${baseWorkspaceIDRegex}\\.`);
|
|
22
22
|
|
|
23
23
|
export class GitpodHostUrl {
|
|
24
24
|
readonly url: URL;
|