@nyaomaru/divider 1.3.7 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -118,6 +118,20 @@ const firstArrayElement = dividerLast(['hello', 'world'], 2);
118
118
  // 'rld'
119
119
  ```
120
120
 
121
+ ### 📌 `dividerLoop()` Usage
122
+
123
+ ```ts
124
+ import { dividerLoop } from '@nyaomaru/divider';
125
+
126
+ // Divide string into chunks of given size
127
+ const result = dividerLoop('abcdefghij', 3);
128
+ // ['abc', 'def', 'ghi', 'j']
129
+
130
+ // Supports flatten option for string[]
131
+ const result2 = dividerLoop(['hello', 'world'], 2, { flatten: true });
132
+ // ['he', 'll', 'ow', 'or', 'ld']
133
+ ```
134
+
121
135
  ## 🎯 Options
122
136
 
123
137
  | Option | Type | Default | Description |
@@ -137,12 +151,21 @@ const result2 = divider(words, 2, { flatten: true });
137
151
 
138
152
  ## 💡 Features
139
153
 
154
+ ### 🧩 Flexible Division
155
+
140
156
  - Supports both `index-based` and `string-based` division
141
- - Works with both `strings` and `arrays of strings`
142
- - Supports `multiple separators` (mixing indexes and characters).
143
- - Provides an `optional flattening` feature for array results.
144
- - **Get only the first divided element using `dividerFirst()`**
145
- - **Get only the last divided element using `dividerLast()`**
157
+ - Supports `multiple separators` (mixing indexes and characters)
158
+ - Works with both `string` and `string[]` input
159
+ - Optional `flatten` behavior to control nested results
160
+
161
+ ### 🎯 Targeted Extraction
162
+
163
+ - `dividerFirst()`: Get only the first divided element
164
+ - `dividerLast()`: Get only the last divided element
165
+
166
+ ### 🔁 Repeated Division
167
+
168
+ - `dividerLoop()`: Automatically divide into fixed-size chunks
146
169
 
147
170
  ## 🛠 Contributing
148
171
 
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dividerLoop = dividerLoop;
4
+ const is_1 = require("@/utils/is");
5
+ const chunk_1 = require("@/utils/chunk");
6
+ const divider_1 = require("@/core/divider");
7
+ function dividerLoop(input, size, options) {
8
+ var _a;
9
+ if (!(0, is_1.isNumber)(size) || size <= 0) {
10
+ console.warn('dividerLoop: chunk size must be a positive number');
11
+ return [];
12
+ }
13
+ const flatten = (_a = options === null || options === void 0 ? void 0 : options.flatten) !== null && _a !== void 0 ? _a : false;
14
+ if ((0, is_1.isString)(input)) {
15
+ const indexes = (0, chunk_1.generateIndexes)(input, size);
16
+ return (0, divider_1.divider)(input, ...indexes, { flatten });
17
+ }
18
+ const result = input.map((item) => {
19
+ const indexes = (0, chunk_1.generateIndexes)(item, size);
20
+ return (0, divider_1.divider)(item, ...indexes);
21
+ });
22
+ return (flatten ? result.flat() : result);
23
+ }
package/dist/cjs/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.dividerLast = exports.dividerFirst = exports.divider = void 0;
3
+ exports.dividerLoop = exports.dividerLast = exports.dividerFirst = exports.divider = void 0;
4
4
  var divider_1 = require("@/core/divider");
5
5
  Object.defineProperty(exports, "divider", { enumerable: true, get: function () { return divider_1.divider; } });
6
6
  var divider_first_1 = require("@/core/divider-first");
7
7
  Object.defineProperty(exports, "dividerFirst", { enumerable: true, get: function () { return divider_first_1.dividerFirst; } });
8
8
  var divider_last_1 = require("@/core/divider-last");
9
9
  Object.defineProperty(exports, "dividerLast", { enumerable: true, get: function () { return divider_last_1.dividerLast; } });
10
+ var divider_loop_1 = require("@/core/divider-loop");
11
+ Object.defineProperty(exports, "dividerLoop", { enumerable: true, get: function () { return divider_loop_1.dividerLoop; } });
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateIndexes = generateIndexes;
4
+ function generateIndexes(text, size) {
5
+ const indexes = [];
6
+ for (let i = size; i < text.length; i += size) {
7
+ indexes.push(i);
8
+ }
9
+ return indexes;
10
+ }
@@ -0,0 +1,20 @@
1
+ import { isString, isNumber } from '@/utils/is';
2
+ import { generateIndexes } from '@/utils/chunk';
3
+ import { divider } from '@/core/divider';
4
+ export function dividerLoop(input, size, options) {
5
+ var _a;
6
+ if (!isNumber(size) || size <= 0) {
7
+ console.warn('dividerLoop: chunk size must be a positive number');
8
+ return [];
9
+ }
10
+ const flatten = (_a = options === null || options === void 0 ? void 0 : options.flatten) !== null && _a !== void 0 ? _a : false;
11
+ if (isString(input)) {
12
+ const indexes = generateIndexes(input, size);
13
+ return divider(input, ...indexes, { flatten });
14
+ }
15
+ const result = input.map((item) => {
16
+ const indexes = generateIndexes(item, size);
17
+ return divider(item, ...indexes);
18
+ });
19
+ return (flatten ? result.flat() : result);
20
+ }
package/dist/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { divider } from '@/core/divider';
2
2
  export { dividerFirst } from '@/core/divider-first';
3
3
  export { dividerLast } from '@/core/divider-last';
4
+ export { dividerLoop } from '@/core/divider-loop';
@@ -0,0 +1,7 @@
1
+ export function generateIndexes(text, size) {
2
+ const indexes = [];
3
+ for (let i = size; i < text.length; i += size) {
4
+ indexes.push(i);
5
+ }
6
+ return indexes;
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { DividerOptions, DividerResult } from '@/core/types';
2
+ export declare function dividerLoop<T extends string | string[], F extends boolean>(input: T, size: number, options?: DividerOptions<F>): DividerResult<T, F>;
@@ -1,4 +1,5 @@
1
1
  export { divider } from '@/core/divider';
2
2
  export { dividerFirst } from '@/core/divider-first';
3
3
  export { dividerLast } from '@/core/divider-last';
4
+ export { dividerLoop } from '@/core/divider-loop';
4
5
  export type { DividerResult } from '@/core/types';
@@ -0,0 +1 @@
1
+ export declare function generateIndexes(text: string, size: number): number[];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nyaomaru/divider",
3
3
  "type": "module",
4
- "version": "1.3.7",
4
+ "version": "1.4.0",
5
5
  "description": "To divide string or string[] with a given separator",
6
6
  "main": "dist/cjs/index.js",
7
7
  "module": "dist/esm/index.js",