@lightdash/common 0.1458.0 β 0.1459.0
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.
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const slugs_1 = require("./slugs");
|
|
4
|
+
describe('Slug', () => {
|
|
5
|
+
test('should generate space slugs', async () => {
|
|
6
|
+
expect((0, slugs_1.generateSlug)('my space name')).toEqual('my-space-name');
|
|
7
|
+
expect((0, slugs_1.generateSlug)('my space name')).toEqual('my-space-name');
|
|
8
|
+
expect((0, slugs_1.generateSlug)('a_SPACE_NAME.with!special?chars/and\\slashes')).toEqual('a-space-name-with-special-chars-and-slashes');
|
|
9
|
+
expect((0, slugs_1.generateSlug)('!trim_special_chars!')).toEqual('trim-special-chars');
|
|
10
|
+
});
|
|
11
|
+
test('should generate chart slugs', async () => {
|
|
12
|
+
expect((0, slugs_1.generateSlug)('a CHART_NAME.with!special?chars/and\\slashes')).toEqual('a-chart-name-with-special-chars-and-slashes');
|
|
13
|
+
});
|
|
14
|
+
test('should generate dashboard slugs', async () => {
|
|
15
|
+
expect((0, slugs_1.generateSlug)('my dashboard name')).toEqual('my-dashboard-name');
|
|
16
|
+
expect((0, slugs_1.generateSlug)('a DASHBOARD_NAME.with!special?chars/and\\slashes')).toEqual('a-dashboard-name-with-special-chars-and-slashes');
|
|
17
|
+
});
|
|
18
|
+
test('should handle emojis and special characters properly', () => {
|
|
19
|
+
// Test multiple emojis and special characters
|
|
20
|
+
expect((0, slugs_1.generateSlug)('π Party π Time! π (Special Event)')).toEqual('party-time-special-event');
|
|
21
|
+
// Test emoji at the end
|
|
22
|
+
expect((0, slugs_1.generateSlug)('My Dashboard π')).toEqual('my-dashboard');
|
|
23
|
+
// Ensure backwards compatibility with existing test cases
|
|
24
|
+
expect((0, slugs_1.generateSlug)('my dashboard name')).toEqual('my-dashboard-name');
|
|
25
|
+
expect((0, slugs_1.generateSlug)('!special.chars!')).toEqual('special-chars');
|
|
26
|
+
// Test Unicode emojis
|
|
27
|
+
expect((0, slugs_1.generateSlug)('π Analytics Dashboard π¨βπ»')).toEqual('analytics-dashboard');
|
|
28
|
+
// Handle japanese characters
|
|
29
|
+
expect((0, slugs_1.generateSlug)('Lightdashγ©γ€γγγγ·γ₯')).toEqual('lightdash');
|
|
30
|
+
// Return short slug (but not empty) if all characters are special
|
|
31
|
+
expect((0, slugs_1.generateSlug)('LDγ©γ€γγγγ·γ₯')).toEqual('ld');
|
|
32
|
+
expect((0, slugs_1.generateSlug)('!"Β·$%&0!"Β·$%')).toEqual('0');
|
|
33
|
+
expect((0, slugs_1.generateSlug)('x!!!!')).toEqual('x');
|
|
34
|
+
});
|
|
35
|
+
test('if all slug are special characters, return a 5 char random string', () => {
|
|
36
|
+
expect((0, slugs_1.generateSlug)('!!!!').length).toEqual(5);
|
|
37
|
+
// Test multiple emojis andspecial characters
|
|
38
|
+
expect((0, slugs_1.generateSlug)('ππ').length).toEqual(5);
|
|
39
|
+
// Handle japanese characters
|
|
40
|
+
expect((0, slugs_1.generateSlug)('γ©γ€γγγγ·γ₯').length).toEqual(5);
|
|
41
|
+
});
|
|
42
|
+
});
|
package/dist/utils/slugs.js
CHANGED
|
@@ -3,8 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateSlug = void 0;
|
|
4
4
|
const sanitizeSlug = (slug) => slug
|
|
5
5
|
.toLowerCase()
|
|
6
|
-
|
|
7
|
-
.replace(
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
// Then replace remaining non-alphanumeric characters with hyphens
|
|
7
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
8
|
+
// Replace multiple hyphens with a single hyphen
|
|
9
|
+
.replace(/-+/g, '-')
|
|
10
|
+
// Trim leading and trailing hyphens
|
|
11
|
+
.replace(/^-+|-+$/g, '');
|
|
12
|
+
const generateSlug = (name) => {
|
|
13
|
+
const sanitizedSlug = sanitizeSlug(name);
|
|
14
|
+
if (sanitizedSlug.length === 0) {
|
|
15
|
+
// Return a random 5 character string
|
|
16
|
+
// Base-36 uses all digits (0-9) and all letters (a-z)
|
|
17
|
+
return Math.random().toString(36).substring(2, 7);
|
|
18
|
+
}
|
|
19
|
+
return sanitizedSlug;
|
|
20
|
+
};
|
|
10
21
|
exports.generateSlug = generateSlug;
|
package/package.json
CHANGED
package/dist/slug.test.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const slugs_1 = require("./utils/slugs");
|
|
4
|
-
describe('Slug', () => {
|
|
5
|
-
test('should generate space slugs', async () => {
|
|
6
|
-
expect((0, slugs_1.generateSlug)('my space name')).toEqual('my-space-name');
|
|
7
|
-
expect((0, slugs_1.generateSlug)('my space name')).toEqual('my-space-name');
|
|
8
|
-
expect((0, slugs_1.generateSlug)('a_SPACE_NAME.with!special?chars/and\\slashes')).toEqual('a-space-name-with-special-chars-and-slashes');
|
|
9
|
-
expect((0, slugs_1.generateSlug)('!trim_special_chars!')).toEqual('trim-special-chars');
|
|
10
|
-
});
|
|
11
|
-
test('should generate chart slugs', async () => {
|
|
12
|
-
expect((0, slugs_1.generateSlug)('a CHART_NAME.with!special?chars/and\\slashes')).toEqual('a-chart-name-with-special-chars-and-slashes');
|
|
13
|
-
});
|
|
14
|
-
test('should generate dashboard slugs', async () => {
|
|
15
|
-
expect((0, slugs_1.generateSlug)('my dashboard name')).toEqual('my-dashboard-name');
|
|
16
|
-
expect((0, slugs_1.generateSlug)('a DASHBOARD_NAME.with!special?chars/and\\slashes')).toEqual('a-dashboard-name-with-special-chars-and-slashes');
|
|
17
|
-
});
|
|
18
|
-
});
|
|
File without changes
|