From 54c206d5ec855f6bdf4743bb8b0fcac8512d180e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=AF=D1=85=D0=B8?= =?UTF-8?q?=D0=BD?= Date: Thu, 21 Sep 2023 19:04:22 +0500 Subject: [PATCH] 0.12.0 --- -submodule/array/-module/class.mjs | 286 +- -submodule/array/-module/class1.mjs | 301 ++ -submodule/array/-module/config.mjs | 38 +- -submodule/array/-module/config0.mjs | 59 + -submodule/array/-module/module.mjs | 2446 +++++++------ -submodule/array/-module/module0.mjs | 1660 +++++++++ -submodule/game/package.json | 6 + -submodule/number/-module/class.mjs | 1152 ++++-- -submodule/number/-module/config.mjs | 52 +- -submodule/number/-module/export.mjs | 9 +- -submodule/number/-module/module.mjs | 16 +- -submodule/number/-module/type.d.ts | 11 +- -submodule/string/-module/class.mjs | 36 +- -submodule/string/-module/config.mjs | 44 +- .../string/-submodule/ansi/-module/class.mjs | 11 +- .../string/-submodule/ansi/-module/config.mjs | 49 +- .../string/-submodule/ansi/-module/module.mjs | 3096 +++++++++++++---- .../-submodule/console/-module/changelog.md | 0 .../-submodule/console/-module/class.mjs | 0 .../-submodule/console/-module/config.mjs | 0 .../-submodule/console/-module/error.mjs | 0 .../-submodule/console/-module/export.mjs | 3 + .../-submodule/console/-module/module.mjs | 0 .../-submodule/console/-module/module.test.js | 0 .../-submodule/console/-module/readme.md | 0 .../-submodule/console/-module/type.d.ts | 1 + .../string/-submodule/console/package.json | 0 .../-submodule/layout/-module/class.mjs | 21 +- .../-submodule/regexp/-module/changelog.md | 0 .../-submodule/regexp/-module/class.mjs | 0 .../-submodule/regexp/-module/config.mjs | 0 .../-submodule/regexp/-module/error.mjs | 0 .../-submodule/regexp/-module/export.mjs | 3 + .../-submodule/regexp/-module/module.mjs | 0 .../-submodule/regexp/-module/module.test.js | 0 .../-submodule/regexp/-module/readme.md | 0 .../-submodule/regexp/-module/type.d.ts | 1 + .../string/-submodule/regexp/package.json | 0 .../y/-heir/listener/-module/changelog.md | 0 -submodule/y/-heir/listener/-module/class.mjs | 237 ++ .../y/-heir/listener/-module/config.mjs | 31 + -submodule/y/-heir/listener/-module/error.mjs | 0 .../y/-heir/listener/-module/export.mjs | 3 + .../y/-heir/listener/-module/module.mjs | 0 .../y/-heir/listener/-module/module.test.js | 0 -submodule/y/-heir/listener/-module/readme.md | 0 -submodule/y/-heir/listener/-module/type.d.ts | 1 + -submodule/y/-heir/listener/package.json | 47 + -submodule/y/-module/class.mjs | 1171 ++++++- -submodule/y/-module/config.mjs | 13 + -submodule/y/-module/module.mjs | 14 +- -submodule/y/-submodule/arg/-module/class.mjs | 4 +- .../y/-submodule/class/-module/changelog.md | 0 .../y/-submodule/class/-module/config.mjs | 31 + .../y/-submodule/class/-module/error.mjs | 0 .../y/-submodule/class/-module/export.mjs | 2 + .../y/-submodule/class/-module/module.mjs | 119 + .../y/-submodule/class/-module/module.test.js | 0 .../y/-submodule/class/-module/readme.md | 0 .../y/-submodule/class/-module/type.d.ts | 1 + -submodule/y/-submodule/class/package.json | 47 + .../y/-submodule/cond/-module/class.mjs | 2 +- .../y/-submodule/cond/-module/module.mjs | 1 - .../y/-submodule/config/-module/class.mjs | 11 +- .../y/-submodule/entity/-module/class.mjs | 60 +- .../y/-submodule/entity/-module/config.mjs | 15 +- .../-submodule/context/-module/class.mjs | 23 +- .../-submodule/context/-module/config.mjs | 15 +- -submodule/y/-submodule/log/-module/class.mjs | 721 ++-- .../y/-submodule/many/-module/class.mjs | 24 +- .../y/-submodule/many/-module/config.mjs | 8 +- .../y/-submodule/rept/-module/class.mjs | 134 +- .../y/-submodule/rept/-module/config.mjs | 27 +- .../rept/-submodule/block/-module/class.mjs | 577 ++- .../rept/-submodule/block/-module/config.mjs | 114 +- .../y/-submodule/scheduler/-module/class.mjs | 4 +- .../-submodule/event/-module/class.mjs | 90 +- -submodule/y/package.json | 4 + .vscode/snippets.code-snippets | 405 ++- jsconfig.json | 7 +- package.json | 3 +- test.mjs | 13 +- 82 files changed, 10049 insertions(+), 3231 deletions(-) create mode 100644 -submodule/array/-module/class1.mjs create mode 100644 -submodule/array/-module/config0.mjs create mode 100644 -submodule/array/-module/module0.mjs create mode 100644 -submodule/string/-submodule/console/-module/changelog.md create mode 100644 -submodule/string/-submodule/console/-module/class.mjs create mode 100644 -submodule/string/-submodule/console/-module/config.mjs create mode 100644 -submodule/string/-submodule/console/-module/error.mjs create mode 100644 -submodule/string/-submodule/console/-module/export.mjs create mode 100644 -submodule/string/-submodule/console/-module/module.mjs create mode 100644 -submodule/string/-submodule/console/-module/module.test.js create mode 100644 -submodule/string/-submodule/console/-module/readme.md create mode 100644 -submodule/string/-submodule/console/-module/type.d.ts create mode 100644 -submodule/string/-submodule/console/package.json create mode 100644 -submodule/string/-submodule/regexp/-module/changelog.md create mode 100644 -submodule/string/-submodule/regexp/-module/class.mjs create mode 100644 -submodule/string/-submodule/regexp/-module/config.mjs create mode 100644 -submodule/string/-submodule/regexp/-module/error.mjs create mode 100644 -submodule/string/-submodule/regexp/-module/export.mjs create mode 100644 -submodule/string/-submodule/regexp/-module/module.mjs create mode 100644 -submodule/string/-submodule/regexp/-module/module.test.js create mode 100644 -submodule/string/-submodule/regexp/-module/readme.md create mode 100644 -submodule/string/-submodule/regexp/-module/type.d.ts create mode 100644 -submodule/string/-submodule/regexp/package.json create mode 100644 -submodule/y/-heir/listener/-module/changelog.md create mode 100644 -submodule/y/-heir/listener/-module/class.mjs create mode 100644 -submodule/y/-heir/listener/-module/config.mjs create mode 100644 -submodule/y/-heir/listener/-module/error.mjs create mode 100644 -submodule/y/-heir/listener/-module/export.mjs create mode 100644 -submodule/y/-heir/listener/-module/module.mjs create mode 100644 -submodule/y/-heir/listener/-module/module.test.js create mode 100644 -submodule/y/-heir/listener/-module/readme.md create mode 100644 -submodule/y/-heir/listener/-module/type.d.ts create mode 100644 -submodule/y/-heir/listener/package.json create mode 100644 -submodule/y/-submodule/class/-module/changelog.md create mode 100644 -submodule/y/-submodule/class/-module/config.mjs create mode 100644 -submodule/y/-submodule/class/-module/error.mjs create mode 100644 -submodule/y/-submodule/class/-module/export.mjs create mode 100644 -submodule/y/-submodule/class/-module/module.mjs create mode 100644 -submodule/y/-submodule/class/-module/module.test.js create mode 100644 -submodule/y/-submodule/class/-module/readme.md create mode 100644 -submodule/y/-submodule/class/-module/type.d.ts create mode 100644 -submodule/y/-submodule/class/package.json diff --git a/-submodule/array/-module/class.mjs b/-submodule/array/-module/class.mjs index 09915e9..095fbfc 100644 --- a/-submodule/array/-module/class.mjs +++ b/-submodule/array/-module/class.mjs @@ -1,67 +1,40 @@ //#region YI -import { Y, yClassifyProp, } from "@syls/y"; -import { YCursor } from "../-submodule/cursor/-module/export.mjs"; -import { YMany } from "@syls/y/many"; - -/** @type {import('./config.mjs')['default']['value']?} */ -let config = null; - -await import('./config.mjs') - - .then(c => config = c.default?.value ? c.default.value : c.default) - .catch(e => e); - -/** @type {import('./error.mjs')['default']?} */ -let error = null; - -await import('./error.mjs') - - .then(e => error = e.default) - .catch(e => e); +import { YArg } from "@syls/y/arg"; +import { configArray as config } from "./config.mjs"; +import { Y } from "@syls/y"; //#endregion -//#region YT -/** ### YArrayT - * - Тип `T` - * - * Основной параметр модуля `YArray`. - * +/** + * ### YArray + * - Тип `S` + * - Версия `1.0.0` * *** * - * @typedef {YArrayTE&YArrayTU} YArrayT -*/ -/** ### YArrayTE - * - Тип `TE` - * - * Параметр наследования `YArray`. * - * @typedef {Omit} YArrayTE -*/ -/** ### YArrayTU - * - Тип `TU` - * - * Уникальные параметры `YArray`. * + * *** * @typedef YArrayTU - * @prop {number} length -*/ -/** ### YArrayTUG - * - Тип `TUP` + * @prop {} _ * - * Уникальные генеративные параметры `YArray`. + * @typedef {YArrayTU&YArrayTE} YArrayT + * @typedef {Omit} YArrayTE + * *** + * @class + * @since `1.0.0` + * @version `1.0.0` * - * @typedef YArrayTUG - * @prop {null} _ -*/ - -//#endregion - -/** - * @template Y1 */ -class SArray extends YMany { +export class YArray extends Y { + + //#region static + + static { + + + + }; /** * ### stock @@ -95,207 +68,98 @@ class SArray extends YMany { */ static create(...args) { - return Object.getPrototypeOf(SArray).create.apply(this, [...args]); + return Object.getPrototypeOf(this).create.apply(this, args); }; + /** - * ### sequence - * - * *** - * - * Метод создания массива из указанной последовательности значений. - * - * *** - * @arg {...any} args `Аргументы` + * @arg {Y1} value `Значение` * @static * @method * @public + * @returns {(Y1&Y1)?} + * @template {YArray} Y1 */ - static sequence(...args) { - - return new YArray({ values: args, }); + static becomePrototype(value) { + + return Object.getPrototypeOf(this).becomePrototype.apply(this, [value]); }; -}; -/** - * @extends SArray - * @template Y1 -*/ -class DArray extends SArray { - - /** - * ### values - * - * Значения. - * - * *** - * @type {Y1[]} - * @field - * @public - */ - values; - -}; -/** - * @extends DArray - * @template Y1 -*/ -class IArray extends DArray { + //#endregion + num; + /** - * ### cursors + * ### YArrayConstructor * - * Курсоры. * - * *** - * @type {YCursor[]} - * @field - * @public - */ - cursors; - -}; -/** - * @extends IArray - * @template Y1 -*/ -class MArray extends IArray { - - - -}; -/** - * @extends MArray - * @template Y1 -*/ -class FArray extends MArray { - - /** - * ### YArray.constructor * + * *** + * @arg {YArrayT} args `Аргументы` * + * Представлены единым объектом носителем аргументов. * * *** - * @arg {YArrayT&G} t + * @constructor */ - constructor(t) { - - t = [...arguments]; - - super(Object.assign(t = FArray.#before(t), {})); + constructor(...args) { - FArray.#deceit.apply(this, [t]); - - }; - - /** @arg {any[]} t */ - static #before(t) { - - /** @type {YArrayT} */ - let r = {}; - - if (t?.length === 1 && [Object, YArray].includes(t[0]?.constructor) && !Object.getOwnPropertyNames(t[0]).includes('_ytp')) { - - r = t[0]; + try { + + //#region before + + /** @type {YArg} */ + const yarg = args instanceof YArg ? args : new YArg(args); + + yarg.set(['num', 'number']); - return r; + super(yarg); - } else if (!t.length) { + //#endregion + //#region verify - return r; - }; - - if (t[0]?._ytp) { - - t = [...t[0]._ytp]; - - }; - - const arg = yClassifyProp(t); - - r.values = arg.array[0]; - - if (!Object.values(r).length) { - r = { _ytp: t, }; + //#endregion + //#region handle - }; - - return r; - - }; - /** @arg {YArrayT} t @this {YArray} */ - static #deceit(t) { - - try { - FArray.#verify.apply(this, [t]); - } catch (e) { + //#endregion + //#region comply - throw e; - } finally { + //#endregion + return this - }; - - }; - /** @arg {YArrayT} t @this {YArray} */ - static #verify(t) { - - FArray.#handle.apply(this, [t]); - - }; - /** @arg {YArrayT} t @this {YArray} */ - static #handle(t) { - - - - FArray.#create.apply(this, [t]); - - }; - /** @arg {YArrayT} t @this {YArray} */ - static #create(t) { - - const { + .adopt(yarg.getData()) + .correlate() + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + } finally { - } = t; - - this.adopt(t); - - if (config) { - this.adoptDefault(this.constructor.config ?? config); }; - + }; }; /** - * ### YArray - * - Тип `SDIMFY` - * - Цепочка `BDVHC` - * *** - * - * Класс `YArray` предназначен для работы с индексируемыми множествами. - * - * *** - * @class - * @extends FArray - * @template Y1 - * -*/ -export class YArray extends FArray { - - /** @arg {Y1} t */ - constructor(t) { super(t); }; - -}; \ No newline at end of file + * @file array/class.mjs + * @author Yakhin Nikita Artemovich + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 +*/ \ No newline at end of file diff --git a/-submodule/array/-module/class1.mjs b/-submodule/array/-module/class1.mjs new file mode 100644 index 0000000..7ede5c9 --- /dev/null +++ b/-submodule/array/-module/class1.mjs @@ -0,0 +1,301 @@ +//#region YI + +import { Y, yClassifyProp, } from "@syls/y"; +import { YCursor } from "../-submodule/cursor/-module/export.mjs"; +import { YMany } from "@syls/y/many"; + +/** @type {import('./config0.mjs')['default']['value']?} */ +let config = null; + +await import('./config0.mjs') + + .then(c => config = c.default?.value ? c.default.value : c.default) + .catch(e => e); + +/** @type {import('./error.mjs')['default']?} */ +let error = null; + +await import('./error.mjs') + + .then(e => error = e.default) + .catch(e => e); + +//#endregion +//#region YT + +/** ### YArrayT + * - Тип `T` + * + * Основной параметр модуля `YArray`. + * + * *** + * + * @typedef {YArrayTE&YArrayTU} YArrayT +*/ +/** ### YArrayTE + * - Тип `TE` + * + * Параметр наследования `YArray`. + * + * @typedef {Omit} YArrayTE +*/ +/** ### YArrayTU + * - Тип `TU` + * + * Уникальные параметры `YArray`. + * + * @typedef YArrayTU + * @prop {number} length +*/ +/** ### YArrayTUG + * - Тип `TUP` + * + * Уникальные генеративные параметры `YArray`. + * + * @typedef YArrayTUG + * @prop {null} _ +*/ + +//#endregion + +/** + * @template Y1 +*/ +class SArray extends YMany { + + /** + * ### stock + * + * *** + * + * + * + * *** + * @type {YArray[]} + * @field + * @static + * @public + */ + static stock = []; + /** + * ### config + * + * + * + * *** + * @field + * @static + * @public + */ + static config = config; + + /** + * @arg {...YArray} args `Аргументы` + * @returns {YArray[]} + */ + static create(...args) { + + return Object.getPrototypeOf(SArray).create.apply(this, [...args]); + + }; + /** + * ### sequence + * + * *** + * + * Метод создания массива из указанной последовательности значений. + * + * *** + * @arg {...any} args `Аргументы` + * @static + * @method + * @public + */ + static sequence(...args) { + + return new YArray({ values: args, }); + + }; + +}; +/** + * @extends SArray + * @template Y1 +*/ +class DArray extends SArray { + + /** + * ### values + * + * Значения. + * + * *** + * @type {Y1[]} + * @field + * @public + */ + values; + +}; +/** + * @extends DArray + * @template Y1 +*/ +class IArray extends DArray { + + /** + * ### cursors + * + * Курсоры. + * + * *** + * @type {YCursor[]} + * @field + * @public + */ + cursors; + +}; +/** + * @extends IArray + * @template Y1 +*/ +class MArray extends IArray { + + + +}; +/** + * @extends MArray + * @template Y1 +*/ +class FArray extends MArray { + + /** + * ### YArray.constructor + * + * + * + * *** + * @arg {YArrayT&G} t + */ + constructor(t) { + + t = [...arguments]; + + super(Object.assign(t = FArray.#before(t), {})); + + FArray.#deceit.apply(this, [t]); + + }; + + /** @arg {any[]} t */ + static #before(t) { + + /** @type {YArrayT} */ + let r = {}; + + if (t?.length === 1 && [Object, YArray].includes(t[0]?.constructor) && !Object.getOwnPropertyNames(t[0]).includes('_ytp')) { + + r = t[0]; + + return r; + + } else if (!t.length) { + + return r; + + }; + + if (t[0]?._ytp) { + + t = [...t[0]._ytp]; + + }; + + const arg = yClassifyProp(t); + + r.values = arg.array[0]; + + if (!Object.values(r).length) { + + r = { _ytp: t, }; + + }; + + return r; + + }; + /** @arg {YArrayT} t @this {YArray} */ + static #deceit(t) { + + try { + + FArray.#verify.apply(this, [t]); + + } catch (e) { + + throw e; + + } finally { + + + + }; + + }; + /** @arg {YArrayT} t @this {YArray} */ + static #verify(t) { + + FArray.#handle.apply(this, [t]); + + }; + /** @arg {YArrayT} t @this {YArray} */ + static #handle(t) { + + + + FArray.#create.apply(this, [t]); + + }; + /** @arg {YArrayT} t @this {YArray} */ + static #create(t) { + + const { + + + + } = t; + + this.adopt(t); + + if (config) { + + this.adoptDefault(this.constructor.config ?? config); + + }; + + }; + +}; + +/** + * ### YArray + * - Тип `SDIMFY` + * - Цепочка `BDVHC` + * *** + * + * Класс `YArray` предназначен для работы с индексируемыми множествами. + * + * *** + * @class + * @extends FArray + * @template Y1 + * +*/ +export class YArray extends FArray { + + /** @arg {Y1} t */ + constructor(t) { super(t); }; + +}; \ No newline at end of file diff --git a/-submodule/array/-module/config.mjs b/-submodule/array/-module/config.mjs index df512e3..f70c22d 100644 --- a/-submodule/array/-module/config.mjs +++ b/-submodule/array/-module/config.mjs @@ -1,15 +1,10 @@ -import { configY } from "@syls/y"; import { YConfig } from "@syls/y/config"; -import { YCursor } from "../-submodule/cursor/-module/class.mjs"; +import { configMany } from "@syls/y/many"; -/** @type {configY} */ +/** @type {configMany['value']} */ const config = { - aliases: [ - - ['length', 'values', 'length'] - - ], + }; @@ -22,32 +17,9 @@ const config = { */ export const configArray = new YConfig(Object.assign(config, { - /** - * ### valuesDefault - * - * *** - * - * Дефолт значение. - * - * *** - * @type {any[]} - * @public - */ - valuesDefault: [], - /** - * ### cursorsDefault - * - * *** - * - * Дефолт курсоры. - * - * *** - * @type {any[]} - * @public - */ - cursorsDefault: [new YCursor()], -}), configY); + +}), configMany); export default configArray; diff --git a/-submodule/array/-module/config0.mjs b/-submodule/array/-module/config0.mjs new file mode 100644 index 0000000..df512e3 --- /dev/null +++ b/-submodule/array/-module/config0.mjs @@ -0,0 +1,59 @@ +import { configY } from "@syls/y"; +import { YConfig } from "@syls/y/config"; +import { YCursor } from "../-submodule/cursor/-module/class.mjs"; + +/** @type {configY} */ +const config = { + + aliases: [ + + ['length', 'values', 'length'] + + ], + +}; + +/** ### configArray + * + * Конфигуратор модуля `array`. + * + * *** + * @public +*/ +export const configArray = new YConfig(Object.assign(config, { + + /** + * ### valuesDefault + * + * *** + * + * Дефолт значение. + * + * *** + * @type {any[]} + * @public + */ + valuesDefault: [], + /** + * ### cursorsDefault + * + * *** + * + * Дефолт курсоры. + * + * *** + * @type {any[]} + * @public + */ + cursorsDefault: [new YCursor()], + +}), configY); + +export default configArray; + +/** + * @file array/config.mjs + * @author Yakhin Nikita Artemovich + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 +*/ \ No newline at end of file diff --git a/-submodule/array/-module/module.mjs b/-submodule/array/-module/module.mjs index 4fde49d..3dfb4a6 100644 --- a/-submodule/array/-module/module.mjs +++ b/-submodule/array/-module/module.mjs @@ -1,22 +1,8 @@ //#region YI -import { condIsMany, condIsNumber } from '@syls/y/cond'; - -/** @type {import('./config.mjs')['default']?} */ -let config = null; - -await import('./config.mjs') - - .then(c => config = c.default) - .catch(e => e); - -/** @type {import('./error.mjs')['default']?} */ -let error = null; - -await import('./error.mjs') - - .then(i => error = i.default) - .catch(e => e); +import { YCond } from '@syls/y/cond'; +import { configArray as config } from './config.mjs'; +import { numberGetRandomReal } from '@syls/number'; //#endregion //#region YT @@ -24,13 +10,12 @@ await import('./error.mjs') /** ### arrayT * - Тип `T` * - Версия `0.0.0` - * - Модуль `array` - * + * * Основной параметр модуля `array`. - * + * * @typedef arrayT - * @prop {any[]} array - * + * @prop {any} _ + * */ //#endregion @@ -40,98 +25,196 @@ await import('./error.mjs') //#endregion -//#region get 0.0.0 +//#region to -/** ### arrayTFGet - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` +/** + * ### to + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Результирующие параметры функции `get`. - * - * @typedef {arrayTFUGet&arrayT} arrayTFGet - * -*/ -/** ### arrayTFUGet - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` - * - * Уникальные параметры функции `get`. - * - * @typedef arrayTFUGet - * @prop {number[]} indexs + * + * + * + * *** + * @typedef toT + * @prop {any[]} array + * @prop {'string'|'number'|'null'|'boolean'} type + * *** + * @arg {toT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ - -/** @arg {arrayTFGet} t */ -function getDeceit(t) { - +function to(args) { + + let result; + try { + + let { + + type, + array, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + result = array; + + //#endregion + //#region comply + + for (const index in array) { - return getVerify(t); - - } catch (e) { + switch (type) { - if (config?.strictMode) { + case 'null': array[index] = null; break; + case 'number': array[index] = array[index] - 0; break; + case 'string': array[index] = array[index] + ''; break; + case 'boolean': array[index] = !!array[index]; break; - throw e; + }; }; - - return undefined; - + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + + } finally { + + + + }; + + return result; + +}; +/** + * ### arrayTo + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция приведения всех элементов массива к указанному типу. + * + * *** + * @arg {Y1} array `Массив` + * @arg {Y2|Y3} type `Тип` + * @returns {type extends toT['type'] ? type extends 'string' ? string[] : type extends 'number' ? number[] : type extends 'boolean' ? boolean[] : null[] : undefined[]} + * @function + * @template Y3 + * @template {any[]} Y1 + * @template {toT['type']} Y2 +*/ +export function arrayTo(array, type) { + return to({ array, type, }); - }; +}; +/** + * ### arrayToNew + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция {@link arrayTo|приведения всех элементов массива к указанному типу}. + * Работает с копией указанного массива. + * + * *** + * @arg {Y1} array `Массив` + * @arg {Y2|Y3} type `Тип` + * @returns {type extends toT['type'] ? type extends 'string' ? string[] : type extends 'number' ? number[] : type extends 'boolean' ? boolean[] : null[] : undefined[]} + * @function + * @template Y3 + * @template {any[]} Y1 + * @template {toT['type']} Y2 +*/ +export function arrayToNew(array, type) { + + return to({ array: array?.slice?.(), type, }); }; -/** @arg {arrayTFGet} t */ -function getVerify(t) { - const { +//#endregion +//#region get +/** + * ### get + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * + * + * *** + * @typedef getT + * @prop {any[]} array + * @prop {number} index + * *** + * @arg {getT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function get(args) { + let result; - } = t; + try { - return getHandle(t); + let { -}; -/** @arg {arrayTFGet} t */ -function getHandle(t) { + index, + array, - const { + } = args; + //#region verify - } = t; - return getComply(t); + //#endregion + //#region handle -}; -/** @arg {arrayTFGet} t */ -function getComply(t) { - const { - array, - indexs, + //#endregion + //#region comply - } = t; + result = index >= 0 ? array[index] : array[array.length + index]; - let result = array; + //#endregion - if (indexs.length) { + } catch (err) { - for (const index of indexs) { + if (config.value.strictMode) { - result = result[index]; + throw err; }; + + + } finally { + + + }; return result; @@ -140,314 +223,338 @@ function getComply(t) { /** * ### arrayGet - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `array` + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Функция получения значения массива в указанной позиции. - * + * + * Функция получения элемента указанного массива по индексу. + * * *** - * @arg {any[]} array `Массив` - * @arg {...number} indexs `Индексы` + * @arg {Y1} array `Массив` + * @arg {Y2} index `Индекс` + * @returns {Y1[index]} + * @template {any[]} Y1 + * @template {number} Y2 + * @function */ -export function arrayGet(array, ...indexs) { +export function arrayGet(array, index) { - return getDeceit({ array, indexs, }); + return get({ array, index, }); }; //#endregion -//#region getSlice 0.0.0 +//#region set -/** ### arrayTFGetSlice - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` +/** + * ### set + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Результирующие параметры функции `getSlice`. - * - * @typedef {arrayTFUGetSlice&arrayT} arrayTFGetSlice - * -*/ -/** ### arrayTFUGetSlice - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` - * - * Уникальные параметры функции `getSlice`. - * - * @typedef arrayTFUGetSlice - * @prop {number[]} indexs + * + * + * + * *** + * @typedef setT + * @prop {any[]} array + * @prop {[number, any]} sets + * *** + * @arg {setT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function set(args) { -/** @arg {arrayTFGetSlice} t */ -function getSliceDeceit(t) { + let result; try { - return getSliceVerify(t); - - } catch (e) { + let { - if (config?.strictMode) { + sets, + array, - throw e; + } = args; - }; - - return undefined; - - } finally { + //#region verify - }; - -}; -/** @arg {arrayTFGetSlice} t */ -function getSliceVerify(t) { + //#endregion + //#region handle - const { + result = array; + //#endregion + //#region comply + for (const [index, value] of sets) { - } = t; + if (YCond.isNumber(index) && index >= 0) array[index] = value; - return getSliceHandle(t); + }; -}; -/** @arg {arrayTFGetSlice} t */ -function getSliceHandle(t) { + //#endregion - const { + } catch (err) { + if (config.value.strictMode) { + throw err; - } = t; + }; - return getSliceComply(t); -}; -/** @arg {arrayTFGetSlice} t */ -function getSliceComply(t) { - const { + } finally { - array, - indexs, - } = t; - let slice = array; + }; - for (const i of indexs) { + return result; - slice = slice[i]; +}; - }; +/** + * ### arraySet + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция установки значений нна заданные индексы указанного массива. + * + * *** + * @arg {Y1} array `Массив` + * @arg {...[number, any]} sets `Сеты` + * @returns {Y1} + * @function + * @template {any[]} Y1 +*/ +export function arraySet(array, ...sets) { - return slice; + return set({ array, sets, }); }; - /** - * ### arrayGetSlice - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `array` + * ### arraySetNew + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Функция получения среза с размерного массива. - * + * + * Функция {@link arraySet|установки значений нна заданные индексы} указанного массива. + * Работает с копией указанного массива. + * * *** - * @arg {any[]} array `Массив` - * @arg {...number} indexs `Индексы` + * @arg {Y1} array `Массив` + * @arg {...[number, any]} sets `Сеты` + * @returns {Y1} + * @function + * @template {any[]} Y1 */ -export function arrayGetSlice(array, ...indexs) { +export function arraySetNew(array, ...sets) { - return getSliceDeceit({ array, indexs }); + return setNew({ array: array.slice(), sets, }); }; //#endregion -//#region getDimension 0.0.0 +//#region mix -/** ### arrayTFGetDimension - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` +/** + * ### mix + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Результирующие параметры функции `getDimension`. - * - * @typedef {arrayTFUGetDimension&arrayT} arrayTFGetDimension - * -*/ -/** ### arrayTFUGetDimension - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` - * - * Уникальные параметры функции `getDimension`. - * - * @typedef arrayTFUGetDimension - * @prop {any} _ + * + * + * + * *** + * @typedef mixT + * @prop {any[]} array + * @prop {number} iter + * *** + * @arg {mixT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function mix(args) { -/** @arg {arrayTFGetDimension} t */ -function getDimensionDeceit(t) { + let result; try { - return getDimensionVerify(t); + let { - } catch (e) { + iter, + array, - if (config?.strictMode) { + } = args; - throw e; + //#region verify - }; - return undefined; - } finally { + //#endregion + //#region handle + result = array; + if (!iter) iter = 1; - }; + //#endregion + //#region comply -}; -/** @arg {arrayTFGetDimension} t */ -function getDimensionVerify(t) { + for (; iter > 0; iter--) { - const { + for (let count = 0; count < result.length; count++) { + const index1 = numberGetRandomReal(0, result.length - 1); + const index2 = numberGetRandomReal(0, result.length - 1); + [result[index1], result[index2]] = [result[index2], result[index1]]; - } = t; + }; - return getDimensionHandle(t); + }; -}; -/** @arg {arrayTFGetDimension} t */ -function getDimensionHandle(t) { + //#endregion - const { + } catch (err) { + if (config.value.strictMode) { + throw err; - } = t; + }; - return getDimensionComply(t); -}; -/** @arg {arrayTFGetDimension} t */ -function getDimensionComply(t) { - const { + } finally { - array, - } = t; - let result = [array.length]; + }; - const levelC = [...array]; + return result; - do { +}; - if (levelC.length && levelC.every(slice => slice.length && slice.every(elem => elem instanceof Array))) { +/** + * ### arrayMix + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция перемешивания элементов массива в произвольном порядке. + * + * *** + * @arg {Y1} array `Массив` + * @arg {number} iter `Итерации` + * @returns {Y1} + * @function + * @template {any[]} Y1 +*/ +export function arrayMix(array, iter) { - result.push(levelC[0].length); + return mix({ array, iter, }); - levelC.splice(0, levelC.length, ...levelC.flat()); +}; +/** + * ### arrayMixNew + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция {@link arrayMix|перемешивания} элементов массива в произвольном порядке. + * Работает с копией указанного массива. + * + * *** + * @arg {Y1} array `Массив` + * @arg {number} iter `Итерации` + * @returns {Y1} + * @function + * @template {any[]} Y1 +*/ +export function arrayMixNew(array, iter) { - } else { + return mix({ array: array.slice(), iter, }); - result.push(levelC.map(slice => slice.length)); +}; - if (result.at(-1).every(n => n === result.at(-1)[0])) { +//#endregion +//#region move - result.splice(-1, 1, result.at(-1)[0]); +/** + * ### move + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * + * + * *** + * @typedef moveT + * @prop {any[]} array + * @prop {number} bias + * @prop {number} index + * @prop {boolean} direct + * *** + * @arg {moveT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function move(args) { - result = result.filter(n => n !== undefined); + let result; - }; + try { - break; + let { - }; + bias, + array, + index, + direct, - } while (levelC.length); + } = args; - return result; + //#region verify -}; -/** - * ### arrayGetDimension - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `array` - * *** - * - * Функция возвращающая кол-во измерений указанного массива. - * - * Под измерениями функция понимает те уровни указанного массива, где все элементы представлены массивами без исключения. - * - * *** - * @arg {any[]} array `Массив` -*/ -export function arrayGetDimension(array) { - return getDimensionDeceit({ array }); + //#endregion + //#region handle -}; -//#endregion -//#region getDevideByCount 0.1.0 -/** ### arrayTFGetDevideByCount - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` - * *** - * - * Результирующие параметры функции `getDevideByCount`. - * - * @typedef {arrayTFUGetDevideByCount&arrayT} arrayTFGetDevideByCount - * -*/ -/** ### arrayTFUGetDevideByCount - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` - * - * Уникальные параметры функции `getDevideByCount`. - * - * @typedef arrayTFUGetDevideByCount - * @prop {number} count -*/ + //#endregion + //#region comply -/** @arg {arrayTFGetDevideByCount} t */ -function getDevideByCountDeceit(t) { + if (direct) { - try { + bias + + } else { - return getDevideByCountVerify(t); - } catch (e) { - if (config?.strictMode) { + }; + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { - throw e; + throw err; }; - return undefined; + } finally { @@ -455,66 +562,106 @@ function getDevideByCountDeceit(t) { }; + return result; + }; -/** @arg {arrayTFGetDevideByCount} t */ -function getDevideByCountVerify(t) { - const { +/** + * ### arrayMove + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция смещения части массива начиная с указанного индекса и на указанное количество шагов. + * При перемещении высвобождает ячейки массива в случае, если выходит за пределы. + * Если же сдвиг осуществляется в сторону со свободным пространством, то массив его заполнит смещаемыми элементами. + * + * Нельзя осуществить смещение в отрицательную область, то есть за пределы нуля. + * + * *** + * @arg {Y1} array `Массив` + * @arg {number} bias `Смещение` + * @arg {number} index `Индекс` + * @arg {boolean} direct `Напрвление` + * @returns {Y1} + * @function + * @template {any[]} Y1 +*/ +export function arrayMove(array, index, bias, direct) { + return move({ array, index, bias, direct, }); +}; - } = t; +//#endregion +//#region swap - return getDevideByCountHandle(t); +/** + * ### swap + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * + * + * *** + * @typedef swapT + * @prop {any[]} array + * @prop {[number, number][]} pairs + * *** + * @arg {swapT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function swap(args) { -}; -/** @arg {arrayTFGetDevideByCount} t */ -function getDevideByCountHandle(t) { + let result; - const { + try { + let { + pairs, + array, - } = t; + } = args; - if (!condIsMany(t.array)) { + //#region verify - t.array = [t.array]; - }; - return getDevideByCountComply(t); + //#endregion + //#region handle -}; -/** @arg {arrayTFGetDevideByCount} t */ -function getDevideByCountComply(t) { + result = array; - const { + //#endregion + //#region comply - array, - count, + for (const [index1, index2] of pairs) { - } = t; + if (array[index1] === undefined && array[index2] === undefined) continue; - const result = []; + [array[index1], array[index2]] = [array[index2], array[index1]]; - if (array.length === 1) { + }; - if (array instanceof Array) { + //#endregion - return array; + } catch (err) { - } else { + if (config.value.strictMode) { - return [array]; + throw err; }; - }; - for (let i = 0; i < array.length; i += count) { - result.push(array.slice(i, i + count)); + } finally { + + }; @@ -523,289 +670,345 @@ function getDevideByCountComply(t) { }; /** - * ### arrayGetDevideByCount - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `array` + * ### arraySwap + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция смены позиции элементов указанного массива по их индексам. + * + * *** + * @arg {Y1} array `Массив` + * @arg {...[number, number]} pairs `Пары` + * @function + * @template {any[]} Y1 +*/ +export function arraySwap(array, ...pairs) { + + return swap({ array, pairs, }); + +}; +/** + * ### arraySwapNew + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Функция для деления указанного массива на массив подмассивов, где каждый подмассив содержит указанное количество элементов исходного массива. - * + * + * Функция смены позиции элементов указанного массива по их индексам. + * Работает с копией указанного массива. + * * *** - * @arg {any[]} array `Массив` - * @arg {number} count `Количество` + * @arg {Y1} array `Массив` + * @arg {...[number, number]} pairs `Пары` + * @function + * @template {any[]} Y1 + * @function */ -export function arrayGetDevideByCount(array, count) { +export function arraySwapNew(array, ...pairs) { - return getDevideByCountDeceit({ array, count, }); + return swap({ array: array?.slice?.(), pairs, }); }; //#endregion +//#region swapByElem -//#region push - -/** ### arrayTFPush - * - Тип `TF` +/** + * ### swapByElem + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `push`. * - * @typedef {arrayTFUPush&arrayT} arrayTFPush * + * *** + * @typedef swapByElemT + * @prop {any[]} array + * @prop {[any, any][]} pairs + * *** + * @arg {swapByElemT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ -/** ### arrayTFUPush - * - Тип `TFU` - * - * Уникальные параметры функции `push`. - * - * @typedef arrayTFUPush - * @prop {any} _ -*/ +function swapByElem(args) { + + let result; -/** @arg {arrayTFPush} t */ -function pushDeceit(t) { - try { - - return pushVerify(t); - - } catch (e) { - - if (config?.strictMode) { - - throw e; - + + let { + + pairs, + array, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + result = array; + + //#endregion + //#region comply + + const indexs = []; + + for (const [elem1, elem2] of pairs) { + + if (elem1 === undefined || elem2 === undefined) continue; + + const [index1, index2] = [elem1, elem2].map(elem => array.indexOf(elem)); + + if (index1 === -1 || index2 === -1) continue; + + indexs.push([index1, index2]); + }; - - return undefined; - + + result = arraySwap(array, ...indexs); + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + + } finally { - - - + + + }; - -}; -/** @arg {arrayTFPush} t */ -function pushVerify(t) { - - const { - - - - } = t; - - return pushHandle(t); - -}; -/** @arg {arrayTFPush} t */ -function pushHandle(t) { - - const { - - - - } = t; - - return pushComply(t); - -}; -/** @arg {arrayTFPush} t */ -function pushComply(t) { - - const { - - - - } = t; - - - + + return result; + }; /** - * ### arrayPush - * - Версия `0.0.0` + * ### arraySwapByElem + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция сдвига элементов указанного массива с указанной позции на указанную длину. - * - * Не стоит путать данную функцию с нативной функцией `push`. - * Данная функция предназначена для преобразования массива, а не его дополнения новыми элементами. - * Если вас интересует дополнение массива, то ознакомьтесь с {@link arrayAppend|функцией дополнения}. - * - * + * Функция смены позиции элементов указанного массива по его элементам. * * *** - * @arg {G} array `Массив` - * @arg {number} bias `Смещение` - * - * Определяет длину, на которую необходимо сместить элементы. - * Может принимать отрицательные значения для смещения влево. - * - * @arg {number} index `Индекс` + * @arg {Y1} array `Массив` + * @arg {...[any, any]} pairs `Пары` + * @function + * @template {any[]} Y1 +*/ +export function arraySwapByElem(array, pairs) { + + return swapByElem({ array, pairs, }); + +}; +/** + * ### arraySwapByElemNew + * - Тип `S` + * - Версия `1.0.0` + * *** * - * Определяет позицию, начиная с которой все элементы после будут смещены. + * Функция {@link arraySwapByElem|смены позиции элементов указанного массива по его элементам}. + * Работает с копией указанного массива. * - * @return {G} - * @template {any[]} G + * *** + * @arg {Y1} array `Массив` + * @arg {...[any, any]} pairs `Пары` + * @function + * @template {any[]} Y1 */ -export function arrayPush(array, index, bias) { +export function arraySwapByElemNew(array, pairs) { - return pushDeceit({ array, index, bias, }); + return swapByElem({ array: array?.slice?.(), pairs, }); }; //#endregion -//#region join 0.0.0 +//#region paste -/** ### arrayTFJoin - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` +/** + * ### paste + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `join`. - * - * @typedef {arrayTFUJoin&arrayT} arrayTFJoin - * -*/ -/** ### arrayTFUJoin - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` * - * Уникальные параметры функции `join`. * - * @typedef arrayTFUJoin - * @prop {string} joiner + * *** + * @typedef pasteT + * @prop {any[]} array + * @prop {any[]} elems + * @prop {number} index + * @prop {number} length + * *** + * @arg {pasteT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function paste(args) { + + let result; -/** @arg {arrayTFJoin} t */ -function joinDeceit(t) { - try { - - return joinVerify(t); - - } catch (e) { - - if (config?.strictMode) { - - throw e; - + + let { + + array, + elems, + index, + length, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + result = array; + + //#endregion + //#region comply + + result = arrayAppend(arrayRemove(result, index, length), index, ...elems); + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + }; - - return undefined; - + + + } finally { - - - + + + }; - -}; -/** @arg {arrayTFJoin} t */ -function joinVerify(t) { - - const { - - - - } = t; - - return joinHandle(t); - -}; -/** @arg {arrayTFJoin} t */ -function joinHandle(t) { - - const { - - - - } = t; - - return joinComply(t); - -}; -/** @arg {arrayTFJoin} t */ -function joinComply(t) { - - const { - - array, - joiner, - - } = t; - - return array instanceof Array ? array.join(joiner) : array; - + + return result; + }; /** - * ### arrayJoin - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `array` + * ### arrayPaste + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция вставки элементов в массив. + * + * *** + * @arg {Y1} array `Массив` + * @arg {...any} elems `Элементы` + * @arg {number} index `Индекс` + * @arg {number} length `Длина` + * @function + * @template {any[]} Y1 +*/ +export function arrayPaste(array, index, length, ...elems) { + + return paste({ array, index, length, elems, }); + +}; +/** + * ### arrayPasteNew + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция соединения элементов массива в строку. + * Функция {@link arrayPaste|вставки элементов в массив}. + * Работает с копией указанного массива. * * *** - * @arg {G} - * @arg {string} joiner `Соединитель` - * @returns {G} - * @template {any[]} G + * @arg {Y1} array `Массив` + * @arg {...any} elems `Элементы` + * @arg {number} index `Индекс` + * @arg {number} length `Длина` + * @function + * @template {any[]} Y1 */ -export function arrayJoin(array, joiner) { +export function arrayPasteNew(array, index, length, ...elems) { - return joinDeceit({ array, joiner }); + return paste({ array: array?.slice?.(), index, length, elems, }); }; //#endregion -//#region unite 0.0.0 +//#region clear -/** ### arrayTFUnite - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` +/** + * ### clear + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `unite`. - * - * @typedef {arrayTFUUnite&arrayT} arrayTFUnite - * -*/ -/** ### arrayTFUUnite - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` * - * Уникальные параметры функции `unite`. * - * @typedef arrayTFUUnite - * @prop {any[][]} arrays + * *** + * @typedef clearT + * @prop {any[]} array + * *** + * @arg {clearT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ - -/** @arg {arrayTFUnite} t */ -function uniteDeceit(t) { +function clear(args) { + + let result; try { - return uniteVerify(t); + let { + + array, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + result = array; + + //#endregion + //#region comply + + arrayRemove(result, 0, result.length); - } catch (e) { + //#endregion - if (config?.strictMode) { + } catch (err) { + + if (config.value.strictMode) { - throw e; + throw err; }; - return undefined; + } finally { @@ -813,848 +1016,839 @@ function uniteDeceit(t) { }; -}; -/** @arg {arrayTFUnite} t */ -function uniteVerify(t) { - - const { - - - - } = t; - - return uniteHandle(t); - -}; -/** @arg {arrayTFUnite} t */ -function uniteHandle(t) { - - const { - - - - } = t; - - return uniteComply(t); - -}; -/** @arg {arrayTFUnite} t */ -function uniteComply(t) { - - const { - - arrays - - } = t; - - return arrays.flat().filter(element => element); + return result; }; /** - * ### arrayUnite - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `array` + * ### arrayClear + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция очистки массива. + * + * *** + * @arg {Y1} array `Массив` + * @returns {Y1} + * @function + * @template {any[]} Y1 +*/ +export function arrayClear(array) { + + return clear({ array, }); + +}; +/** + * ### arrayClearNew + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция объединения элементов указанных массивов в единый массив. + * Функция {@link arrayClear|очистки массива}. + * Работает с копией указанного массива. * * *** - * @arg {...G[]} arrays `Массивы` - * @returns {G[]} - * @template G + * @arg {Y1} array `Массив` + * @returns {Y1} + * @function + * @template {any[]} Y1 */ -export function arrayUnite(...arrays) { +export function arrayClearNew(array) { - return uniteDeceit({ arrays, }); + return clear({ array: array?.slice?.(), }); }; //#endregion -//#region bring 0.0.0 +//#region append -/** ### arrayTFBring - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` +/** + * ### append + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Результирующие параметры функции `bring`. - * - * @typedef {arrayTFUBring&arrayT} arrayTFBring - * -*/ -/** ### arrayTFUBring - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` - * - * Уникальные параметры функции `bring`. - * - * @typedef arrayTFUBring - * @prop {any} append - * @prop {number} length + * + * + * + * *** + * @typedef appendT + * @prop {any[]} array + * @prop {any[]} elems + * @prop {number} index + * *** + * @arg {appendT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function append(args) { -/** @arg {arrayTFBring} t */ -function bringDeceit(t) { + let result; try { - return bringVerify(t); + let { - } catch (e) { + index, + array, + elems, - if (config?.strictMode) { + } = args; - throw e; + //#region verify - }; - return undefined; - } finally { + //#endregion + //#region handle + result = array; + //#endregion + //#region comply - }; + if (result.length <= index) { -}; -/** @arg {arrayTFBring} t */ -function bringVerify(t) { + result[index] = elems[0]; - const { + result.push(...elems.slice(1)); + } else { + result.splice(index, 0, ...elems); - } = t; + }; - return bringHandle(t); + //#endregion -}; -/** @arg {arrayTFBring} t */ -function bringHandle(t) { + } catch (err) { - const { + if (config.value.strictMode) { + throw err; + }; - } = t; - return bringComply(t); -}; -/** @arg {arrayTFBring} t */ -function bringComply(t) { + } finally { - const { - array, - length, - append, - } = t; + }; - while (array.length < length) { + return result; - array.push(append instanceof Function ? append() : append); +}; - }; +/** + * ### arrayAppend + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция добавления элементов в массив. + * + * *** + * @arg {Y1} array `Массив` + * @arg {number} index `Индекс` + * @arg {...any} elems `Значения` + * @function + * @template {any[]} Y1 +*/ +export function arrayAppend(array, index, ...elems) { - return array; + return append({ array, index, elems, }); }; - /** - * ### arrayBring - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `array` - * *** - * - * Функция доведения массива до указанной длинны указанным дополнителем. - * - * В качестве новых элементов выступают указанные значения. - * - * *** - * @arg {G} array `Массив` - * @arg {any} append `Дополнитель` - * Может выступать значением или функцией. - * - * В первом случае функция будет доводить длинну массива до указанного значения, добавляя постоянный указанный дополнитель. - * В случае дополнителя являющегося функцией, будет добавляться результат данной функции. - * @arg {number} length `Длина` - * @returns {G} - * @template {any[]} G + * ### arrayAppendNew + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция {@link arrayAppend|добавления элементов в массив}. + * Работает с копией указанного массива. + * + * *** + * @arg {Y1} array `Массив` + * @arg {number} index `Индекс` + * @arg {...any} elems `Значения` + * @function + * @template {any[]} Y1 */ -export function arrayBring(array, length, append) { +export function arrayAppendNew(array, index, ...elems) { - return bringDeceit({ array, length, append }); + return append({ array: array?.slice?.(), index, elems, }); }; //#endregion -//#region equal 0.0.0 +//#region remove -/** ### arrayTFEqual - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` +/** + * ### remove + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Результирующие параметры функции `equal`. - * - * @typedef {arrayTFUEqual&arrayT} arrayTFEqual - * -*/ -/** ### arrayTFUEqual - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` - * - * Уникальные параметры функции `equal`. - * - * @typedef arrayTFUEqual - * @prop {any[][]} arrays + * + * + * + * *** + * @typedef removeT + * @prop {any[]} array + * @prop {number} count + * @prop {number} index + * *** + * @arg {removeT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function remove(args) { -/** @arg {arrayTFEqual} t */ -function equalDeceit(t) { + let result; try { - return equalVerify(t); + let { - } catch (e) { + count, + index, + array, - if (config?.strictMode) { + } = args; - throw e; + //#region verify - }; - return undefined; - } finally { + //#endregion + //#region handle + result = array; + //#endregion + //#region comply - }; + array.splice(index, count) -}; -/** @arg {arrayTFEqual} t */ -function equalVerify(t) { + //#endregion - const { + } catch (err) { + if (config.value.strictMode) { + throw err; - } = t; + }; - return equalHandle(t); -}; -/** @arg {arrayTFEqual} t */ -function equalHandle(t) { - const { + } finally { - } = t; + }; - return equalComply(t); + return result; }; -/** @arg {arrayTFEqual} t */ -function equalComply(t) { - - const { - - array, - arrays, - - } = t; - - for (const a of arrays) { - for (const i in a) { - - if (array[i] !== a[i]) { - - return false; - - }; - - }; - - }; +/** + * ### arrayRemove + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция удаления элементов из массива в указанном диапазоне. + * + * *** + * @arg {Y1} array `Массив` + * @arg {number} count `Конечный индекс` + * @arg {number} index `Начальный индекс` + * @function + * @template {any[]} Y1 +*/ +export function arrayRemove(array, index, count) { - return true; + return remove({ array, index, count, }); }; - /** - * ### arrayEqual - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `array` + * ### arrayRemoveNew + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Функция проверки значений указанных массивов на эквивалентность с первым указанным массивом. - * + * + * Функция {@link arrayRemove|удаления элементов из массива в указанном диапазоне}. + * Работает с копией указанного массива. + * * *** - * @arg {any[]} array `Массив` - * @arg {...any[]} arrays `Массивы` + * @arg {Y1} array `Массив` + * @arg {number} count `Конечный индекс` + * @arg {number} index `Начальный индекс` + * @function + * @template {any[]} Y1 */ -export function arrayEqual(array, ...arrays) { +export function arrayRemoveNew(array, index, count) { - return equalDeceit({ array, arrays, }); + return remove({ array: array?.slice?.(), index, count, }); }; //#endregion -//#region unique 0.0.0 +//#region unique -/** ### arrayTFUnique - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` +/** + * ### unique + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `unique`. - * - * @typedef {arrayTFUUnique&arrayT} arrayTFUnique - * -*/ -/** ### arrayTFUUnique - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` * - * Уникальные параметры функции `unique`. * - * @typedef arrayTFUUnique - * @prop {any[][]} arrays + * *** + * @typedef uniqueT + * @prop {any[]} array + * *** + * @arg {uniqueT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function unique(args) { + + let result; -/** @arg {arrayTFUnique} t */ -function uniqueDeceit(t) { - try { - - return uniqueVerify(t); - - } catch (e) { - - if (config?.strictMode) { - - throw e; - + + let { + + array, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + result = array; + + //#endregion + //#region comply + + const elems = []; + + for (let index = 0; index < array.length; index++) { + + const elem = array[index]; + + if (!elems.includes(elem)) elems.push(elem); + else array.splice(index--, 1); + + }; + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + }; - - return undefined; - - } finally { - - - - }; - -}; -/** @arg {arrayTFUnique} t */ -function uniqueVerify(t) { - - const { - - - - } = t; - - return uniqueHandle(t); - -}; -/** @arg {arrayTFUnique} t */ -function uniqueHandle(t) { - - const { - - - - } = t; - if (t.arrays.length > 1) { - t.array = []; - t.arrays.forEach(array => t.array.push(...array)); + } finally { - } else if (t.arrays.length === 1) { - t.array = t.arrays[0]; }; - - return uniqueComply(t); - -}; -/** @arg {arrayTFUnique} t */ -function uniqueComply(t) { - - const { - - array, - - } = t; - - return Array.from(new Set(array)); - + + return result; + }; /** * ### arrayUnique - * - Версия `0.0.0` - * - Цепочка `DVHC` + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция получения уникальных элементов массива. + * + * *** + * @arg {Y1} array `Массив` + * @function + * @template {any[]} Y1 +*/ +export function arrayUnique(array) { + + return unique({ array, }); + +}; +/** + * ### arrayUniqueNew + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция получения подмассива уникальных элементов указанных массивов. + * Функция {@link arrayUnique|получения уникальных элементов} массива. + * Работает с копией указанного массива. * * *** - * @arg {...G} arrays `Массивы` - * @returns {G} - * @template G + * @arg {Y1} array `Массив` + * @function + * @template {any[]} Y1 */ -export function arrayUnique(...arrays) { +export function arrayUniqueNew(array) { - return uniqueDeceit({ arrays }); + return unique({ array: array.slice(), }); }; //#endregion -//#region append 0.0.0 +//#region convey -/** ### arrayTFAppend - * - Тип `TF` +/** + * ### convey + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `append`. - * - * @typedef {arrayTFUAppend&arrayT} arrayTFAppend - * -*/ -/** ### arrayTFUAppend - * - Тип `TFU` * - * Уникальные параметры функции `append`. * - * @typedef arrayTFUAppend - * @prop {any[]} values - * @prop {number} index + * *** + * @typedef conveyT + * @prop {ant[]} array + * @prop {number} step + * @prop {boolean} direct + * *** + * @arg {conveyT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function convey(args) { + + let result; -/** @arg {arrayTFAppend} t */ -function appendDeceit(t) { - try { - - return appendVerify(t); - - } catch (e) { - - if (config?.strictMode) { - - throw e; - + + let { + + step, + array, + direct, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + if (!step) step = 1; + + if (direct === undefined) direct = true; + + result = array; + step %= result.length; + + console.log(step); + + //#endregion + //#region comply + + for (let count = 0; count < step; count++) { + + for (let index = 0; index < result.length - 1; index++) { + + if (direct) { + + result.push(result.shift()); + + } else { + + result.unshift(result.pop()); + + }; + + }; + }; - - return undefined; - + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + + } finally { - - - - }; - -}; -/** @arg {arrayTFAppend} t */ -function appendVerify(t) { - - const { - - - - } = t; - - return appendHandle(t); - -}; -/** @arg {arrayTFAppend} t */ -function appendHandle(t) { - - const { - - - - } = t; - if (!condIsNumber(t.index)) { - t.index = t.array.length; }; - - return appendComply(t); - -}; -/** @arg {arrayTFAppend} t */ -function appendComply(t) { - - const { - - array, - index, - values, - - } = t; - - array.splice(index, 0, ...values); - return array; - + return result; + }; /** - * ### arrayAppend - * + * ### arrayConvey + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция добавления в указанное место массива новых значений. + * Функция сдвига элементов массива на указанное количество шагов влево/вправо. + * Конечный элемент сдвига меняется местами с первым элементом при шаге вправо и наоборот. + * + * *** + * @arg {Y1} array `Массив` + * @arg {number} step `Шаг` + * @arg {boolean} direct `Направление` + * Шаг сдвига. * + * - Дефолт `1` + * *** + * @returns {Y1} + * @function + * @template {any[]} Y1 +*/ +export function arrayConvey(array, step, direct) { + + return convey({ array, step, direct, }); + +}; +/** + * ### arrayConveyNew + * - Тип `S` + * - Версия `1.0.0` * *** - * @arg {G} array `Массив` - * @arg {number?} index `Индекс` * - * - Если не указан, то значения будут добавлены в конец массива. + * Функция {@link arrayConvey|сдвига элементов массива на указанное количество шагов влево/вправо}. + * Конечный элемент сдвига меняется местами с первым элементом при шаге вправо и наоборот. + * + * *** + * @arg {Y1} array `Массив` + * @arg {number} step `Шаг` + * @arg {boolean} direct `Направление` + * Шаг сдвига. * - * @arg {...any} values `Значения` - * @return {G} - * @template {any[]} G + * - Дефолт `1` + * *** + * @returns {Y1} + * @function + * @template {any[]} Y1 */ -export function arrayAppend(array, index, ...values) { +export function arrayConveyNew(array, step, direct) { - return appendDeceit({ array, index, values, }); + return convey({ array: array?.slice?.(), step, direct, }); }; //#endregion -//#region create 0.0.0 +//#region foreach -/** ### arrayTFCreate - * - Тип `TF` +/** + * ### foreach + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `create`. - * - * @typedef {arrayTFUCreate&arrayT} arrayTFCreate * -*/ -/** ### arrayTFUCreate - * - Тип `TFU` - * - * Уникальные параметры функции `create`. * - * @typedef arrayTFUCreate - * @prop {number[]} sizes + * *** + * @typedef foreachT + * @prop {any[]} array + * @prop {(elem: any, array: any[], index: number) => any} act + * @prop {((elem: any, array: any[], index: number) => boolean)[]} condsBreak + * @prop {((elem: any, array: any[], index: number) => boolean)[]} condsContinue + * *** + * @arg {foreachT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function foreach(args) { + + let result; -/** @arg {arrayTFCreate} t */ -function createDeceit(t) { - try { - - return createVerify(t); - - } catch (e) { - - if (config?.strictMode) { - - throw e; - - }; - - return undefined; - - } finally { - - - - }; - -}; -/** @arg {arrayTFCreate} t */ -function createVerify(t) { - - const { - - - - } = t; - - return createHandle(t); - -}; -/** @arg {arrayTFCreate} t */ -function createHandle(t) { - - const { - - - - } = t; - - return createComply(t); - -}; -/** @arg {arrayTFCreate} t */ -function createComply(t) { - - const { - - sizes, - - } = t; - - const result = []; - - const lasts = [result]; - for (const size of sizes) { + let { + + act, + array, + condsBreak, + condsContinue, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + result = array; - const lastsNext = []; + //#endregion + //#region comply - for (let index = lasts.length - 1; index >= 0; index--) { + for (const index in result) { - const last = lasts.pop(); + const elem = result[index]; - for (let count = 0; count < size; count++) { + if (condsBreak?.length) { - const array = []; + let flagB = false; - last.push(array); - lastsNext.push(array); + for (const cond of condsBreak) { + + if (cond(elem, result, index)) { + + flagB = true; + + break; + + }; + + }; + + if (flagB) break; }; + if (condsContinue?.length) { + + let flagS = false; + + for (const cond of condsContinue) { + + if (cond(elem, result, index)) { + + flagS = true; + + break; + + }; + + }; + + if (flagS) continue; + + }; + + result[index] = act(elem, result, index); + + }; + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; }; - lasts.push(...lastsNext); + + + } finally { + + }; return result; - + }; /** - * ### arrayCreate - * - Версия `0.0.0` + * ### arrayForeach + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция для создания массива. + * Функция выполнения действий над элементами массива с возможностью пропуска или прерывания. + * В отличии от foreach и map методов массивов, `foreach` от `YArray` унифицирован, обладает логикой для прерывания или пропуска. + * + * *** + * @arg {Y1} array `Массив` + * @arg {Y3} act `Действие` + * @arg {Y2[]} condsBreak `Условия прерывания` + * @arg {Y2[]} condsContinue `Условия пропуска` + * @function + * @template {any[]} Y1 + * @template {(elem: Y1[index], array, index: number) => boolean} Y2 + * @template {(elem: Y1[index], array: Y1, index: number) => any} Y3 +*/ +export function arrayForeach(array, act, condsBreak, condsContinue) { + + return foreach({ array, act, condsBreak, condsContinue, }); + +}; +/** + * ### arrayForeachNew + * - Тип `S` + * - Версия `1.0.0` + * *** * - * Позволяет создавать массив указанной размерности. + * Функция {@link arrayForeach|выполнения действий над элементами массива с возможностью пропуска или прерывания}. + * В отличии от `foreach` и `map` методов массивов, `foreach` от `YArray` унифицирован, обладает логикой для прерывания или пропуска. * * *** - * @arg {...number} sizes `Размеры` + * @arg {Y1} array `Массив` + * @arg {Y3} act `Действие` + * @arg {Y2[]} condsBreak `Условия прерывания` + * @arg {Y2[]} condsContinue `Условия пропуска` + * @function + * @template {any[]} Y1 + * @template {(elem: Y1[index], array, index: number) => boolean} Y2 + * @template {(elem: Y1[index], array: Y1, index: number) => any} Y3 */ -export function arrayCreate(...sizes) { +export function arrayForeachNew(array, act, condsBreak, condsContinue) { - return createDeceit({ sizes, }); + return foreach({ array, act, condsBreak, condsContinue, }); }; //#endregion +//#region rearrange -//#region rearrangeByIndex 0.0.0 - -/** ### arrayTFRearrangeByIndex - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` +/** + * ### rearrange + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `rearrangeByIndex`. * - * @typedef {arrayTFURearrangeByIndex&arrayT} arrayTFRearrangeByIndex * + * *** + * @typedef {swapT} rearrangeT + * @prop {boolean} directRight + * *** + * @arg {rearrangeT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ -/** ### arrayTFURearrangeByIndex - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` - * - * Уникальные параметры функции `rearrangeByIndex`. - * - * @typedef arrayTFURearrangeByIndex - * @prop {any} _ -*/ +function rearrange(args) { + + let result; -/** @arg {arrayTFRearrangeByIndex} t */ -function rearrangeByIndexDeceit(t) { - try { - - return rearrangeByIndexVerify(t); - - } catch (e) { - - if (config?.strictMode) { - - throw e; - + + let { + + pairs, + array, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + result = array; + + //#endregion + //#region comply + + for (const [indexNow, indexNew] of pairs) { + + result.splice(indexNew, 0, result.splice(indexNow, 1)[0]); + }; - - return undefined; - + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + + } finally { - - - - }; - -}; -/** @arg {arrayTFRearrangeByIndex} t */ -function rearrangeByIndexVerify(t) { - - const { - - - - } = t; - - return rearrangeByIndexHandle(t); - -}; -/** @arg {arrayTFRearrangeByIndex} t */ -function rearrangeByIndexHandle(t) { - - const { - - - - } = t; - - return rearrangeByIndexComply(t); - -}; -/** @arg {arrayTFRearrangeByIndex} t */ -function rearrangeByIndexComply(t) { - - const { - - - - } = t; - - - -}; -//#endregion -//#region rearrangeByElement 0.0.0 + }; -/** ### arrayTFRearrangeByElement - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `array` + return result; + +}; + +/** + * ### arrayRearrange + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `rearrangeByElement`. - * - * @typedef {arrayTFURearrangeByElement&arrayT} arrayTFRearrangeByElement + * Функция перестановки элементов массива из заданной позиции в указанную. * + * *** + * @arg {Y1} array `Массив` + * @arg {boolean} directRight `Сдвиг вправо` + * @arg {...[number, number]} pairs `Перестановки` + * @function + * @template {any[]} Y1 */ -/** ### arrayTFURearrangeByElement - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `array` +export function arrayRearrange(array, directRight, ...pairs) { + + return rearrange({ array, pairs, directRight, }); + +}; +/** + * ### arrayRearragneNew + * - Тип `S` + * - Версия `1.0.0` + * *** * - * Уникальные параметры функции `rearrangeByElement`. + * Функция {@link arrayRearrange|перестановки элементов массива из заданной позиции в указанную}. + * Работает с копией указанного массива. * - * @typedef arrayTFURearrangeByElement - * @prop {any} _ + * *** + * @arg {Y1} array `Массив` + * @arg {boolean} directRight `Сдвиг вправо` + * @arg {...[number, number]} pairs `Перестановки` + * @function + * @template {any[]} Y1 */ +export function arrayRearragneNew(array, ...pairs) { -/** @arg {arrayTFRearrangeByElement} t */ -function rearrangeByElementDeceit(t) { - - try { - - return rearrangeByElementVerify(t); - - } catch (e) { - - if (config?.strictMode) { - - throw e; - - }; - - return undefined; - - } finally { - - - - }; - -}; -/** @arg {arrayTFRearrangeByElement} t */ -function rearrangeByElementVerify(t) { - - const { - - - - } = t; - - return rearrangeByElementHandle(t); - -}; -/** @arg {arrayTFRearrangeByElement} t */ -function rearrangeByElementHandle(t) { - - const { - - - - } = t; - - return rearrangeByElementComply(t); - -}; -/** @arg {arrayTFRearrangeByElement} t */ -function rearrangeByElementComply(t) { - - const { - - - - } = t; - - - -}; - + return rearragneNew({ array: array?.slice?.(), pairs, }); +}; //#endregion /** - * @file module.mjs + * @file array/module.mjs * @author Yakhin Nikita Artemovich - * @copyright Yakhin Nikita Artemovich 2023 + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 */ \ No newline at end of file diff --git a/-submodule/array/-module/module0.mjs b/-submodule/array/-module/module0.mjs new file mode 100644 index 0000000..1fd8d69 --- /dev/null +++ b/-submodule/array/-module/module0.mjs @@ -0,0 +1,1660 @@ +//#region YI + +import { condIsMany, condIsNumber } from '@syls/y/cond'; + +/** @type {import('./config0.mjs')['default']?} */ +let config = null; + +await import('./config0.mjs') + + .then(c => config = c.default) + .catch(e => e); + +/** @type {import('./error.mjs')['default']?} */ +let error = null; + +await import('./error.mjs') + + .then(i => error = i.default) + .catch(e => e); + +//#endregion +//#region YT + +/** ### arrayT + * - Тип `T` + * - Версия `0.0.0` + * - Модуль `array` + * + * Основной параметр модуля `array`. + * + * @typedef arrayT + * @prop {any[]} array + * +*/ + +//#endregion +//#region YV + + + +//#endregion + +//#region get 0.0.0 + +/** ### arrayTFGet + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `get`. + * + * @typedef {arrayTFUGet&arrayT} arrayTFGet + * +*/ +/** ### arrayTFUGet + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `get`. + * + * @typedef arrayTFUGet + * @prop {number[]} indexs +*/ + +/** @arg {arrayTFGet} t */ +function getDeceit(t) { + + try { + + return getVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFGet} t */ +function getVerify(t) { + + const { + + + + } = t; + + return getHandle(t); + +}; +/** @arg {arrayTFGet} t */ +function getHandle(t) { + + const { + + + + } = t; + + return getComply(t); + +}; +/** @arg {arrayTFGet} t */ +function getComply(t) { + + const { + + array, + indexs, + + } = t; + + let result = array; + + if (indexs.length) { + + for (const index of indexs) { + + result = result[index]; + + }; + + }; + + return result; + +}; + +/** + * ### arrayGet + * - Версия `0.0.0` + * - Цепочка `DVHCa` + * - Модуль `array` + * *** + * + * Функция получения значения массива в указанной позиции. + * + * *** + * @arg {any[]} array `Массив` + * @arg {...number} indexs `Индексы` +*/ +export function arrayGet(array, ...indexs) { + + return getDeceit({ array, indexs, }); + +}; + +//#endregion +//#region getSlice 0.0.0 + +/** ### arrayTFGetSlice + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `getSlice`. + * + * @typedef {arrayTFUGetSlice&arrayT} arrayTFGetSlice + * +*/ +/** ### arrayTFUGetSlice + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `getSlice`. + * + * @typedef arrayTFUGetSlice + * @prop {number[]} indexs +*/ + +/** @arg {arrayTFGetSlice} t */ +function getSliceDeceit(t) { + + try { + + return getSliceVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFGetSlice} t */ +function getSliceVerify(t) { + + const { + + + + } = t; + + return getSliceHandle(t); + +}; +/** @arg {arrayTFGetSlice} t */ +function getSliceHandle(t) { + + const { + + + + } = t; + + return getSliceComply(t); + +}; +/** @arg {arrayTFGetSlice} t */ +function getSliceComply(t) { + + const { + + array, + indexs, + + } = t; + + let slice = array; + + for (const i of indexs) { + + slice = slice[i]; + + }; + + return slice; + +}; + +/** + * ### arrayGetSlice + * - Версия `0.0.0` + * - Цепочка `DVHCa` + * - Модуль `array` + * *** + * + * Функция получения среза с размерного массива. + * + * *** + * @arg {any[]} array `Массив` + * @arg {...number} indexs `Индексы` +*/ +export function arrayGetSlice(array, ...indexs) { + + return getSliceDeceit({ array, indexs }); + +}; + +//#endregion +//#region getDimension 0.0.0 + +/** ### arrayTFGetDimension + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `getDimension`. + * + * @typedef {arrayTFUGetDimension&arrayT} arrayTFGetDimension + * +*/ +/** ### arrayTFUGetDimension + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `getDimension`. + * + * @typedef arrayTFUGetDimension + * @prop {any} _ +*/ + +/** @arg {arrayTFGetDimension} t */ +function getDimensionDeceit(t) { + + try { + + return getDimensionVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFGetDimension} t */ +function getDimensionVerify(t) { + + const { + + + + } = t; + + return getDimensionHandle(t); + +}; +/** @arg {arrayTFGetDimension} t */ +function getDimensionHandle(t) { + + const { + + + + } = t; + + return getDimensionComply(t); + +}; +/** @arg {arrayTFGetDimension} t */ +function getDimensionComply(t) { + + const { + + array, + + } = t; + + let result = [array.length]; + + const levelC = [...array]; + + do { + + if (levelC.length && levelC.every(slice => slice.length && slice.every(elem => elem instanceof Array))) { + + result.push(levelC[0].length); + + levelC.splice(0, levelC.length, ...levelC.flat()); + + } else { + + result.push(levelC.map(slice => slice.length)); + + if (result.at(-1).every(n => n === result.at(-1)[0])) { + + result.splice(-1, 1, result.at(-1)[0]); + + result = result.filter(n => n !== undefined); + + }; + + break; + + }; + + } while (levelC.length); + + return result; + +}; + +/** + * ### arrayGetDimension + * - Версия `0.0.0` + * - Цепочка `DVHCa` + * - Модуль `array` + * *** + * + * Функция возвращающая кол-во измерений указанного массива. + * + * Под измерениями функция понимает те уровни указанного массива, где все элементы представлены массивами без исключения. + * + * *** + * @arg {any[]} array `Массив` +*/ +export function arrayGetDimension(array) { + + return getDimensionDeceit({ array }); + +}; + +//#endregion +//#region getDevideByCount 0.1.0 + +/** ### arrayTFGetDevideByCount + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `getDevideByCount`. + * + * @typedef {arrayTFUGetDevideByCount&arrayT} arrayTFGetDevideByCount + * +*/ +/** ### arrayTFUGetDevideByCount + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `getDevideByCount`. + * + * @typedef arrayTFUGetDevideByCount + * @prop {number} count +*/ + +/** @arg {arrayTFGetDevideByCount} t */ +function getDevideByCountDeceit(t) { + + try { + + return getDevideByCountVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFGetDevideByCount} t */ +function getDevideByCountVerify(t) { + + const { + + + + } = t; + + return getDevideByCountHandle(t); + +}; +/** @arg {arrayTFGetDevideByCount} t */ +function getDevideByCountHandle(t) { + + const { + + + + } = t; + + if (!condIsMany(t.array)) { + + t.array = [t.array]; + + }; + + return getDevideByCountComply(t); + +}; +/** @arg {arrayTFGetDevideByCount} t */ +function getDevideByCountComply(t) { + + const { + + array, + count, + + } = t; + + const result = []; + + if (array.length === 1) { + + if (array instanceof Array) { + + return array; + + } else { + + return [array]; + + }; + + }; + + for (let i = 0; i < array.length; i += count) { + + result.push(array.slice(i, i + count)); + + }; + + return result; + +}; + +/** + * ### arrayGetDevideByCount + * - Версия `0.0.0` + * - Цепочка `DVHCa` + * - Модуль `array` + * *** + * + * Функция для деления указанного массива на массив подмассивов, где каждый подмассив содержит указанное количество элементов исходного массива. + * + * *** + * @arg {any[]} array `Массив` + * @arg {number} count `Количество` +*/ +export function arrayGetDevideByCount(array, count) { + + return getDevideByCountDeceit({ array, count, }); + +}; + +//#endregion + +//#region push + +/** ### arrayTFPush + * - Тип `TF` + * *** + * + * Результирующие параметры функции `push`. + * + * @typedef {arrayTFUPush&arrayT} arrayTFPush + * +*/ +/** ### arrayTFUPush + * - Тип `TFU` + * + * Уникальные параметры функции `push`. + * + * @typedef arrayTFUPush + * @prop {any} _ +*/ + +/** @arg {arrayTFPush} t */ +function pushDeceit(t) { + + try { + + return pushVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFPush} t */ +function pushVerify(t) { + + const { + + + + } = t; + + return pushHandle(t); + +}; +/** @arg {arrayTFPush} t */ +function pushHandle(t) { + + const { + + + + } = t; + + return pushComply(t); + +}; +/** @arg {arrayTFPush} t */ +function pushComply(t) { + + const { + + + + } = t; + + + +}; + +/** + * ### arrayPush + * - Версия `0.0.0` + * *** + * + * Функция сдвига элементов указанного массива с указанной позции на указанную длину. + * + * Не стоит путать данную функцию с нативной функцией `push`. + * Данная функция предназначена для преобразования массива, а не его дополнения новыми элементами. + * Если вас интересует дополнение массива, то ознакомьтесь с {@link arrayAppend|функцией дополнения}. + * + * + * + * *** + * @arg {G} array `Массив` + * @arg {number} bias `Смещение` + * + * Определяет длину, на которую необходимо сместить элементы. + * Может принимать отрицательные значения для смещения влево. + * + * @arg {number} index `Индекс` + * + * Определяет позицию, начиная с которой все элементы после будут смещены. + * + * @return {G} + * @template {any[]} G +*/ +export function arrayPush(array, index, bias) { + + return pushDeceit({ array, index, bias, }); + +}; + +//#endregion +//#region join 0.0.0 + +/** ### arrayTFJoin + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `join`. + * + * @typedef {arrayTFUJoin&arrayT} arrayTFJoin + * +*/ +/** ### arrayTFUJoin + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `join`. + * + * @typedef arrayTFUJoin + * @prop {string} joiner +*/ + +/** @arg {arrayTFJoin} t */ +function joinDeceit(t) { + + try { + + return joinVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFJoin} t */ +function joinVerify(t) { + + const { + + + + } = t; + + return joinHandle(t); + +}; +/** @arg {arrayTFJoin} t */ +function joinHandle(t) { + + const { + + + + } = t; + + return joinComply(t); + +}; +/** @arg {arrayTFJoin} t */ +function joinComply(t) { + + const { + + array, + joiner, + + } = t; + + return array instanceof Array ? array.join(joiner) : array; + +}; + +/** + * ### arrayJoin + * - Версия `0.0.0` + * - Цепочка `DVHCa` + * - Модуль `array` + * *** + * + * Функция соединения элементов массива в строку. + * + * *** + * @arg {G} + * @arg {string} joiner `Соединитель` + * @returns {G} + * @template {any[]} G +*/ +export function arrayJoin(array, joiner) { + + return joinDeceit({ array, joiner }); + +}; + +//#endregion +//#region unite 0.0.0 + +/** ### arrayTFUnite + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `unite`. + * + * @typedef {arrayTFUUnite&arrayT} arrayTFUnite + * +*/ +/** ### arrayTFUUnite + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `unite`. + * + * @typedef arrayTFUUnite + * @prop {any[][]} arrays +*/ + +/** @arg {arrayTFUnite} t */ +function uniteDeceit(t) { + + try { + + return uniteVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFUnite} t */ +function uniteVerify(t) { + + const { + + + + } = t; + + return uniteHandle(t); + +}; +/** @arg {arrayTFUnite} t */ +function uniteHandle(t) { + + const { + + + + } = t; + + return uniteComply(t); + +}; +/** @arg {arrayTFUnite} t */ +function uniteComply(t) { + + const { + + arrays + + } = t; + + return arrays.flat().filter(element => element); + +}; + +/** + * ### arrayUnite + * - Версия `0.0.0` + * - Цепочка `DVHCa` + * - Модуль `array` + * *** + * + * Функция объединения элементов указанных массивов в единый массив. + * + * *** + * @arg {...G[]} arrays `Массивы` + * @returns {G[]} + * @template G +*/ +export function arrayUnite(...arrays) { + + return uniteDeceit({ arrays, }); + +}; + +//#endregion +//#region bring 0.0.0 + +/** ### arrayTFBring + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `bring`. + * + * @typedef {arrayTFUBring&arrayT} arrayTFBring + * +*/ +/** ### arrayTFUBring + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `bring`. + * + * @typedef arrayTFUBring + * @prop {any} append + * @prop {number} length +*/ + +/** @arg {arrayTFBring} t */ +function bringDeceit(t) { + + try { + + return bringVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFBring} t */ +function bringVerify(t) { + + const { + + + + } = t; + + return bringHandle(t); + +}; +/** @arg {arrayTFBring} t */ +function bringHandle(t) { + + const { + + + + } = t; + + return bringComply(t); + +}; +/** @arg {arrayTFBring} t */ +function bringComply(t) { + + const { + + array, + length, + append, + + } = t; + + while (array.length < length) { + + array.push(append instanceof Function ? append() : append); + + }; + + return array; + +}; + +/** + * ### arrayBring + * - Версия `0.0.0` + * - Цепочка `DVHCa` + * - Модуль `array` + * *** + * + * Функция доведения массива до указанной длинны указанным дополнителем. + * + * В качестве новых элементов выступают указанные значения. + * + * *** + * @arg {G} array `Массив` + * @arg {any} append `Дополнитель` + * Может выступать значением или функцией. + * + * В первом случае функция будет доводить длинну массива до указанного значения, добавляя постоянный указанный дополнитель. + * В случае дополнителя являющегося функцией, будет добавляться результат данной функции. + * @arg {number} length `Длина` + * @returns {G} + * @template {any[]} G +*/ +export function arrayBring(array, length, append) { + + return bringDeceit({ array, length, append }); + +}; + +//#endregion +//#region equal 0.0.0 + +/** ### arrayTFEqual + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `equal`. + * + * @typedef {arrayTFUEqual&arrayT} arrayTFEqual + * +*/ +/** ### arrayTFUEqual + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `equal`. + * + * @typedef arrayTFUEqual + * @prop {any[][]} arrays +*/ + +/** @arg {arrayTFEqual} t */ +function equalDeceit(t) { + + try { + + return equalVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFEqual} t */ +function equalVerify(t) { + + const { + + + + } = t; + + return equalHandle(t); + +}; +/** @arg {arrayTFEqual} t */ +function equalHandle(t) { + + const { + + + + } = t; + + return equalComply(t); + +}; +/** @arg {arrayTFEqual} t */ +function equalComply(t) { + + const { + + array, + arrays, + + } = t; + + for (const a of arrays) { + + for (const i in a) { + + if (array[i] !== a[i]) { + + return false; + + }; + + }; + + }; + + return true; + +}; + +/** + * ### arrayEqual + * - Версия `0.0.0` + * - Цепочка `DVHCa` + * - Модуль `array` + * *** + * + * Функция проверки значений указанных массивов на эквивалентность с первым указанным массивом. + * + * *** + * @arg {any[]} array `Массив` + * @arg {...any[]} arrays `Массивы` +*/ +export function arrayEqual(array, ...arrays) { + + return equalDeceit({ array, arrays, }); + +}; + +//#endregion +//#region unique 0.0.0 + +/** ### arrayTFUnique + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `unique`. + * + * @typedef {arrayTFUUnique&arrayT} arrayTFUnique + * +*/ +/** ### arrayTFUUnique + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `unique`. + * + * @typedef arrayTFUUnique + * @prop {any[][]} arrays +*/ + +/** @arg {arrayTFUnique} t */ +function uniqueDeceit(t) { + + try { + + return uniqueVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFUnique} t */ +function uniqueVerify(t) { + + const { + + + + } = t; + + return uniqueHandle(t); + +}; +/** @arg {arrayTFUnique} t */ +function uniqueHandle(t) { + + const { + + + + } = t; + + if (t.arrays.length > 1) { + + t.array = []; + + t.arrays.forEach(array => t.array.push(...array)); + + } else if (t.arrays.length === 1) { + + t.array = t.arrays[0]; + + }; + + return uniqueComply(t); + +}; +/** @arg {arrayTFUnique} t */ +function uniqueComply(t) { + + const { + + array, + + } = t; + + return Array.from(new Set(array)); + +}; + +/** + * ### arrayUnique + * - Версия `0.0.0` + * - Цепочка `DVHC` + * *** + * + * Функция получения подмассива уникальных элементов указанных массивов. + * + * *** + * @arg {...G} arrays `Массивы` + * @returns {G} + * @template G +*/ +export function arrayUnique(...arrays) { + + return uniqueDeceit({ arrays }); + +}; + +//#endregion +//#region append 0.0.0 + +/** ### arrayTFAppend + * - Тип `TF` + * *** + * + * Результирующие параметры функции `append`. + * + * @typedef {arrayTFUAppend&arrayT} arrayTFAppend + * +*/ +/** ### arrayTFUAppend + * - Тип `TFU` + * + * Уникальные параметры функции `append`. + * + * @typedef arrayTFUAppend + * @prop {any[]} values + * @prop {number} index +*/ + +/** @arg {arrayTFAppend} t */ +function appendDeceit(t) { + + try { + + return appendVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFAppend} t */ +function appendVerify(t) { + + const { + + + + } = t; + + return appendHandle(t); + +}; +/** @arg {arrayTFAppend} t */ +function appendHandle(t) { + + const { + + + + } = t; + + if (!condIsNumber(t.index)) { + + t.index = t.array.length; + + }; + + return appendComply(t); + +}; +/** @arg {arrayTFAppend} t */ +function appendComply(t) { + + const { + + array, + index, + values, + + } = t; + + array.splice(index, 0, ...values); + + return array; + +}; + +/** + * ### arrayAppend + * + * *** + * + * Функция добавления в указанное место массива новых значений. + * + * *** + * @arg {G} array `Массив` + * @arg {number?} index `Индекс` + * + * - Если не указан, то значения будут добавлены в конец массива. + * + * @arg {...any} values `Значения` + * @return {G} + * @template {any[]} G +*/ +export function arrayAppend(array, index, ...values) { + + return appendDeceit({ array, index, values, }); + +}; + +//#endregion +//#region create 0.0.0 + +/** ### arrayTFCreate + * - Тип `TF` + * *** + * + * Результирующие параметры функции `create`. + * + * @typedef {arrayTFUCreate&arrayT} arrayTFCreate + * +*/ +/** ### arrayTFUCreate + * - Тип `TFU` + * + * Уникальные параметры функции `create`. + * + * @typedef arrayTFUCreate + * @prop {number[]} sizes +*/ + +/** @arg {arrayTFCreate} t */ +function createDeceit(t) { + + try { + + return createVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFCreate} t */ +function createVerify(t) { + + const { + + + + } = t; + + return createHandle(t); + +}; +/** @arg {arrayTFCreate} t */ +function createHandle(t) { + + const { + + + + } = t; + + return createComply(t); + +}; +/** @arg {arrayTFCreate} t */ +function createComply(t) { + + const { + + sizes, + + } = t; + + const result = []; + + const lasts = [result]; + + for (const size of sizes) { + + const lastsNext = []; + + for (let index = lasts.length - 1; index >= 0; index--) { + + const last = lasts.pop(); + + for (let count = 0; count < size; count++) { + + const array = []; + + last.push(array); + lastsNext.push(array); + + }; + + }; + + lasts.push(...lastsNext); + + }; + + return result; + +}; + +/** + * ### arrayCreate + * - Версия `0.0.0` + * *** + * + * Функция для создания массива. + * + * Позволяет создавать массив указанной размерности. + * + * *** + * @arg {...number} sizes `Размеры` +*/ +export function arrayCreate(...sizes) { + + return createDeceit({ sizes, }); + +}; + +//#endregion + +//#region rearrangeByIndex 0.0.0 + +/** ### arrayTFRearrangeByIndex + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `rearrangeByIndex`. + * + * @typedef {arrayTFURearrangeByIndex&arrayT} arrayTFRearrangeByIndex + * +*/ +/** ### arrayTFURearrangeByIndex + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `rearrangeByIndex`. + * + * @typedef arrayTFURearrangeByIndex + * @prop {any} _ +*/ + +/** @arg {arrayTFRearrangeByIndex} t */ +function rearrangeByIndexDeceit(t) { + + try { + + return rearrangeByIndexVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFRearrangeByIndex} t */ +function rearrangeByIndexVerify(t) { + + const { + + + + } = t; + + return rearrangeByIndexHandle(t); + +}; +/** @arg {arrayTFRearrangeByIndex} t */ +function rearrangeByIndexHandle(t) { + + const { + + + + } = t; + + return rearrangeByIndexComply(t); + +}; +/** @arg {arrayTFRearrangeByIndex} t */ +function rearrangeByIndexComply(t) { + + const { + + + + } = t; + + + +}; + + + +//#endregion +//#region rearrangeByElement 0.0.0 + +/** ### arrayTFRearrangeByElement + * - Тип `TF` + * - Версия `0.0.0` + * - Модуль `array` + * *** + * + * Результирующие параметры функции `rearrangeByElement`. + * + * @typedef {arrayTFURearrangeByElement&arrayT} arrayTFRearrangeByElement + * +*/ +/** ### arrayTFURearrangeByElement + * - Тип `TFU` + * - Версия `0.0.0` + * - Модуль `array` + * + * Уникальные параметры функции `rearrangeByElement`. + * + * @typedef arrayTFURearrangeByElement + * @prop {any} _ +*/ + +/** @arg {arrayTFRearrangeByElement} t */ +function rearrangeByElementDeceit(t) { + + try { + + return rearrangeByElementVerify(t); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return undefined; + + } finally { + + + + }; + +}; +/** @arg {arrayTFRearrangeByElement} t */ +function rearrangeByElementVerify(t) { + + const { + + + + } = t; + + return rearrangeByElementHandle(t); + +}; +/** @arg {arrayTFRearrangeByElement} t */ +function rearrangeByElementHandle(t) { + + const { + + + + } = t; + + return rearrangeByElementComply(t); + +}; +/** @arg {arrayTFRearrangeByElement} t */ +function rearrangeByElementComply(t) { + + const { + + + + } = t; + + + +}; + + + +//#endregion + +/** + * @file module.mjs + * @author Yakhin Nikita Artemovich + * @copyright Yakhin Nikita Artemovich 2023 +*/ \ No newline at end of file diff --git a/-submodule/game/package.json b/-submodule/game/package.json index 40b10c4..2f1ef24 100644 --- a/-submodule/game/package.json +++ b/-submodule/game/package.json @@ -21,10 +21,16 @@ "types": "./-module/type.d.ts", "import": "./-module/export.mjs" }, + "./sag": { "types": "./-heir/sag/-module/type.d.ts", "import": "./-heir/sag/-module/export.mjs" }, + "./sag/being": { + "types": "./-submodule/sag/-submodule/being/-module/type.d.ts", + "import": "./-submodule/sag/-submodule/being/-module/export.mjs" + }, + "./mafia": { "types": "./-heir/mafia/-module/type.d.ts", "import": "./-heir/mafia/-module/export.mjs" diff --git a/-submodule/number/-module/class.mjs b/-submodule/number/-module/class.mjs index 00cb572..b8b2fb9 100644 --- a/-submodule/number/-module/class.mjs +++ b/-submodule/number/-module/class.mjs @@ -1,61 +1,82 @@ //#region YI -import { Y, yClassifyProp } from '@syls/y'; -import { condIsNumberLimit } from '@syls/y/cond'; -import { numberGetRandomFrac, numberGetRandomReal } from './module.mjs'; - +import { YArg } from '@syls/y/arg'; +import { YEntity } from '@syls/y/entity'; +import { YCond, condIsNumberLimit } from '@syls/y/cond'; +import { configNumber as config } from './config.mjs'; //#endregion //#region YT /** ### YNumberT * - Тип `T` - * - Версия `0.0.0` - * - Модуль `number` - * + * * Основной параметр модуля `YNumber`. - * - * @typedef {YNumberTE&YNumberTU} YNumberT - * + * + * @typedef {YNumberTE&YNumberTU&Y} YNumberT + * */ /** ### YNumberTE * - Тип `TE` - * - Версия `0.0.0` - * - Модуль `number` - * + * * Параметр наследования `YNumber`. - * - * @typedef {{[p in Exclude|Exclude]:(DNumber[p]&SNumber[p])}} YNumberTE - * + * + * @typedef {Omit} YNumberTE + * */ /** ### YNumberTU * - Тип `TU` - * - Версия `0.0.0` - * - Модуль `number` - * + * * Уникальные параметры `YNumber`. - * + * * @typedef YNumberTU * @prop {any} _ - * + * */ //#endregion -class SNumber extends Y { +class SNumber extends YEntity { + + /** + * ### stock + * + * *** + * + * + * + * *** + * @type {YNumber[]} + * @field + * @static + * @public + */ + static stock = []; + /** + * ### config + * + * + * + * *** + * @field + * @static + * @public + */ + static config = config; /** * ### getRandom - * - Версия `0.0.0` - * - Модуль `number` + * * *** - * - * Метод получения случайного числа из указанного диапазона. - * + * + * Метод получения случайного значения в заданном диапазоне. + * * *** * @arg {number} min `Минимум` * @arg {number} max `Максимум` - * @arg {boolean?} frac `Дробное` + * @arg {boolean} frac `Дробность` + * @static + * @method * @public */ static getRandom(min, max, frac) { @@ -64,22 +85,93 @@ class SNumber extends Y { }; -}; -class DNumber extends SNumber { + /** + * ### min + * + * *** + * + * Метод поиска минимального значения среди приведенных. + * + * *** + * @arg {...number} numbers `Числа` + * @static + * @method + * @public + */ + static min(...numbers) { + + let result = numbers[0]; + + for (const number of numbers) { + if (!YCond.isNumber(number) || result <= number) continue; + + result = number; + + }; + + return result; + + }; /** - * ### modeConstant - * - * Режим константы. - * + * ### max + * * *** - * @type {boolean} + * + * Метод поиска максимального значения среди приведенных. + * + * *** + * @arg {...number} numbers `Числа` + * @static + * @method + * @public + */ + static max(...numbers) { + + let result = numbers[0]; + + for (const number of numbers) { + + if (!YCond.isNumber(number) || result >= number) continue; + + result = number; + + }; + + return result; + + }; + + /** + * @arg {...YNumber} args `Аргументы` + * @returns {YNumber[]} + */ + static create(...args) { + + return Object.getPrototypeOf(SNumber).create.apply(this, args); + + }; + + /** + * @arg {Y1} value `Значение` + * @static + * @method * @public + * @returns {(Y1&Y1)?} + * @template {YNumber} Y1 */ - modeConstant; + static becomePrototype(value) { + + if (!(value instanceof Object)) return null; + + Object.setPrototypeOf(value, Y.prototype); + + return value; + + }; }; -class INumber extends DNumber { +class DNumber extends SNumber { /** * ### value @@ -88,9 +180,36 @@ class INumber extends DNumber { * * *** * @type {number} - * @protected + * @field + * @public */ value; + /** + * ### historyMode + * + * Режим истории. + * + * *** + * @type {boolean} + * @field + * @public + */ + historyMode; + /** + * ### constantMode + * + * Режим константы. + * + * *** + * @type {boolean} + * @field + * @public + */ + constantMode; + +}; +class INumber extends DNumber { + /** * ### history * @@ -98,6 +217,7 @@ class INumber extends DNumber { * * *** * @type {number[]} + * @field * @protected */ history; @@ -107,25 +227,23 @@ class MNumber extends INumber { /** * ### change - * - Версия `0.0.0` - * - Модуль `number` + * * *** - * + * * Метод изменения значения. - * + * * *** * @arg {number} value `Значение` + * @method * @protected */ change(value) { - if (!this.modeConstant && ((value && value.constructor === Number) || value === 0)) { - - this.history.push(this.value); + if (this.constantMode || !YCond.isNumber(value)) return this; - this.value = value; + this.history.push(this.value); - }; + this.value = value; return this; @@ -136,67 +254,54 @@ class FNumber extends MNumber { /** * ### YNumber.constructor - * - * - * + * + * + * * *** - * @arg {...YNumberT} t + * @arg {YNumberT} args */ - constructor(...t) { + constructor(args) { - super(Object.assign(t = FNumber.#before(t), {})); + super(args = FNumber.#before(args = arguments)); - FNumber.#deceit.apply(this, [t]); + FNumber.#deceit.apply(this, [args]); - }; + return this.correlate(); - /** @arg {any[]} t */ - static #before(t) { + }; - /** @type {YNumberT} */ - let r = {}; + /** @arg {DNumber} args */ + static #before(args) { - if (t?.length === 1 && [Object, YNumber].includes(t[0]?.constructor) && !Object.getOwnPropertyNames(t[0]).includes('_ytp')) { + /** @type {YArg} */ + const yarg = args instanceof YArg ? args : new YArg(args); - r = t[0]; + yarg.set( - } else if (t?.length) { + ['value', 'number'], + ['constantMode', 'bool'], - if (t[0]?._ytp) { + ); - t = [...t[0]._ytp]; + return yarg; - }; + }; + /** @arg {YArg} args @this {YNumber} */ + static #deceit(args) { - switch (t.length) { + try { - case 3: - case 2: - case 1: r.value = t[0]; + FNumber.#verify.apply(this, arguments); - }; + } catch (e) { - if (!Object.values(r).length) { + if (config?.strictMode) { - r = { _ytp: t, }; + throw e; }; - }; - - return r; - - }; - /** @arg {YNumberT} t @this {YNumber} */ - static #deceit(t) { - - try { - - FNumber.#verify.apply(this, [t]); - - } catch (e) { - - throw e; + return new YNumber(); } finally { @@ -205,42 +310,38 @@ class FNumber extends MNumber { }; }; - /** @arg {YNumberT} t @this {YNumber} */ - static #verify(t) { + /** @arg {YArg} args @this {YNumber} */ + static #verify(args) { const { - } = t; + } = args; - FNumber.#handle.apply(this, [t]); + FNumber.#handle.apply(this, arguments); }; - /** @arg {YNumberT} t @this {YNumber} */ - static #handle(t) { + /** @arg {YArg} args @this {YNumber} */ + static #handle(args) { - FNumber.#create.apply(this, [t]); + FNumber.#create.apply(this, arguments); }; - /** @arg {YNumberT} t @this {YNumber} */ - static #create(t) { + /** @arg {YArg} args @this {YNumber} */ + static #create(args) { const { - } = t; + } = args; - this.adopt(t); + this - if (config) { - - this.adoptDefault(config); - - }; + .adopt(args.getData()); }; @@ -248,9 +349,7 @@ class FNumber extends MNumber { switch (to) { - case 'string': return this.value.toString(); - case 'number': return this.value; - case 'boolean': return true; + default: return this.value; }; @@ -262,90 +361,50 @@ class FNumber extends MNumber { * ### YNumber * - Тип `SDIMFY` * - Версия `0.0.0` - * - Модуль `number` * - Цепочка `BDVHC` * *** - * - * - * + * + * Класс `YNumber`. + * * *** - * + * @class + * */ export class YNumber extends FNumber { /** - * ### get - * - Версия `0.0.0` - * - Модуль `number` - * *** - * - * Метод получения текущего числа. - * - * *** - * @public - */ - get() { - - return this.value; - - }; - /** - * ### set - * - Версия `0.0.0` - * - Модуль `number` + * ### toPrecent + * * *** * - * Метод установки значения. + * Метод приведения текущего значения к указанному проценту. * * *** - * @arg {number} value `Значение` - * @public - */ - set(value) { - - return this.change(value); - - }; - /** - * ### add - * - Версия `0.0.0` - * - Модуль `number` - * *** + * @arg {number} precent `Процент` + * @arg {number?} precentNow `Текущий процент` * - * Метод приращения значения. + * Позволяет указать, что текущее значение является процентом от указанного числа. * - * *** - * @arg {...number} numbers `Числа` + * Например, указав данный параметр как `97` при значении `543`, метод будет воспринимать значение в `543` как `97` процентов ои нужного числа. + * В следствии этого, метод предварительно доведет значение `543` до `100%`, прибавив ещё `3%`. + * @method * @public */ - add(...numbers) { + toPrecent(precent, precentNow) { - if (!this.modeConstant) { + if (precentNow && precentNow.constructor === Number) { - numbers.filter(n => n && n.constructor === Number).forEach(n => this.change(this.value + n)); + if (precentNow < 0) { - }; + precentNow *= -1; - return this; + }; - }; - /** - * ### dec - * - Версия `0.0.0` - * - Модуль `number` - * *** - * - * Метод уменьшения значения. - * - * *** - * @arg {...number} numbers `Числа` - * @public - */ - dec(...numbers) { + this.change(this.value / precentNow * precent); - if (!this.modeConstant) { + } else { - numbers.filter(n => n && n.constructor === Number).forEach(n => this.change(this.value - n)); + this.change(this.value / 100 * precent); }; @@ -353,22 +412,21 @@ export class YNumber extends FNumber { }; /** - * ### div - * - Версия `0.0.0` - * - Модуль `number` + * ### toPositive + * * *** * - * Метод деления. + * Метод делающий число положительным. * * *** - * @arg {...number} numbers `Числа` + * @method * @public */ - div(...numbers) { + toPositive() { - if (!this.modeConstant) { + if (this.value < 0) { - numbers.filter(n => n && n.constructor === Number).forEach(n => this.change(this.value / n)); + this.deny(); }; @@ -376,163 +434,338 @@ export class YNumber extends FNumber { }; /** - * ### mul - * - Версия `0.0.0` - * - Модуль `number` + * ### toNegative + * * *** * - * Метод умножения. + * Метод делающий число отрицательным. * * *** - * @arg {...number} numbers `Числа` + * @method * @public */ - mul(...numbers) { + toNegative() { - if (!this.modeConstant) { + if (this.value > 0) { - numbers.filter(n => n && n.constructor === Number).forEach(n => this.change(this.value * n)); + this.deny(); }; return this; }; + /** - * ### ere - * - Версия `0.0.0` - * - Модуль `number` + * ### get + * * *** - * - * Метод вовзедения в степень. - * + * + * Метод получения значения. + * * *** - * @arg {number} degree `Степень` + * @method * @public */ - ere(degree) { + get() { - return this.change(this.value ** degree); + return this.value; }; /** - * ### mod - * - Версия `0.0.0` - * - Модуль `number` + * ### getReal + * * *** - * - * Метод взятия остатка от числа. - * + * + * Метод получения целой части. + * * *** - * @arg {number} number `Число` + * @method * @public */ - mod(number) { - - return this.change(this.value % number); - + getReal() { + + return Math.trunc(this.value); + }; /** - * ### abs - * - Версия `0.0.0` - * - Модуль `number` + * ### getFrac + * + * * *** * - * Метод извлечения модуля числа. + * Метод получения дробной части числа. * * *** + * @method * @public */ - abs() { + getFrac() { - return this.change(Math.abs(this.value));; + const part = this.value.toString().split('.'); - }; - /** - * ### sin - * - Версия `0.0.0` - * - Модуль `number` - * *** - * - * Метод вычисления сиунса. + if (part.length === 2) { + + const result = [0, part[1]].join('.'); + + return part[0][0] === '-' ? +result * -1 : +result; + + } else { + + return null; + + }; + + }; + /** + * @method + * @public + * @returns {typeof YNumber} + */ + getClass() { + + return YNumber; + + }; + /** + * ### getPrecent + * + * + * *** + * + * Метод получения процента от указанного числа. * * *** + * @arg {number} number `Число` + * + * От указанного числа вычисляется процент. * @public */ - sin() { + getPrecent(number) { - return this.change(Math.sin(this.value)); + if (YCond.isNumber(number)) { + + return this.value / (number / 100); + + }; + + return NaN; }; + /** - * ### cos - * - Версия `0.0.0` - * - Модуль `number` + * ### set + * + * *** + * + * Метод установки нового значения минуя изменение. + * + * *** + * @arg {number} value `Значение` + * @method + * @public + */ + set(value) { + + if (YCond.isNumber(value)) { + + this.history.push(this.value); + + this.value = value; + + }; + + return this; + + }; + + /** + * ### add + * + * * *** * - * Метод вычисления косинуса. + * Метод увеличения. * * *** + * @arg {...number} numbers `Числа` + * @method * @public */ - cos() { + add(...numbers) { - return this.change(Math.cos(this.value)); + for (const number of numbers) this.change(this.value + number); + + return this; }; /** - * ### tan - * - Версия `0.0.0` - * - Модуль `number` + * ### dec + * + * * *** * - * Метод вычисления тангенса. + * Метод уменьшения. * * *** + * @arg {...number} numbers `Числа` + * @method * @public */ - tan() { + dec(...numbers) { - return this.change(Math.tan(this.value)); + for (const number of numbers) this.change(this.value - number); + + return this; }; /** - * ### - * - Версия `0.0.0` - * - Модуль `number` + * ### div + * + * * *** * - * Метод вычисления экспоненты. + * Метод деления. * * *** + * @arg {...number} numbers `Числа` + * @method * @public */ - exp() { + div(...numbers) { - return this.change(Math.exp(this.value)); + for (const number of numbers) this.change(this.value / number); + + return this; }; /** - * ### log - * - Версия `0.0.0` - * - Модуль `number` + * ### mul + * + * * *** * - * Метод вычисления логорифма. + * Метод умножения. + * + * *** + * @arg {...number} numbers `Числа` + * @method + * @public + */ + mul(...numbers) { + + for (const number of numbers) this.change(this.value * number); + + return this; + + }; + /** + * ### ere + * + * *** + * + * Метод возведения в степень. + * + * *** + * @arg {number} degree `Степень` + * @method + * @public + */ + ere(degree = 2) { + + return this.change(this.value ** degree); + + }; + /** + * ### pow + * + * + * *** + * + * Метод вовзедения в степень через `Math.pow`. + * + * *** + * @arg {number} degree `Степень` + * @method + * @public + */ + pow(degree = 2) { + + return this.change(Math.pow(this.value, degree)); + + }; + /** + * ### mod + * + * + * *** + * + * Метод взятия остатка от числа. * * *** * @arg {number} number `Число` + * @method + * @public + */ + mod(number = 10) { + + return this.change(this.value % number); + + }; + /** + * ### abs + * + * + * *** + * + * Метод извлечения модуля числа. + * + * *** + * @method * @public */ - log(number) { + abs() { - return this.change(Math.log(number)); + return this.change(Math.abs(this.value));; + }; + /** + * ### + * + * + * *** + * + * Метод вычисления экспоненты. + * + * *** + * @method + * @public + */ + exp() { + + return this.change(Math.exp(this.value)); + + }; + /** + * ### cbrt + * + * *** + * + * Метод вычисления кубического корня числа. + * + * *** + * @method + * @public + */ + cbrt() { + + return this.change(Math.cbrt(this.value)); + }; /** * ### back - * - Версия `0.0.0` - * - Модуль `number` + * + * * *** * * Метод отката значения на указанное количество операций. @@ -540,11 +773,12 @@ export class YNumber extends FNumber { * *** * @arg {number} count `Счет` * - Дефолт `1` + * @method * @public */ - back(count = 1) { + back(count) { - if (!this.modeConstant && this.history.length && condIsNumberLimit(count)) { + if (!this.constantMode && YCond.isNumberInt(count) && count > 0) { if (count > this.history.length) { @@ -567,13 +801,14 @@ export class YNumber extends FNumber { }; /** * ### deny - * - Версия `0.0.0` - * - Модуль `number` + * + * * *** * * Метод смены знака. * * *** + * @method * @public */ deny() { @@ -583,13 +818,14 @@ export class YNumber extends FNumber { }; /** * ### sqrt - * - Версия `0.0.0` - * - Модуль `number` + * + * * *** * * Метод извлечения квадратного корня. * * *** + * @method * @public */ sqrt() { @@ -599,13 +835,13 @@ export class YNumber extends FNumber { }; /** * ### ceil - * - Версия `0.0.0` - * - Модуль `number` + * * *** * * Метод округления до максимума. * * *** + * @method * @public */ ceil() { @@ -615,13 +851,13 @@ export class YNumber extends FNumber { }; /** * ### real - * - Версия `0.0.0` - * - Модуль `number` + * * *** * * Метод отброса дробной части. * * *** + * @method * @public */ real() { @@ -631,48 +867,29 @@ export class YNumber extends FNumber { }; /** * ### frac - * - Версия `0.0.0` - * - Модуль `number` + * * *** * * Метод отброса целой части. * * *** + * @method * @public */ frac() { return this.change(this.getFrac()); - }; - /** - * ### exec - * - Версия `0.0.0` - * - Модуль `number` - * *** - * - * Метод выполнения кода. - * - * *** - * @arg {function(this):void} func `Функция` - * @public - */ - exec(func) { - - func(this); - - return this; - }; /** * ### floor - * - Версия `0.0.0` - * - Модуль `number` + * * *** * * Метод округления до минимума. * * *** + * @method * @public */ floor() { @@ -682,14 +899,13 @@ export class YNumber extends FNumber { }; /** * ### round - * - Версия `0.0.0` - * - Модуль `number` + * * *** * * Метод округления от 0.5. * * *** - * + * @method * @public */ round() { @@ -699,14 +915,14 @@ export class YNumber extends FNumber { }; /** * ### compare - * - Версия `0.0.0` - * - Модуль `number` + * * *** * * Метод сравнения с указанным числом. * * *** * @arg {number} number `Число` + * @method * @public */ compare(number) { @@ -765,10 +981,10 @@ export class YNumber extends FNumber { case '+': this.add(value); break; case '-': this.dec(value); break; case '*': this.mul(value); break; - case ':': this.div(value); break; case '%': this.mod(value); break; - case '^': this.ere(value); break; - + case ':': case '/': this.div(value); break; + case '^': case '**': this.pow(value); break; + }; }; @@ -778,147 +994,331 @@ export class YNumber extends FNumber { }; /** - * ### getFrac - * - Версия `0.0.0` - * - Модуль `number` + * ### sin + * + * * *** * - * Метод получения дробной части числа. + * Метод вычисления сиунса. * * *** + * @method * @public */ - getFrac() { - - const part = this.value.toString().split('.'); - - if (part.length === 2) { - - const result = [0, part[1]].join('.'); - - return part[0][0] === '-' ? +result * -1 : +result; - - } else { - - return 0; + sin() { - }; + return this.change(Math.sin(this.value)); }; /** - * ### getPrecent - * - Версия `0.0.0` - * - Модуль `number` + * ### asin + * + * *** + * + * Метод вычисления арксинуса. + * + * *** + * @method + * @public + */ + asin() { + + return this.change(Math.asin(this.value)); + + }; + /** + * ### sinh + * + * *** + * + * Метод вычисления гипербалического синуса. + * + * *** + * @method + * @public + */ + sinh() { + + return this.change(Math.sinh(this.value)); + + }; + /** + * ### asinh + * + * *** + * + * Метод вычисления гипербалического арксинуса. + * + * *** + * @method + * @public + */ + asinh() { + + return this.change(Math.asinh(this.value)); + + }; + + /** + * ### cos + * + * * *** * - * Метод получения процента от указанного числа. + * Метод вычисления косинуса. * * *** - * @arg {number} number `Число` - * - * От указанного числа вычисляется процент. + * @method * @public */ - getPrecent(number) { - - if (number && number.constructor === Number) { - - return this.value / (number / 100); - - }; + cos() { - return NaN; + return this.change(Math.cos(this.value)); + }; + /** + * ### acos + * + * *** + * + * Метод вычисления арккосинуса. + * + * *** + * @method + * @public + */ + acos() { + + return this.change(Math.acos(this.value)); + + }; + /** + * ### cosh + * + * *** + * + * Метод вычисления гипербалического косинуса. + * + * *** + * @method + * @public + */ + cosh() { + + return this.change(Math.cosh(this.value)); + + }; + /** + * ### acosh + * + * *** + * + * Метод вычисления гипербалического арккосинуса. + * + * *** + * @method + * @public + */ + acosh() { + + return this.change(Math.acosh(this.value)); + }; /** - * ### toPrecent - * - Версия `0.0.0` - * - Модуль `number` + * ### tan + * + * * *** * - * Метод приведения текущего значения к указанному проценту. + * Метод вычисления тангенса. * * *** - * @arg {number} precent `Процент` - * @arg {number?} precentNow `Текущий процент` - * - * Позволяет указать, что текущее значение является процентом от указанного числа. - * - * Например, указав данный параметр как `97` при значении `543`, метод будет воспринимать значение в `543` как `97` процентов ои нужного числа. - * В следствии этого, метод предварительно доведет значение `543` до `100%`, прибавив ещё `3%`. + * @method * @public */ - toPrecent(precent, precentNow) { - - if (precentNow && precentNow.constructor === Number) { - - if (precentNow < 0) { - - precentNow *= -1; - - }; - - this.change(this.value / precentNow * precent); - - } else { - - this.change(this.value / 100 * precent); + tan() { - }; + return this.change(Math.tan(this.value)); - return this; + }; + /** + * ### atan + * + * *** + * + * Метод вычисления арктангенса. + * + * *** + * @method + * @public + */ + atan() { + + return this.change(Math.atan(this.value)); + + }; + /** + * ### tanh + * + * *** + * + * Метод вычисления гипербалического тангенса. + * + * *** + * @method + * @public + */ + tanh() { + + return this.change(Math.atanh(this.value)); + + }; + /** + * ### atan2 + * + * *** + * + * Метод вычисления арктангенса по двум координатам. + * + * *** + * @arg {number} y `Y` + * @arg {number} x `X` + * @method + * @public + */ + atan2(y = this.value, x = 0) { + + return this.change(Math.atan2(y, x)); + + }; + /** + * ### atanh + * + * *** + * + * Метод вычисления гепербалического арктангенса. + * + * *** + * @method + * @public + */ + atanh() { + + return this.change(Math.atanh(this.value)); + + }; + /** + * ### cotan + * + * *** + * + * Метод вычисления котангенса. + * + * *** + * @method + * @public + */ + cotan() { + + return this.change(1 / this.tan().get()); + }; /** - * ### toPositive - * - Версия `0.0.0` - * - Модуль `number` + * ### acotan + * + * *** + * + * Метод вычисления арккотангенса. + * + * *** + * @method + * @public + */ + acotan() { + + return this.change(Math.PI / 2 - this.atan().get()); + + }; + + /** + * ### log + * + * * *** * - * Метод делающий число положительным. + * Метод вычисления логорифма. * * *** + * @method * @public */ - toPositive() { - - if (this.value < 0) { - - this.deny(); - - }; + log() { - return this; + return this.change(Math.log(this.value)); }; /** - * ### toNegative - * - Версия `0.0.0` - * - Модуль `number` + * ### log2 + * * *** - * - * Метод делающий число отрицательным. - * + * + * Метод вычисления логорифма по 2 базовому алгоритму. + * * *** + * @method * @public */ - toNegative() { + log2() { - if (this.value > 0) { - - this.deny(); + return this.change(Math.log2(this.value)); + + }; + /** + * ### log1p + * + * *** + * + * Метод вычисления логорифма от значения на 1 больше текущего. + * + * *** + * @method + * @public + */ + log1p() { + + return this.change(Math.log1p(this.value)); + + }; + /** + * ### log10 + * + * *** + * + * Метод вычисления логорифма по 10 базовому алгоритму. + * + * *** + * @method + * @public + */ + log10() { + + return this.change(Math.log10(this.value)); + + }; - }; +}; - return this; +//#region YE - }; +YNumber.appendModule(YNumber); -}; +//#endregion /** - * @file class.mjs + * @file number/class.mjs * @author Yakhin Nikita Artemovich - * @copyright Yakhin Nikita Artemovich 2023 + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 */ \ No newline at end of file diff --git a/-submodule/number/-module/config.mjs b/-submodule/number/-module/config.mjs index f26740e..242ca19 100644 --- a/-submodule/number/-module/config.mjs +++ b/-submodule/number/-module/config.mjs @@ -1,5 +1,12 @@ -import { configY } from "@syls/y"; import { YConfig } from "@syls/y/config"; +import { configEntity } from "@syls/y/entity"; + +/** @type {configEntity} */ +const config = { + + + +}; /** ### configNumber * @@ -8,45 +15,42 @@ import { YConfig } from "@syls/y/config"; * *** * @public */ -export const configNumber = new YConfig({ +export const configNumber = new YConfig(Object.assign(config, { /** - * ### defaultValue - * - * Дефолт значение. - * + * ### valueDefault + * * *** - * @type {NaN?} + * + * Дефолт значение. + * + * *** + * @type {number} * @public + * @property */ - defaultValue: NaN, + valueDefault: 0, /** - * ### defaultHistory - * - * Дефолт история. - * + * ### historyDefault + * * *** + * + * Дефолт история. + * + * *** * @type {number[]} * @public + * @property */ - defaultHistory: [], - /** - * ### defaultModeConstant - * - * Дефолт режим коснтанты. - * - * *** - * @type {boolean} - * @public - */ - defaultModeConstant: false, + historyDefault: [], -}, configY); +}), configEntity); export default configNumber; /** * @file number/config.mjs * @author Yakhin Nikita Artemovich + * @license Apache-2.0 * @copyright SYLS (Software Y Lib Solutions) 2023 */ \ No newline at end of file diff --git a/-submodule/number/-module/export.mjs b/-submodule/number/-module/export.mjs index d214621..ce088b4 100644 --- a/-submodule/number/-module/export.mjs +++ b/-submodule/number/-module/export.mjs @@ -1,3 +1,10 @@ export * from "./class.mjs"; export * from "./config.mjs"; -export * from "./module.mjs"; \ No newline at end of file +export * from "./module.mjs"; + +/** + * @file number/export.mjs + * @author Yakhin Nikita Artemovich + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 +*/ \ No newline at end of file diff --git a/-submodule/number/-module/module.mjs b/-submodule/number/-module/module.mjs index 8510076..855ba6e 100644 --- a/-submodule/number/-module/module.mjs +++ b/-submodule/number/-module/module.mjs @@ -1,20 +1,6 @@ //#region YI -/** @type {import('./config.mjs')['default']?} */ -let config = null; - -await import('./config.mjs') - - .then(c => config = c.default) - .catch(e => e); - -/** @type {import('./error.mjs')['default']?} */ -let error = null; - -await import('./error.mjs') - - .then(i => error = i.default) - .catch(e => e); +import { configNumber as config } from './config.mjs'; /** @type {import('crypto')} */ let crypto = null; diff --git a/-submodule/number/-module/type.d.ts b/-submodule/number/-module/type.d.ts index d214621..54cacab 100644 --- a/-submodule/number/-module/type.d.ts +++ b/-submodule/number/-module/type.d.ts @@ -1,3 +1,8 @@ -export * from "./class.mjs"; -export * from "./config.mjs"; -export * from "./module.mjs"; \ No newline at end of file +export * from './export.mjs'; + +/** + * @file number/type.d.ts + * @author Yakhin Nikita Artemovich + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 +*/ \ No newline at end of file diff --git a/-submodule/string/-module/class.mjs b/-submodule/string/-module/class.mjs index 670a27b..530ce8a 100644 --- a/-submodule/string/-module/class.mjs +++ b/-submodule/string/-module/class.mjs @@ -1,8 +1,8 @@ //#region YI -import { YArg } from '@syls/y/arg'; import { YMany } from '@syls/y/many'; -import { YCond, condIsStringValid } from '@syls/y/cond'; +import { YArg } from '@syls/y/arg'; +import { YCond } from '@syls/y/cond'; import { configString as config } from './config.mjs'; import { YStat } from '../-submodule/stat/-module/class.mjs'; import { YLayout } from '../-submodule/layout/-module/class.mjs'; @@ -83,7 +83,7 @@ class IString extends DString { * @field * @public */ - layout; + layout = new YLayout(this); /** * ### prefix * @@ -208,6 +208,12 @@ class FString extends MString { }; + [Symbol.toPrimitive](to) { + + return this.values; + + }; + }; /** @@ -349,7 +355,6 @@ export class YString extends FString { * Метод получения стилевой разметки. * * *** - * * @method * @public */ @@ -477,7 +482,7 @@ export class YString extends FString { */ setPostfix(postfix = '') { - if (condIsStringValid(postfix)) { + if (YCond.isString(postfix)) { this.postfix = () => postfix; @@ -516,6 +521,27 @@ export class YString extends FString { }; + /** + * ### useLayout + * + * *** + * + * Метод использования шаблона. + * + * *** + * @arg {(self:YLayout) => void} code `Код` + * @method + * @public + */ + useLayout(code) { + + if (!YCond.isFunc(code)) return this; + + code(this.getLayout()); + + return this; + + }; /** * ### useCorrecter * diff --git a/-submodule/string/-module/config.mjs b/-submodule/string/-module/config.mjs index c6d908f..08819d9 100644 --- a/-submodule/string/-module/config.mjs +++ b/-submodule/string/-module/config.mjs @@ -1,4 +1,4 @@ -import { YLayout } from "../-submodule/layout/-module/class.mjs"; +// import { YLayout } from "../-submodule/layout/-module/class.mjs"; import { YConfig } from "@syls/y/config"; import { configMany } from "@syls/y/many"; @@ -28,6 +28,19 @@ export const configString = new YConfig(Object.assign(config, { * @public */ tab: '\t', + /** + * ### style + * + * *** + * + * Стиль. + * + * *** + * @type {string} + * @public + * @property + */ + style: 'classic', /** * ### space * @@ -208,20 +221,39 @@ export const configString = new YConfig(Object.assign(config, { * @public */ backgroundDefault: 'black', + /** - * ### layoutDefault + * ### styles * * *** * - * Дефолт стилевая разметка. + * Стили. * * *** - * @type {YLayout} * @public * @property */ - layoutDefault: new YLayout(), + styles: { + + redline: { + foreground: 'white', + background: 'redDark', + + }, + vampire: { + + + + }, + classic: { + + foreground: 'cyan', + background: 'blueDark', + + }, + + }, /** * ### symbols * @@ -258,6 +290,8 @@ export const configString = new YConfig(Object.assign(config, { ne: '≠', /** @type {'∞'} */ inf: '∞', + /** @type {'∫'} */ + integr: '∫', /** @type {'±'} */ plusmin: '±', diff --git a/-submodule/string/-submodule/ansi/-module/class.mjs b/-submodule/string/-submodule/ansi/-module/class.mjs index f8afe48..9ade311 100644 --- a/-submodule/string/-submodule/ansi/-module/class.mjs +++ b/-submodule/string/-submodule/ansi/-module/class.mjs @@ -2,7 +2,6 @@ import { Y } from '@syls/y'; import { YArg } from '@syls/y/arg'; -import { ansiGetColor, ansiGetColorCode } from './export.mjs'; import { configANSI as config } from './config.mjs'; //#endregion @@ -158,9 +157,13 @@ class FANSI extends MANSI { /** @type {YArg} */ const yarg = args instanceof YArg ? args : new YArg(args); - yarg.dataUsed.underline = yarg.extract('bool'); - yarg.dataUsed.foreground = yarg.extract('string') ?? yarg.extract('number'); - yarg.dataUsed.background = yarg.extract('string') ?? yarg.extract('number'); + yarg.set( + + ['underline', 'bool'], + ['foreground', 'string', 'number'], + ['background', 'string', 'number'], + + ); return yarg; diff --git a/-submodule/string/-submodule/ansi/-module/config.mjs b/-submodule/string/-submodule/ansi/-module/config.mjs index 6f81ebb..cff5e6d 100644 --- a/-submodule/string/-submodule/ansi/-module/config.mjs +++ b/-submodule/string/-submodule/ansi/-module/config.mjs @@ -1,5 +1,12 @@ -import { configY } from "@syls/y"; import { YConfig } from "@syls/y/config"; +import configString from "../../../-module/config.mjs"; + +/** @type {configString['value']} */ +const config = { + + + +}; /** ### configAnsi * @@ -8,7 +15,7 @@ import { YConfig } from "@syls/y/config"; * *** * @public */ -export const configANSI = new YConfig({ +export const configANSI = new YConfig(Object.assign(config, { /** * ### delimeter @@ -16,7 +23,7 @@ export const configANSI = new YConfig({ * Разделитель аргументов. * * *** - * @type {string} + * @type {';'} * @public */ delimiter: ';', @@ -27,7 +34,7 @@ export const configANSI = new YConfig({ * Код. * * *** - * @type {string} + * @type {'\x1b['} * @public */ code: '\x1b[', @@ -37,7 +44,7 @@ export const configANSI = new YConfig({ * Код завершения вставки. * * *** - * @type {string} + * @type {'m'} * @public */ codeEnd: 'm', @@ -47,7 +54,7 @@ export const configANSI = new YConfig({ * Код очистки экрана. * * *** - * @type {string} + * @type {'J'} * @public */ codeClear: 'J', @@ -57,7 +64,7 @@ export const configANSI = new YConfig({ * Вставка точечной настройки цвета. * * *** - * @type {string} + * @type {'8;5'} * @public */ codeColor: '8;5', @@ -67,7 +74,7 @@ export const configANSI = new YConfig({ * Код сброса цветов. * * *** - * @type {string} + * @type {'9'} * @public */ codeColorReset: '9', @@ -77,7 +84,7 @@ export const configANSI = new YConfig({ * Код цвета символов. * * *** - * @type {string} + * @type {'3'} * @public */ codeColorForeground: '3', @@ -87,7 +94,7 @@ export const configANSI = new YConfig({ * Код цвета фона. * * *** - * @type {string} + * @type {'4'} * @public */ codeColorBackground: '4', @@ -97,7 +104,7 @@ export const configANSI = new YConfig({ * Код позиции. * * *** - * @type {string} + * @type {'H'} * @public */ codePosition: 'H', @@ -107,7 +114,7 @@ export const configANSI = new YConfig({ * Код сдвига курсора до конца строки с удалением последующих символов. * * *** - * @type {string} + * @type {'K'} * @public */ codePositionEnd: 'K', @@ -117,7 +124,7 @@ export const configANSI = new YConfig({ * Код линии подчеркивания. * * *** - * @type {} + * @type {'4'} * @public */ codeUnderline: '4', @@ -127,7 +134,7 @@ export const configANSI = new YConfig({ * Код сброса линии подчеркивания. * * *** - * @type {string} + * @type {'24'} * @public */ codeUnderlineReset: '24', @@ -137,7 +144,7 @@ export const configANSI = new YConfig({ * Код удаления символа со сдвигом. * * *** - * @type {string} + * @type {'\b'} * @public */ codeBackspace: '\b', @@ -155,6 +162,7 @@ export const configANSI = new YConfig({ colors: { reset: -1, + resetY: -2, red: 160, redDark: 52, @@ -210,13 +218,6 @@ export const configANSI = new YConfig({ }, -}, configY); - -export default configANSI; +}), configString); -/** - * @file ansi/config.mjs - * @author Yakhin Nikita Artemovich - * @license Apache-2.0 - * @copyright SYLS (Software Y Lib Solutions) 2023 -*/ \ No newline at end of file +export default configANSI; \ No newline at end of file diff --git a/-submodule/string/-submodule/ansi/-module/module.mjs b/-submodule/string/-submodule/ansi/-module/module.mjs index a542216..028328d 100644 --- a/-submodule/string/-submodule/ansi/-module/module.mjs +++ b/-submodule/string/-submodule/ansi/-module/module.mjs @@ -1,6 +1,8 @@ //#region YI +import { YCond } from '@syls/y/cond'; import { configANSI as config } from './config.mjs'; +import { stringGetRow, stringGetRows, stringPaste } from '../../../-module/module.mjs'; //#endregion //#region YT @@ -15,6 +17,34 @@ import { configANSI as config } from './config.mjs'; * @prop {any} _ * */ +/** ### ansiTColors + * + * + * + * *** + * + * Тип ansi цветов. + * + * *** + * + * @typedef {keyof config['value']['colors']} ansiTColors + * +*/ +/** ### ansiTFBGround + * + * + * + * *** + * + * Тип переднего и заднего плана. + * + * *** + * + * @typedef ansiTFBground + * @prop {ansiTColors} foreground + * @prop {ansiTColors} background + * +*/ //#endregion //#region YV @@ -23,970 +53,2602 @@ import { configANSI as config } from './config.mjs'; //#endregion -//#region getColor 0.0.0 +//#region isANSI -/** ### ansiTFGetColor - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `string\ansi` +/** + * ### isAnsi + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `getColor`. - * - * @typedef {ansiTFUGetColor&ansiT&ansiColorTForeBackGround} ansiTFGetColor - * -*/ -/** ### ansiTFUGetColor - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `string\ansi` * - * Уникальные параметры функции `getColor`. * - * @typedef ansiTFUGetColor - * @prop {any} _ + * *** + * @typedef isAnsiT + * @prop {string} string + * *** + * @arg {isAnsiT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function isANSI(args) { + + let result; -/** @arg {ansiTFGetColor} t */ -function getColorDeceit(t) { - try { - - return getColorVerify(t); - - } catch (e) { - - if (config.value?.strictMode) { - - throw e; - - }; - - return undefined; - - } finally { - - - - }; - -}; -/** @arg {ansiTFGetColor} t */ -function getColorVerify(t) { - - const { - - - - } = t; - - return getColorHandle(t); - -}; -/** @arg {ansiTFGetColor} t */ -function getColorHandle(t) { - - const { - - - - } = t; - switch (t.foreground) { + let { - case -3: { + string, - return ansiGetColorReset(1, 1); + } = args; - }; + //#region verify - }; - if (!t.foreground && t.foreground !== 0) { - t.foreground = configConsole.foreground; + //#endregion + //#region handle - }; - if (!t.background && t.background !== 0) { - t.background = configConsole.background; - }; - - - if (condIsStringValid(t.background)) { - - t.background = ansiGetColorCode(t.background); + //#endregion + //#region comply - }; - if (condIsStringValid(t.foreground)) { + return string.startsWith('\x1b[') && string.at(-1) === 'm'; - t.foreground = ansiGetColorCode(t.foreground); + //#endregion - }; - - return getColorComply(t); - -}; -/** @arg {ansiTFGetColor} t */ -function getColorComply(t) { - - let { - - foreground, - background, - - } = t; + } catch (err) { - if (foreground || foreground === 0) { + if (config.value.strictMode) { - foreground = [config.value.codeColorForeground + config.value.codeColor, foreground].join(config.value.delimiter); + throw err; + + }; + + + + } finally { - }; - if (background || background === 0) { - background = [config.value.codeColorBackground + config.value.codeColor, background].join(config.value.delimiter); }; - return config.value.code + [foreground, background].filter(e => e).join(config.value.delimiter) + config.value.codeEnd; - + return result; + }; /** - * ### ansiGetColor - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `string\ansi` + * ### ansiIsANSI + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция получения `ansi` вставки для смены цвета в виде строки. + * Функция проверки строки на принадлежность к ansi вставке. * * *** - * @arg {ansiTVColor} background `Фон` - * @arg {ansiTVColor} foreground `Символы` + * @arg {string} string `Строка` + * @function */ -export function ansiGetColor(foreground, background) { +export function ansiIsANSI(string) { - return getColorDeceit({ foreground, background, }); + return isANSI({ string, }); }; //#endregion -//#region getColorCode 0.0.0 +//#region isUnderline -/** ### ansiTFGetColorCode - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `string\ansi` +/** + * ### isUnderline + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `getColorCode`. - * - * @typedef {ansiTFUGetColorCode&ansiT} ansiTFGetColorCode - * -*/ -/** ### ansiTFUGetColorCode - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `string\ansi` * - * Уникальные параметры функции `getColorCode`. * - * @typedef ansiTFUGetColorCode - * @prop {ansiTVColor} color + * *** + * @typedef isUnderlineT + * @prop {} _ + * *** + * @arg {isUnderlineT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function isUnderline(args) { + + let result; -/** @arg {ansiTFGetColorCode} t */ -function getColorCodeDeceit(t) { - try { - - return getColorCodeVerify(t); - - } catch (e) { - - if (config.value?.strictMode) { - - throw e; - + + let { + + + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + + + //#endregion + //#region comply + + + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + }; - - return undefined; - + + + } finally { - - - + + + }; - -}; -/** @arg {ansiTFGetColorCode} t */ -function getColorCodeVerify(t) { - - const { - - - - } = t; - - return getColorCodeHandle(t); - -}; -/** @arg {ansiTFGetColorCode} t */ -function getColorCodeHandle(t) { - - const { - - - - } = t; - - return getColorCodeComply(t); - + + return result; + }; -/** @arg {ansiTFGetColorCode} t */ -function getColorCodeComply(t) { - - const { - - color, - - } = t; - if (condIsNumber(color) && color >= 0 && color <= 255) { +//#endregion +//#region isForeground + +/** + * ### isForeground + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * + * + * *** + * @typedef isForegroundT + * @prop {string} string + * *** + * @arg {isForegroundT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function isForeground(args) { + + let result; + + try { + + let { + + string, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + - return color; + //#endregion + //#region comply - } else { + const params = ansiGetParams(string).join(';'); - const result = Object.entries(config.value.colors).find(c => c[0].match(new RegExp(color) || c[1] === color))[1]; + result = params.includes('38;5'); - if (result === -1) { + //#endregion - return null; + } catch (err) { - } else { + if (config.value.strictMode) { - return result; + throw err; }; + + + } finally { + + + }; - + + return result; + }; /** - * ### ansiGetColorCode - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `string\ansi` + * ### ansiIsForeground + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция получения кода по его цвету. - * - * Корректирует его, если оно является числом или присваивает ему код, если представлен названием. + * Функция проверки вставки `ansi` на параметр цвета символов. * * *** - * @arg {ansiTVColor} color `Цвет` + * @arg {string} string `Строка` + * @function */ -export function ansiGetColorCode(color) { +export function ansiIsForeground(string,) { - return getColorCodeDeceit({ color }); + return isForeground({ string, }); }; //#endregion -//#region getColorReset 0.0.0 +//#region isBackground -/** ### ansiTFGetColorReset - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `string\ansi` +/** + * ### isBackground + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `getColorReset`. - * - * @typedef {ansiTFUGetColorReset&ansiT&ansiColorTForeBackGround} ansiTFGetColorReset - * -*/ -/** ### ansiTFUGetColorReset - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `string\ansi` * - * Уникальные параметры функции `getColorReset`. * - * @typedef ansiTFUGetColorReset - * @prop {any} _ + * *** + * @typedef {isForegroundT} isBackgroundT + * @prop {} _ + * *** + * @arg {isBackgroundT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function isBackground(args) { + + let result; -/** @arg {ansiTFGetColorReset} t */ -function getColorResetDeceit(t) { - try { - - return getColorResetVerify(t); - - } catch (e) { - - if (config.value?.strictMode) { - - throw e; - + + let { + + string, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + + + //#endregion + //#region comply + + const params = ansiGetParams(string).join(';'); + + result = params.includes('48;5'); + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + }; - - return undefined; - + + + } finally { - - - - }; - -}; -/** @arg {ansiTFGetColorReset} t */ -function getColorResetVerify(t) { - - const { - - - - } = t; - - return getColorResetHandle(t); - -}; -/** @arg {ansiTFGetColorReset} t */ -function getColorResetHandle(t) { - - const { - - - - } = t; - - return getColorResetComply(t); - -}; -/** @arg {ansiTFGetColorReset} t */ -function getColorResetComply(t) { - - let { - - foreground, - background, - - } = t; - - if (foreground) { - foreground = `${config.value.codeColorForeground}${config.value.codeColorReset}`; + }; - if (background) { - background = `${config.value.codeColorBackground}${config.value.codeColorReset}`; + return result; - }; - - return config.value.code + [foreground, background].filter(e => e).join(config.value.delimiter) + config.value.codeEnd; - }; /** - * ### ansiGetColorReset - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `string\ansi` + * ### ansiIsBackground + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция получения ansi команды для сброса цвета фона и/или символов. + * Функция проверки вставки `ansi` на параметр цвета фона. * * *** - * @arg {boolean} background `Фон` - * @arg {boolean} foreground `Символы` + * @arg {string} string `Строка` + * @function */ -export function ansiGetColorReset(foreground, background) { +export function ansiIsBackground(string) { - return getColorResetDeceit({ foreground, background, }); + return isBackground({ string, }); }; //#endregion -//#region clear 0.0.0 +//#region get -/** ### ansiTFClear - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `string\ansi` +/** + * ### create + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `clear`. - * - * @typedef {ansiTFUClear&ansiT} ansiTFClear * -*/ -/** ### ansiTFUClear - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `string\ansi` * - * Уникальные параметры функции `clear`. - * - * @typedef ansiTFUClear - * @prop {any} _ + * *** + * @typedef getT + * @prop {string[]} params + * *** + * @arg {getT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function get(args) { + + let result; -/** @arg {ansiTFClear} t */ -function clearDeceit(t) { - try { - - return clearVerify(t); - - } catch (e) { - - console.log(e); - if (config.value?.strictMode) { - - throw e; - - }; - - return undefined; - - } finally { - - - - }; - -}; -/** @arg {ansiTFClear} t */ -function clearVerify(t) { - - const { - - - - } = t; - - return clearHandle(t); - -}; -/** @arg {ansiTFClear} t */ -function clearHandle(t) { - - const { - - - - } = t; - - return clearComply(t); - -}; -/** @arg {ansiTFClear} t */ -function clearComply(t) { - - const { - - - - } = t; - - process.stdout.write('\x1bс'); - - return false; - -}; + let { -/** - * ### ansiClear - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `string\ansi` - * *** - * - * Функция очистки экрана. - * - * *** -*/ -export function ansiClear() { + params, - return clearDeceit({}); + } = args; -}; + //#region verify -//#endregion -//#region setColor 0.0.0 -/** ### ansiTFSetColor - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `string\ansi` - * *** - * - * Результирующие параметры функции `setColor`. - * - * @typedef {ansiTFUSetColor&ansiT&ansiColorTForeBackGround} ansiTFSetColor - * -*/ -/** ### ansiTFUSetColor - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `string\ansi` - * - * Уникальные параметры функции `setColor`. - * - * @typedef ansiTFUSetColor - * @prop {any} _ -*/ -/** @arg {ansiTFSetColor} t */ -function setColorDeceit(t) { - - try { - - return setColorVerify(t); - - } catch (e) { - - console.log(e); + //#endregion + //#region handle - if (config.value?.strictMode) { - - throw e; - - }; - - return undefined; - - } finally { - - - - }; - -}; -/** @arg {ansiTFSetColor} t */ -function setColorVerify(t) { - - const { - - - - } = t; - - return setColorHandle(t); - -}; -/** @arg {ansiTFSetColor} t */ -function setColorHandle(t) { - - const { - - - - } = t; - - return setColorComply(t); - -}; -/** @arg {ansiTFSetColor} t */ -function setColorComply(t) { - - const { - foreground, - background, - } = t; + //#endregion + //#region comply + + result = config.value.code + params.join(';') + config.value.codeEnd; + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; - const result = ansiGetColor(foreground, background); + }; - if (result) { - process.stdout.write(result); - return true; + } finally { - } else { - return false; }; - + + return result; + }; /** - * ### ansiSetColor - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `string\ansi` + * ### ansiGet + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция смены цветов символов и фона. + * Функция создания `ansi` вставки. * * *** - * @arg {ansiTVColor} foreground - * @arg {ansiTVColor} background + * @arg {...string} params `Параметры` + * @function */ -export function ansiSetColor(foreground, background) { +export function ansiGet(...params) { - return setColorDeceit({ foreground, background, }); + return get({ params, }); }; //#endregion -//#region backspace 0.0.0 +//#region getReset -/** ### ansiTFBackspace - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `string\ansi` +/** + * ### getReset + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `backspace`. * - * @typedef {ansiTFUBackspace&ansiT} ansiTFBackspace * + * *** + * @typedef getResetT + * @prop {} _ + * *** + * @arg {getResetT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ -/** ### ansiTFUBackspace - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `string\ansi` - * - * Уникальные параметры функции `backspace`. - * - * @typedef ansiTFUBackspace - * @prop {number} count -*/ +function getReset(args) { + + let result; -/** @arg {ansiTFBackspace} t */ -function backspaceDeceit(t) { - try { - - return backspaceVerify(t); - - } catch (e) { - - if (config.value?.strictMode) { - - throw e; - + + let { + + + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + + + //#endregion + //#region comply + + + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + }; - - return undefined; - + + + } finally { - - - - }; - -}; -/** @arg {ansiTFBackspace} t */ -function backspaceVerify(t) { - - const { - - - - } = t; - - return backspaceHandle(t); - -}; -/** @arg {ansiTFBackspace} t */ -function backspaceHandle(t) { - - const { - - - - } = t; - - return backspaceComply(t); - -}; -/** @arg {ansiTFBackspace} t */ -function backspaceComply(t) { - - const { - - count, - - } = t; - process.stdout.write(config.value.codeBackspace.repeat(count)); - return true; - -}; -/** - * ### ansiBackspace - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `string\ansi` - * *** - * - * Функция удаления символа в текущей позиции со сдвигом влево. - * - * *** - * @arg {number} count `Счетчик` -*/ -export function ansiBackspace(count = 1) { + }; - return backspaceDeceit({ count, }); + return result; }; //#endregion -//#region resetColor 0.0.0 +//#region getColor -/** ### ansiTFResetColor - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `string\ansi` +/** + * ### getColor + * - Тип `S` + * - Версия `1.0.0` * *** * - * Результирующие параметры функции `resetColor`. - * - * @typedef {ansiTFUResetColor&ansiT} ansiTFResetColor - * -*/ -/** ### ansiTFUResetColor - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `string\ansi` * - * Уникальные параметры функции `resetColor`. * - * @typedef ansiTFUResetColor - * @prop {boolean} foreground - * @prop {boolean} background + * *** + * @typedef getColorT + * @prop {ansiTColors} foreground + * @prop {ansiTColors} background + * *** + * @arg {getColorT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function getColor(args) { + + let result; -/** @arg {ansiTFResetColor} t */ -function resetColorDeceit(t) { - try { - - return resetColorVerify(t); - - } catch (e) { - - if (config.value?.strictMode) { - - throw e; - - }; - - return undefined; - - } finally { - - - - }; - -}; -/** @arg {ansiTFResetColor} t */ -function resetColorVerify(t) { - - const { - - - - } = t; - - return resetColorHandle(t); - -}; -/** @arg {ansiTFResetColor} t */ -function resetColorHandle(t) { - - const { - - - - } = t; - - return resetColorComply(t); - -}; -/** @arg {ansiTFResetColor} t */ -function resetColorComply(t) { - - const { - foreground, - background, + let { + + foreground, + background, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + + + //#endregion + //#region comply + + result = ansiGet(ansiGetColorParam(foreground, background)); + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { - } = t; + throw err; + + }; - if (foreground || background) { - process.stdout.write(ansiGetColorReset(foreground, background)); - return true; + } finally { - } else { - return false; }; - + + return result; + }; /** - * ### ansiResetColor - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `string\ansi` + * ### ansiGetColor + * - Тип `S` + * - Версия `1.0.0` * *** * - * Функция получения вставки для очистки цвета. + * Функция получения `ansi` вставки с указанием цветов. * * *** - * @arg {boolean} foreground `Символы` - * @arg {boolean} background `Фон` + * @arg {ansiTColors} foreground `Символы` + * @arg {ansiTColors} background `Фон` + * @function */ -export function ansiResetColor(foreground = true, background = true) { +export function ansiGetColor(foreground, background) { - return resetColorDeceit({ foreground, background, }); + return getColor({ foreground, background, }); }; //#endregion -//#region setCursorTo 0.0.0 +//#region getColorParam -/** ### ansiTFSetCursorTo - * - Тип `TF` - * - Версия `0.0.0` - * - Модуль `string\ansi` +/** + * ### getColorParam + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Результирующие параметры функции `setCursorTo`. - * - * @typedef {ansiTFUSetCursorTo&ansiT} ansiTFSetCursorTo - * -*/ -/** ### ansiTFUSetCursorTo - * - Тип `TFU` - * - Версия `0.0.0` - * - Модуль `string\ansi` - * - * Уникальные параметры функции `setCursorTo`. - * - * @typedef ansiTFUSetCursorTo - * @prop {number} y - * @prop {number} x + * + * + * + * *** + * @typedef getColorParamT + * @prop {ansiTColors} foreground + * @prop {ansiTColors} background + * *** + * @arg {getColorParamT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function */ +function getColorParam(args) { -/** @arg {ansiTFSetCursorTo} t */ -function setCursorToDeceit(t) { + let result; try { - return setCursorToVerify(t); + let { - } catch (e) { + foreground, + background, - if (config.value?.strictMode) { + } = args; - throw e; + //#region verify - }; - return undefined; - } finally { + //#endregion + //#region handle + if (!(foreground in config.value.colors || (-3 <= foreground && foreground <= 255))) foreground = -2; + if (!(background in config.value.colors || (-3 <= background && background <= 255))) background = -2; + if (foreground || foreground === 0) { - }; + switch (foreground) { -}; -/** @arg {ansiTFSetCursorTo} t */ -function setCursorToVerify(t) { + case 'resetY': case -2: foreground = config.value.styles[config.value.style].foreground; break; - const { + }; + foreground = ansiGetCodeColor(foreground); + switch (foreground) { - } = t; + case -1: foreground = [config.value.codeColorForeground, config.value.codeColorReset].join(config.value.delimiter); break; + default: foreground = [config.value.codeColorForeground + config.value.codeColor, foreground].join(config.value.delimiter); break; - return setCursorToHandle(t); + }; -}; -/** @arg {ansiTFSetCursorTo} t */ -function setCursorToHandle(t) { + }; + if (background || background === 0) { - const { + switch (background) { + case 'resetY': case -2: background = config.value.styles[config.value.style].background; break; + }; - } = t; + background = ansiGetCodeColor(background); - t.y++; - t.x++; + switch (background) { - return setCursorToComply(t); + case -1: background = [config.value.codeColorBackground, config.value.codeColorReset].join(config.value.delimiter); break; + default: background = [config.value.codeColorBackground + config.value.codeColor, background].join(config.value.delimiter); break; -}; -/** @arg {ansiTFSetCursorTo} t */ -function setCursorToComply(t) { + }; + + }; + + //#endregion + //#region comply - const { + result = [foreground, background].filter(value => value).join(config.value.delimiter); - y, - x, + //#endregion - } = t; + } catch (err) { - const result = `${config.value.code}${y};${x}${config.value.codePosition}`; + if (config.value.strictMode) { - if (result) { + throw err; + + }; - process.stdout.write(result); - return true; - } else { + } finally { + - return false; }; + return result; + }; /** - * ### ansiSetCursorTo - * - Версия `0.0.0` - * - Цепочка `DVHCa` - * - Модуль `string\ansi` + * ### ansiGetColorParam + * - Тип `S` + * - Версия `1.0.0` * *** - * - * Функция с добавлением вставки для установки положения курсора в указанную позицию. - * + * + * Функция получения параметра цвета `ansi` вставки. + * * *** - * @arg {number} y `Линия` - * @arg {number} x `Столбец` + * @arg {ansiTColors} foreground `Символы` + * @arg {ansiTColors} background `Фон` + * @function */ -export function ansiSetCursorTo(y, x) { +export function ansiGetColorParam(foreground, background) { - return setCursorToDeceit({ y, x }); + return getColorParam({ foreground, background, }); }; //#endregion +//#region getColorReset + +/** + * ### getColorReset + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * + * + * *** + * @typedef getColorResetT + * @prop {} _ + * *** + * @arg {getColorResetT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function getColorReset(args) { + + let result; + + try { + + let { + + + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + + + //#endregion + //#region comply + + + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + + + } finally { + + + + }; + + return result; + +}; + +//#endregion +//#region getParams + +/** + * ### getParams + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * + * + * *** + * @typedef getParamsT + * @prop {string} string + * *** + * @arg {getParamsT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function getParams(args) { + + let result; + + try { + + let { + + string, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + + + //#endregion + //#region comply + + result = string.slice(2, -1).split(';'); + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + + + } finally { + + + + }; + + return result; + +}; + +/** + * ### ansiGetParams + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция получения параметров `ansi` вставки. + * + * *** + * @arg {string} string `Строка` + * @function +*/ +export function ansiGetParams(string) { + + return getParams({ string, }); + +}; + +//#endregion +//#region getCodeColor + +/** + * ### getCodeColor + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * + * + * *** + * @typedef getCodeColorT + * @prop {ansiTColors|number} color + * *** + * @arg {getCodeColorT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function getCodeColor(args) { + + let result; + + try { + + let { + + color, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + + + //#endregion + //#region comply + + result = YCond.isNumber(color) ? color : config.value.colors[color]; + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + + + } finally { + + + + }; + + return result; + +}; + +/** + * ### ansiGetCodeColor + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Метод получения кода цвета по его наименованию. + * + * *** + * @arg {getCodeColorT['color']} color `Цвет` + * @function +*/ +export function ansiGetCodeColor(color) { + + return getCodeColor({ color, }); + +}; + +//#endregion + +//#region join + +/** + * ### join + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * + * + * *** + * @typedef joinT + * @prop {string[]} ansi + * *** + * @arg {joinT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function join(args) { + + let result; + + try { + + let { + + ansi, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + ansi = ansi.filter(ansi => ansiIsANSI(ansi)); + + //#endregion + //#region comply + + result = []; + + for (const a of ansi) result.push(...ansiGetParams(a)); + + return ansiGet(...result); + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + + + } finally { + + + + }; + + return result; + +}; + +/** + * ### ansiJoin + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция объединения `ansi` вставок. + * + * *** + * @arg {...string} ansi `Вставки` + * @function +*/ +export function ansiJoin(...ansi) { + + return join({ ansi, }); + +}; + +//#endregion +//#region change + +/** + * ### change + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * + * + * *** + * @typedef changeT + * @prop {string} ansi + * @prop {string|number} value + * @prop {keyof changeTProp} property + * @typedef changeTProp + * @prop {boolean} underline + * @prop {ansiTColors} foreground + * @prop {ansiTColors} background + * *** + * @arg {changeT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function change(args) { + + let result; + + try { + + let { + + ansi, + value, + property, + + } = args; + + //#region verify + + + + //#endregion + //#region handle + + value = value.toString(); + + switch (property) { + + case 'foreground': case 'background': value = ansiGetCodeColor(value); break; + + }; + + //#endregion + //#region comply + + result = ansiGetParams(ansi); + + switch (property) { + + case 'foreground': { + + let index = result.indexOf('38'); + + if (++index && result[index++] == '5') { + + result[index] = value; + + } else { + + + + }; + + }; break; + case 'background': { + + let index = result.indexOf('48'); + + if (++index && result[index++] == '5') { + + result[index] = value; + + } else { + + + + }; + + }; break; + + }; + + result = ansiGet(...result); + + //#endregion + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + + + } finally { + + + + }; + + return result; + +}; + +/** + * ### ansiChange + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция изменения параметров `ansi` вставки. + * + * *** + * @arg {Y1} property + * @arg {string} anis `Вставка` + * @arg {string|number} value + * @returns {string} + * @function + * @template {keyof changeTProp} Y1 +*/ +export function ansiChange(ansi, property, value) { + + return change({ ansi, property, value, }); + +}; + +//#endregion + +// //#region get + +// /** ### ansiTFGet +// * - Тип `TF` +// * *** +// * +// * Результирующие параметры функции `get`. +// * +// * @typedef {ansiTFUGet&ansiT} ansiTFGet +// * +// */ +// /** ### ansiTFUGet +// * - Тип `TFU` +// * +// * Уникальные параметры функции `get`. +// * +// * @typedef ansiTFUGet +// * @prop {string[]} strings +// */ + +// /** @arg {ansiTFGet} args */ +// function getDeceit(args) { + +// try { + +// return getVerify(args); + +// } catch (e) { + +// if (config?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFGet} args */ +// function getVerify(args) { + +// const { + + + +// } = args; + +// return getHandle(args); + +// }; +// /** @arg {ansiTFGet} args */ +// function getHandle(args) { + +// const { + + + +// } = args; + +// return getComply(args); + +// }; +// /** @arg {ansiTFGet} args */ +// function getComply(args) { + +// const { + +// strings, + +// } = args; + +// return config.value.code + strings.join(config.value.delimiter) + config.value.codeEnd; + +// }; + +// /** +// * ### ansiGet +// * +// * *** +// * +// * Метод объединения `ansi` вставок. +// * +// * *** +// * @arg {...string} strings `Вставки` +// * @function +// */ +// export function ansiGet(...strings) { + +// return getDeceit({ strings }); + +// }; + +// //#endregion +// //#region getMap + +// /** ### ansiTFGetMap +// * - Тип `TF` +// * *** +// * +// * Результирующие параметры функции `getMap`. +// * +// * @typedef {ansiTFUGetMap&ansiT} ansiTFGetMap +// * +// */ +// /** ### ansiTFUGetMap +// * - Тип `TFU` +// * +// * Уникальные параметры функции `getMap`. +// * +// * @typedef ansiTFUGetMap +// * @prop {any} _ +// */ + +// /** @arg {ansiTFGetMap} args */ +// function getMapDeceit(args) { + +// try { + +// return getMapVerify(args); + +// } catch (e) { + +// if (config?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFGetMap} args */ +// function getMapVerify(args) { + +// const { + + + +// } = args; + +// return getMapHandle(args); + +// }; +// /** @arg {ansiTFGetMap} args */ +// function getMapHandle(args) { + +// const { + + + +// } = args; + +// return getMapComply(args); + +// }; +// /** @arg {ansiTFGetMap} args */ +// function getMapComply(args) { + +// const { + + + +// } = args; + + + +// }; + +// /** +// * ### ansiGetMap +// * +// * *** +// * +// * Функция получения карты `ansi` вставок. +// * +// * *** +// * +// * @function +// */ +// export function ansiGetMap() { + +// return getMapDeceit({}); + +// }; + +// //#endregion +// //#region getColor + +// /** ### ansiTFGetColor +// * - Тип `TF` +// * *** +// * +// * Результирующие параметры функции `getColor`. +// * +// * @typedef {ansiTFUGetColor&ansiT&ansiTFBground} ansiTFGetColor +// * +// */ +// /** ### ansiTFUGetColor +// * - Тип `TFU` +// * +// * Уникальные параметры функции `getColor`. +// * +// * @typedef ansiTFUGetColor +// * @prop {any} _ +// */ + +// /** @arg {ansiTFGetColor} args */ +// function getColorDeceit(args) { + +// try { + +// return getColorVerify(args); + +// } catch (e) { + +// if (config?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFGetColor} args */ +// function getColorVerify(args) { + +// const { + + + +// } = args; + +// return getColorHandle(args); + +// }; +// /** @arg {ansiTFGetColor} args */ +// function getColorHandle(args) { + +// const { + + + +// } = args; + +// if (!(args.foreground in config.value.colors || (-3 <= args.foreground && args.foreground <= 255))) args.foreground = -2; +// if (!(args.background in config.value.colors || (-3 <= args.background && args.background <= 255))) args.background = -2; + +// if (args.foreground || args.foreground === 0) { + +// switch (args.foreground) { + +// case 'resetY': case -2: args.foreground = config.value.styles[config.value.style].foreground; break; + +// }; + +// args.foreground = ansiGetColorCode(args.foreground); + +// switch (args.foreground) { + +// case -1: args.foreground = [config.value.codeColorForeground, config.value.codeColorReset].join(config.value.delimiter); break; +// default: args.foreground = [config.value.codeColorForeground + config.value.codeColor, args.foreground].join(config.value.delimiter); break; + +// }; + +// }; +// if (args.background || args.background === 0) { + +// switch (args.background) { + +// case 'resetY': case -2: args.background = config.value.styles[config.value.style].background; break; + +// }; + +// args.background = ansiGetColorCode(args.background); + +// switch (args.background) { + +// case -1: args.background = [config.value.codeColorBackground, config.value.codeColorReset].join(config.value.delimiter); break; +// default: args.background = [config.value.codeColorBackground + config.value.codeColor, args.background].join(config.value.delimiter); break; + +// }; + +// }; + +// return getColorComply(args); + +// }; +// /** @arg {ansiTFGetColor} args */ +// function getColorComply(args) { + +// const { + +// foreground, +// background, + +// } = args; + +// return [foreground, background].filter(value => value).join(config.value.delimiter); + +// }; + +// /** +// * ### ansiGetColor +// * +// * *** +// * +// * Функция получения `ansi` вставки для смены цвета в виде строки. +// * +// * *** +// * @arg {ansiTColors} foreground `Символы` +// * @arg {ansiTColors} background `Фон` +// * @function +// */ +// export function ansiGetColor(foreground, background) { + +// return getColorDeceit({ foreground, background, }); + +// }; + +// //#endregion +// //#region getColorCode + +// /** ### ansiTFGetColorCode +// * - Тип `TF` +// * *** +// * +// * Результирующие параметры функции `getColorCode`. +// * +// * @typedef {ansiTFUGetColorCode&ansiT} ansiTFGetColorCode +// * +// */ +// /** ### ansiTFUGetColorCode +// * - Тип `TFU` +// * +// * Уникальные параметры функции `getColorCode`. +// * +// * @typedef ansiTFUGetColorCode +// * @prop {ansiTColors} color +// */ + +// /** @arg {ansiTFGetColorCode} args */ +// function getColorCodeDeceit(args) { + +// try { + +// return getColorCodeVerify(args); + +// } catch (e) { + +// if (config?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFGetColorCode} args */ +// function getColorCodeVerify(args) { + +// const { + + + +// } = args; + +// return getColorCodeHandle(args); + +// }; +// /** @arg {ansiTFGetColorCode} args */ +// function getColorCodeHandle(args) { + +// const { + + + +// } = args; + +// return getColorCodeComply(args); + +// }; +// /** @arg {ansiTFGetColorCode} args */ +// function getColorCodeComply(args) { + +// const { + +// color, + +// } = args; + +// return YCond.isNumber(color) ? color : config.value.colors[color]; + +// }; + +// /** +// * ### ansiGetColorCode +// * +// * *** +// * +// * Функция получения кода цвета. +// * +// * *** +// * @arg {ansiTColors} color `Цвет` +// * @function +// */ +// export function ansiGetColorCode(color) { + +// return getColorCodeDeceit({ color, }); + +// }; + +// //#endregion +// //#region getColorReset + +// /** ### ansiTFGetColorReset +// * - Тип `TF` +// * *** +// * +// * Результирующие параметры функции `getColorReset`. +// * +// * @typedef {ansiTFUGetColorReset&ansiT} ansiTFGetColorReset +// * +// */ +// /** ### ansiTFUGetColorReset +// * - Тип `TFU` +// * +// * Уникальные параметры функции `getColorReset`. +// * +// * @typedef ansiTFUGetColorReset +// * @prop {boolean|-1|-2} foreground +// * @prop {boolean|-1|-2} background +// */ + +// /** @arg {ansiTFGetColorReset} args */ +// function getColorResetDeceit(args) { + +// try { + +// return getColorResetVerify(args); + +// } catch (e) { + +// if (config?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFGetColorReset} args */ +// function getColorResetVerify(args) { + +// const { + + + +// } = args; + +// return getColorResetHandle(args); + +// }; +// /** @arg {ansiTFGetColorReset} args */ +// function getColorResetHandle(args) { + +// const { + + + +// } = args; + +// if (!args.foreground) { + +// args.foreground = `${config.value.codeColorForeground}${config.value.codeColorReset}`; + +// }; +// if (!args.background) { + +// args.background = `${config.value.codeColorBackground}${config.value.codeColorReset}`; + +// }; + +// return getColorResetComply(args); + +// }; +// /** @arg {ansiTFGetColorReset} args */ +// function getColorResetComply(args) { + +// const { + +// foreground, +// background, + +// } = args; + +// let result = foreground && background ? `${foreground};${background}` : foreground ? foreground : background ? background : null; + +// return result; + +// }; + +// /** +// * ### ansiGetColorReset +// * +// * *** +// * +// * Функция получения `ansi` вставки сброса цвета. +// * +// * *** +// * @arg {boolean|-1|-2} foreground `Символы` +// * @arg {boolean|-1|-2} background `Фон` +// * @function +// */ +// export function ansiGetColorReset(foreground, background) { + +// return getColorResetDeceit({ foreground, background, }); + +// }; + +// //#endregion + +// //#region ansiPaint + +// /** ### ansiTFAnsiPaint +// * - Тип `TF` +// * *** +// * +// * Результирующие параметры функции `ansiPaint`. +// * +// * @typedef {ansiTFUAnsiPaint&ansiT&ansiTFBground} ansiTFAnsiPaint +// * +// */ +// /** ### ansiTFUAnsiPaint +// * - Тип `TFU` +// * +// * Уникальные параметры функции `ansiPaint`. +// * +// * @typedef ansiTFUAnsiPaint +// * @prop {number} y1 +// * @prop {number} x1 +// * @prop {number} y2 +// * @prop {number} x2 +// * @prop {string} string +// * @prop {boolean} squareMode +// */ + +// /** @arg {ansiTFAnsiPaint} args */ +// function ansiPaintDeceit(args) { + +// try { + +// return ansiPaintVerify(args); + +// } catch (e) { + +// if (config?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFAnsiPaint} args */ +// function ansiPaintVerify(args) { + +// const { + + + +// } = args; + +// return ansiPaintHandle(args); + +// }; +// /** @arg {ansiTFAnsiPaint} args */ +// function ansiPaintHandle(args) { + +// const { + + + +// } = args; + +// return ansiPaintComply(args); + +// }; +// /** @arg {ansiTFAnsiPaint} args */ +// function ansiPaintComply(args) { + +// const { + +// x1, +// x2, +// y1, +// y2, +// string, +// foreground, +// background, +// squareMode, + +// } = args; + +// const color = ansiGet(ansiGetColor(foreground, background)); +// const reset = ansiGet(ansiGetColorReset()); + +// if (!YCond.isNumberInt(x1, x2, y1, y2)) return color + string + reset; + +// const rows = stringGetRows(string); + +// for (let index = y1; index < 2 * y2 - y1; index++) { + +// const row = rows[index]; +// const paste = squareMode ? row.slice(x1, 2 * x2 - x1) : row.slice(x1); + +// rows[index] = stringPaste(row, color + paste + reset, x1, paste.length); + +// }; + +// return rows.join('\n'); + +// }; + +// /** +// * ### ansiPaint +// * +// * *** +// * +// * Функция перекраски строки. +// * +// * *** +// * @arg {number} y1 `Y1` +// * @arg {number} y2 `Y2` +// * @arg {number} x1 `X1` +// * @arg {number} x2 `X2` +// * @arg {string} string `Строка` +// * @arg {boolean} squareMode `Режим периметра` +// * @arg {ansiTColors} foreground `Символы` +// * @arg {ansiTColors} background `Фон` +// * @function +// */ +// export function ansiPaint(string, foreground, background, y1, x1, y2, x2, squareMode) { + +// return ansiPaintDeceit({ string, foreground, background, y1, x1, y2, x2, squareMode, }); + +// }; + +// //#endregion +// //#region ansiPaintByCond + +// /** ### ansiTFAnsiPaintByCond +// * - Тип `TF` +// * *** +// * +// * Результирующие параметры функции `ansiPaintByCond`. +// * +// * @typedef {ansiTFUAnsiPaintByCond&ansiT} ansiTFAnsiPaintByCond +// * +// */ +// /** ### ansiTFUAnsiPaintByCond +// * - Тип `TFU` +// * +// * Уникальные параметры функции `ansiPaintByCond`. +// * +// * @typedef ansiTFUAnsiPaintByCond +// * @prop {string} string +// * @prop {ansiTColors} t +// * @prop {ansiTColors} f +// * @prop {(char:string) => boolean} cond +// */ + +// /** @arg {ansiTFAnsiPaintByCond} args */ +// function ansiPaintByCondDeceit(args) { + +// try { + +// return ansiPaintByCondVerify(args); + +// } catch (e) { + +// if (config.value.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFAnsiPaintByCond} args */ +// function ansiPaintByCondVerify(args) { + +// const { + + + +// } = args; + +// return ansiPaintByCondHandle(args); + +// }; +// /** @arg {ansiTFAnsiPaintByCond} args */ +// function ansiPaintByCondHandle(args) { + +// const { + + + +// } = args; + +// args.t = args.t ? ansiGet(ansiGetColor(...args.t)) : ''; +// args.f = args.f ? ansiGet(ansiGetColor(...args.f)) : ''; + +// return ansiPaintByCondComply(args); + +// }; +// /** @arg {ansiTFAnsiPaintByCond} args */ +// function ansiPaintByCondComply(args) { + +// const { + +// t, +// f, +// cond, +// string, + +// } = args; + + + +// let flagT = false; +// let flagF = false; +// let flagS = false; +// let result = string; + +// for (let index = 0; index < result.length; index++) { + +// const char = result[index]; +// const check = cond(char); + +// let ansi = ''; + +// // console.log(`Char: ${char}; FS: ${flagS}, FF: ${flagF}, FT: ${flagT}, cond: ${check}`) + +// if ((flagS && char !== 'm') || (char !== '\x1b' && !check && flagF) || (check && flagT)) { + +// continue; + +// } else if (char === '\x1b') { + +// flagS = true; +// flagF = flagT = false; +// continue; + +// } else if (flagS && char === 'm') { + +// flagS = false; +// continue; + +// } else if (check && !flagT) { + +// ansi = t; +// flagT = true; +// flagF = false; + +// } else if (!check && !flagF) { + +// ansi = f; +// flagF = true; +// flagT = false; + +// }; + +// result = stringPaste(result, ansi, index); +// index += ansi.length; + +// }; + +// return result + ansiGet(ansiGetColorReset()); + +// }; + +// /** +// * ### ansiPaintByCond +// * +// * *** +// * +// * Функция для перекраски строки с помощью условий. +// * +// * *** +// * @arg {string} string `Строка` +// * @arg {(char:string) => boolean} cond `Условие` +// * @arg {[ansiTColors, ansiTColors]} t `Истина` +// * @arg {[ansiTColors, ansiTColors]} f `Ложь` +// * @function +// */ +// export function ansiPaintByCond(string, cond, t, f) { + +// return ansiPaintByCondDeceit({ string, cond, t, f, }); + +// }; + +// //#endregion + +// //#region clear + +// /** ### ansiTFClear +// * - Тип `TF` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * *** +// * +// * Результирующие параметры функции `clear`. +// * +// * @typedef {ansiTFUClear&ansiT} ansiTFClear +// * +// */ +// /** ### ansiTFUClear +// * - Тип `TFU` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * +// * Уникальные параметры функции `clear`. +// * +// * @typedef ansiTFUClear +// * @prop {any} _ +// */ + +// /** @arg {ansiTFClear} t */ +// function clearDeceit(t) { + +// try { + +// return clearVerify(t); + +// } catch (e) { + +// console.log(e); + +// if (config.value?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFClear} t */ +// function clearVerify(t) { + +// const { + + + +// } = t; + +// return clearHandle(t); + +// }; +// /** @arg {ansiTFClear} t */ +// function clearHandle(t) { + +// const { + + + +// } = t; + +// return clearComply(t); + +// }; +// /** @arg {ansiTFClear} t */ +// function clearComply(t) { + +// const { + + + +// } = t; + +// process.stdout.write('\x1bс'); + +// return false; + +// }; + +// /** +// * ### ansiClear +// * - Версия `0.0.0` +// * - Цепочка `DVHCa` +// * - Модуль `string\ansi` +// * *** +// * +// * Функция очистки экрана. +// * +// * *** +// */ +// export function ansiClear() { + +// return clearDeceit({}); + +// }; + +// //#endregion +// //#region setColor + +// /** ### ansiTFSetColor +// * - Тип `TF` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * *** +// * +// * Результирующие параметры функции `setColor`. +// * +// * @typedef {ansiTFUSetColor&ansiT&ansiColorTForeBackGround} ansiTFSetColor +// * +// */ +// /** ### ansiTFUSetColor +// * - Тип `TFU` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * +// * Уникальные параметры функции `setColor`. +// * +// * @typedef ansiTFUSetColor +// * @prop {any} _ +// */ + +// /** @arg {ansiTFSetColor} t */ +// function setColorDeceit(t) { + +// try { + +// return setColorVerify(t); + +// } catch (e) { + +// console.log(e); + +// if (config.value?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFSetColor} t */ +// function setColorVerify(t) { + +// const { + + + +// } = t; + +// return setColorHandle(t); + +// }; +// /** @arg {ansiTFSetColor} t */ +// function setColorHandle(t) { + +// const { + + + +// } = t; + +// return setColorComply(t); + +// }; +// /** @arg {ansiTFSetColor} t */ +// function setColorComply(t) { + +// const { + +// foreground, +// background, + +// } = t; + +// const result = ansiGetColor(foreground, background); + +// if (result) { + +// process.stdout.write(result); + +// return true; + +// } else { + +// return false; + +// }; + +// }; + +// /** +// * ### ansiSetColor +// * - Версия `0.0.0` +// * - Цепочка `DVHCa` +// * - Модуль `string\ansi` +// * *** +// * +// * Функция смены цветов символов и фона. +// * +// * *** +// * @arg {ansiTVColor} foreground +// * @arg {ansiTVColor} background +// */ +// export function ansiSetColor(foreground, background) { + +// return setColorDeceit({ foreground, background, }); + +// }; + +// //#endregion +// //#region backspace + +// /** ### ansiTFBackspace +// * - Тип `TF` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * *** +// * +// * Результирующие параметры функции `backspace`. +// * +// * @typedef {ansiTFUBackspace&ansiT} ansiTFBackspace +// * +// */ +// /** ### ansiTFUBackspace +// * - Тип `TFU` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * +// * Уникальные параметры функции `backspace`. +// * +// * @typedef ansiTFUBackspace +// * @prop {number} count +// */ + +// /** @arg {ansiTFBackspace} t */ +// function backspaceDeceit(t) { + +// try { + +// return backspaceVerify(t); + +// } catch (e) { + +// if (config.value?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFBackspace} t */ +// function backspaceVerify(t) { + +// const { + + + +// } = t; + +// return backspaceHandle(t); + +// }; +// /** @arg {ansiTFBackspace} t */ +// function backspaceHandle(t) { + +// const { + + + +// } = t; + +// return backspaceComply(t); + +// }; +// /** @arg {ansiTFBackspace} t */ +// function backspaceComply(t) { + +// const { + +// count, + +// } = t; + +// process.stdout.write(config.value.codeBackspace.repeat(count)); + +// return true; + +// }; + +// /** +// * ### ansiBackspace +// * - Версия `0.0.0` +// * - Цепочка `DVHCa` +// * - Модуль `string\ansi` +// * *** +// * +// * Функция удаления символа в текущей позиции со сдвигом влево. +// * +// * *** +// * @arg {number} count `Счетчик` +// */ +// export function ansiBackspace(count = 1) { + +// return backspaceDeceit({ count, }); + +// }; + +// //#endregion +// //#region resetColor + +// /** ### ansiTFResetColor +// * - Тип `TF` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * *** +// * +// * Результирующие параметры функции `resetColor`. +// * +// * @typedef {ansiTFUResetColor&ansiT} ansiTFResetColor +// * +// */ +// /** ### ansiTFUResetColor +// * - Тип `TFU` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * +// * Уникальные параметры функции `resetColor`. +// * +// * @typedef ansiTFUResetColor +// * @prop {boolean} foreground +// * @prop {boolean} background +// */ + +// /** @arg {ansiTFResetColor} t */ +// function resetColorDeceit(t) { + +// try { + +// return resetColorVerify(t); + +// } catch (e) { + +// if (config.value?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFResetColor} t */ +// function resetColorVerify(t) { + +// const { + + + +// } = t; + +// return resetColorHandle(t); + +// }; +// /** @arg {ansiTFResetColor} t */ +// function resetColorHandle(t) { + +// const { + + + +// } = t; + +// return resetColorComply(t); + +// }; +// /** @arg {ansiTFResetColor} t */ +// function resetColorComply(t) { + +// const { + +// foreground, +// background, + +// } = t; + +// if (foreground || background) { + +// process.stdout.write(ansiGetColorReset(foreground, background)); + +// return true; + +// } else { + +// return false; + +// }; + +// }; + +// /** +// * ### ansiResetColor +// * - Версия `0.0.0` +// * - Цепочка `DVHCa` +// * - Модуль `string\ansi` +// * *** +// * +// * Функция получения вставки для очистки цвета. +// * +// * *** +// * @arg {boolean} foreground `Символы` +// * @arg {boolean} background `Фон` +// */ +// export function ansiResetColor(foreground = true, background = true) { + +// return resetColorDeceit({ foreground, background, }); + +// }; + +// //#endregion +// //#region setCursorTo + +// /** ### ansiTFSetCursorTo +// * - Тип `TF` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * *** +// * +// * Результирующие параметры функции `setCursorTo`. +// * +// * @typedef {ansiTFUSetCursorTo&ansiT} ansiTFSetCursorTo +// * +// */ +// /** ### ansiTFUSetCursorTo +// * - Тип `TFU` +// * - Версия `0.0.0` +// * - Модуль `string\ansi` +// * +// * Уникальные параметры функции `setCursorTo`. +// * +// * @typedef ansiTFUSetCursorTo +// * @prop {number} y +// * @prop {number} x +// */ + +// /** @arg {ansiTFSetCursorTo} t */ +// function setCursorToDeceit(t) { + +// try { + +// return setCursorToVerify(t); + +// } catch (e) { + +// if (config.value?.strictMode) { + +// throw e; + +// }; + +// return undefined; + +// } finally { + + + +// }; + +// }; +// /** @arg {ansiTFSetCursorTo} t */ +// function setCursorToVerify(t) { + +// const { + + + +// } = t; + +// return setCursorToHandle(t); + +// }; +// /** @arg {ansiTFSetCursorTo} t */ +// function setCursorToHandle(t) { + +// const { + + + +// } = t; + +// t.y++; +// t.x++; + +// return setCursorToComply(t); + +// }; +// /** @arg {ansiTFSetCursorTo} t */ +// function setCursorToComply(t) { + +// const { + +// y, +// x, + +// } = t; + +// const result = `${config.value.code}${y};${x}${config.value.codePosition}`; + +// if (result) { + +// process.stdout.write(result); + +// return true; + +// } else { + +// return false; + +// }; + +// }; + +// /** +// * ### ansiSetCursorTo +// * - Версия `0.0.0` +// * - Цепочка `DVHCa` +// * - Модуль `string\ansi` +// * *** +// * +// * Функция с добавлением вставки для установки положения курсора в указанную позицию. +// * +// * *** +// * @arg {number} y `Линия` +// * @arg {number} x `Столбец` +// */ +// export function ansiSetCursorTo(y, x) { + +// return setCursorToDeceit({ y, x }); + +// }; + +// //#endregion /** * @file ansi/module.mjs diff --git a/-submodule/string/-submodule/console/-module/changelog.md b/-submodule/string/-submodule/console/-module/changelog.md new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/console/-module/class.mjs b/-submodule/string/-submodule/console/-module/class.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/console/-module/config.mjs b/-submodule/string/-submodule/console/-module/config.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/console/-module/error.mjs b/-submodule/string/-submodule/console/-module/error.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/console/-module/export.mjs b/-submodule/string/-submodule/console/-module/export.mjs new file mode 100644 index 0000000..d214621 --- /dev/null +++ b/-submodule/string/-submodule/console/-module/export.mjs @@ -0,0 +1,3 @@ +export * from "./class.mjs"; +export * from "./config.mjs"; +export * from "./module.mjs"; \ No newline at end of file diff --git a/-submodule/string/-submodule/console/-module/module.mjs b/-submodule/string/-submodule/console/-module/module.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/console/-module/module.test.js b/-submodule/string/-submodule/console/-module/module.test.js new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/console/-module/readme.md b/-submodule/string/-submodule/console/-module/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/console/-module/type.d.ts b/-submodule/string/-submodule/console/-module/type.d.ts new file mode 100644 index 0000000..9fcf563 --- /dev/null +++ b/-submodule/string/-submodule/console/-module/type.d.ts @@ -0,0 +1 @@ +export * from "./export.mjs"; \ No newline at end of file diff --git a/-submodule/string/-submodule/console/package.json b/-submodule/string/-submodule/console/package.json new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/layout/-module/class.mjs b/-submodule/string/-submodule/layout/-module/class.mjs index 6740a26..72dda59 100644 --- a/-submodule/string/-submodule/layout/-module/class.mjs +++ b/-submodule/string/-submodule/layout/-module/class.mjs @@ -2,9 +2,9 @@ import { Y } from '@syls/y'; import { YArg } from '@syls/y/arg'; -import { configLayout as config } from './config.mjs'; +import { YANSI } from '../../ansi/-module/export.mjs'; import { YElement } from '../-submodule/element/-module/export.mjs'; -import { YANSI, ansiGetColorReset } from '../../ansi/-module/export.mjs'; +import { configLayout as config } from './config.mjs'; import { stringAppend, stringGetRow, stringSetRow } from '../../../-module/export.mjs'; //#endregion @@ -94,6 +94,17 @@ class DLayout extends SLayout { }; class ILayout extends DLayout { + /** + * ### string + * + * Строка. + * + * *** + * @type {import('@syls/string')['YString']['prototype']} + * @field + * @protected + */ + string; /** * ### pointer * @@ -149,7 +160,11 @@ class FLayout extends MLayout { /** @type {YArg} */ const yarg = args instanceof YArg ? args : new YArg(args); - yarg.dataUsed.string = yarg.extract('string'); + yarg.set( + + ['string', 'ject'], + + ); return yarg; diff --git a/-submodule/string/-submodule/regexp/-module/changelog.md b/-submodule/string/-submodule/regexp/-module/changelog.md new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/regexp/-module/class.mjs b/-submodule/string/-submodule/regexp/-module/class.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/regexp/-module/config.mjs b/-submodule/string/-submodule/regexp/-module/config.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/regexp/-module/error.mjs b/-submodule/string/-submodule/regexp/-module/error.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/regexp/-module/export.mjs b/-submodule/string/-submodule/regexp/-module/export.mjs new file mode 100644 index 0000000..d214621 --- /dev/null +++ b/-submodule/string/-submodule/regexp/-module/export.mjs @@ -0,0 +1,3 @@ +export * from "./class.mjs"; +export * from "./config.mjs"; +export * from "./module.mjs"; \ No newline at end of file diff --git a/-submodule/string/-submodule/regexp/-module/module.mjs b/-submodule/string/-submodule/regexp/-module/module.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/regexp/-module/module.test.js b/-submodule/string/-submodule/regexp/-module/module.test.js new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/regexp/-module/readme.md b/-submodule/string/-submodule/regexp/-module/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/string/-submodule/regexp/-module/type.d.ts b/-submodule/string/-submodule/regexp/-module/type.d.ts new file mode 100644 index 0000000..9fcf563 --- /dev/null +++ b/-submodule/string/-submodule/regexp/-module/type.d.ts @@ -0,0 +1 @@ +export * from "./export.mjs"; \ No newline at end of file diff --git a/-submodule/string/-submodule/regexp/package.json b/-submodule/string/-submodule/regexp/package.json new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-heir/listener/-module/changelog.md b/-submodule/y/-heir/listener/-module/changelog.md new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-heir/listener/-module/class.mjs b/-submodule/y/-heir/listener/-module/class.mjs new file mode 100644 index 0000000..08d8cf7 --- /dev/null +++ b/-submodule/y/-heir/listener/-module/class.mjs @@ -0,0 +1,237 @@ +//#region YI + +import { YArg } from '@syls/y/arg'; +import { YEntity } from '@syls/y/entity'; +import { configListener as config } from './config.mjs'; + +//#endregion +//#region YT + +/** ### YListenerT + * - Тип `T` + * + * Основной параметр модуля `YListener`. + * + * @typedef {YListenerTE&YListenerTU&Y} YListenerT + * +*/ +/** ### YListenerTE + * - Тип `TE` + * + * Параметр наследования `YListener`. + * + * @typedef {Omit} YListenerTE + * +*/ +/** ### YListenerTU + * - Тип `TU` + * + * Уникальные параметры `YListener`. + * + * @typedef YListenerTU + * @prop {any} _ + * +*/ + +//#endregion + +class SListener extends YEntity { + + /** + * ### stock + * + * *** + * + * + * + * *** + * @type {YListener[]} + * @field + * @static + * @public + */ + static stock = []; + /** + * ### config + * + * + * + * *** + * @field + * @static + * @public + */ + static config = config; + + /** + * @arg {...YListener} args `Аргументы` + * @returns {YListener[]} + */ + static create(...args) { + + return Object.getPrototypeOf(SListener).create.apply(this, args); + + }; + + /** + * @arg {Y1} value `Значение` + * @static + * @method + * @public + * @returns {(Y1&Y1)?} + * @template {YListener} Y1 + */ + static becomePrototype(value) { + + if (!(value instanceof Object)) return null; + + Object.setPrototypeOf(value, Y.prototype); + + return value; + + }; + + + + +}; +class DListener extends SListener { + + + +}; +class IListener extends DListener { + + + +}; +class MListener extends IListener { + + + +}; +class FListener extends MListener { + + /** + * ### YListener.constructor + * + * + * + * *** + * @arg {YListenerT} args + */ + constructor(args) { + + super(args = FListener.#before(args = arguments)); + + FListener.#deceit.apply(this, [args]); + + return this.correlate(); + + }; + + /** @arg {DListener} args */ + static #before(args) { + + /** @type {YArg} */ + const yarg = args instanceof YArg ? args : new YArg(args); + + + + return yarg; + + }; + /** @arg {YArg} args @this {YListener} */ + static #deceit(args) { + + try { + + FListener.#verify.apply(this, arguments); + + } catch (e) { + + if (config?.strictMode) { + + throw e; + + }; + + return new YListener(); + + } finally { + + + + }; + + }; + /** @arg {YArg} args @this {YListener} */ + static #verify(args) { + + const { + + + + } = args; + + FListener.#handle.apply(this, arguments); + + }; + /** @arg {YArg} args @this {YListener} */ + static #handle(args) { + + + + FListener.#create.apply(this, arguments); + + }; + /** @arg {YArg} args @this {YListener} */ + static #create(args) { + + const { + + + + } = args; + + this + + .adopt(args.getData()); + + }; + +}; + +/** + * ### YListener + * - Тип `SDIMFY` + * - Версия `0.0.0` + * - Цепочка `BDVHC` + * *** + * + * Класс `YListener`. + * + * *** + * @class + * +*/ +export class YListener extends FListener { + + /** + * @method + * @public + * @returns {typeof YListener} + */ + getClass() { + + return YListener; + + }; + +}; + +//#region YE + +YListener.appendModule(YListener); + +//#endregion \ No newline at end of file diff --git a/-submodule/y/-heir/listener/-module/config.mjs b/-submodule/y/-heir/listener/-module/config.mjs new file mode 100644 index 0000000..3a2b9e7 --- /dev/null +++ b/-submodule/y/-heir/listener/-module/config.mjs @@ -0,0 +1,31 @@ +import { YConfig } from "@syls/y/config"; +import { configEntity } from "@syls/y/entity"; + +/** @type {configEntity['value']} */ +const config = { + + + +}; + +/** ### configListener + * + * Конфигуратор модуля `listener`. + * + * *** + * @public +*/ +export const configListener = new YConfig(Object.assign(config, { + + + +}), configEntity); + +export default configListener; + +/** + * @file listener/config.mjs + * @author Yakhin Nikita Artemovich + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 +*/ \ No newline at end of file diff --git a/-submodule/y/-heir/listener/-module/error.mjs b/-submodule/y/-heir/listener/-module/error.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-heir/listener/-module/export.mjs b/-submodule/y/-heir/listener/-module/export.mjs new file mode 100644 index 0000000..d214621 --- /dev/null +++ b/-submodule/y/-heir/listener/-module/export.mjs @@ -0,0 +1,3 @@ +export * from "./class.mjs"; +export * from "./config.mjs"; +export * from "./module.mjs"; \ No newline at end of file diff --git a/-submodule/y/-heir/listener/-module/module.mjs b/-submodule/y/-heir/listener/-module/module.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-heir/listener/-module/module.test.js b/-submodule/y/-heir/listener/-module/module.test.js new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-heir/listener/-module/readme.md b/-submodule/y/-heir/listener/-module/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-heir/listener/-module/type.d.ts b/-submodule/y/-heir/listener/-module/type.d.ts new file mode 100644 index 0000000..9fcf563 --- /dev/null +++ b/-submodule/y/-heir/listener/-module/type.d.ts @@ -0,0 +1 @@ +export * from "./export.mjs"; \ No newline at end of file diff --git a/-submodule/y/-heir/listener/package.json b/-submodule/y/-heir/listener/package.json new file mode 100644 index 0000000..17a92ab --- /dev/null +++ b/-submodule/y/-heir/listener/package.json @@ -0,0 +1,47 @@ +{ + "name": "@syls/listener", + "type": "module", + "files": [ + "./-module", + "./-submodule", + "./package.json" + ], + "author": { + "name": "Yakhin Nikita Artemovich", + "email": "mr.y.nikita@gmail.com" + }, + "version": "0.0.0", + "license": "Apache-2.0", + "funding": { + "url": "https://boosty.to/mr.y.nikita", + "type": "boosty" + }, + "exports": { + ".": { + "types": "./-module/type.d.ts", + "import": "./-module/export.mjs" + } + }, + "scripts": { + "test": "node ./-module/module.test.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "keywords": [ + "y", + "lib", + "syls" + ], + "repository": { + "url": "https://github.com/MrYNikita/Y.git", + "type": "git" + }, + "description": "", + "dependencies": { + "@syls/y": "*" + }, + "devDependencies": { + "@syls/test": "*" + } +} \ No newline at end of file diff --git a/-submodule/y/-module/class.mjs b/-submodule/y/-module/class.mjs index 0e26e44..0178d9a 100644 --- a/-submodule/y/-module/class.mjs +++ b/-submodule/y/-module/class.mjs @@ -1,57 +1,911 @@ +// //#region YT + +// /** ### YT +// * - Тип `T` +// * +// * Основной параметр модуля `Y`. +// * +// * @typedef {YTE&YTU&YJect} YT +// * +// */ +// /** ### YTE +// * - Тип `TE` +// * +// * Параметр наследования `Y`. +// * +// * @typedef {Omit} YTE +// * +// */ +// /** ### YTU +// * - Тип `TU` +// * +// * Уникальные параметры `Y`. +// * +// * @typedef YTU +// * @prop {any} _ +// * +// */ + +// //#endregion + +// class SY { + +// /** +// * ### stock +// * +// * Набор. +// * +// * *** +// * @type {Y[]} +// * @public +// */ +// static stock = []; +// /** +// * ### config +// * +// * Конфигуратор. +// * +// * *** +// * @public +// */ +// static config = config; +// /** +// * ### modules +// * +// * *** +// * +// * Модули. +// * +// * *** +// * @type {any[]} +// * @field +// * @static +// * @private +// */ +// static modules = []; + +// /** +// * ### do +// * +// * *** +// * +// * Метод выполнения кода в контексте данного класса. +// * +// * *** +// * @arg {...((self: typeof Y, ...args) => void)} codes `Коды` +// * @static +// * @method +// * @public +// */ +// static do(...codes) { + +// Y.prototype.do.apply(this, codes); + +// return this; + +// }; +// /** +// * ### getY +// * +// * *** +// * +// * Метод получения базового класса. +// * +// * *** +// * @static +// * @method +// * @public +// */ +// static getY() { + +// return Y; + +// }; +// /** +// * @arg {...Y} args `Аргументы` +// * @returns {Y[]} +// */ +// static create(...args) { + +// const result = []; + +// for (const index in args) result[index] = new this(args[index]);y + +// return result; + +// }; +// /** +// * ### appendModule +// * +// * *** +// * +// * Метод добавления модулей. +// * +// * *** +// * @arg {...Y1} values `Значения` +// * @static +// * @method +// * @public +// * @template {typeof Y} Y1 +// */ +// static appendModule(...values) { + +// for (const value of values) { + +// if (!(value instanceof Function && value.prototype instanceof SY)) continue; + +// Y.modules.push(value); + +// }; + +// return this; + +// }; +// /** +// * ### becomePrototype +// * +// * *** +// * +// * Метод установки текущего класса, как прототипа указанному объекту. +// * +// * *** +// * @arg {Y1} value `Значение` +// * @static +// * @method +// * @public +// * @returns {(Y1&Y)?} +// * @template Y1 +// */ +// static becomePrototype(value) { + +// if (!(value instanceof Object)) return null; + +// Object.setPrototypeOf(value, this); + +// if (typeof value === 'function' && 'prototype' in value) { + +// Object.setPrototypeOf(value['prototype'], this.prototype); + +// }; + +// return value; + +// }; + +// }; +// class DY extends SY { + + + +// }; +// class IY extends DY { + + + +// }; +// class MY extends IY { + +// /** +// * ### correlate +// * +// * *** +// * +// * Метод корреляции. +// * +// * *** +// * @method +// * @protected +// */ +// correlate() { + +// const aliases = this.constructor?.config?.value?.aliases; + +// if (aliases) { + +// return yCorrelate(this, ...aliases); + +// }; + +// return this; + +// }; + +// }; +// class FY extends MY { + +// /** +// * ### Y.constructor +// * +// * +// * +// * *** +// * @arg {YT} args +// */ +// constructor(args) { + +// super(); + +// FY.#deceit.apply(this, arguments); + +// return this.correlate(); + +// }; + +// /** @arg {YT} args @this {Y} */ +// static #deceit(args) { + +// try { + +// FY.#verify.apply(this, arguments); + +// } catch (e) { + +// throw e; + +// } finally { + + + +// }; + +// }; +// /** @arg {YT} args @this {Y} */ +// static #verify(args) { + +// FY.#handle.apply(this, arguments); + +// }; +// /** @arg {YT} args @this {Y} */ +// static #handle(args) { + + + +// FY.#create.apply(this, arguments); + +// }; +// /** @arg {YT} args @this {Y} */ +// static #create(args) { + +// const yc = this.getClass(); + +// if (yc.config?.value?.stockMode ?? yc.config?.stockMode) { + +// yc.stock.push(this); + +// }; + +// }; + +// }; + +// /** +// * ### Y +// * - Тип `SDIMFY` +// * - Версия `1.0.0` +// * - Цепочка `BDVHC` +// * *** +// * +// * Класс `Y`. +// * +// * Базовый класс любого `SYLS` класса. +// * +// * *** +// * @class +// */ +// export class Y extends FY { + +// /** +// * ### do +// * +// * *** +// * +// * Метод выполнения кода в контексте данного экземпляра. +// * +// * *** +// * @arg {...((self: this, ...args) => void)} codes `Коды` +// * @since `1.0.0` +// * @method +// * @public +// */ +// do(...codes) { + +// try { + +// for (const code of codes) { + +// if (typeof code !== 'function') continue; + +// code(this); + +// }; + +// } catch (error) { + +// console.error(error); + +// }; + +// return this; + +// }; +// /** +// * ### gong +// * +// * *** +// * +// * Метод заглушка. +// * +// * Метод без логики для объявления начала методллогического полотна. Используется при форматировании. +// * +// * *** +// * @method +// * @public +// */ +// gong() { + +// return this; + +// }; +// /** +// * ### cond +// * +// * *** +// * +// * Метод условной проверки. +// * +// * *** +// * @arg {...any} args `Аргументы` +// * @arg {((self: this, ...args) => void)?} t `Истина` +// * @arg {((self: this, ...args) => void)?} f `Ложь` +// * @arg {(self: this, ...args) => boolean} cond `Условие` +// * @method +// * @public +// */ +// cond(cond, t, f, ...args) { + +// if (typeof cond !== "function") { + +// return this; + +// }; + +// if (cond(this, ...args)) { + +// if (typeof t === 'function') t(this, ...args); + +// } else { + +// if (typeof f === "function") f(this, ...args); + +// }; + +// return this; + +// }; +// /** +// * ### mode +// * +// * *** +// * +// * Метод установки режимов. +// * +// * *** +// * @arg {any} value `Значение` +// * @arg {string} mode `Режим` +// * @method +// * @public +// */ +// mode(mode, value) { + +// const args = yClassifyProp(arguments); + +// const options = [...args.array, ...args.string.map(string => [string])]; + +// for (const option of options) { + +// [mode, value] = option; + +// if (!(mode in this)) { + +// if (!((mode += 'Mode') in this)) { + +// continue; + +// }; + +// }; + +// this[mode] = value === undefined ? this[mode] ? false : true : !!value; + +// }; + +// return this; + +// }; +// /** +// * ### wrap +// * +// * *** +// * +// * Метод выполнения нового контекста. +// * +// * *** +// * @arg {Y1} target `Цель` +// * @arg {(self: Y1) => void} wrapper `Обёртка` +// * @arg {...any} args `Аргументы` +// * @method +// * @public +// * @template Y1 +// */ +// wrap(wrapper, target, ...args) { + +// if (typeof wrapper !== 'function') { + +// return this; + +// }; + +// wrapper(target, ...args); + +// return this; + +// }; +// /** +// * ### fill +// * +// * *** +// * +// * +// * +// * *** +// * +// * @public +// */ +// fill() { + + + +// }; +// /** +// * ### turn +// * +// * *** +// * +// * Метод переопределения метододологического холста. +// * +// * *** +// * @arg {Y1} y +// * @method +// * @public +// * @returns {Y1&{getPrev()=>Y2}} +// * @template Y1 +// * @template {this} Y2 +// */ +// turn(y) { + +// const prev = this; + +// const shell = new Proxy({ + +// getPrev() { + +// return prev; + +// }, + +// }, { + +// get(t, p) { + +// if (y[p]) { + +// return y[p]; + +// } else { + +// return t[p]; + +// }; + +// }, +// set(t, p, v) { + +// y[p] = v; + +// return true; + +// }, + +// }); + +// Object.setPrototypeOf(shell, y); + +// return shell; + +// }; +// /** +// * ### clone +// * +// * *** +// * +// * Метод клонирования объекта. +// * +// * *** +// * @arg {boolean?} link `Связь` +// * @public +// */ +// clone(link = true) { + +// return yClone(this, link); + +// }; +// /** +// * ### equal +// * +// * *** +// * +// * Метод проверки на эквивалентность. +// * +// * *** +// * @arg {Y1} ject `Объект` +// * @public +// * @template Y1 +// */ +// equal(ject) { + +// return yEqual(this, ject); + +// }; +// /** +// * ### default +// * +// * *** +// * +// * Метод замещения указанных значений объекта на дефолтные. +// * +// * Если не указать ни одного свойства, то заменены будут все свойства. +// * +// * *** +// * @arg {...(keyof this)} props `Значения` +// * @method +// * @public +// */ +// default(...props) { + +// if (!props.length) { + +// props = Object.keys(this); + +// } else { + +// props = props.filter(prop => prop in this); + +// }; + +// const config = this.constructor.config; + +// for (const prop of props) { + +// this[prop] = (config.value[prop + 'Default'] ?? config.value.default); + +// }; + +// return this; + +// }; +// /** +// * ### unstock +// * +// * *** +// * +// * Метод удаления объекта из учёта. +// * +// * Данный метод удаляет объект оптимальным и полным образом. +// * Если объект представлен в единственном экземпляре, то будет удалён только один экземпляр без перебора. +// * Если же объектов несколько, то будут удалены все его экземпляры. +// * +// * *** +// * @method +// * @public +// */ +// unstock() { + +// const image = this.getClass(); + +// let index = image.stock.indexOf(this); + +// if (index !== -1) { + +// image.stock.splice(index, 1); + +// }; + +// index = image.stock.indexOf(this); + +// if (index !== -1) { + +// image.stock = image.stock.filter(item => item !== this) + +// }; + +// return this; + +// }; + +// /** +// * ### adopt +// * - Версия `1.0.0` +// * - Модуль `ject` +// * *** +// * +// * Метод {@link yAdopt|перенятия} свойств обладателя. +// * +// * *** +// * @arg {Y1} owner `Обладатель` +// * @arg {Y2} config `Конфигуратор` +// * @since `1.0.0` +// * @public +// * @method +// * @version `1.0.0` +// * @template Y1,Y2 +// */ +// adopt(owner, config) { + +// return yAdopt(this, owner, config); + +// }; +// /** +// * ### adoptDefault +// * - Версия `0.0.0` +// * - Модуль `ject` +// * *** +// * +// * Метод {@link yAdoptDefault|перенятия} дефолт свойств обладателя. +// * +// * *** +// * @arg {{}} owner `Обладатель` +// * @public +// */ +// adoptDefault(owner) { + +// return yAdoptDefault(this, owner); + +// }; + +// /** +// * ### print +// * +// * *** +// * +// * Метод отображения объекта. +// * +// * *** +// * @public +// */ +// print() { + +// console.log(this); + +// return this; + +// }; +// /** +// * ### printProp +// * +// * *** +// * +// * Метод отображения свойства объекта. +// * +// * *** +// * @arg {...(keyof this)} props `Свойство` +// * @method +// * @public +// */ +// printProp(...props) { + +// if (!props.every(elem => elem instanceof Array)) { + +// props = [props]; + +// }; + +// for (const prop of props) { + +// let focus = this; + +// for (const part of prop) { + +// if (part in focus) { + +// focus = focus[part] + +// } else { + +// break; + +// }; + +// }; + +// console.log(focus); + +// }; + +// return this; + +// }; +// /** +// * ### printExec +// * +// * *** +// * +// * Метод отображения результата кодовых операций в контексте текущего объекта. +// * +// * *** +// * @arg {...(self:this)=>any} codes `Коды` +// * @method +// * @public +// */ +// printExec(...codes) { + +// for (const code of codes) { + +// console.log(code(this)); + +// }; + +// return this; + +// }; +// /** +// * ### printTable +// * +// * *** +// * +// * Метод отображения данных в табличном виде. +// * +// * *** +// * @arg {...this} jects `Объекты` +// * @since `1.0.0` +// * @method +// * @public +// */ +// printTable(...jects) { + +// console.table([this, ...jects]); + +// return this; + +// }; + +// /** +// * ### supplement +// * - Версия `0.0.0` +// * - Модуль `ject` +// * *** +// * +// * Метод {@link ySupplement|дополнения} свойствами указанного дополнителя. +// * +// * *** +// * @arg {{}} supplementer `Дополнитель` +// * @public +// * @method +// */ +// supplement(supplementer) { + +// return ySupplement(this, supplementer); + +// }; + +// /** +// * ### getClass +// * +// * *** +// * +// * Метод получения класса экземпляра. +// * +// * *** +// * @method +// * @public +// * @returns {typeof Y} +// */ +// getClass() { + +// return Y; + +// }; +// /** +// * ### getProperty +// * - Версия `0.0.0` +// * *** +// * +// * Метод {@link yGetProperty|получения} указанного свойства. +// * +// * *** +// * @arg {string} property `Свойство` +// * @public +// */ +// getProperty(property) { + +// return yGetProperty(this, property); + +// }; +// /** +// * ### getPropertyByPath +// * - Версия `0.0.0` +// * *** +// * +// * Метод {@link yGetPropertyByPath|получения свойства по указанному пути}. +// * +// * *** +// * @arg {string} path `Путь` +// * @public +// */ +// getPropertyByPath(path) { + +// return yGetPropertyByPath(this, path); + +// }; + +// }; + //#region YI import { configY as config } from './config.mjs'; import { yAdopt, yAdoptDefault, yClone, yCorrelate, yEqual, yGetProperty, yGetPropertyByPath, ySupplement, yClassifyProp, } from "./module.mjs"; //#endregion -//#region YT -/** ### YT - * - Тип `T` - * - * Основной параметр модуля `Y`. - * - * @typedef {YTE&YTU&YJect} YT +/** + * ### Y + * - Тип `S` + * - Версия `1.0.0` + * *** * -*/ -/** ### YTE - * - Тип `TE` * - * Параметр наследования `Y`. * - * @typedef {Omit} YTE + * *** * -*/ -/** ### YTU - * - Тип `TU` * - * Уникальные параметры `Y`. * - * @typedef YTU - * @prop {any} _ + * *** + * @class + * @since `1.0.0` + * @version `1.0.0` * */ - -//#endregion - -class SY { - +export class Y { + + //#region static + + static { + + + + }; + /** * ### stock * - * Набор. + * *** * - * *** + * + * + * *** * @type {Y[]} + * @field + * @static * @public */ static stock = []; /** * ### config * - * Конфигуратор. + * * * *** + * @field + * @static * @public */ static config = config; @@ -69,7 +923,27 @@ class SY { * @private */ static modules = []; + + /** + * ### do + * + * *** + * + * Метод выполнения кода в контексте данного класса. + * + * *** + * @arg {...((self: typeof Y, ...args) => void)} codes `Коды` + * @static + * @method + * @public + */ + static do(...codes) { + + Y.prototype.do.apply(this, codes); + return this; + + }; /** * ### getY * @@ -100,123 +974,145 @@ class SY { return result; }; - -}; -class DY extends SY { - - - -}; -class IY extends DY { - - - -}; -class MY extends IY { - /** - * ### correlate + * ### appendModule * * *** * - * Метод корреляции. + * Метод добавления модулей. * * *** + * @arg {...Y1} values `Значения` + * @static * @method - * @protected + * @public + * @template {typeof Y} Y1 */ - correlate() { + static appendModule(...values) { - const aliases = this.constructor?.config?.aliases; + for (const value of values) { - if (aliases) { + if (!(value instanceof Function && value.prototype instanceof Y)) continue; - return yCorrelate(this, ...aliases); + Y.modules.push(value); }; return this; - + }; - -}; -class FY extends MY { - /** - * ### Y.constructor + * ### becomePrototype * + * *** * + * Метод установки текущего класса, как прототипа указанному объекту. * * *** - * @arg {YT} args + * @arg {Y1} value `Значение` + * @static + * @method + * @public + * @returns {(Y1&Y)?} + * @template Y1 */ - constructor(args) { + static becomePrototype(value) { + + if (!(value instanceof Object)) return null; - super(); + Object.setPrototypeOf(value, this); - FY.#deceit.apply(this, arguments); + if (typeof value === 'function' && 'prototype' in value) { - return this.correlate(); + Object.setPrototypeOf(value['prototype'], this.prototype); - }; - - /** @arg {YT} args @this {Y} */ - static #deceit(args) { + }; + return value; + + }; + + //#endregion + + /** + * ### YConstructor + * + * + * + * *** + * @arg {YT} args `Аргументы` + * + * Представлены единым объектом носителем аргументов. + * + * *** + * @constructor + */ + constructor(...args) { + try { - - FY.#verify.apply(this, arguments); - - } catch (e) { - - throw e; - + + //#region verify + + + + //#endregion + //#region handle + + + + //#endregion + //#region comply + + + + //#endregion + + return this + + .correlate() + + + } catch (err) { + + if (config.strictMode) { + + throw err; + + }; + } finally { - - - + + + }; - - }; - /** @arg {YT} args @this {Y} */ - static #verify(args) { - - FY.#handle.apply(this, arguments); - + }; - /** @arg {YT} args @this {Y} */ - static #handle(args) { + + /** + * ### correlate + * + * *** + * + * Метод корреляции. + * + * *** + * @method + * @protected + */ + correlate() { + const aliases = this.constructor?.config?.value?.aliases; + if (aliases) { - FY.#create.apply(this, arguments); + return yCorrelate(this, ...aliases); - }; - /** @arg {YT} args @this {Y} */ - static #create(args) { + }; - + return this; }; -}; - -/** - * ### Y - * - Тип `SDIMFY` - * - Версия `1.0.0` - * - Цепочка `BDVHC` - * *** - * - * Класс `Y`. - * - * Базовый класс любого `SYLS` класса. - * - * *** - * @class -*/ -export class Y extends FY { - /** * ### do * @@ -250,6 +1146,24 @@ export class Y extends FY { return this; + }; + /** + * ### gong + * + * *** + * + * Метод заглушка. + * + * Метод без логики для объявления начала методллогического полотна. Используется при форматировании. + * + * *** + * @method + * @public + */ + gong() { + + return this; + }; /** * ### cond @@ -491,7 +1405,45 @@ export class Y extends FY { for (const prop of props) { - this[prop] = (config[prop + 'Default'] ?? config.default); + this[prop] = (config.value[prop + 'Default'] ?? config.value.default); + + }; + + return this; + + }; + /** + * ### unstock + * + * *** + * + * Метод удаления объекта из учёта. + * + * Данный метод удаляет объект оптимальным и полным образом. + * Если объект представлен в единственном экземпляре, то будет удалён только один экземпляр без перебора. + * Если же объектов несколько, то будут удалены все его экземпляры. + * + * *** + * @method + * @public + */ + unstock() { + + const image = this.getClass(); + + let index = image.stock.indexOf(this); + + if (index !== -1) { + + image.stock.splice(index, 1); + + }; + + index = image.stock.indexOf(this); + + if (index !== -1) { + + image.stock = image.stock.filter(item => item !== this) }; @@ -713,14 +1665,17 @@ export class Y extends FY { return yGetPropertyByPath(this, path); }; - + }; //#region YE -Y.getY()['modules'].push(Y); +Y -//#endregion YE + .appendModule(Y) + .do(self => self.becomePrototype(config)) + +//#endregion /** * @file y/class.mjs diff --git a/-submodule/y/-module/config.mjs b/-submodule/y/-module/config.mjs index 41159f6..16b9069 100644 --- a/-submodule/y/-module/config.mjs +++ b/-submodule/y/-module/config.mjs @@ -48,6 +48,19 @@ export const configY = { * @public */ moduleId: 0, + /** + * ### stockMode + * + * *** + * + * Режим хранения. + * + * *** + * @type {boolean} + * @public + * @property + */ + stockMode: false, /** * ### modeStrict * diff --git a/-submodule/y/-module/module.mjs b/-submodule/y/-module/module.mjs index b847b16..32b73dc 100644 --- a/-submodule/y/-module/module.mjs +++ b/-submodule/y/-module/module.mjs @@ -108,7 +108,7 @@ function fillDeceit(t) { } catch (e) { - if (config?.strictMode) { + if (config?.value?.strictMode) { throw e; @@ -192,7 +192,7 @@ function cloneDeceit(t) { } catch (e) { - if (config?.strictMode) { + if (config?.value?.strictMode) { throw e; @@ -346,7 +346,7 @@ function equalDeceit(t) { } catch (e) { - if (config?.strictMode) { + if (config?.value?.strictMode) { throw e; @@ -507,7 +507,7 @@ function adoptDeceit(t) { } catch (e) { - if (config?.strictMode) { + if (config?.value?.strictMode) { throw e; @@ -670,7 +670,7 @@ function adoptDefaultVerify(t) { /** @arg {yTFAdoptDefault} t */ function adoptDefaultHandle(t) { - if (t.owner.constructor.name === 'YConfig') { + if (t.owner.constructor.name === 'YConfig' || t.owner === config) { t.owner = t.owner.value; @@ -698,7 +698,7 @@ function adoptDefaultComply(t) { for (const property of Object.keys(y)) { const propertyDefault = property + 'Default'; - + if (!y[property]) { if (owner[propertyDefault] === undefined) { @@ -712,7 +712,7 @@ function adoptDefaultComply(t) { }; }; - + }; return y; diff --git a/-submodule/y/-submodule/arg/-module/class.mjs b/-submodule/y/-submodule/arg/-module/class.mjs index a98ef9f..eb8e6bb 100644 --- a/-submodule/y/-submodule/arg/-module/class.mjs +++ b/-submodule/y/-submodule/arg/-module/class.mjs @@ -1,6 +1,6 @@ //#region YI -import { Y, yClassifyProp, } from "@syls/y"; +import { Y } from "../../../-module/export.mjs"; import { configArg as config } from './config.mjs'; import { argClassify } from "./module.mjs"; @@ -476,7 +476,7 @@ export class YArg extends FArg { //#region YE -YArg.getY()['modules'].push(YArg); +YArg.getY().appendModule(YArg); //#endregion YE diff --git a/-submodule/y/-submodule/class/-module/changelog.md b/-submodule/y/-submodule/class/-module/changelog.md new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-submodule/class/-module/config.mjs b/-submodule/y/-submodule/class/-module/config.mjs new file mode 100644 index 0000000..9491d83 --- /dev/null +++ b/-submodule/y/-submodule/class/-module/config.mjs @@ -0,0 +1,31 @@ +import { YConfig } from "@syls/y/config"; +import configY from "../../../-module/config.mjs"; + +/** @type {configY} */ +const config = { + + + +}; + +/** ### configClass + * + * Конфигуратор модуля `class`. + * + * *** + * @public +*/ +export const configClass = new YConfig(Object.assign(config, { + + + +}), configY); + +export default configClass; + +/** + * @file class/config.mjs + * @author Yakhin Nikita Artemovich + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 +*/ \ No newline at end of file diff --git a/-submodule/y/-submodule/class/-module/error.mjs b/-submodule/y/-submodule/class/-module/error.mjs new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-submodule/class/-module/export.mjs b/-submodule/y/-submodule/class/-module/export.mjs new file mode 100644 index 0000000..fa97d43 --- /dev/null +++ b/-submodule/y/-submodule/class/-module/export.mjs @@ -0,0 +1,2 @@ +export * from "./config.mjs"; +export * from "./module.mjs"; \ No newline at end of file diff --git a/-submodule/y/-submodule/class/-module/module.mjs b/-submodule/y/-submodule/class/-module/module.mjs new file mode 100644 index 0000000..f43a62e --- /dev/null +++ b/-submodule/y/-submodule/class/-module/module.mjs @@ -0,0 +1,119 @@ +//#region YI + +import { Y } from '../../../-module/class.mjs'; +import { YCond } from '../../cond/-module/class.mjs'; +import { YConfig } from '../../config/-module/class.mjs'; +import { configClass as config } from './config.mjs'; + +//#endregion +//#region YT + +/** ### classT + * - Тип `T` + * - Версия `0.0.0` + * + * Основной параметр модуля `class`. + * + * @typedef classT + * @prop {any} _ + * +*/ + +//#endregion +//#region YV + + + +//#endregion + +/** + * ### cast + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция приведения класса к Y. + * + * *** + * @typedef castT + * @prop {{}} conf + * @prop {typeof Y} to + * @prop {typeof Object} cl + * *** + * @arg {castT} args `Аргументы` + * @since `1.0.0` + * @version `1.0.0` + * @function +*/ +function cast(args) { + + let result; + + try { + + let { + + cl, + to, + conf, + + } = args; + + if (!cl) throw new Error(); + else if (!YCond.isFunc(cl)) throw new Error(); + + if (!to) to = Y; + if (!conf) conf = {}; + + result = [to.becomePrototype(cl), new YConfig(to.config, conf)]; + + result[0].config = result[1]; + + } catch (err) { + + if (config.value.strictMode) { + + throw err; + + }; + + } finally { + + + + }; + + return result; + +}; + +/** + * ### classCast + * - Тип `S` + * - Версия `1.0.0` + * *** + * + * Функция приведения класса к Y. + * + * *** + * @arg {Y1} cl `Класс` + * @arg {Y3} to `Приведение` + * @arg {Y2} conf `Конфигуратор` + * @returns {[Y3&Y1,YConfig]} + * @function + * @template Y1 + * @template Y2 + * @template {typeof Y} Y3 +*/ +export function classCast(cl, to = Y, conf) { + + return cast({ cl, to, conf, }); + +}; + +/** + * @file class/module.mjs + * @author Yakhin Nikita Artemovich + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 +*/ \ No newline at end of file diff --git a/-submodule/y/-submodule/class/-module/module.test.js b/-submodule/y/-submodule/class/-module/module.test.js new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-submodule/class/-module/readme.md b/-submodule/y/-submodule/class/-module/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/-submodule/y/-submodule/class/-module/type.d.ts b/-submodule/y/-submodule/class/-module/type.d.ts new file mode 100644 index 0000000..9fcf563 --- /dev/null +++ b/-submodule/y/-submodule/class/-module/type.d.ts @@ -0,0 +1 @@ +export * from "./export.mjs"; \ No newline at end of file diff --git a/-submodule/y/-submodule/class/package.json b/-submodule/y/-submodule/class/package.json new file mode 100644 index 0000000..5c53971 --- /dev/null +++ b/-submodule/y/-submodule/class/package.json @@ -0,0 +1,47 @@ +{ + "name": "@syls/class", + "type": "module", + "files": [ + "./-module", + "./-submodule", + "./package.json" + ], + "author": { + "name": "Yakhin Nikita Artemovich", + "email": "mr.y.nikita@gmail.com" + }, + "version": "1.0.0", + "license": "Apache-2.0", + "funding": { + "url": "https://boosty.to/mr.y.nikita", + "type": "boosty" + }, + "exports": { + ".": { + "types": "./-module/type.d.ts", + "import": "./-module/export.mjs" + } + }, + "scripts": { + "test": "node ./-module/module.test.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "keywords": [ + "y", + "lib", + "syls" + ], + "repository": { + "url": "https://github.com/MrYNikita/Y.git", + "type": "git" + }, + "description": "", + "dependencies": { + "@syls/y": "*" + }, + "devDependencies": { + "@syls/test": "*" + } +} \ No newline at end of file diff --git a/-submodule/y/-submodule/cond/-module/class.mjs b/-submodule/y/-submodule/cond/-module/class.mjs index 1a891ad..ccdceed 100644 --- a/-submodule/y/-submodule/cond/-module/class.mjs +++ b/-submodule/y/-submodule/cond/-module/class.mjs @@ -228,7 +228,7 @@ class SCond extends Y { for (const value of values) { - if (value % 10 !== 0) return false; + if (value % 1 !== 0) return false; }; diff --git a/-submodule/y/-submodule/cond/-module/module.mjs b/-submodule/y/-submodule/cond/-module/module.mjs index 37673a9..c20e12f 100644 --- a/-submodule/y/-submodule/cond/-module/module.mjs +++ b/-submodule/y/-submodule/cond/-module/module.mjs @@ -1,6 +1,5 @@ //#region YI -import { YMany } from '@syls/y/many'; import { configCond as config } from './config.mjs'; //#endregion diff --git a/-submodule/y/-submodule/config/-module/class.mjs b/-submodule/y/-submodule/config/-module/class.mjs index 3be1405..08fcd65 100644 --- a/-submodule/y/-submodule/config/-module/class.mjs +++ b/-submodule/y/-submodule/config/-module/class.mjs @@ -81,7 +81,8 @@ class SConfig extends Y { }; /** - * @template Y1,Y2 + * @template Y1 + * @template Y2 */ class DConfig extends SConfig { @@ -226,7 +227,8 @@ class FConfig extends MConfig { * *** * @class * @extends FConfig - * @template Y1,Y2 + * @template Y1 + * @template Y2 * */ export class YConfig extends FConfig { @@ -261,7 +263,10 @@ export class YConfig extends FConfig { //#region YE -YConfig.getY()['modules'].push(YConfig); +YConfig + + .appendModule(YConfig) + .becomePrototype(config); //#endregion diff --git a/-submodule/y/-submodule/entity/-module/class.mjs b/-submodule/y/-submodule/entity/-module/class.mjs index 0aff339..9ee02a0 100644 --- a/-submodule/y/-submodule/entity/-module/class.mjs +++ b/-submodule/y/-submodule/entity/-module/class.mjs @@ -2,10 +2,11 @@ import { Y } from '../../../-module/class.mjs'; import { YArg } from '../../arg/-module/class.mjs'; +import { YCond } from '../../cond/-module/class.mjs'; +import { YRept } from '../../rept/-module/class.mjs'; +import { YHandler } from '../-submodule/handler/-module/class.mjs'; import { YContext } from '../-submodule/context/-module/class.mjs'; import { configEntity as config } from './config.mjs'; -import { YHandler } from '../-submodule/handler/-module/class.mjs'; -import { YCond } from '../../cond/-module/class.mjs'; //#endregion //#region YT @@ -94,7 +95,7 @@ class IEntity extends DEntity { * @field * @protected */ - _y; + _y = new YContext(); }; class MEntity extends IEntity { @@ -188,7 +189,12 @@ class FEntity extends MEntity { this - .adopt(args.getData()); + .adopt(args.getData()) + .do(self => { + + self._y.id = self.getClass().count ?? null; + + }) }; @@ -209,6 +215,22 @@ class FEntity extends MEntity { */ export class YEntity extends FEntity { + /** + * ### getRept + * + * *** + * + * Метод получения отчёта. + * + * *** + * @method + * @public + */ + getRept() { + + return new YRept(this); + + }; /** * ### getClass * @@ -288,6 +310,36 @@ export class YEntity extends FEntity { }; + /** + * ### useRept + * + * *** + * + * Метод использования отчёта. + * + * *** + * @arg {(self:YRept) => void} code `Код` + * @method + * @public + */ + useRept(code) { + + try { + + if (!YCond.isFunc(code)) return this; + + code(this.getRept()); + + } catch (error) { + + + + }; + + return this; + + }; + /** * ### appendHandler * diff --git a/-submodule/y/-submodule/entity/-module/config.mjs b/-submodule/y/-submodule/entity/-module/config.mjs index 89d23f8..4b1386d 100644 --- a/-submodule/y/-submodule/entity/-module/config.mjs +++ b/-submodule/y/-submodule/entity/-module/config.mjs @@ -1,6 +1,5 @@ import { YConfig } from "../../config/-module/class.mjs"; import { configY } from "../../../-module/config.mjs"; -import { YContext } from "../-submodule/context/-module/class.mjs"; /** @type {configY} */ const config = { @@ -18,19 +17,7 @@ const config = { */ export const configEntity = new YConfig(Object.assign(config, { - /** - * ### _yDefault - * - * *** - * - * - * - * *** - * @type {any} - * @public - * @property - */ - _yDefault: new YContext(), + }), configY); diff --git a/-submodule/y/-submodule/entity/-submodule/context/-module/class.mjs b/-submodule/y/-submodule/entity/-submodule/context/-module/class.mjs index 74059ed..693f5e6 100644 --- a/-submodule/y/-submodule/entity/-submodule/context/-module/class.mjs +++ b/-submodule/y/-submodule/entity/-submodule/context/-module/class.mjs @@ -4,8 +4,8 @@ import { Y } from '../../../../../-module/export.mjs'; import { YArg } from '../../../../arg/-module/export.mjs'; import { YLog } from '../../../../log/-module/export.mjs'; import { YDate } from '../../../../date/-module/export.mjs'; -import { configContext as config } from './config.mjs'; import { YHandler } from '../../handler/-module/class.mjs'; +import { configContext as config } from './config.mjs'; //#endregion //#region YT @@ -104,17 +104,6 @@ class DContext extends SContext { * @public */ id; - /** - * ### handlers - * - * Обработчики. - * - * *** - * @type {YHandler[]} - * @field - * @public - */ - handlers; }; /** @@ -144,18 +133,18 @@ class IContext extends DContext { * @field * @protected */ - date; + date = new YDate(); /** - * ### rept + * ### handlers * - * Отчёт. + * Обработчики. * * *** - * @type {YRept} + * @type {YHandler[]} * @field * @protected */ - rept; + handlers; }; /** diff --git a/-submodule/y/-submodule/entity/-submodule/context/-module/config.mjs b/-submodule/y/-submodule/entity/-submodule/context/-module/config.mjs index 39e8f34..4a4e9d2 100644 --- a/-submodule/y/-submodule/entity/-submodule/context/-module/config.mjs +++ b/-submodule/y/-submodule/entity/-submodule/context/-module/config.mjs @@ -1,5 +1,5 @@ -import { YConfig } from "@syls/y/config"; import configY from "../../../../../-module/config.mjs"; +import { YConfig } from "../../../../config/-module/export.mjs"; /** @type {configY} */ const config = { @@ -30,6 +30,19 @@ export const configContext = new YConfig(Object.assign(config, { * @property */ handlersDefault: [], + /** + * ### instructsDefault + * + * *** + * + * Дефолт инструкции. + * + * *** + * @type {any[]} + * @public + * @property + */ + instructsDefault: [], }), configY); diff --git a/-submodule/y/-submodule/log/-module/class.mjs b/-submodule/y/-submodule/log/-module/class.mjs index 8c0122b..f4c2f42 100644 --- a/-submodule/y/-submodule/log/-module/class.mjs +++ b/-submodule/y/-submodule/log/-module/class.mjs @@ -1,60 +1,35 @@ //#region YI -import { Y } from '@syls/y'; -import { YString } from '@syls/string'; - -import { YTag } from '../-submodule/tag/-module/export.mjs'; -import { YPage, configPage, } from '../-submodule/page/-module/export.mjs'; -import { YRecord } from '../-submodule/record/-module/export.mjs'; - -/** @type {import('./config.mjs')['default']?} */ -let config = null; - -await import('./config.mjs') - - .then(i => config = i.default.value) - .catch(e => e); - -/** @type {import('./error.mjs')['default']?} */ -let error = null; - -await import('./error.mjs') - - .then(i => error = i.default) - .catch(e => e); +import { Y } from '../../../-module/class.mjs'; +import { YArg } from '../../arg/-module/export.mjs'; +import { configLog as config } from './config.mjs'; //#endregion //#region YT /** ### YLogT * - Тип `T` - * - Версия `0.0.0` - * - Модуль `ject\entity\log` * * Основной параметр модуля `YLog`. * - * @typedef {YLogTE&YLogTU} YLogT + * @typedef {YLogTE&YLogTU&Y} YLogT * */ /** ### YLogTE * - Тип `TE` - * - Версия `0.0.0` - * - Модуль `ject\entity\log` * * Параметр наследования `YLog`. * - * @typedef {{[p in Exclude|Exclude]:(DLog[p]&SLog[p])}} YLogTE + * @typedef {Omit} YLogTE * */ /** ### YLogTU * - Тип `TU` - * - Версия `0.0.0` - * - Модуль `ject\entity\log` * * Уникальные параметры `YLog`. * * @typedef YLogTU - * @prop {number} size + * @prop {any} _ * */ @@ -63,62 +38,50 @@ await import('./error.mjs') class SLog extends Y { /** - * ### config - * - * Конфигуратор. + * ### stock * * *** - * @public - */ - static config = config; - -}; -class DLog extends SLog { - - /** - * ### tags * - * Теги. * - * *** - * @type {YTag[]} + * + * *** + * @type {YLog[]} + * @field + * @static * @public */ - tags = []; + static stock = []; /** - * ### size + * ### config + * * - * Размер страниц. * - * *** - * @type {number} + * *** + * @field + * @static * @public */ - size; + static config = config; + /** - * ### limit - * - * Предел страниц. - * - * *** - * @type {number?} - * @public + * @arg {...YLog} args `Аргументы` + * @returns {YLog[]} */ - limit; + static create(...args) { + + return Object.getPrototypeOf(SLog).create.apply(this, args); + + }; + +}; +class DLog extends SLog { + + }; class ILog extends DLog { - /** - * ### pages - * - * Страницы. - * - * *** - * @type {YPage[]} - * @protected - */ - pages = []; + }; class MLog extends ILog { @@ -134,65 +97,45 @@ class FLog extends MLog { * * * *** - * @arg {YLogT} t + * @arg {YLogT} args */ - constructor(t) { + constructor(args) { - t = [...arguments]; + super(args = FLog.#before(args = arguments)); - super(Object.assign(t = FLog.#before(t), {})); + FLog.#deceit.apply(this, [args]); - FLog.#deceit.apply(this, [t]); + return this.correlate(); }; - /** @arg {any[]} t */ - static #before(t) { + /** @arg {DLog} args */ + static #before(args) { + + /** @type {YArg} */ + const yarg = args instanceof YArg ? args : new YArg(args); - /** @type {YLogT} */ - let r = {}; - if (t?.length === 1 && [Object, YLog].includes(t[0]?.constructor) && !Object.getOwnPropertyNames(t[0]).includes('_ytp')) { - - r = t[0]; - - } else if (t?.length) { - - if (t[0]?._ytp) { - - t = [...t[0]._ytp]; - - }; - - switch (t.length) { - - case 3: - case 2: - case 1: - - }; - - if (!Object.values(r).length) { - - r = { _ytp: t, }; - - }; - - }; - return r; + return yarg; }; - /** @arg {YLogT} t @this {YLog} */ - static #deceit(t) { + /** @arg {YArg} args @this {YLog} */ + static #deceit(args) { try { - FLog.#verify.apply(this, [t]); + FLog.#verify.apply(this, arguments); } catch (e) { - throw e; + if (config?.strictMode) { + + throw e; + + }; + + return new YLog(); } finally { @@ -201,50 +144,38 @@ class FLog extends MLog { }; }; - /** @arg {YLogT} t @this {YLog} */ - static #verify(t) { + /** @arg {YArg} args @this {YLog} */ + static #verify(args) { const { - } = t; + } = args; - FLog.#handle.apply(this, [t]); + FLog.#handle.apply(this, arguments); }; - /** @arg {YLogT} t @this {YLog} */ - static #handle(t) { + /** @arg {YArg} args @this {YLog} */ + static #handle(args) { - FLog.#create.apply(this, [t]); + FLog.#create.apply(this, arguments); }; - /** @arg {YLogT} t @this {YLog} */ - static #create(t) { + /** @arg {YArg} args @this {YLog} */ + static #create(args) { const { - } = t; + } = args; - this.adopt(t); + this - if (config) { - - this.adoptDefault(config); - - }; - - config.tagsRequired.forEach(tag => { - - this.tags.push(new YTag(tag)); - - }); - - this.pages = [new YPage(this)]; + .adopt(args.getData()); }; @@ -254,180 +185,466 @@ class FLog extends MLog { * ### YLog * - Тип `SDIMFY` * - Версия `0.0.0` - * - Модуль `ject\entity\log` * - Цепочка `BDVHC` * *** * - * + * Класс `YLog`. * * *** + * @class * */ export class YLog extends FLog { - /** - * ### getRecords - * - Версия `0.0.0` - * - Модуль `ject\entity\log` - * *** - * - * Метод получения записей журнала. - * - * Если будут указаны `теги`, то будут выбраны лишь соотвествующие им записи. В противном случае будут получены все записи. - * - * Также отражены будут только те `теги`, которые не были отфильтрованы. - * - * *** - * @arg {...string} tags `Теги` + * @method * @public + * @returns {typeof YLog} */ - getRecords(...tags) { - - const records = this.pages.map(page => page.records).flat().filter(record => record.tags.every(tag => !tag.filtred)); + getClass() { - return tags.length ? records.filter(record => record.tags.find(tag => tags.includes(tag.name))) : records; + return YLog; }; + +}; - /** - * ### display - * - Версия `0.0.0` - * - Модуль `ject\entity\log` - * *** - * - * Метод отображения журнала. - * - * *** - * @public - */ - display() { +//#region YE + +YLog.getY()['modules'].push(YLog); + +//#endregion + +// //#region YI + +// import { Y } from '@syls/y'; +// import { YString } from '@syls/string'; + +// import { YTag } from '../-submodule/tag/-module/export.mjs'; +// import { YPage, configPage, } from '../-submodule/page/-module/export.mjs'; +// import { YRecord } from '../-submodule/record/-module/export.mjs'; + +// /** @type {import('./config.mjs')['default']?} */ +// let config = null; + +// await import('./config.mjs') + +// .then(i => config = i.default.value) +// .catch(e => e); + +// /** @type {import('./error.mjs')['default']?} */ +// let error = null; + +// await import('./error.mjs') + +// .then(i => error = i.default) +// .catch(e => e); + +// //#endregion +// //#region YT + +// /** ### YLogT +// * - Тип `T` +// * - Версия `0.0.0` +// * - Модуль `ject\entity\log` +// * +// * Основной параметр модуля `YLog`. +// * +// * @typedef {YLogTE&YLogTU} YLogT +// * +// */ +// /** ### YLogTE +// * - Тип `TE` +// * - Версия `0.0.0` +// * - Модуль `ject\entity\log` +// * +// * Параметр наследования `YLog`. +// * +// * @typedef {{[p in Exclude|Exclude]:(DLog[p]&SLog[p])}} YLogTE +// * +// */ +// /** ### YLogTU +// * - Тип `TU` +// * - Версия `0.0.0` +// * - Модуль `ject\entity\log` +// * +// * Уникальные параметры `YLog`. +// * +// * @typedef YLogTU +// * @prop {number} size +// * +// */ + +// //#endregion + +// class SLog extends Y { + +// /** +// * ### config +// * +// * Конфигуратор. +// * +// * *** +// * @public +// */ +// static config = config; + +// }; +// class DLog extends SLog { + +// /** +// * ### tags +// * +// * Теги. +// * +// * *** +// * @type {YTag[]} +// * @public +// */ +// tags = []; +// /** +// * ### size +// * +// * Размер страниц. +// * +// * *** +// * @type {number} +// * @public +// */ +// size; +// /** +// * ### limit +// * +// * Предел страниц. +// * +// * *** +// * @type {number?} +// * @public +// */ +// limit; + +// }; +// class ILog extends DLog { + +// /** +// * ### pages +// * +// * Страницы. +// * +// * *** +// * @type {YPage[]} +// * @protected +// */ +// pages = []; + +// }; +// class MLog extends ILog { + + + +// }; +// class FLog extends MLog { + +// /** +// * ### YLog.constructor +// * +// * +// * +// * *** +// * @arg {YLogT} t +// */ +// constructor(t) { + +// t = [...arguments]; + +// super(Object.assign(t = FLog.#before(t), {})); + +// FLog.#deceit.apply(this, [t]); + +// }; + +// /** @arg {any[]} t */ +// static #before(t) { + +// /** @type {YLogT} */ +// let r = {}; + +// if (t?.length === 1 && [Object, YLog].includes(t[0]?.constructor) && !Object.getOwnPropertyNames(t[0]).includes('_ytp')) { + +// r = t[0]; + +// } else if (t?.length) { + +// if (t[0]?._ytp) { + +// t = [...t[0]._ytp]; + +// }; + +// switch (t.length) { + +// case 3: +// case 2: +// case 1: + +// }; + +// if (!Object.values(r).length) { + +// r = { _ytp: t, }; + +// }; + +// }; + +// return r; + +// }; +// /** @arg {YLogT} t @this {YLog} */ +// static #deceit(t) { + +// try { + +// FLog.#verify.apply(this, [t]); + +// } catch (e) { + +// throw e; + +// } finally { + + + +// }; + +// }; +// /** @arg {YLogT} t @this {YLog} */ +// static #verify(t) { + +// const { + + + +// } = t; + +// FLog.#handle.apply(this, [t]); + +// }; +// /** @arg {YLogT} t @this {YLog} */ +// static #handle(t) { + + + +// FLog.#create.apply(this, [t]); + +// }; +// /** @arg {YLogT} t @this {YLog} */ +// static #create(t) { + +// const { + + + +// } = t; - new YString() +// this.adopt(t); + +// if (config) { + +// this.adoptDefault(config); + +// }; - .setPostfix('\n') - .paste(...this.pages.map(page => page.records).flat().map(record => record.toString())) - .display(); +// config.tagsRequired.forEach(tag => { - return this; +// this.tags.push(new YTag(tag)); + +// }); + +// this.pages = [new YPage(this)]; - }; +// }; + +// }; + +// /** +// * ### YLog +// * - Тип `SDIMFY` +// * - Версия `0.0.0` +// * - Модуль `ject\entity\log` +// * - Цепочка `BDVHC` +// * *** +// * +// * +// * +// * *** +// * +// */ +// export class YLog extends FLog { + - /** - * ### appendTags - * - Версия `0.0.0` - * - Модуль `ject\entity\log` - * *** - * - * Метод добавления новых тегов в журнал. - * - * *** - * @arg {...string} tags `Теги` - * @public - */ - appendTags(...tags) { +// /** +// * ### getRecords +// * - Версия `0.0.0` +// * - Модуль `ject\entity\log` +// * *** +// * +// * Метод получения записей журнала. +// * +// * Если будут указаны `теги`, то будут выбраны лишь соотвествующие им записи. В противном случае будут получены все записи. +// * +// * Также отражены будут только те `теги`, которые не были отфильтрованы. +// * +// * *** +// * @arg {...string} tags `Теги` +// * @public +// */ +// getRecords(...tags) { + +// const records = this.pages.map(page => page.records).flat().filter(record => record.tags.every(tag => !tag.filtred)); + +// return tags.length ? records.filter(record => record.tags.find(tag => tags.includes(tag.name))) : records; + +// }; + +// /** +// * ### display +// * - Версия `0.0.0` +// * - Модуль `ject\entity\log` +// * *** +// * +// * Метод отображения журнала. +// * +// * *** +// * @public +// */ +// display() { + +// new YString() - tags.forEach(tag => { +// .setPostfix('\n') +// .paste(...this.pages.map(page => page.records).flat().map(record => record.toString())) +// .display(); - if (tag.constructor !== YTag) { +// return this; + +// }; - tag = new YTag(tag); +// /** +// * ### appendTags +// * - Версия `0.0.0` +// * - Модуль `ject\entity\log` +// * *** +// * +// * Метод добавления новых тегов в журнал. +// * +// * *** +// * @arg {...string} tags `Теги` +// * @public +// */ +// appendTags(...tags) { - }; +// tags.forEach(tag => { - const tagThis = this.tags.find(tagThis => tagThis.name === tag.name); +// if (tag.constructor !== YTag) { - if (tagThis) { +// tag = new YTag(tag); - tag = tagThis; +// }; - } else { +// const tagThis = this.tags.find(tagThis => tagThis.name === tag.name); - this.tags.push(tag); +// if (tagThis) { - }; +// tag = tagThis; + +// } else { + +// this.tags.push(tag); - }); +// }; - return this; +// }); + +// return this; - }; - /** - * ### appendRecords - * - Версия `0.0.0` - * - Модуль `ject\entity\log` - * *** - * - * Метод добавления новых записей в журнал. - * - * *** - * @arg {...[string, string[]]} records `Записи`. - * @public - */ - appendRecords(...records) { +// }; +// /** +// * ### appendRecords +// * - Версия `0.0.0` +// * - Модуль `ject\entity\log` +// * *** +// * +// * Метод добавления новых записей в журнал. +// * +// * *** +// * @arg {...[string, string[]]} records `Записи`. +// * @public +// */ +// appendRecords(...records) { - records.filter(data => data.constructor === Array).forEach(data => { +// records.filter(data => data.constructor === Array).forEach(data => { - const record = new YRecord(...data); +// const record = new YRecord(...data); - record.tags.forEach((tag, i, a) => { +// record.tags.forEach((tag, i, a) => { - this.appendTags(tag = new YTag(tag)); +// this.appendTags(tag = new YTag(tag)); - const tagThis = this.tags.find(tagThis => tagThis.name === tag.name); +// const tagThis = this.tags.find(tagThis => tagThis.name === tag.name); - a[i] = tagThis; +// a[i] = tagThis; - tagThis.appendRecords(record); +// tagThis.appendRecords(record); - }); +// }); - let page = this.pages.at(-1); - let count = this.pages.reduce((p, c) => p + c.records.length, 0); +// let page = this.pages.at(-1); +// let count = this.pages.reduce((p, c) => p + c.records.length, 0); - if ((page.size ?? this.size ?? configPage.size) <= this.pages.at(-1).records.length) { +// if ((page.size ?? this.size ?? configPage.size) <= this.pages.at(-1).records.length) { - this.pages.push(new YPage(this)); +// this.pages.push(new YPage(this)); - }; +// }; - if (this.limit ?? this.constructor.config.limit > count) { +// if (this.limit ?? this.constructor.config.limit > count) { - this.pages.at(-1).records.push(record); +// this.pages.at(-1).records.push(record); - }; +// }; - }); +// }); - return this; +// return this; - }; - /** - * ### appendFilters - * - Версия `0.0.0` - * - Модуль `ject\entity\log` - * *** - * - * Метод добавления фильтров по тегам. - * - * *** - * @arg {...string} filters `Фильтры` - * @public - */ - appendFilters(...filters) { +// }; +// /** +// * ### appendFilters +// * - Версия `0.0.0` +// * - Модуль `ject\entity\log` +// * *** +// * +// * Метод добавления фильтров по тегам. +// * +// * *** +// * @arg {...string} filters `Фильтры` +// * @public +// */ +// appendFilters(...filters) { - this.tags.forEach(tag => { +// this.tags.forEach(tag => { - if (filters.includes(tag.name)) { +// if (filters.includes(tag.name)) { - tag.filtred = true; +// tag.filtred = true; - }; +// }; - }); +// }); - return this; +// return this; - }; +// }; -}; \ No newline at end of file +// }; \ No newline at end of file diff --git a/-submodule/y/-submodule/many/-module/class.mjs b/-submodule/y/-submodule/many/-module/class.mjs index e29c31d..9dc7690 100644 --- a/-submodule/y/-submodule/many/-module/class.mjs +++ b/-submodule/y/-submodule/many/-module/class.mjs @@ -1,27 +1,11 @@ //#region YI -import { YCursor } from "@syls/many/cursor"; -import { Y, } from "@syls/y"; +import { YEntity } from "../../entity/-module/class.mjs"; +import { YCursor } from "../-submodule/cursor/-module/export.mjs"; import { YCursorContoller } from "../-submodule/cursorContoller/-module/class.mjs"; -import { argClassify } from "../../arg/-module/module.mjs"; +import { configMany as config } from "./config.mjs"; import { YArg } from "../../arg/-module/class.mjs"; -/** @type {import('./config.mjs')['default']['value']?} */ -let config = null; - -await import('./config.mjs') - - .then(c => config = c.default?.value ? c.default.value : c.default) - .catch(e => e); - -/** @type {import('./error.mjs')['default']?} */ -let error = null; - -await import('./error.mjs') - - .then(e => error = e.default) - .catch(e => e); - //#endregion //#region YT @@ -63,7 +47,7 @@ await import('./error.mjs') /** * @template Y1 */ -class SMany extends Y { +class SMany extends YEntity { /** * ### stock diff --git a/-submodule/y/-submodule/many/-module/config.mjs b/-submodule/y/-submodule/many/-module/config.mjs index d82e584..980a42d 100644 --- a/-submodule/y/-submodule/many/-module/config.mjs +++ b/-submodule/y/-submodule/many/-module/config.mjs @@ -1,7 +1,7 @@ -import { configY } from "@syls/y"; -import { YConfig } from "@syls/y/config"; +import { configEntity } from "../../entity/-module/export.mjs"; +import { YConfig } from "../../config/-module/export.mjs"; -/** @type {configY} */ +/** @type {configEntity} */ const config = { aliases: [ @@ -44,7 +44,7 @@ export const configMany = new YConfig(Object.assign(config, { */ cursorsDefault: [], -}), configY); +}), configEntity); export default configMany; diff --git a/-submodule/y/-submodule/rept/-module/class.mjs b/-submodule/y/-submodule/rept/-module/class.mjs index 33efcca..26bc6ca 100644 --- a/-submodule/y/-submodule/rept/-module/class.mjs +++ b/-submodule/y/-submodule/rept/-module/class.mjs @@ -2,7 +2,9 @@ import { Y } from '../../../-module/export.mjs'; import { YArg } from '../../arg/-module/export.mjs'; +import { YBlock } from '../-submodule/block/-module/class.mjs'; import { configRept as config } from './config.mjs'; +import { YCond } from '../../cond/-module/class.mjs'; //#endregion //#region YT @@ -109,7 +111,28 @@ class DRept extends SRept { */ class IRept extends DRept { - + /** + * ### blocks + * + * Блоки. + * + * *** + * @type {YBlock[]} + * @field + * @protected + */ + blocks; + /** + * ### iterate + * + * Итерация. + * + * *** + * @type {number} + * @field + * @protected + */ + iterate; }; /** @@ -149,7 +172,11 @@ class FRept extends MRept { /** @type {YArg} */ const yarg = args[0] instanceof YArg ? args[0] : new YArg(args); - + yarg.set( + + ['target', 'ject'], + + ); return yarg; @@ -218,7 +245,7 @@ class FRept extends MRept { /** * ### YRept * - Тип `SDIMFY` - * - Версия `0.0.0` + * - Версия `1.0.0` * - Цепочка `BDVHC` * *** * @@ -235,6 +262,37 @@ export class YRept extends FRept { /** @arg {Y1} args */ constructor(args) { super(...arguments); }; + /** + * ### get + * + * *** + * + * Метод получения текста отчёта. + * + * *** + * @method + * @public + * @returns {string} + */ + get() { + + let result = ''; + + for (const block of this.blocks) { + + result += `### ${block.title ?? block.label}\n`; + + for (const func of block.funcs) { + + result += `${func(this.target)}\n`; + + }; + + }; + + return result; + + }; /** * ### getClass * @@ -254,6 +312,76 @@ export class YRept extends FRept { return YRept; }; + /** + * ### getBlock + * + * *** + * + * Метод получения блока по метке. + * + * *** + * @arg {string} label `Метка` + * @method + * @public + */ + getBlock(label) { + + return this.blocks.find(block => block.label === label) ?? null; + + }; + + /** + * ### display + * + * *** + * + * Метод отображения отчёта. + * + * *** + * @method + * @public + */ + display() { + + this.iterate++; + + console.log(this.get()); + + return this; + + }; + + /** + * ### appendBlock + * + * *** + * + * Метод добавления блоков. + * + * *** + * @arg {string} label `Метка` + * @arg {string} title `Заголовок` + * @arg {number} priority `Приоритет` + * @arg {string[]} tags `Теги` + * @arg {((self:Y1)=>string)[]} funcs `Функции` + * @method + * @public + */ + appendBlock(label, title, priority, tags, funcs) { + + const values = YCond.isString(label) ? [[...arguments]] : arguments; + + for (const value of values) { + + if (!YCond.isArray(value) || this.getBlock(value[0])) continue; + + this.blocks.push(new YBlock(...value)); + + }; + + return this; + + }; }; diff --git a/-submodule/y/-submodule/rept/-module/config.mjs b/-submodule/y/-submodule/rept/-module/config.mjs index 4b1de91..8649b3a 100644 --- a/-submodule/y/-submodule/rept/-module/config.mjs +++ b/-submodule/y/-submodule/rept/-module/config.mjs @@ -17,7 +17,32 @@ const config = { */ export const configRept = new YConfig(Object.assign(config, { - + /** + * ### blocksDefault + * + * *** + * + * Дефолт блоки. + * + * *** + * @type {any[]} + * @public + * @property + */ + blocksDefault: [], + /** + * ### iterateDefault + * + * *** + * + * Дефолт итерация. + * + * *** + * @type {number} + * @public + * @property + */ + iterateDefault: 0, }), configY); diff --git a/-submodule/y/-submodule/rept/-submodule/block/-module/class.mjs b/-submodule/y/-submodule/rept/-submodule/block/-module/class.mjs index 109a756..db5777c 100644 --- a/-submodule/y/-submodule/rept/-submodule/block/-module/class.mjs +++ b/-submodule/y/-submodule/rept/-submodule/block/-module/class.mjs @@ -1,140 +1,148 @@ //#region YI -import { Y } from '@syls/y'; -import { YTag } from '../-submodule/tag/-module/export.mjs'; -import { YRept } from '../../../-module/export.mjs'; - +import { Y } from '../../../../../-module/class.mjs'; +import { YArg } from '../../../../arg/-module/export.mjs'; +import { configBlock as config } from './config.mjs'; //#endregion //#region YT /** ### YBlockT * - Тип `T` - * - Версия `0.0.0` - * - Модуль `ject\entity\report\block` * * Основной параметр модуля `YBlock`. * - * *** + * @typedef {YBlockTE&YBlockTU&Y} YBlockT * - * @typedef {YBlockTE&YBlockTU} YBlockT */ /** ### YBlockTE * - Тип `TE` - * - Версия `0.0.0` - * - Модуль `ject\entity\report\block` * * Параметр наследования `YBlock`. * - * @typedef {{[p in Exclude|Exclude]:(DBlock[p]&SBlock[p])}} YBlockTE + * @typedef {Omit} YBlockTE + * */ /** ### YBlockTU * - Тип `TU` - * - Версия `0.0.0` - * - Модуль `ject\entity\report\block` * * Уникальные параметры `YBlock`. * * @typedef YBlockTU - * @prop {} _ -*/ -/** ### YBlockTUG - * - Тип `TUP` - * - Версия `0.0.0` - * - Модуль `ject\entity\report\block` - * - * Уникальные генеративные параметры `YBlock`. + * @prop {any} _ * - * @typedef YBlockTUG - * @prop {null=} _ */ //#endregion -/** - * @template {YBlockTUG} G -*/ class SBlock extends Y { + /** + * ### stock + * + * *** + * + * + * + * *** + * @type {YBlock[]} + * @field + * @static + * @public + */ + static stock = []; + /** + * ### config + * + * + * + * *** + * @field + * @static + * @public + */ + static config = config; + /** + * @arg {...YBlock} args `Аргументы` + * @returns {YBlock[]} + */ + static create(...args) { + + return Object.getPrototypeOf(SBlock).create.apply(this, args); + + }; }; -/** - * @extends {SBlock} - * @template {YBlockTUG} G -*/ class DBlock extends SBlock { /** - * ### name + * ### tags * - * Наименование. + * Теги. * * *** - * @type {string?} + * @type {string[]} + * @field * @public */ - name; + tags; /** - * ### tags - * - * Теги. + * ### funcs * - * По тегам можно отфильтровать лишние блоки из отчета или осуществлять манипуляции над ними. + * Функции. * * *** - * @type {YTag[]} + * @type {(()=>string)[]} + * @field * @public */ - tags = []; + funcs; /** - * ### texts + * ### label + * + * Метка. * - * Текста. + * *** + * @type {string} + * @field + * @public + */ + label; + /** + * ### title * - * Представлены массивом функций, которые принимают на вход объект отчета и возвращают строки. + * Заголовок. * * *** - * @type {[function(G):string][]} + * @type {string} + * @field * @public */ - texts; + title; /** * ### priority * * Приоритет. * - * Наиболее приоритетные блоки будут отображены снизу, чтобы их можно было увидеть в числе первых. - * * *** - * @type {number?} + * @type {number} + * @field * @public */ priority; }; -/** - * @extends {DBlock} - * @template {YBlockTUG} G -*/ class IBlock extends DBlock { }; -/** - * @extends {IBlock} - * @template {YBlockTUG} G -*/ class MBlock extends IBlock { }; -/** - * @extends {MBlock} - * @template {YBlockTUG} G -*/ class FBlock extends MBlock { /** @@ -143,66 +151,53 @@ class FBlock extends MBlock { * * * *** - * @arg {YBlockT&G} t + * @arg {YBlockT} args */ - constructor(t) { - - t = [...arguments]; - - super(Object.assign(t = FBlock.#before(t), {})); + constructor(args) { + + super(args = FBlock.#before(args = arguments)); + + FBlock.#deceit.apply(this, [args]); - FBlock.#deceit.apply(this, [t]); + return this.correlate(); }; - /** @arg {any[]} t */ - static #before(t) { + /** @arg {DBlock} args */ + static #before(args) { - /** @type {YBlockT} */ - let r = {}; + /** @type {YArg} */ + const yarg = args instanceof YArg ? args : new YArg(args); - if (t?.length === 1 && [Object, YBlock].includes(t[0]?.constructor) && !Object.getOwnPropertyNames(t[0]).includes('_ytp')) { - - r = t[0]; - - } else if (t?.length) { - - if (t[0]?._ytp) { + yarg.set( - t = [...t[0]._ytp]; - - }; - - switch (t.length) { - - default: r.tags = t.slice(3); - case 3: r.priority = t[2]; - case 2: r.texts = t[1]; - case 1: r.name = t[0]; - - }; - - if (!Object.values(r).length) { - - r = { _ytp: t, }; - - }; - - }; + ['tags', 'arrayString'], + ['label', 'string'], + ['title', 'string'], + ['funcs', 'arrayFunc'], + ['priority', 'number'], + + ); - return r; + return yarg; }; - /** @arg {YBlockT} t @this {YBlock} */ - static #deceit(t) { + /** @arg {YArg} args @this {YBlock} */ + static #deceit(args) { try { - FBlock.#verify.apply(this, [t]); + FBlock.#verify.apply(this, arguments); } catch (e) { - throw e; + if (config?.strictMode) { + + throw e; + + }; + + return new YBlock(); } finally { @@ -211,56 +206,38 @@ class FBlock extends MBlock { }; }; - /** @arg {YBlockT} t @this {YBlock} */ - static #verify(t) { + /** @arg {YArg} args @this {YBlock} */ + static #verify(args) { const { - } = t; + } = args; - FBlock.#handle.apply(this, [t]); + FBlock.#handle.apply(this, arguments); }; - /** @arg {YBlockT} t @this {YBlock} */ - static #handle(t) { + /** @arg {YArg} args @this {YBlock} */ + static #handle(args) { - if (t.texts) { - - if (t.texts.constructor !== Array) { - - t.texts = [t.texts]; - - }; - - }; - - if (t.tags?.length) { - - t.tags = t.tags.map(tag => new YTag(this, tag)); - - }; - FBlock.#create.apply(this, [t]); + + FBlock.#create.apply(this, arguments); }; - /** @arg {YBlockT} t @this {YBlock} */ - static #create(t) { + /** @arg {YArg} args @this {YBlock} */ + static #create(args) { const { - } = t; + } = args; - this.adopt(t); + this - if (config) { - - this.adoptDefault(config); - - }; + .adopt(args.getData()); }; @@ -269,19 +246,341 @@ class FBlock extends MBlock { /** * ### YBlock * - Тип `SDIMFY` - * - Версия `0.0.0` - * - Модуль `ject\entity\report\block` + * - Версия `1.0.0` * - Цепочка `BDVHC` * *** * + * Класс `YBlock`. + * + * Блок отчёта предназначен для формирования строкового сообщения, пригодного для формирования какой-либо отчётности по указанной сущности. + * Обычно блоки одной сущности описывают разные её параметры, сгруппированные по каким-либо признакам, определённым автором отчёта. + * + * Они представлены: + * - Метками определения + * - Тегами, позволяющими объединять блоки в группы + * - Функциями, описывающими контент блоков + * - Приоритетами, определяющими порядок отображения блоков * + * Блоки отображаются последовательно друг за другом в зависимости от приоритета того или иного блока. + * Для каждого из них указывается метка и псевдоним (используемый для отображения названия блока). + * В первую очередь указывается псевдоним блока, затем внутрнее содержимое. + * Завершает блок разделительная линия отчёта, которая позволяет отделить один блок от другого. + * + * Контроль отображения тех или иных блоков осуществляется с помощью приоритетов и тегов. + * Теги дают возможность определять группы блоков и контролировать их отображения. + * Например, можно определить определенную группу блоков и отфильтровать её, чтобы она и, следовательно, всё её блоки не отобразились. + * Приоритеты же определюят порядок отображения блоков, где 0 имеет минимальный приоритет, а большие числа - максимальный. + * Блоки максимального приоритета будут отображаться последними в логировании, чтобы их можно было увидеть сразу. * * *** - * @extends {FBlock} - * @template {YBlockTUG&YRept} G + * @class + * */ export class YBlock extends FBlock { + /** + * @method + * @public + * @returns {typeof YBlock} + */ + getClass() { + + return YBlock; + + }; + +}; + +//#region YE + +YBlock.getY()['modules'].push(YBlock); + +//#endregion + +// //#region YI + +// import { Y } from '@syls/y'; +// import { YTag } from '../-submodule/tag/-module/export.mjs'; +// import { YRept } from '../../../-module/export.mjs'; + + +// //#endregion +// //#region YT + +// /** ### YBlockT +// * - Тип `T` +// * - Версия `0.0.0` +// * - Модуль `ject\entity\report\block` +// * +// * Основной параметр модуля `YBlock`. +// * +// * *** +// * +// * @typedef {YBlockTE&YBlockTU} YBlockT +// */ +// /** ### YBlockTE +// * - Тип `TE` +// * - Версия `0.0.0` +// * - Модуль `ject\entity\report\block` +// * +// * Параметр наследования `YBlock`. +// * +// * @typedef {{[p in Exclude|Exclude]:(DBlock[p]&SBlock[p])}} YBlockTE +// */ +// /** ### YBlockTU +// * - Тип `TU` +// * - Версия `0.0.0` +// * - Модуль `ject\entity\report\block` +// * +// * Уникальные параметры `YBlock`. +// * +// * @typedef YBlockTU +// * @prop {} _ +// */ +// /** ### YBlockTUG +// * - Тип `TUP` +// * - Версия `0.0.0` +// * - Модуль `ject\entity\report\block` +// * +// * Уникальные генеративные параметры `YBlock`. +// * +// * @typedef YBlockTUG +// * @prop {null=} _ +// */ + +// //#endregion + +// /** +// * @template {YBlockTUG} G +// */ +// class SBlock extends Y { + + + +// }; +// /** +// * @extends {SBlock} +// * @template {YBlockTUG} G +// */ +// class DBlock extends SBlock { + +// /** +// * ### name +// * +// * Наименование. +// * +// * *** +// * @type {string?} +// * @public +// */ +// name; +// /** +// * ### tags +// * +// * Теги. +// * +// * По тегам можно отфильтровать лишние блоки из отчета или осуществлять манипуляции над ними. +// * +// * *** +// * @type {YTag[]} +// * @public +// */ +// tags = []; +// /** +// * ### texts +// * +// * Текста. +// * +// * Представлены массивом функций, которые принимают на вход объект отчета и возвращают строки. +// * +// * *** +// * @type {[function(G):string][]} +// * @public +// */ +// texts; +// /** +// * ### priority +// * +// * Приоритет. +// * +// * Наиболее приоритетные блоки будут отображены снизу, чтобы их можно было увидеть в числе первых. +// * +// * *** +// * @type {number?} +// * @public +// */ +// priority; + +// }; +// /** +// * @extends {DBlock} +// * @template {YBlockTUG} G +// */ +// class IBlock extends DBlock { + + + +// }; +// /** +// * @extends {IBlock} +// * @template {YBlockTUG} G +// */ +// class MBlock extends IBlock { + + + +// }; +// /** +// * @extends {MBlock} +// * @template {YBlockTUG} G +// */ +// class FBlock extends MBlock { + +// /** +// * ### YBlock.constructor +// * +// * +// * +// * *** +// * @arg {YBlockT&G} t +// */ +// constructor(t) { + +// t = [...arguments]; + +// super(Object.assign(t = FBlock.#before(t), {})); + +// FBlock.#deceit.apply(this, [t]); + +// }; + +// /** @arg {any[]} t */ +// static #before(t) { + +// /** @type {YBlockT} */ +// let r = {}; + +// if (t?.length === 1 && [Object, YBlock].includes(t[0]?.constructor) && !Object.getOwnPropertyNames(t[0]).includes('_ytp')) { + +// r = t[0]; + +// } else if (t?.length) { + +// if (t[0]?._ytp) { + +// t = [...t[0]._ytp]; + +// }; + +// switch (t.length) { + +// default: r.tags = t.slice(3); +// case 3: r.priority = t[2]; +// case 2: r.texts = t[1]; +// case 1: r.name = t[0]; + +// }; + +// if (!Object.values(r).length) { + +// r = { _ytp: t, }; + +// }; + +// }; + +// return r; + +// }; +// /** @arg {YBlockT} t @this {YBlock} */ +// static #deceit(t) { + +// try { + +// FBlock.#verify.apply(this, [t]); + +// } catch (e) { + +// throw e; + +// } finally { + + + +// }; + +// }; +// /** @arg {YBlockT} t @this {YBlock} */ +// static #verify(t) { + +// const { + + + +// } = t; + +// FBlock.#handle.apply(this, [t]); + +// }; +// /** @arg {YBlockT} t @this {YBlock} */ +// static #handle(t) { + +// if (t.texts) { + +// if (t.texts.constructor !== Array) { + +// t.texts = [t.texts]; + +// }; + +// }; + +// if (t.tags?.length) { + +// t.tags = t.tags.map(tag => new YTag(this, tag)); + +// }; + +// FBlock.#create.apply(this, [t]); + +// }; +// /** @arg {YBlockT} t @this {YBlock} */ +// static #create(t) { + +// const { + + + +// } = t; + +// this.adopt(t); + +// if (config) { + +// this.adoptDefault(config); + +// }; + +// }; + +// }; + +// /** +// * ### YBlock +// * - Тип `SDIMFY` +// * - Версия `0.0.0` +// * - Модуль `ject\entity\report\block` +// * - Цепочка `BDVHC` +// * *** +// * +// * +// * +// * *** +// * @extends {FBlock} +// * @template {YBlockTUG&YRept} G +// */ +// export class YBlock extends FBlock { + -}; \ No newline at end of file +// }; \ No newline at end of file diff --git a/-submodule/y/-submodule/rept/-submodule/block/-module/config.mjs b/-submodule/y/-submodule/rept/-submodule/block/-module/config.mjs index 1857b50..0bdb2f2 100644 --- a/-submodule/y/-submodule/rept/-submodule/block/-module/config.mjs +++ b/-submodule/y/-submodule/rept/-submodule/block/-module/config.mjs @@ -1,48 +1,80 @@ +import { YConfig } from "../../../../config/-module/export.mjs"; +import configY from "../../../../../-module/config.mjs"; + +/** @type {configY} */ +const config = { + + + +}; + /** ### configBlock - * - Модуль `ject\entity\report\block` * * Конфигуратор модуля `block`. * + * *** + * @public */ -export const configBlock = { - - /** - * ### nameDefault - * - * Дефолт наименование. - * - * *** - * @type {string?} - * @public - */ - nameDefault: 'block', - - /** - * ### priorityDefault - * - * Дефолт приоритет. - * - * *** - * @type {number?} - * @public - */ - priorityDefault: null, - - /** - * ### describeDefault - * - * Дефолт описание. - * - * *** - * @type {function():string?} - * @public - */ - describeDefault() { - - return ''; - - }, +export const configBlock = new YConfig(Object.assign(config, { -}; + + +}), configY); + +export default configBlock; + +/** + * @file block/config.mjs + * @author Yakhin Nikita Artemovich + * @license Apache-2.0 + * @copyright SYLS (Software Y Lib Solutions) 2023 +*/ + +// /** ### configBlock +// * - Модуль `ject\entity\report\block` +// * +// * Конфигуратор модуля `block`. +// * +// */ +// export const configBlock = { + +// /** +// * ### nameDefault +// * +// * Дефолт наименование. +// * +// * *** +// * @type {string?} +// * @public +// */ +// nameDefault: 'block', + +// /** +// * ### priorityDefault +// * +// * Дефолт приоритет. +// * +// * *** +// * @type {number?} +// * @public +// */ +// priorityDefault: null, + +// /** +// * ### describeDefault +// * +// * Дефолт описание. +// * +// * *** +// * @type {function():string?} +// * @public +// */ +// describeDefault() { + +// return ''; + +// }, + +// }; -export default configBlock; \ No newline at end of file +// export default configBlock; \ No newline at end of file diff --git a/-submodule/y/-submodule/scheduler/-module/class.mjs b/-submodule/y/-submodule/scheduler/-module/class.mjs index 35dd34d..bb603bc 100644 --- a/-submodule/y/-submodule/scheduler/-module/class.mjs +++ b/-submodule/y/-submodule/scheduler/-module/class.mjs @@ -137,9 +137,7 @@ class MScheduler extends IScheduler { for (const event of y.events) { - event.accumulate(); - - if (event.tact === event.hoarder && event.disposable) { + if (event.accumulate() && event.disposable) { y.events = y.events.filter(eventThis => eventThis !== event); diff --git a/-submodule/y/-submodule/scheduler/-submodule/event/-module/class.mjs b/-submodule/y/-submodule/scheduler/-submodule/event/-module/class.mjs index d92000c..3129238 100644 --- a/-submodule/y/-submodule/scheduler/-submodule/event/-module/class.mjs +++ b/-submodule/y/-submodule/scheduler/-submodule/event/-module/class.mjs @@ -1,5 +1,6 @@ //#region YI +import { YScheduler } from '../../../-module/class.mjs'; import { Y } from '../../../../../-module/class.mjs'; import { YArg } from '../../../../arg/-module/class.mjs'; import { configEvent as config } from './config.mjs'; @@ -288,6 +289,62 @@ export class YEvent extends FEvent { }; + /** + * ### incr + * + * *** + * + * Метод наращивания накопителя. + * + * *** + * @method + * @public + */ + incr() { + + this.hoarder++; + + return this; + + }; + /** + * ### exec + * + * *** + * + * Метод выполнения события. + * + * *** + * @arg {YScheduler} scheduler `Планировщик` + * @method + * @public + */ + exec(scheduler) { + + this.func(scheduler); + + return this; + + }; + /** + * ### reset + * + * *** + * + * Метод сброса накопителя. + * + * *** + * @method + * @public + */ + reset() { + + this.hoarder = 0; + + return this; + + }; + /** * ### accumulate * @@ -296,20 +353,43 @@ export class YEvent extends FEvent { * Метод перерасчёта накопления. * * *** + * @arg {YScheduler} scheduler `Планировщик` * @method * @public */ - accumulate() { + accumulate(scheduler) { + + this.incr(); - if (++this.hoarder >= this.tact) { + if (this.isAccumulated()) { - this.hoarder = 0; + this + + .exec(scheduler) + .reset(); - this.func(); + return true; }; - return this; + return false; + + }; + + /** + * ### isAccumulated + * + * *** + * + * Метод проверки накопления. + * + * *** + * @method + * @public + */ + isAccumulated() { + + return this.hoarder >= this.tact; }; diff --git a/-submodule/y/package.json b/-submodule/y/package.json index 91497b9..36733d7 100644 --- a/-submodule/y/package.json +++ b/-submodule/y/package.json @@ -34,6 +34,10 @@ "types": "./-submodule/tag/-module/type.d.ts", "import": "./-submodule/tag/-module/export.mjs" }, + "./class": { + "types": "./-submodule/class/-module/type.d.ts", + "import": "./-submodule/class/-module/export.mjs" + }, "./date": { "types": "./-submodule/date/-module/type.d.ts", "import": "./-submodule/date/-module/export.mjs" diff --git a/.vscode/snippets.code-snippets b/.vscode/snippets.code-snippets index 597317f..dfe1fd8 100644 --- a/.vscode/snippets.code-snippets +++ b/.vscode/snippets.code-snippets @@ -3,6 +3,179 @@ // Классы "class-syls": { + "body": [ + + "/**", + " * ### $1", + " * - Тип `S`", + " * - Версия `1.0.0`", + " * ***", + " * ", + " * ", + " * ", + " * ***", + " * @typedef $1TU", + " * @prop {} _", + " * ", + " * @typedef {$1TU&$1TE} $1T", + " * @typedef {Omit<$1, keyof $2>} $1TE", + " * ***", + " * @class", + " * @since `1.0.0`", + " * @version `1.0.0`", + " * ", + "*/", + "export class ${1:Y${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/${1:/capitalize}/}} extends ${2:Y}$0 {", + " ", + " //#region static", + " ", + " static {", + " ", + " ", + " ", + " };", + " ", + " /**", + " * ### stock", + " * ", + " * ***", + " * ", + " * ", + " * ", + " * ***", + " * @type {$1[]}", + " * @field", + " * @static", + " * @public", + " */", + " static stock = [];", + " /**", + " * ### config", + " * ", + " * ", + " * ", + " * ***", + " * @field", + " * @static", + " * @public", + " */", + " static config = config;", + " ", + " /**", + " * @arg {...$1} args `Аргументы`", + " * @returns {$1[]}", + " */", + " static create(...args) {", + " ", + " return Object.getPrototypeOf(this).create.apply(this, args);", + " ", + " };", + " ", + " /**", + " * @arg {Y1} value `Значение`", + " * @static", + " * @method", + " * @public", + " * @returns {(Y1&$Y1)?}", + " * @template {$1} Y1", + " */", + " static becomePrototype(value) {", + " ", + " return Object.getPrototypeOf(this).becomePrototype.apply(this, [value]);", + " ", + " };", + " ", + " //#endregion", + " ", + " /**", + " * ### $1Constructor", + " * ", + " * ", + " * ", + " * ***", + " * @arg {$1T} args `Аргументы`", + " * ", + " * Представлены единым объектом носителем аргументов.", + " * ", + " * ***", + " * @constructor", + " */", + " constructor(...args) {", + " ", + " try {", + " ", + " //#region before", + " ", + " /** @type {YArg<$1>} */", + " const yarg = args instanceof YArg ? args : new YArg(args);", + " ", + " ", + " ", + " super(yarg);", + " ", + " //#endregion", + " //#region verify", + " ", + " ", + " ", + " //#endregion", + " //#region handle", + " ", + " ", + " ", + " //#endregion", + " //#region comply", + " ", + " ", + " ", + " //#endregion", + " ", + " return this", + " ", + " .adopt(yarg.getData())", + " .correlate()", + " ", + " ", + " } catch (err) {", + " ", + " if (config.value.strictMode) {", + " ", + " throw err;", + " ", + " };", + " ", + " } finally {", + " ", + " ", + " ", + " };", + " ", + " };", + " ", + "};", + + ], + "scope": "javascript,typescript", + "prefix": "class-syls", + "description": "Шаблон класса syls.", + + }, + "class-generic-syls": { + + "body": [ + + "", + "", + "", + + ], + "scope": "", + "prefix": "class-generic-syls", + "description": "Шаблон generic класса syls.", + + }, + "class-bdvhc-syls": { + "body": [ "//#region YI", @@ -79,6 +252,27 @@ " ", " };", " ", + " /**", + " * @arg {Y1} value `Значение`", + " * @static", + " * @method", + " * @public", + " * @returns {(Y1&$Y1)?}", + " * @template {Y$1} Y1", + " */", + " static becomePrototype(value) {", + " ", + " if (!(value instanceof Object)) return null;", + " ", + " Object.setPrototypeOf(value, this.prototype);", + " ", + " return value;", + " ", + " };", + " ", + " ", + " ", + " ", "};", "class D$1 extends S$1 {", " ", @@ -203,15 +397,6 @@ "${3:export }class Y$1 extends F$1 {", " ", " /**", - " * ### getClass", - " * ", - " * ", - " * ", - " * ***", - " * ", - " * ", - " * ", - " * ***", " * @method", " * @public", " * @returns {typeof Y$1}", @@ -226,16 +411,16 @@ "", "//#region YE", "", - "Y$1.getY()['modules'].push(Y$1);", + "Y$1.appendModule(Y$1);", "", "//#endregion", ], "scope": "javascript,typescript", - "prefix": "class-syls", - "description": "Шаблон класса syls." + "prefix": "class-bdvhc-syls", + "description": "Шаблон класса bdvhc syls." }, - "class-generic-syls": { + "class-bdvhc-generic-syls": { "body": [ @@ -466,15 +651,6 @@ " constructor(args) { super(...arguments); };", " ", " /**", - " * ### getClass", - " * ", - " * ", - " * ", - " * ***", - " * ", - " * ", - " * ", - " * ***", " * @method", " * @public", " * @returns {typeof Y$1}", @@ -495,8 +671,8 @@ ], "scope": "javascript,typescript", - "prefix": "class-generic-syls", - "description": "Шаблон дженерик-класса syls.", + "prefix": "class-bdvhc-generic-syls", + "description": "Шаблон дженерик-класса bdvhc syls.", }, // // Поля @@ -691,6 +867,28 @@ }, // // Файлы + "file-class-syls": { + + "body": [ + + "//#region YI", + "", + "import { YArg } from \"@syls/y/arg\";", + "import { config${1:${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/${1:/capitalize}/}} as config } from \"./config.mjs\";", + "", + "//#endregion", + "", + "class-syls$2", + "", + "file-metadata-syls$3", + + ], + "scope": "javascript,typescript", + "prefix": "file-class-syls", + "description": "Шаблон файла класса syls.", + "isFileTemplate": true, + + }, "file-error-syls": { "body": [ @@ -736,7 +934,7 @@ "import { YConfig } from \"@syls/y/config\";", "", - "/** @type {$2} */", + "/** @type {$2['value']} */", "const config = {", " ", " ", @@ -773,6 +971,8 @@ "//#region YI", "", + "import { YArg } from '@syls/y/arg';", + "import { YCond } from '@syls/y/cond';", "import { config${1/(.*)/${1:/capitalize}/} as config } from './config.mjs';", "", "//#endregion", @@ -796,6 +996,8 @@ "", "//#endregion", "", + "", + "", "file-metadata-syls$0", ], @@ -955,6 +1157,115 @@ // Функции "function-syls": { + "body": [ + + "//#region $1", + "", + "/**", + " * ### $1", + " * - Тип `S`", + " * - Версия `1.0.0`", + " * ***", + " * ", + " * ", + " * ", + " * ***", + " * @typedef $1T", + " * @prop {} _", + " * ***", + " * @arg {$1T} args `Аргументы`", + " * @since `1.0.0`", + " * @version `1.0.0`", + " * @function", + "*/", + "function $1(args) {", + " ", + " let result;", + " ", + " try {", + " ", + " let {", + " ", + " ", + " ", + " } = args;", + " ", + " //#region verify", + " ", + " ", + " ", + " //#endregion", + " //#region handle", + " ", + " ", + " ", + " //#endregion", + " //#region comply", + " ", + " ", + " ", + " //#endregion", + " ", + " } catch (err) {", + " ", + " if (config.value.strictMode) {", + " ", + " throw err;", + " ", + " };", + " ", + " ", + " ", + " } finally {", + " ", + " ", + " ", + " };", + " ", + " return result;", + " ", + "};", + "", + "$0", + "", + "//#endregion", + + ], + "scope": "javascript,typescript", + "prefix": "function-syls", + "description": "Шаблон функции syls." + + }, + "function-provider-syls": { + + "body": [ + + "/**", + " * ### ${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}$1$2", + " * - Тип `S`", + " * - Версия `1.0.0`", + " * ***", + " * ", + " * $4", + " * ", + " * ***", + " * $3", + " * @function", + "*/", + "export function ${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}$1$2() {", + "", + " return ${1/(\\w)/${1:/downcase}/}({});", + "", + "};", + + ], + "scope": "javascript,typescript", + "prefix": "function-provider-syls", + "description": "Шаблон функции поставщика syls." + + }, + "function-dvhc-syls": { + "body": [ "//#region $1", @@ -977,12 +1288,12 @@ " * @prop {any} _", "*/", "", - "/** @arg {${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}TF${1/(\\w)/${1:/upcase}/}} t */", - "function $1Deceit(t) {", + "/** @arg {${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}TF${1/(\\w)/${1:/upcase}/}} args */", + "function $1Deceit(args) {", " ", " try {", " ", - " return $1Verify(t);", + " return $1Verify(args);", " ", " } catch (e) {", " ", @@ -1001,38 +1312,38 @@ " };", " ", "};", - "/** @arg {${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}TF${1/(\\w)/${1:/upcase}/}} t */", - "function $1Verify(t) {", + "/** @arg {${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}TF${1/(\\w)/${1:/upcase}/}} args */", + "function $1Verify(args) {", " ", " const {", " ", " ", " ", - " } = t;", + " } = args;", " ", - " return $1Handle(t);", + " return $1Handle(args);", " ", "};", - "/** @arg {${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}TF${1/(\\w)/${1:/upcase}/}} t */", - "function $1Handle(t) {", + "/** @arg {${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}TF${1/(\\w)/${1:/upcase}/}} args */", + "function $1Handle(args) {", " ", " const {", " ", " ", " ", - " } = t;", + " } = args;", " ", - " return $1Comply(t);", + " return $1Comply(args);", " ", "};", - "/** @arg {${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}TF${1/(\\w)/${1:/upcase}/}} t */", - "function $1Comply(t) {", + "/** @arg {${TM_DIRECTORY/.*\\\\([^\\\\]*)\\\\.*/$1/}TF${1/(\\w)/${1:/upcase}/}} args */", + "function $1Comply(args) {", " ", " const {", " ", " ", " ", - " } = t;", + " } = args;", " ", " ", " ", @@ -1044,11 +1355,11 @@ ], "scope": "javascript,typescript", - "prefix": "function-syls", - "description": "Шаблон функции syls.", + "prefix": "function-dvhc-syls", + "description": "Шаблон функции-dvhc syls.", }, - "function-provider-syls": { + "function-dvhc-provider-syls": { "body": [ @@ -1071,8 +1382,8 @@ ], "scope": "javascript,typescript", - "prefix": "function-provider-syls", - "description": "Шаблон функции поставщика syls." + "prefix": "function-dvhc-provider-syls", + "description": "Шаблон функции-dvhc поставщика syls." }, // @@ -1087,11 +1398,11 @@ " * ", " * ***", " * ", - " * $4", + " * $3", " * ", " * ***", " * ", - " * @typedef $3", + " * @typedef $1", " * @prop {} _", " * ", "*/", @@ -1116,7 +1427,7 @@ " * ", " * ***", " * ", - " * @type {$3}", + " * @typedef {$3} $1", " * ", "*/", diff --git a/jsconfig.json b/jsconfig.json index 2a15a6a..8df5e67 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -3,6 +3,7 @@ "./**/*", "./-submodule/**/*", "./.scripts/**/*", + "./.games/**/*", ], "typeAcquisition": { "include": [ @@ -10,10 +11,12 @@ ], }, "compilerOptions": { - "module": "ES2022", + "outDir": ".build", + "rootDir": "./", "target": "ES2022", + "module": "NodeNext", "esModuleInterop": true, - "moduleResolution": "nodenext", + "moduleResolution": "NodeNext", "resolveJsonModule": true, "experimentalDecorators": true, } diff --git a/package.json b/package.json index e35c4fc..2f2e75f 100644 --- a/package.json +++ b/package.json @@ -39,8 +39,8 @@ }, "description": "SYLS (Software Y Lib Solutions) - библиотека, дающая доступ к функциональным и системным решениям, для разработки разнонаправленных приложений.", "dependencies": { - "@syls/array": "*", "@syls/bool": "*", + "@syls/array": "*", "@syls/class": "*", "@syls/console": "*", "@syls/crypto": "*", @@ -49,6 +49,7 @@ "@syls/ject": "*", "@syls/key": "*", "@syls/lang": "*", + "@syls/listener": "*", "@syls/number": "*", "@syls/os": "*", "@syls/process": "*", diff --git a/test.mjs b/test.mjs index 1bc166a..515b807 100644 --- a/test.mjs +++ b/test.mjs @@ -1,12 +1,9 @@ -import { YScheduler } from "@syls/y/scheduler"; +import { Y } from "@syls/y"; -new YScheduler() +new Y() - .appendEvent( + .printExec(self => { - ['clear', () => console.clear(), 10], - ['log', () => console.log('tact'), 1], + return self; - ) - .on() - .do(self => setTimeout(() => self.on(1000), 3000)) \ No newline at end of file + }) \ No newline at end of file