@bgord/tools 1.1.9 → 1.1.11

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/dist/index.d.ts CHANGED
@@ -75,6 +75,7 @@ export * from "./rounding.adapter";
75
75
  export * from "./rounding.port";
76
76
  export * from "./size.vo";
77
77
  export * from "./size-bytes.vo";
78
+ export * from "./slug.service";
78
79
  export * from "./stopwatch.service";
79
80
  export * from "./sum.service";
80
81
  export * from "./thousands-separator.service";
package/dist/index.js CHANGED
@@ -75,6 +75,7 @@ export * from "./rounding.adapter";
75
75
  export * from "./rounding.port";
76
76
  export * from "./size.vo";
77
77
  export * from "./size-bytes.vo";
78
+ export * from "./slug.service";
78
79
  export * from "./stopwatch.service";
79
80
  export * from "./sum.service";
80
81
  export * from "./thousands-separator.service";
@@ -0,0 +1,4 @@
1
+ export declare class Slug {
2
+ private static WHITELIST;
3
+ static generate(input: string, separator?: string): string;
4
+ }
@@ -0,0 +1,15 @@
1
+ export class Slug {
2
+ // Any letter or any number
3
+ static WHITELIST = /[\p{L}\p{N}]/u;
4
+ static generate(input, separator = "-") {
5
+ return (input
6
+ .split("")
7
+ .map((character) => (Slug.WHITELIST.test(character) ? character : separator))
8
+ .join("")
9
+ // Collapse multiple consecutive separators
10
+ .replace(new RegExp(`\\${separator}+`, "g"), separator)
11
+ // Trim leading and trailing separators
12
+ .replace(new RegExp(`^\\${separator}|\\${separator}$`, "g"), "")
13
+ .toLocaleLowerCase());
14
+ }
15
+ }
@@ -1 +1 @@
1
- {"root":["../src/age-years.vo.ts","../src/age.vo.ts","../src/api-key.vo.ts","../src/basename.vo.ts","../src/clock-format.service.ts","../src/clock.vo.ts","../src/date-calculator.service.ts","../src/date-formatter.service.ts","../src/date-range.vo.ts","../src/day-iso-id.vo.ts","../src/day.vo.ts","../src/directory-path-absolute.vo.ts","../src/directory-path-relative.vo.ts","../src/division-factor.vo.ts","../src/dll.service.ts","../src/duration-ms.vo.ts","../src/duration.service.ts","../src/email-mask.service.ts","../src/etags.vo.ts","../src/extension.vo.ts","../src/feature-flag-value.vo.ts","../src/feature-flag.vo.ts","../src/file-path-absolute-schema.vo.ts","../src/file-path-relative-schema.vo.ts","../src/file-path.vo.ts","../src/filename-affix.vo.ts","../src/filename-from-string.vo.ts","../src/filename.vo.ts","../src/height-milimiters.vo.ts","../src/height.vo.ts","../src/hour-format.service.ts","../src/hour-schema.vo.ts","../src/hour.vo.ts","../src/iban-mask.service.ts","../src/iban-schema.vo.ts","../src/iban.vo.ts","../src/image.vo.ts","../src/index.ts","../src/language.vo.ts","../src/linear-regression.service.ts","../src/mean.service.ts","../src/mime-types.vo.ts","../src/mime-value.vo.ts","../src/mime.vo.ts","../src/min-max-scaler.service.ts","../src/minute-schema.vo.ts","../src/minute.vo.ts","../src/money-amount.vo.ts","../src/money.vo.ts","../src/month-iso-id.vo.ts","../src/month.vo.ts","../src/multiplication-factor.vo.ts","../src/noop.service.ts","../src/notification-template.vo.ts","../src/object-key.vo.ts","../src/outlier-detector.service.ts","../src/package-version-schema.vo.ts","../src/package-version.vo.ts","../src/pagination-page.vo.ts","../src/pagination-skip.vo.ts","../src/pagination-take.vo.ts","../src/pagination.service.ts","../src/percentage.service.ts","../src/population-standard-deviation.service.ts","../src/quarter-iso-id.vo.ts","../src/quarter.vo.ts","../src/random.service.ts","../src/rate-limiter.service.ts","../src/relative-date.vo.ts","../src/reordering-item-position-value.vo.ts","../src/reordering.service.ts","../src/revision-value.vo.ts","../src/revision.vo.ts","../src/rounding.adapter.ts","../src/rounding.port.ts","../src/size-bytes.vo.ts","../src/size.vo.ts","../src/stopwatch.service.ts","../src/sum.service.ts","../src/thousands-separator.service.ts","../src/time-zone-offset-value.vo.ts","../src/timestamp-value.vo.ts","../src/timestamp.vo.ts","../src/timezone.vo.ts","../src/ts-utils.ts","../src/visually-unambiguous-characters-generator.service.ts","../src/week-iso-id.vo.ts","../src/week.vo.ts","../src/weekday.vo.ts","../src/weight-grams.vo.ts","../src/weight.vo.ts","../src/year-iso-id.vo.ts","../src/year.vo.ts","../src/z-score.service.ts"],"version":"5.9.3"}
1
+ {"root":["../src/age-years.vo.ts","../src/age.vo.ts","../src/api-key.vo.ts","../src/basename.vo.ts","../src/clock-format.service.ts","../src/clock.vo.ts","../src/date-calculator.service.ts","../src/date-formatter.service.ts","../src/date-range.vo.ts","../src/day-iso-id.vo.ts","../src/day.vo.ts","../src/directory-path-absolute.vo.ts","../src/directory-path-relative.vo.ts","../src/division-factor.vo.ts","../src/dll.service.ts","../src/duration-ms.vo.ts","../src/duration.service.ts","../src/email-mask.service.ts","../src/etags.vo.ts","../src/extension.vo.ts","../src/feature-flag-value.vo.ts","../src/feature-flag.vo.ts","../src/file-path-absolute-schema.vo.ts","../src/file-path-relative-schema.vo.ts","../src/file-path.vo.ts","../src/filename-affix.vo.ts","../src/filename-from-string.vo.ts","../src/filename.vo.ts","../src/height-milimiters.vo.ts","../src/height.vo.ts","../src/hour-format.service.ts","../src/hour-schema.vo.ts","../src/hour.vo.ts","../src/iban-mask.service.ts","../src/iban-schema.vo.ts","../src/iban.vo.ts","../src/image.vo.ts","../src/index.ts","../src/language.vo.ts","../src/linear-regression.service.ts","../src/mean.service.ts","../src/mime-types.vo.ts","../src/mime-value.vo.ts","../src/mime.vo.ts","../src/min-max-scaler.service.ts","../src/minute-schema.vo.ts","../src/minute.vo.ts","../src/money-amount.vo.ts","../src/money.vo.ts","../src/month-iso-id.vo.ts","../src/month.vo.ts","../src/multiplication-factor.vo.ts","../src/noop.service.ts","../src/notification-template.vo.ts","../src/object-key.vo.ts","../src/outlier-detector.service.ts","../src/package-version-schema.vo.ts","../src/package-version.vo.ts","../src/pagination-page.vo.ts","../src/pagination-skip.vo.ts","../src/pagination-take.vo.ts","../src/pagination.service.ts","../src/percentage.service.ts","../src/population-standard-deviation.service.ts","../src/quarter-iso-id.vo.ts","../src/quarter.vo.ts","../src/random.service.ts","../src/rate-limiter.service.ts","../src/relative-date.vo.ts","../src/reordering-item-position-value.vo.ts","../src/reordering.service.ts","../src/revision-value.vo.ts","../src/revision.vo.ts","../src/rounding.adapter.ts","../src/rounding.port.ts","../src/size-bytes.vo.ts","../src/size.vo.ts","../src/slug.service.ts","../src/stopwatch.service.ts","../src/sum.service.ts","../src/thousands-separator.service.ts","../src/time-zone-offset-value.vo.ts","../src/timestamp-value.vo.ts","../src/timestamp.vo.ts","../src/timezone.vo.ts","../src/ts-utils.ts","../src/visually-unambiguous-characters-generator.service.ts","../src/week-iso-id.vo.ts","../src/week.vo.ts","../src/weekday.vo.ts","../src/weight-grams.vo.ts","../src/weight.vo.ts","../src/year-iso-id.vo.ts","../src/year.vo.ts","../src/z-score.service.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgord/tools",
3
- "version": "1.1.9",
3
+ "version": "1.1.11",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "author": "Bartosz Gordon",
@@ -28,7 +28,7 @@
28
28
  "@types/mime-types": "3.0.1",
29
29
  "cspell": "9.4.0",
30
30
  "knip": "5.71.0",
31
- "lefthook": "2.0.6",
31
+ "lefthook": "2.0.7",
32
32
  "only-allow": "1.2.2",
33
33
  "shellcheck": "4.1.0",
34
34
  "typescript": "5.9.3",
package/readme.md CHANGED
@@ -100,6 +100,7 @@ src/
100
100
  ├── rounding.port.ts
101
101
  ├── size-bytes.vo.ts
102
102
  ├── size.vo.ts
103
+ ├── slug.service.ts
103
104
  ├── stopwatch.service.ts
104
105
  ├── sum.service.ts
105
106
  ├── thousands-separator.service.ts
package/src/index.ts CHANGED
@@ -75,6 +75,7 @@ export * from "./rounding.adapter";
75
75
  export * from "./rounding.port";
76
76
  export * from "./size.vo";
77
77
  export * from "./size-bytes.vo";
78
+ export * from "./slug.service";
78
79
  export * from "./stopwatch.service";
79
80
  export * from "./sum.service";
80
81
  export * from "./thousands-separator.service";
@@ -0,0 +1,18 @@
1
+ export class Slug {
2
+ // Any letter or any number
3
+ private static WHITELIST = /[\p{L}\p{N}]/u;
4
+
5
+ static generate(input: string, separator = "-"): string {
6
+ return (
7
+ input
8
+ .split("")
9
+ .map((character) => (Slug.WHITELIST.test(character) ? character : separator))
10
+ .join("")
11
+ // Collapse multiple consecutive separators
12
+ .replace(new RegExp(`\\${separator}+`, "g"), separator)
13
+ // Trim leading and trailing separators
14
+ .replace(new RegExp(`^\\${separator}|\\${separator}$`, "g"), "")
15
+ .toLocaleLowerCase()
16
+ );
17
+ }
18
+ }