@akadenia/helpers
Version:
Akadenia helpers
544 lines (387 loc) • 18.4 kB
Markdown
## Getting Started
- [DateHelpers](#datehelpers)
- [`DateHelpers.getReadableDateTime(datetime)`](#datehelpersgetreadabledatetimedatetime)
- [`DateHelpers.getReadableDate(datetime)`](#datehelpersgetreadabledatedatetime)
- [`DateHelpers.getDateString(date)`](#datehelpersgetdatestringdate)
- [`DateHelpers.parseDate(date)`](#datehelpersparsedatedate)
- [`DateHelpers.getShortOrdinalDate(date)`](#datehelpersgetshortordinaldatedate)
- [MapHelpers](#maphelpers)
- [`MapHelpers.getDistanceBetweenPoints(point1, point2)`](#maphelpersgetdistancebetweenpointspoint1-point2)
- [`MapHelpers.compareLocations(location1, location2, precision)`](#maphelperscomparelocationslocation1-location2-precision)
- [`MapHelpers.getBearingToCoordinate({startCoordinate, endCoordinate})`](#maphelpersgetbearingtocoordinatestartcoordinate-endcoordinate)
- [TextHelpers](#texthelpers)
- [`TextHelpers.uuidv4()`](#texthelpersuuidv4)
- [`TextHelpers.formatPosition(position)`](#texthelpersformatpositionposition)
- [`TextHelpers.truncateText(text, characterLimit)`](#texthelperstruncatetexttext-characterlimit)
- [`TextHelpers.fileNameFromPath(path)`](#texthelpersfilenamefrompathpath)
- [`TextHelpers.replaceSpacesWithUnderscore(s)`](#texthelpersreplacespaceswithunderscores)
- [`TextHelpers.replaceUnderscoreWithSpaces(s)`](#texthelpersreplaceunderscorewithspacess)
- [`TextHelpers.pluralizeOnCondition(word, condition)`](#texthelperspluralizeonconditionword-condition)
- [`TextHelpers.convertSnakeToCamelCase(data)`](#texthelpersconvertsnaketocamelcasedata)
- [`TextHelpers.convertCamelToSnakeCase(data)`](#texthelpersconvertcameltosnakecasedata)
- [`TextHelpers.convertCamelToKebabCase(data)`](#texthelpersconvertcameltokebabcasedata)
- [`TextHelpers.convertKebabToCamelCase(data)`](#texthelpersconvertkebabtocamelcasedata)
- [`TextHelpers.generateAcronym(term)`](#texthelpersgenerateacronymterm)
- [`TextHelpers.isAcronym(data)`](#texthelpersisacronymdata)
- [`TextHelpers.acronymToKebabCase(data)`](#texthelpersacronymtokebabcasedata)
- [`TextHelpers.handleNullDisplay(value, defaultValue="N/A")`](#texthelpershandlenulldisplayvalue-defaultvaluena)
- [`TextHelpers.enforceCharacterLimit({text, characterLimit, onCharacterLimit})`](#texthelpersenforcecharacterlimittext-characterlimit-oncharacterlimit)
- [`TextHelpers.isValidEmail(email)`](#texthelpersisvalidemailemail)
- [`TextHelpers.generateIdFromWord(word)`](#texthelpersgenerateidfromwordword)
- [`TextHelpers.generateWordFromId(word)`](#texthelpersgeneratewordfromidword)
- [`TextHelpers.generateSlugFromWords(id, ...words)`](#texthelpersgenerateslugfromwordsid-words)
- [`TextHelpers.extractIDfromSlug(slug)`](#texthelpersextractidfromslugslug)
- [`TextHelpers.abbreviateNumber(number)`](#texthelpersabbreviatenumbernumber)
- [ObjectHelpers](#objecthelpers)
- [`ObjectHelpers.isPureObject(any)`](#objecthelpersispureobjectany)
- [`ObjectHelpers.parseCookie(str)`](#objecthelpersparsecookiestr)
- [`ObjectHelpers.filterObjectsByProperty ( array, propertyName, propertyValue)`](#objecthelpersfilterobjectsbyproperty--array-propertyname-propertyvalue)
- [`ObjectHelpers.containsSubObject(mainObject, subObject)`](#objecthelperscontainssubobjectmainobject-subobject)
- [`ObjectHelpers.findObjectBySubObject(array, subObject)`](#objecthelpersfindobjectbysubobjectarray-subobject)
- [`ObjectHelpers.filterObjectsBySubObject(array, subObject)`](#objecthelpersfilterobjectsbysubobjectarray-subobject)
- [`ObjectHelpers.objectPropHasValue({object, key, value)}`](#objecthelpersobjectprophasvalueobject-key-value)
- [`ObjectHelpers.findEntry(array, predicate)`](#objecthelpersfindentryarray-predicate)
- [GenericHelpers](#generichelpers)
- [`GenericHelpers.delay(ms)`](#generichelpersdelayms)
- [`GenericHelpers.getPreferredUriScheme(host)`](#generichelpersgetpreferredurischemehost)
- [FileHelpers](#filehelpers)
- [`FileHelpers.checkFileExtension(filePath, validExtensions)`](#filehelperscheckfileextensionfilepath-validextensions)
- [Contributing to this package](#contributing-to-this-package)
- [License](#license)
## DateHelpers
Import the DateHelpers utility.
`import { DateHelpers } from "@akadenia/helpers`
## `DateHelpers.getReadableDateTime(datetime)`
Returns the date in `yyyy-mm-dd hh:mm:ss` format.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`datetime`|`Date`|`false`|The date to convert to readable date time. Default is current datetime. i.e. `new Date()`|
## `DateHelpers.getReadableDate(datetime)`
Returns the date in `yyyy-mm-dd` format.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`datetime`|`Date`|`false`|The date to convert to readable date time. Default is current datetime. i.e. `new Date()`|
## `DateHelpers.getDateString(date)`
Returns a string representing the date in the user's local timezone.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`date`|`string` or `Date`|`true`|The date string to convert to the string in the user's local timezone|
## `DateHelpers.parseDate(date)`
Returns a date representing the new date object.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`date`|`string`|`true`|The date string that needs to be returned as a date object|
## `DateHelpers.getShortOrdinalDate(date)`
Returns a string representing the date in short ordinal format.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`date`|`string`|`true`|The date string that needs to be formatted|
# MapHelpers
Import the MapHelpers utility.
`import { MapHelpers } from "@akadenia/helpers`
## `MapHelpers.getDistanceBetweenPoints(point1, point2)`
Returns the distance between two points in meters. Returns `null` if either point is invalid.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`point1`|`Array<number>`|false| The coordinates of the first point. i.e. `[lat, lng]` |
|`point2`|`Array<number>`|false|The coordinates of the second point. i.e. `[lat, lng]`|
## `MapHelpers.compareLocations(location1, location2, precision)`
Returns a boolean value that indicates whether or not the two locations are the same based on precision provided.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`location1`|`Array<number>`|false| The coordinates of the first location. i.e. `[lat, lng]` |
|`location2`|`Array<number>`|false|The coordinates of the second location. i.e. `[lat, lng]`|
|`precision`|`number`|false|The precision to compare the locations to. Default is `6`|
## `MapHelpers.getBearingToCoordinate({startCoordinate, endCoordinate})`
Returns the bearing to the end coordinate from the start coordinate in degrees.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`coordinates`|`object`|`true`|An object containing the start and end coordinates. i.e. `{startCoordinate: [lat, lng], endCoordinate: [lat, lng]}`|
## TextHelpers
Import the TextHelpers utility.
`import { TextHelpers } from "@akadenia/helpers`
## `TextHelpers.uuidv4()`
Returns a randomly generated string.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
## `TextHelpers.formatPosition(position)`
Returns a string position for a provided number. eg. `"2nd"`, `"3rd"` etc.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`position`|`number`|`true`|A position number to add the appropriate suffix to|
## `TextHelpers.truncateText(text, characterLimit)`
Returns a string ending in an ellipsis `...` or returns the input string if maximum character limit isn't met.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`text`|`string`|`true`|The text to truncate|
|`characterLimit`|`number`|`true`|The target number of characters to truncate text to|
## `TextHelpers.fileNameFromPath(path)`
Returns a file name.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`path`|`string`|`true`|The path to extract the file name from|
## `TextHelpers.replaceSpacesWithUnderscore(s)`
Returns a string where the spaces have been replaced with underscores.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`s`|`string`|`false`|The text to replace spaces with underscores in|
## `TextHelpers.replaceUnderscoreWithSpaces(s)`
Returns a string where the underscores have been replaced with spaces.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`s`|`string`|`false`|The text to replace underscores with spaces in|
## `TextHelpers.pluralizeOnCondition(word, condition)`
Returns a pluralised version of the input string or returns the same string.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`word`|`string`|`true`|The word to pluralise|
|`condition`|`boolean`|`true`|The condition that determines whether to plurize the input word|
## `TextHelpers.convertSnakeToCamelCase(data)`
Returns the input object or array with all object keys recursively transformed to camelCase. Returns input object if type is invalid.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`data`|`Object` or `Array<Object>`|`true`|The object whose keys to transform|
## `TextHelpers.convertCamelToSnakeCase(data)`
Returns the input object or array with all object keys recursively transformed to snake_case. Returns input object if type is invalid.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`data`|`Object` or `Array<Object>`|`true`|The object whose keys to transform|
## `TextHelpers.convertCamelToKebabCase(data)`
Convert camel case to kebab case
The word returned as kebab case
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`data`|`string`|The word needed to be converted to kebab case from camel case|
## `TextHelpers.convertKebabToCamelCase(data)`
Convert kebab case to camel case
The word returned as camel case
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`data`|`string`|The word needed to be converted from kebab case to camel case|
## `TextHelpers.generateAcronym(term)`
Generate an acronym from a term
an acronym generated from the term
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`term`|`string`|The term to be converted to an acronym|
## `TextHelpers.isAcronym(data)`
Validate if a word is acronym
The boolean value when the condition is met
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`data`|`string`|The word that is being validated as acronym|
## `TextHelpers.acronymToKebabCase(data)`
Convert acronym to kebab case
The word returned as camel case
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`data`|`string`|The acronym to be converted to kebab case|
## `TextHelpers.handleNullDisplay(value, defaultValue="N/A")`
Returns the input string or the default string if the input value is null or undefined.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`value`|`string`|`true`|The string to display in the ui|
|`defaultValue`|`string`|`false`|The default string to display if the input value is null or undefined defaults to `N/A`|
## `TextHelpers.enforceCharacterLimit({text, characterLimit, onCharacterLimit})`
Returns the input string if the character limit is not exceeded or returns the truncated string when the character limit is exceeded. Calls the `onCharacterLimit` callback when the character limit is exceeded.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`text`|`string`|`true`|The string to truncate|
|`characterLimit`|`number`|`true`|The target number of characters to truncate text to|
|`onCharacterLimit`|`function`|`true`|The callback to call when the character limit is exceeded|
## `TextHelpers.isValidEmail(email)`
Returns true when the email is a proper email and returns false when the email is not a proper email
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`email`|`string`|`true`|The email to be validated|
## `TextHelpers.generateIdFromWord(word)`
Generate ID from word
Returns the generated ID from the word
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`word`|`string`|`true`|The word needed to generate ID from|
## `TextHelpers.generateWordFromId(word)`
Get the word from the generated ID
Returns the word that is got from the id
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`words`|`string`|`true`|The id that is needed to get the word from|
|`customList`|`Record<string, string>`|`false`|The custom lists that has the id with the custom list of words|
## `TextHelpers.generateSlugFromWords(id, ...words)`
Get the slug from words
Returns the slug from the words and it will be url path safe
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`id`|`string`|`true`|The id that is needed to be concatenated with the slug|
|`words`|`string[]`|`true`|The words that will be in the slug|
## `TextHelpers.extractIDfromSlug(slug)`
Extracts the id from the slug
Returns the id from the slug
Throws error if the string is empty, null or undefined
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`slug`|`string`|`true`|The slug associated with the id|
## `TextHelpers.abbreviateNumber(number)`
Returns the string representation of the abbreviated number, rounded to two decimal places.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`number`|`number`|`true`|The number to be abbreviated|
Examples
- Numbers below 1,000 are displayed without abbreviation
- Numbers between 1,000 and 1,000,000 are displayed in thousands (e.g. 1.23K)
- Numbers between 1,000,000 and 1,000,000,000 are displayed in millions (e.g. 1.23M)
- Numbers above 1,000,000,000 are displayed in billions (e.g. 1.23B)
Note: If the input `number` is null or undefined, the function returns null.
## ObjectHelpers
Import the ObjectHelpers utility.
`import { ObjectHelpers } from "@akadenia/helpers`
## `ObjectHelpers.isPureObject(any)`
Returns a boolean indicating whether or not the input is a pure object.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`object`|`any`|`true`|The object to test for pureness|
## `ObjectHelpers.parseCookie(str)`
Returns an object containing the key-value pairs of the parsed cookies.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`str`|`string`|`true`|The string of cookies to parse|
## `ObjectHelpers.filterObjectsByProperty ( array, propertyName, propertyValue)`
Filter an array of objects based on a specific property and its corresponding value.
Returns an array containing all objects that have the specified property with the given value.
Template
```typescript
T extends Record<string, any>
```
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`array`|`T[]`|`true`|An array of objects to be searched|
|`propertyName`|`keyof T`|`true`|The name of the property to match against|
|`propertyValue`|`T[keyof T]`|`true`|The value that the property should have to be considered|
## `ObjectHelpers.containsSubObject(mainObject, subObject)`
It compares the key-value pairs of the sub-object with the corresponding key-value pairs in the main object.
Returns true If all key-value pairs in the sub-object are found in the main object; otherwise, it returns false.
Template
```typescript
T extends Record<string, any>
```
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`mainObject`|`T`|`true`|The main object to be checked|
|`subObject`|`Partial<T>`|`true`|The sub-object to be searched for|
## `ObjectHelpers.findObjectBySubObject(array, subObject)`
Searches an array of objects for an object that contains a specific sub-object.
Returns the first object found in the array that contains the sub-object or null
if no match is found.
Template
```typescript
T extends Record<string, any>
```
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`array`|`T[]`|`true`|An array of objects to be searched|
|`array`|`Partial<T>`|`true`|The sub-object to be searched for in the array|
## `ObjectHelpers.filterObjectsBySubObject(array, subObject)`
Filters an array of objects based on the presence of a specific sub-object within each object.
Returns an array containing all objects from the input array that contain the specified sub-object.
Template
```typescript
T extends Record<string, any>
```
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`array`|`T[]`|`true`|An array of objects to be filtered|
|`array`|`Partial<T>`|`true`|The sub-object to be searched for in the array|
## `ObjectHelpers.objectPropHasValue({object, key, value)}`
Checks if the object has the key with the value.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`object`|`Object`|`true`|The object to check|
|`key`|`string`|`true`|The key to check|
|`value`|`any`|`true`|The value to check|
## `ObjectHelpers.findEntry(array, predicate)`
Finds the first entry in the array that satisfies the predicate.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`array`|`Array<any>`|`true`|The array of entries to search|
|`predicate`|`(item: any) => boolean`|`true`|The predicate function to use to search the array|
## GenericHelpers
Import the GenericHelpers utility.
`import { GenericHelpers } from "@akadenia/helpers`
## `GenericHelpers.delay(ms)`
A "modern" sleep statement.
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`ms`|`number`|`true`|The number of milliseconds to wait|
## `GenericHelpers.getPreferredUriScheme(host)`
Get the preferred scheme for a host
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`host`|`string`|`true`|An IP address or a domain name|
## FileHelpers
## `FileHelpers.checkFileExtension(filePath, validExtensions)`
Check if a file path has a valid extension
Arguments
|Name|Type|Required|Description|
|--|--|--|--|
|`filePath`|`string`|`true`|The file path to check|
|`validExtensions`|`string[]`|`true`|The valid extensions|
## Contributing to this package
This package follows the commitlint and conventional commits standards. As such the commit messages should follow the following format:
```text
<type>(optional scope): <description> eg: feat: add new feature OR fix(map-loading): fix rendering on ipad devices
```
Common types according to [commitlint-config-conventional (based on the Angular convention)](https://github.com/conventional-changelog/commitlint/tree/master/@commitlint/config-conventional#type-enum) can be:
- build
- chore
- ci
- docs
- feat
- fix
- perf
- refactor
- revert
- style
- test
if you introduce a breaking change, please add BREAKING CHANGE in the pull request description
## License
MIT