@lightdash/common 0.1458.0 β†’ 0.1458.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+ });
@@ -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
- .replace(/[^a-z0-9]+/g, '-') // Replace all non-alphanumeric characters with hyphens
7
- .replace(/-+/g, '-') // Replace multiple hyphens with a single hyphen
8
- .replace(/^-+|-+$/g, ''); // Trim leading and trailing hyphens
9
- const generateSlug = (name) => `${sanitizeSlug(name)}`;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightdash/common",
3
- "version": "0.1458.0",
3
+ "version": "0.1458.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
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
- });