diff --git a/src/packages/core/utils/index.ts b/src/packages/core/utils/index.ts index 7bbf20844e..8b19679abf 100644 --- a/src/packages/core/utils/index.ts +++ b/src/packages/core/utils/index.ts @@ -21,10 +21,5 @@ export * from './path/umbraco-path.function.js'; export * from './path/url-pattern-to-string.function.js'; export * from './selection-manager/selection.manager.js'; export * from './state-manager/index.js'; -export * from './string/from-camel-case.function.js'; -export * from './string/generate-umbraco-alias.function.js'; -export * from './string/increment-string.function.js'; -export * from './string/split-string-to-array.js'; -export * from './string/string-or-string-array-contains.function.js'; -export * from './string/to-camel-case/to-camel-case.function.js'; +export * from './string/index.js'; export type * from './type/index.js'; diff --git a/src/packages/core/utils/string/from-camel-case/from-camel-case.function.test.ts b/src/packages/core/utils/string/from-camel-case/from-camel-case.function.test.ts new file mode 100644 index 0000000000..3aadd11991 --- /dev/null +++ b/src/packages/core/utils/string/from-camel-case/from-camel-case.function.test.ts @@ -0,0 +1,13 @@ +import { expect } from '@open-wc/testing'; +import { fromCamelCase } from './from-camel-case.function.js'; + +describe('fromCamelCase', () => { + it('should return the string with spaces between words', () => { + expect(fromCamelCase('thisIsATest')).to.equal('This Is A Test'); + }); + + it('should uppercase the first character', () => { + const result = fromCamelCase('thisIsATest'); + expect(result.charAt(0)).to.equal('T'); + }); +}); diff --git a/src/packages/core/utils/string/from-camel-case.function.ts b/src/packages/core/utils/string/from-camel-case/from-camel-case.function.ts similarity index 100% rename from src/packages/core/utils/string/from-camel-case.function.ts rename to src/packages/core/utils/string/from-camel-case/from-camel-case.function.ts diff --git a/src/packages/core/utils/string/from-camel-case/index.ts b/src/packages/core/utils/string/from-camel-case/index.ts new file mode 100644 index 0000000000..5f7adf7057 --- /dev/null +++ b/src/packages/core/utils/string/from-camel-case/index.ts @@ -0,0 +1 @@ +export * from './from-camel-case.function.js'; diff --git a/src/packages/core/utils/string/generate-umbraco-alias.function.ts b/src/packages/core/utils/string/generate-umbraco-alias.function.ts deleted file mode 100644 index 6309e1c950..0000000000 --- a/src/packages/core/utils/string/generate-umbraco-alias.function.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { toCamelCase } from './to-camel-case/to-camel-case.function.js'; - -/** - * - * @param text - */ -export function generateAlias(text: string) { - //replace all spaces characters with a dash and remove all non-alphanumeric characters, except underscore. Allow a maximum of 1 dashes or underscores in a row. - //Do we really want that and not the original way of doing things (camelCase)? - - return toCamelCase(text); - - return text - .replace(/\s+/g, '-') - .replace(/[^a-zA-Z0-9_-]+/g, '') - .replace(/[-_]{2,}/g, (match) => match[0]) - .toLowerCase(); -} diff --git a/src/packages/core/utils/string/generate-umbraco-alias/generate-umbraco-alias.function.ts b/src/packages/core/utils/string/generate-umbraco-alias/generate-umbraco-alias.function.ts new file mode 100644 index 0000000000..0e4024ef1e --- /dev/null +++ b/src/packages/core/utils/string/generate-umbraco-alias/generate-umbraco-alias.function.ts @@ -0,0 +1,10 @@ +import { toCamelCase } from '../to-camel-case/index.js'; + +/** + * @description Generate an alias from a string + * @param {string} text The text to generate the alias from + * @returns {string} The alias + */ +export function generateAlias(text: string): string { + return toCamelCase(text); +} diff --git a/src/packages/core/utils/string/generate-umbraco-alias/index.ts b/src/packages/core/utils/string/generate-umbraco-alias/index.ts new file mode 100644 index 0000000000..1b2c554cb6 --- /dev/null +++ b/src/packages/core/utils/string/generate-umbraco-alias/index.ts @@ -0,0 +1 @@ +export * from './generate-umbraco-alias.function.js'; diff --git a/src/packages/core/utils/string/increment-string.function.ts b/src/packages/core/utils/string/increment-string.function.ts deleted file mode 100644 index 2053e70e60..0000000000 --- a/src/packages/core/utils/string/increment-string.function.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * - * @param text - */ -export function incrementString(text: string) { - return text.replace(/(\d*)$/, (_, t) => (+t + 1).toString().padStart(t.length, '0')); -} diff --git a/src/packages/core/utils/string/increment-string/increment-string.function.test.ts b/src/packages/core/utils/string/increment-string/increment-string.function.test.ts new file mode 100644 index 0000000000..e3579cb3e1 --- /dev/null +++ b/src/packages/core/utils/string/increment-string/increment-string.function.test.ts @@ -0,0 +1,18 @@ +import { incrementString } from './increment-string.function.js'; +import { expect } from '@open-wc/testing'; + +describe('incrementString', () => { + it('increments a string with a number at the end', () => { + const inputString = 'test'; + const result = incrementString(inputString); + + expect(result).to.equal('test1'); + }); + + it('increments a string with a number at the end by 1', () => { + const inputString = 'test1'; + const result = incrementString(inputString); + + expect(result).to.equal('test2'); + }); +}); diff --git a/src/packages/core/utils/string/increment-string/increment-string.function.ts b/src/packages/core/utils/string/increment-string/increment-string.function.ts new file mode 100644 index 0000000000..684b4e3555 --- /dev/null +++ b/src/packages/core/utils/string/increment-string/increment-string.function.ts @@ -0,0 +1,8 @@ +/** + * @description Increment string + * @param {string} text The text to increment + * @returns {string} The incremented string + */ +export function incrementString(text: string): string { + return text.replace(/(\d*)$/, (_, t) => (+t + 1).toString().padStart(t.length, '0')); +} diff --git a/src/packages/core/utils/string/increment-string/index.ts b/src/packages/core/utils/string/increment-string/index.ts new file mode 100644 index 0000000000..3e50a886e6 --- /dev/null +++ b/src/packages/core/utils/string/increment-string/index.ts @@ -0,0 +1 @@ +export * from './increment-string.function.js'; diff --git a/src/packages/core/utils/string/index.ts b/src/packages/core/utils/string/index.ts new file mode 100644 index 0000000000..dc8941f190 --- /dev/null +++ b/src/packages/core/utils/string/index.ts @@ -0,0 +1,6 @@ +export * from './from-camel-case/index.js'; +export * from './generate-umbraco-alias/index.js'; +export * from './increment-string/index.js'; +export * from './split-string-to-array/index.js'; +export * from './string-or-string-array-contains/index.js'; +export * from './to-camel-case/index.js'; diff --git a/src/packages/core/utils/string/split-string-to-array/index.ts b/src/packages/core/utils/string/split-string-to-array/index.ts new file mode 100644 index 0000000000..3b5abd98c4 --- /dev/null +++ b/src/packages/core/utils/string/split-string-to-array/index.ts @@ -0,0 +1 @@ +export * from './split-string-to-array.function.js'; diff --git a/src/packages/core/utils/utils.test.ts b/src/packages/core/utils/string/split-string-to-array/split-string-to-array.function.test.ts similarity index 93% rename from src/packages/core/utils/utils.test.ts rename to src/packages/core/utils/string/split-string-to-array/split-string-to-array.function.test.ts index 2f0aaa2ac6..07af58ef7b 100644 --- a/src/packages/core/utils/utils.test.ts +++ b/src/packages/core/utils/string/split-string-to-array/split-string-to-array.function.test.ts @@ -1,4 +1,4 @@ -import { splitStringToArray } from './string/split-string-to-array.js'; +import { splitStringToArray } from './split-string-to-array.function.js'; import { expect } from '@open-wc/testing'; describe('splitStringToArray', () => { diff --git a/src/packages/core/utils/string/split-string-to-array.ts b/src/packages/core/utils/string/split-string-to-array/split-string-to-array.function.ts similarity index 100% rename from src/packages/core/utils/string/split-string-to-array.ts rename to src/packages/core/utils/string/split-string-to-array/split-string-to-array.function.ts diff --git a/src/packages/core/utils/string/string-or-string-array-contains.function.ts b/src/packages/core/utils/string/string-or-string-array-contains.function.ts deleted file mode 100644 index 23c9981df1..0000000000 --- a/src/packages/core/utils/string/string-or-string-array-contains.function.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * - * @param value - * @param search - */ -export function stringOrStringArrayContains(value: string | Array, search: string) { - return Array.isArray(value) ? value.indexOf(search) !== -1 : value === search; -} diff --git a/src/packages/core/utils/string/string-or-string-array-contains/index.ts b/src/packages/core/utils/string/string-or-string-array-contains/index.ts new file mode 100644 index 0000000000..34670d3ef4 --- /dev/null +++ b/src/packages/core/utils/string/string-or-string-array-contains/index.ts @@ -0,0 +1 @@ +export * from './string-or-string-array-contains.function.js'; diff --git a/src/packages/core/utils/string/string-or-string-array-contains/string-or-string-array-contains.function.test.ts b/src/packages/core/utils/string/string-or-string-array-contains/string-or-string-array-contains.function.test.ts new file mode 100644 index 0000000000..3f2051e663 --- /dev/null +++ b/src/packages/core/utils/string/string-or-string-array-contains/string-or-string-array-contains.function.test.ts @@ -0,0 +1,34 @@ +import { stringOrStringArrayContains } from './string-or-string-array-contains.function.js'; +import { expect } from '@open-wc/testing'; + +describe('stringOrStringArrayContains', () => { + it('returns true if a string matches a search string', () => { + const result = stringOrStringArrayContains('hello', 'hello'); + expect(result).to.be.true; + }); + + it('returns false if a string does not contain a search string', () => { + const result = stringOrStringArrayContains('hello', 'world'); + expect(result).to.be.false; + }); + + it('returns false if a search string partly matches the string', () => { + const result = stringOrStringArrayContains('hello', 'ello'); + expect(result).to.be.false; + }); + + it('returns true if an array of strings contains a search string', () => { + const result = stringOrStringArrayContains(['hello', 'world'], 'world'); + expect(result).to.be.true; + }); + + it('returns false if an array of strings does not contain a search string', () => { + const result = stringOrStringArrayContains(['hello', 'world'], 'foo'); + expect(result).to.be.false; + }); + + it('returns false if an empty array is passed', () => { + const result = stringOrStringArrayContains([], 'foo'); + expect(result).to.be.false; + }); +}); diff --git a/src/packages/core/utils/string/string-or-string-array-contains/string-or-string-array-contains.function.ts b/src/packages/core/utils/string/string-or-string-array-contains/string-or-string-array-contains.function.ts new file mode 100644 index 0000000000..cc61e13bf9 --- /dev/null +++ b/src/packages/core/utils/string/string-or-string-array-contains/string-or-string-array-contains.function.ts @@ -0,0 +1,9 @@ +/** + * @description Check if a string or array of strings contains a specific string + * @param value The string or array of strings to search in + * @param search The string to search for + * @returns {boolean} Whether the string or array of strings contains the search string + */ +export function stringOrStringArrayContains(value: string | Array, search: string): boolean { + return Array.isArray(value) ? value.indexOf(search) !== -1 : value === search; +} diff --git a/src/packages/core/utils/string/to-camel-case/index.ts b/src/packages/core/utils/string/to-camel-case/index.ts new file mode 100644 index 0000000000..ae2ab708c7 --- /dev/null +++ b/src/packages/core/utils/string/to-camel-case/index.ts @@ -0,0 +1 @@ +export * from './to-camel-case.function.js';