@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
+ });
@@ -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.1459.0",
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
- });