From f7fc378f04c0ded4e1010564c1797e19d7ff834d Mon Sep 17 00:00:00 2001 From: re-knownout Date: Tue, 10 May 2022 16:56:16 +0300 Subject: [PATCH] Readme update and rotateArray function --- package/README.md | 392 +++++++++++++++++- package/bin/classes/DateConverter.ts | 8 +- package/bin/classes/MakeElement.ts | 2 + ...acheController.ts => StorageController.ts} | 6 +- .../{ConvertDate.test.ts => DateConverter.ts} | 0 ...ller.test.ts => StorageController.test.ts} | 6 +- package/bin/functions/computeArrayWeights.ts | 2 +- package/bin/functions/computeProgress.tsx | 6 +- package/bin/functions/mergeObjects.ts | 7 +- package/bin/functions/mergeStringArray.ts | 2 +- package/bin/functions/rotateArray.ts | 35 ++ .../functions/tests/computeProgress.test.ts | 3 +- .../bin/functions/tests/mergeObjects.test.ts | 6 +- .../bin/functions/tests/rotateArray.test.ts | 16 + package/lib.ts | 6 +- package/package.json | 2 +- webpack.package.js | 3 +- 17 files changed, 459 insertions(+), 43 deletions(-) rename package/bin/classes/{CacheController.ts => StorageController.ts} (92%) rename package/bin/classes/tests/{ConvertDate.test.ts => DateConverter.ts} (100%) rename package/bin/classes/tests/{CacheController.test.ts => StorageController.test.ts} (86%) create mode 100644 package/bin/functions/rotateArray.ts create mode 100644 package/bin/functions/tests/rotateArray.test.ts diff --git a/package/README.md b/package/README.md index fff0e78..eca7762 100644 --- a/package/README.md +++ b/package/README.md @@ -3,24 +3,380 @@ This is a service project for providing common functionality as a npm package. Below is a list of available features with a short description. -| # | Name | Description | -|----:|:--------------------|:-------------------------------------------------------------------------| -| 1 | classNames | Create class names from any type of objects | -| 2 | mergeObjects | Combine objects that go sequentially into groups | -| 3 | mergeStringArray | Combine array entries that go sequentially (add-on over mergeObjects) | -| 4 | limitNumber | Limit a certain number to an upper and lower bound | -| 5 | computeArrayWeights | Calculate weight of strings array items based on another string (query) | -| 6 | sortByWeights | Sort strings array by computed weights | -| 7 | computeProgress | Calculate progress (0-100) based on provided current, min and max values | -| 8 | compareStrings | Compare two strings with specific filters | -| 9 | cleanString | Clean string with or without regular expression | -| 10 | DateConverter | Convert date from unix or from date to selected format | -| 11 | StringExtractor | Extract special entries from string | -| 12 | StringProcessor | Modify strings with special properties | -| 13 | CacheController | Browser storage data controller | -| 14 | MakeFormData | Simplifying the creation of FormData objects | -| 15 | Random | Several random value generators | -| 16 | MakeElement | Plain html elements constructor | +## [Functions](#functions-usage) + +| # | Name | Description | +|----:|:-----------------------------------------------------|:-------------------------------------------------------------------------| +| 1 | [classNames](#classnames-function) | Create class names from any type of objects | +| 2 | [mergeObjects](#mergeobjects-function) | Combine objects that go sequentially into groups | +| 3 | [mergeStringArray](#mergestringarray-function) | Combine array entries that go sequentially (add-on over mergeObjects) | +| 4 | [limitNumber](#limitnumber-function) | Limit a certain number to an upper and lower bound | +| 5 | [computeArrayWeights](#computearrayweights-function) | Calculate weight of strings array items based on another string (query) | +| 6 | [sortByWeights](#sortbyweights-function) | Sort strings array by computed weights | +| 7 | [computeProgress](#computeprogress-function) | Calculate progress (0-100) based on provided current, min and max values | +| 8 | [compareStrings](#comparestrings-function) | Compare two strings with specific filters | +| 9 | [cleanString](#cleanstring-function) | Clean string with or without regular expression | +| 10 | [rotateArray](#rotatearray-function) | Rotate an array to specified direction by one or more steps | + +## [Classes](#classes-usage) + +| # | Name | Description | +|----:|:----------------------------------------------------------|:-------------------------------------------------------| +| 1 | [DateConverter](#dateconverter-class) | Convert date from unix or from date to selected format | +| 2 | [StringExtractor](#stringextractor-class) | Extract special entries from string | +| 3 | [StringProcessor](#stringprocessor-class) | Modify strings with special properties | +| 4 | [StorageController](#storagecontroller-class) | Browser storage data controller | +| 5 | [MakeFormData](#makeformdata-class) | Simplifying the creation of FormData objects | +| 6 | [Random](#random-class) | Several random value generators | +| 7 | [MakeElement (deprecated)](#makeelement-class-deprecated) | Plain html elements constructor | + +# Functions usage + +### classNames function + +- Signature: `(...args: any[]) => string`. + +A function to generate class names from objects of any type. All array type arguments will be flattened, objects will be +converted as `{[className]: Boolean}`. Each entry will be automatically truncated. + +```ts +classNames("hello", { world: true, "not": null }) // => "hello world" +``` + +
+ +### mergeObjects function + +- Signature: `(objects: TObject[], mergeKey: [ string, any ], minMergeLimit: number = 2) => TObject[]` + +Complicated function for merging objects with identical key by this scheme (for `A`): +`{ A, A, B, A, A, B, B } => { [A, A], B, [A, A], B B }`. The `minMergeLimit` property determines how many elements with +the selected key must be sequentially placed in one place for merging. + +```ts +mergeObjects([ { key: "A", text: "Hello" }, { key: "A", text: "World" }, { key: "B", text: "Not" } ], { key: "A" }) +``` + +```json5 +// Execution result +[ + [ + { + "key": "A", + "text": "Hello" + }, + { + "key": "A", + "text": "World" + } + ], + { + "key": "B", + "text": "Not" + } +] +``` + +
+ +### mergeStringArray function + +- Signature: `(array: string[], minMergeLimit: number = 2) => string[]` + +Works the same as mergeObjects, but for string arrays. + +
+ +### limitNumber function + +- Signature: `(value: number, top?: number | null, bottom?: number | null) => number` + +Limit a certain number to an upper and lower bound, pass null to remove specific bound and use next one. + +```ts +limitNumber(10, 5, 0) // => 5sortByWeights("Hello", ["ok", "good", "henlow", "henlo"]) + +limitNumber(15, null, 10) // => 15 + +limitNumber(-10, 5, 0) // => 0 +``` + +
+ +### computeArrayWeights function + +- Signature: `(query: string, array: string[]) => number[]` + +Calculates weight of the elements of a strings array based on a specific query. The less weight is better. + +```ts +computeArrayWeights("Hello", [ "henlo", "hellow", "okay", "goodbye" ]) +``` + +```json5 +// Execution result +[ + 0.0375234521575985, + 0, + 1.0793465577596266, + 0.6635071090047393 +] +``` + +
+ +### sortByWeights function + +- Signature: `(query: string, array: string[]) => string[]` + +Sorting the array of strings by the computed weights from the previous function. The entries most like the query will be +higher. + +```ts +sortByWeights("Hello", [ "ok", "good", "henlow", "henlo" ]) // => ["henlow", "henlo", "good", "ok"] +``` + +
+ +### computeProgress function + +- Signature: `(value: number, max = 100, min = 0) => number` + +Calculate progress (0-100) based on provided current, min and max values. Calculates using this +formula: `X = (A * 100) / (B - C)`. + +```ts +computeProgress(10, 200, 100) // => 10 +computeProgress(10, 200) // => 5 +``` + +
+ +### compareStrings function + +- Signature: `(a: string, b: string) => { result: boolean, weight: number }` + +Compare two strings with specific filters and returns comparison result (boolean) +and comparison weight (number, lower is better). + +```ts +compareStrings("Hello", "henlo") // => { "result": true, "weight": 0.0375234521575985 } + +compareStrings("Hello", "nothello") // => { "result": false, "weight": 0.707635009310987 } + +compareStrings("Hello", "hello") // => { "result": true, "weight": 0 } +``` + +
+ +### cleanString function + +- Signature: `(entry: string, cleanRegexp?: RegExp) => string` + +Cleaning a string with or without a regular expression. Automatically trim input and remove extra spaces. + +```ts +cleanString("Hello world ") // => "Hello world" +``` + +
+ +### rotateArray function + +- Signature: `(array: T, right = true, steps = 1) => T` + +Rotate an array to specified direction by one or more steps. + +```ts +rotateArray([ 1, 2, 3, 4, 5 ]) // => [5, 1, 2, 3, 4] + +rotateArray([ 1, 2, 3, 4, 5 ], true, 3) // => [3, 4, 5, 1, 2] + +rotateArray([ 1, 2, 3, 4, 5 ], false) // => [2, 3, 4, 5, 1] +``` + +
+ +# Classes usage + +## DateConverter class + +- Constructor signature: `(entry: Date | string | number, unix = true)` + +Utility class to convert date, javascript or unix timestamps to specific forms. + +### Methods list + +1. `toUnuxTimestamp() => number` - convert date to unix timestamp. +2. `toReadable (mappings: TMonthMappings = russianMonths, format: string = this.defaultReadableFormat) => string` - + convert date to human-readable format using name mappings and format property. + +### Mappings scheme + +```json5 +{ + casing: { + "regularEnding": "caseEnding" + }, + months: [ + "firstMonthName", + "secondMonthName", + "..." + ] +} +``` + +### Usage + +```ts +// Date.now() / 1000 is a unix timestamp +const converter = new DateConverter(Date.now() / 1000) + +converter.toReadable() // => 10 мая 2022 + +converter.toUnixTimestamp // => 1652187277 +``` + +# StringExtractor class + +- Constructor signature: `(public entry: string)` + +Utility class for retrieving specific entries defined as regular expressions from the provided string. + +### Methods list + +1. `get extract (): { entry: string; extracted: { [p: string]: string[]; }; }` - extract specific entities from string + using defined extractors. +2. `attach (...extractors: (RegExp | [ RegExp, string ])[]): this` - attach regular expression extractor to current + instance. + +### Usage + +```ts +const extractor = new StringExtractor("Hello !weird #world") + +extractor.attach(/#[A-z]*/g, [ /![A-z]*/, "excl" ]) + +extractor.extract // => { entry: 'Hello', extracted: { '#': [ 'world' ], excl: [ '!weird' ] } } + +// Extracted values can be accessed using extracted property +extractor.extracted // => same to extractor.extract method execution result + +// Also updated property extractor.entry, now it is equal to 'Hello' +``` + +# StringProcessor class + +- Constructor signature: `(public entry: string)` + +Utility class for modifying strings with special properties. + +### Methods list + +1. `get extractor () => StringExtractor` - get StringExtractor class instance. +2. `get wordsList () => string[]` - generate words array from current entry. +3. `get removeDuplicates () => this` - Remove duplicate words from entry using `mergeStringArray` utility function. + +_`removeDuplicate` method return StringProcessor class instance, removing result writing directly into entry._ + +4. `compare (value: string) => { result: boolean, weight: number }` - Compare current entry with specific string + using `compareStrings` function. +5. `get clean () => this` - clean entry string using cleanString function. +6. `limitWordsCount (limit: number, ellipsis: boolean = true, numbers = true) => this` - limit words count in current + entry _(act like `removeDuplicates`, writes result directly into entry)_. +7. `filter (...filters: (RegExp | string)[]) => this` - apply regular expressions or strings as filters + (like word filter) to the current entry. + +### Usage + +```ts +const processor = new StringProcessor("Hey, hello hello weird world!"); + +// will not work with upper/lower case and punctuation +processor.removeDuplicates; + +processor.entry // => 'Hey, hello weird world!' + +processor.wordsList // => [ 'Hey,', 'hello', 'weird', 'world!' ] + +// Cuz' this method write directly into entry, you cannot restore deleted words +processor.limitWordsCount(3) + +processor.entry // => Hey, hello weird... +``` + +# StorageController class + +- Constructor signature: `(public readonly storage: Storage)` + +An add-on over the native browser storage. Provides simplified interaction interface +(slower than native due to JSON transformations). + +### Methods list + +1. `getItem (key: string) => false | T` - get item from defined browser storage by a specific key and parse + item data like JSON content. +2. `setItem (key: string, value: T) => this` - stringify provided value and write it to the defined browser + storage. +3. `removeItem (key: string) => this` - remove item from defined browser storage. +4. `exist (key: string) => boolean` - check if specific key exists in the defined storage. + +### Usage + +```ts +const controller = new StorageController(localStorage); + +// Methods can be chained +controller.setItem("keyName", { key: "World" }); + +controller.getItem("keyName").key // => `World` +``` + +# MakeFormData class + +- Constructor signature: `(items?: { [key: string]: any })` + +Utility class for creating FormData objects that can be chained. + +### Methods list + +1. `fetchObject () => { method: string, body: FormData }` - get native FormData object as object suitable for the fetch + function. +2. `add (items: { [key: string]: any }, forceJson: boolean = false) => this` - an add-on over the native method for + adding a FormData object, allows simultaneous application of several elements + _(forceJson used to force non-file entries conversion as JSON objects)_. +3. `remove (...items: string[]) => this` - an add-on over the native remove method of the FormData object allows + deleting multiple items at the same time. + +_FormData can be accessed with `.entry` property of MakeFormData instance._ + +### Usage + +```ts +const formData = new MakeFormData(); + +formData.add({ key: "Hello world" }); + +formData.entry // => FormData + +formData.fetchObject // => { method: "POST", body: FormData } +``` + +# Random class + +- Constructor signature: `does not have a constructor` + +Utility class for generating various types of random values. + +// TODO: add Random class documentation + +# MakeElement class (deprecated) + +- Constructor signature: ` (tag: K)` + +Utility class for easily creating and manipulating HTML elements. + +_**@deprecated** (documentation can still be found in the sources or inside `bin/classes/MakeElement.d.ts`)_ re-knownout - https://github.com/re-knownout/
knownout@hotmail.com diff --git a/package/bin/classes/DateConverter.ts b/package/bin/classes/DateConverter.ts index f637219..22de34b 100644 --- a/package/bin/classes/DateConverter.ts +++ b/package/bin/classes/DateConverter.ts @@ -5,7 +5,7 @@ */ /** - * Utility function to convert date, javascript or unix + * Utility class to convert date, javascript or unix * timestamps to specific forms. */ export default class DateConverter @@ -63,8 +63,10 @@ export default class DateConverter let monthName = mappings.months[this.entry.getMonth()] as string; // Changing the ending to case specific - if (mappings.casing) Object.entries(mappings.casing).forEach(([ literal, replacer ]) => - monthName = monthName.replace(new RegExp(literal, "g"), replacer)); + if (mappings.casing) Object.entries(mappings.casing).forEach(([ literal, replacer ]) => { + const canProcess = monthName.slice(-literal.length) == literal; + if (canProcess) monthName = monthName.slice(0, -literal.length) + replacer; + }); // Shortcut for adding leading zeros const padStart = (value: number) => String(value).padStart(2, "0"); diff --git a/package/bin/classes/MakeElement.ts b/package/bin/classes/MakeElement.ts index 7aa4303..a265317 100644 --- a/package/bin/classes/MakeElement.ts +++ b/package/bin/classes/MakeElement.ts @@ -7,6 +7,8 @@ /** * Utility class for easily creating and * manipulating HTML elements. + * + * @deprecated */ export default class MakeElement { diff --git a/package/bin/classes/CacheController.ts b/package/bin/classes/StorageController.ts similarity index 92% rename from package/bin/classes/CacheController.ts rename to package/bin/classes/StorageController.ts index 4ae8597..afc8a67 100644 --- a/package/bin/classes/CacheController.ts +++ b/package/bin/classes/StorageController.ts @@ -8,7 +8,7 @@ * An add-on over the native browser storage. Provides simplified * interaction interface (slower than native due to JSON transformations). */ -export default class CacheController +export default class StorageController { /** * An add-on over the native browser storage. Provides simplified @@ -36,7 +36,7 @@ export default class CacheController * * @param key storage key (cacheKeysList). * @param value storage value. - * @return {this} CacheController instance. + * @return {this} StorageController instance. */ public setItem (key: string, value: T): this { this.storage.setItem(key, JSON.stringify(value)); @@ -46,7 +46,7 @@ export default class CacheController /** * Remove item from defined browser storage. * @param key storage key. - * @return {this} CacheController instance. + * @return {this} StorageController instance. */ public removeItem (key: string): this { this.storage.removeItem(key); diff --git a/package/bin/classes/tests/ConvertDate.test.ts b/package/bin/classes/tests/DateConverter.ts similarity index 100% rename from package/bin/classes/tests/ConvertDate.test.ts rename to package/bin/classes/tests/DateConverter.ts diff --git a/package/bin/classes/tests/CacheController.test.ts b/package/bin/classes/tests/StorageController.test.ts similarity index 86% rename from package/bin/classes/tests/CacheController.test.ts rename to package/bin/classes/tests/StorageController.test.ts index 6d10990..cf71242 100644 --- a/package/bin/classes/tests/CacheController.test.ts +++ b/package/bin/classes/tests/StorageController.test.ts @@ -4,13 +4,13 @@ * https://github.com/re-knownout/lib */ -import CacheController from "../CacheController"; +import StorageController from "../StorageController"; -describe("CacheController class tests", () => { +describe("StorageController class tests", () => { const key = "testNode", value = { value: "Hello world!" }; - const controller = new CacheController(localStorage); + const controller = new StorageController(localStorage); it("Storage read/write test", () => { controller.setItem(key, value); diff --git a/package/bin/functions/computeArrayWeights.ts b/package/bin/functions/computeArrayWeights.ts index 349e6c5..1b3e4e9 100644 --- a/package/bin/functions/computeArrayWeights.ts +++ b/package/bin/functions/computeArrayWeights.ts @@ -12,7 +12,7 @@ import compareStrings from "./compareStrings"; * @param {string[]} array values list. * @return {number[]} weights list. */ -function computeArrayWeights (query: string, array: string[]) { +function computeArrayWeights (query: string, array: string[]): number[] { return Array(array.length).fill(0) .map((item, index) => compareStrings(array[index], query).weight); } diff --git a/package/bin/functions/computeProgress.tsx b/package/bin/functions/computeProgress.tsx index 4f65784..357d65c 100644 --- a/package/bin/functions/computeProgress.tsx +++ b/package/bin/functions/computeProgress.tsx @@ -18,12 +18,12 @@ * @param {number} min minimum for current value (default - 0) * @return {number} computed progress */ -function computeProgress (value: number, max = 100, min = 0) { +function computeProgress (value: number, max = 100, min = 0): number { // A - current value // B - maximum (for current value) // C - minimum (for current value) - // X = ((A - C) * 100) / (B - C) - return ((value - min) * 100) / (max - min); + // X = (A * 100) / (B - C) + return (value * 100) / (max - min); } export default computeProgress; diff --git a/package/bin/functions/mergeObjects.ts b/package/bin/functions/mergeObjects.ts index 48c3ff0..edb915f 100644 --- a/package/bin/functions/mergeObjects.ts +++ b/package/bin/functions/mergeObjects.ts @@ -16,9 +16,10 @@ export type TObject = { [key: string | number | symbol]: any }; * @param {number} minMergeLimit minimum objects in sequence to be merged. * @return {TObject[]} generated object with merged entities. */ -function mergeObjects (objects: TObject[], mergeKey: [ string, any ], minMergeLimit: number = 2): TObject[] { +function mergeObjects (objects: TObject[], mergeKey: { [key: string]: string }, minMergeLimit: number = 2): TObject[] { // Copy objects list to local variable let objectsList = [ ...objects ]; + const currentMergeKey = Object.entries(mergeKey)[0]; // Sequence indexes container const sequencesList: [ number, number ][] = []; @@ -26,11 +27,11 @@ function mergeObjects (objects: TObject[], mergeKey: [ string, any ], minMergeLi objectsList.forEach((object, index) => { // Get key value from object if exist - const keyValue = object.hasOwnProperty(mergeKey[0]) ? object[mergeKey[0]] : null; + const keyValue = object.hasOwnProperty(currentMergeKey[0]) ? object[currentMergeKey[0]] : null; if (!keyValue) return; // If key-value pair matches... - if (keyValue == mergeKey[1]) { + if (keyValue == currentMergeKey[1]) { // ... update sequence start index if not updated yet. if (sequenceStartIndex < 0) sequenceStartIndex = index; } else { diff --git a/package/bin/functions/mergeStringArray.ts b/package/bin/functions/mergeStringArray.ts index 6bd14cf..a64f0d3 100644 --- a/package/bin/functions/mergeStringArray.ts +++ b/package/bin/functions/mergeStringArray.ts @@ -25,7 +25,7 @@ export default function mergeStringArray (array: string[], minMergeLimit: number // Merging each unique sequence of entities (this can be slow). Array.from(new Set(array)).forEach(entry => - generated = mergeObjects(generated, [ "value", entry ], minMergeLimit)); + generated = mergeObjects(generated, { value: entry }, minMergeLimit)); return generated.map(item => Array.isArray(item) ? item.map(e => e.value) : item.value) as string[]; diff --git a/package/bin/functions/rotateArray.ts b/package/bin/functions/rotateArray.ts new file mode 100644 index 0000000..5f094b2 --- /dev/null +++ b/package/bin/functions/rotateArray.ts @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Alexandr knownout@hotmail.com + * Licensed under the GNU Affero General Public License v3.0 License (AGPL-3.0) + * https://github.com/re-knownout/lib + */ + +/** + * Utility function to rotate array entries. + * + * _This function does not affect the original array._ + * + * @param {any[]} array entry array (stay the same). + * @param right + * @param steps rotations count. + * @return {any[]} rotated array. + */ +export default function rotateArray (array: T, right = true, steps = 1): T { + const rotate = (array: any[], right: boolean) => { + if (right) return [ + array.slice(-1)[0], + ...array.slice(0, -1) + ]; + + return [ + ...array.slice(1), + array[0] + ]; + }; + + let rotated = rotate(array as any, right); + if (steps - 1 > 0) for (let i = 0; i < steps - 1; i++) + rotated = rotate(rotated, right); + + return rotated as any as T; +} diff --git a/package/bin/functions/tests/computeProgress.test.ts b/package/bin/functions/tests/computeProgress.test.ts index 9565d33..56e8c2b 100644 --- a/package/bin/functions/tests/computeProgress.test.ts +++ b/package/bin/functions/tests/computeProgress.test.ts @@ -7,5 +7,6 @@ import computeProgress from "../computeProgress"; it("computeProgress function test", () => { - expect(computeProgress(1000, 1500, 500)).toEqual(50); + expect(computeProgress(10, 200, 100)).toEqual(10); + expect(computeProgress(10, 200, 0)).toEqual(5); }); diff --git a/package/bin/functions/tests/mergeObjects.test.ts b/package/bin/functions/tests/mergeObjects.test.ts index acfe1db..ee44612 100644 --- a/package/bin/functions/tests/mergeObjects.test.ts +++ b/package/bin/functions/tests/mergeObjects.test.ts @@ -70,14 +70,14 @@ const testObjectTransform = [ describe("mergeObject function test", () => { it("Mixed object triple merging test", () => - expect(mergeObjects(testObjects[0], [ "type", "cat" ])).toEqual(testObjectTransform[0]) + expect(mergeObjects(testObjects[0], { type: "cat" })).toEqual(testObjectTransform[0]) ); it("Mixed object without merging test", () => - expect(mergeObjects(testObjects[1], [ "type", "cat" ])).toEqual(testObjectTransform[1]) + expect(mergeObjects(testObjects[1], { type: "cat" })).toEqual(testObjectTransform[1]) ); it("Object with identical elements test", () => - expect(mergeObjects(testObjects[2], [ "type", "cat" ])).toEqual(testObjectTransform[2]) + expect(mergeObjects(testObjects[2], { type: "cat" })).toEqual(testObjectTransform[2]) ); }); diff --git a/package/bin/functions/tests/rotateArray.test.ts b/package/bin/functions/tests/rotateArray.test.ts new file mode 100644 index 0000000..177dfb4 --- /dev/null +++ b/package/bin/functions/tests/rotateArray.test.ts @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2022 Alexandr knownout@hotmail.com + * Licensed under the GNU Affero General Public License v3.0 License (AGPL-3.0) + * https://github.com/re-knownout/lib + */ + +import rotateArray from "../rotateArray"; + +it("rotateArray function test", () => { + expect(rotateArray([ 1, 2, 3, 4, 5 ])).toStrictEqual([ 5, 1, 2, 3, 4 ]); + expect(rotateArray([ 1, 2, 3, 4, 5 ], false)).toStrictEqual([ 2, 3, 4, 5, 1 ]); + + expect(rotateArray([ 1, 2, 3, 4, 5 ], true, 3)).toStrictEqual([ 3, 4, 5, 1, 2 ]); + expect(rotateArray([ 1, 2, 3, 4, 5 ], false, 3)) + .toStrictEqual([ 4, 5, 1, 2, 3 ]); +}); diff --git a/package/lib.ts b/package/lib.ts index 8754e89..ed970aa 100644 --- a/package/lib.ts +++ b/package/lib.ts @@ -4,7 +4,7 @@ * https://github.com/re-knownout/lib */ -import CacheController from "./bin/classes/CacheController"; +import StorageController from "./bin/classes/StorageController"; import DateConverter from "./bin/classes/DateConverter"; import MakeElement from "./bin/classes/MakeElement"; import MakeFormData from "./bin/classes/MakeFormData"; @@ -21,6 +21,7 @@ import compareStrings from "./bin/functions/compareStrings"; import computeProgress from "./bin/functions/computeProgress"; import computeArrayWeights from "./bin/functions/computeArrayWeights"; import sortByWeights from "./bin/functions/sortByWeights"; +import rotateArray from "./bin/functions/rotateArray"; export { classNames, @@ -32,11 +33,12 @@ export { computeProgress, computeArrayWeights, sortByWeights, + rotateArray, DateConverter, StringExtractor, StringProcessor, - CacheController, + StorageController, MakeFormData, Random, MakeElement diff --git a/package/package.json b/package/package.json index 0ce6982..9cdb186 100644 --- a/package/package.json +++ b/package/package.json @@ -1,6 +1,6 @@ { "name": "@knownout/lib", - "version": "0.1.0", + "version": "0.1.1", "author": "Alexandr knownout@hotmail.com", "license": "AGPL-3.0", "description": "Utility functions library", diff --git a/webpack.package.js b/webpack.package.js index 84fe3b9..78b90f7 100644 --- a/webpack.package.js +++ b/webpack.package.js @@ -13,7 +13,8 @@ const packageConfig = Object.assign(defaultConfig, { }, entry: { - lib: path.resolve(__dirname, "package", "lib") + lib: path.resolve(__dirname, "package", "lib"), + "bin/classes/DateConverter": path.resolve(__dirname, "package", "bin", "classes", "DateConverter") }, plugins: []