list-toolkit 2.1.0 → 2.1.1
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 +2 -1
- package/cjs/list/nodes.js +2 -2
- package/cjs/meta-utils.js +6 -2
- package/cjs/slist/nodes.js +1 -1
- package/package.json +16 -6
- package/src/list/nodes.js +3 -3
- package/src/meta-utils.js +3 -1
- package/src/slist/nodes.js +2 -2
package/README.md
CHANGED
|
@@ -101,7 +101,7 @@ const john = new Person('John'),
|
|
|
101
101
|
|
|
102
102
|
const people = List.from([john, jane, jim, jill]);
|
|
103
103
|
|
|
104
|
-
//
|
|
104
|
+
// iterate over the list manually:
|
|
105
105
|
for (let node = people.front; node !== people; node = node[people.nextName]) {
|
|
106
106
|
console.log(node.name); // John, Jane, Jim, Jill
|
|
107
107
|
}
|
|
@@ -146,6 +146,7 @@ BSD 3-Clause "New" or "Revised" License. See the LICENSE file for details.
|
|
|
146
146
|
|
|
147
147
|
## Release History
|
|
148
148
|
|
|
149
|
+
* 2.1.1 *Allowed functions to be used as nodes. Updated deps.*
|
|
149
150
|
* 2.1.0 *Added splay tree. Updated deps.*
|
|
150
151
|
* 2.0.0 *New major release.*
|
|
151
152
|
* 1.0.1 *Fixed exports. Added more methods to `MinHeap`.*
|
package/cjs/list/nodes.js
CHANGED
|
@@ -36,9 +36,9 @@ class HeadNode extends Node {
|
|
|
36
36
|
isNodeLike(node) {
|
|
37
37
|
if (!node) return false;
|
|
38
38
|
const next = node[this.nextName];
|
|
39
|
-
if (!next || typeof next
|
|
39
|
+
if (!next || _metaUtils.canHaveProps[typeof next] !== 1) return false;
|
|
40
40
|
const prev = node[this.prevName];
|
|
41
|
-
return prev && typeof prev
|
|
41
|
+
return prev && _metaUtils.canHaveProps[typeof prev] === 1;
|
|
42
42
|
}
|
|
43
43
|
isCompatibleNames({
|
|
44
44
|
nextName,
|
package/cjs/meta-utils.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.toSnakeCase = exports.toPascalCase = exports.toKebabCase = exports.toCamelCase = exports.toAllCapsSnakeCase = exports.normalizeIterator = exports.mapIterator = exports.fromSnakeCase = exports.fromSetter = exports.fromPascalCase = exports.fromKebabCase = exports.fromGetter = exports.fromCamelCase = exports.fromAccessors = exports.defaultDescriptor = exports.copyOptions = exports.copyDescriptors = exports.capitalize = exports.augmentIterator = exports.addGetters = exports.addDescriptors = exports.addDescriptor = exports.addAliases = exports.addAlias = exports.addAccessor = void 0;
|
|
6
|
+
exports.toSnakeCase = exports.toPascalCase = exports.toKebabCase = exports.toCamelCase = exports.toAllCapsSnakeCase = exports.normalizeIterator = exports.mapIterator = exports.fromSnakeCase = exports.fromSetter = exports.fromPascalCase = exports.fromKebabCase = exports.fromGetter = exports.fromCamelCase = exports.fromAccessors = exports.defaultDescriptor = exports.copyOptions = exports.copyDescriptors = exports.capitalize = exports.canHaveProps = exports.augmentIterator = exports.addGetters = exports.addDescriptors = exports.addDescriptor = exports.addAliases = exports.addAlias = exports.addAccessor = void 0;
|
|
7
7
|
const capitalize = name => name ? name[0].toUpperCase() + name.substring(1).toLowerCase() : name;
|
|
8
8
|
exports.capitalize = capitalize;
|
|
9
9
|
const toCamelCase = names => names.map((name, index) => index ? capitalize(name) : name.toLowerCase()).join('');
|
|
@@ -150,6 +150,10 @@ const mapIterator = (iterator, callbackFn) => {
|
|
|
150
150
|
};
|
|
151
151
|
};
|
|
152
152
|
exports.mapIterator = mapIterator;
|
|
153
|
+
const canHaveProps = exports.canHaveProps = {
|
|
154
|
+
object: 1,
|
|
155
|
+
function: 1
|
|
156
|
+
};
|
|
153
157
|
const copyOptions = (target, pattern, ...sources) => {
|
|
154
158
|
target = target || {};
|
|
155
159
|
const keys = Object.keys(pattern);
|
|
@@ -157,7 +161,7 @@ const copyOptions = (target, pattern, ...sources) => {
|
|
|
157
161
|
target[key] = pattern[key];
|
|
158
162
|
}
|
|
159
163
|
for (const source of sources) {
|
|
160
|
-
if (!source || typeof source !==
|
|
164
|
+
if (!source || canHaveProps[typeof source] !== 1) continue;
|
|
161
165
|
for (const key of keys) {
|
|
162
166
|
if (key in source) target[key] = source[key];
|
|
163
167
|
}
|
package/cjs/slist/nodes.js
CHANGED
|
@@ -36,7 +36,7 @@ class HeadNode extends Node {
|
|
|
36
36
|
isNodeLike(node) {
|
|
37
37
|
if (!node) return false;
|
|
38
38
|
const next = node[this.nextName];
|
|
39
|
-
return next && typeof next
|
|
39
|
+
return next && _metaUtils.canHaveProps[typeof next] === 1;
|
|
40
40
|
}
|
|
41
41
|
isCompatibleNames({
|
|
42
42
|
nextName
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "list-toolkit",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "List-based data structures to organize your objects.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -10,10 +10,14 @@
|
|
|
10
10
|
}
|
|
11
11
|
},
|
|
12
12
|
"scripts": {
|
|
13
|
-
"test": "tape6 --flags FO",
|
|
14
13
|
"prepare-dist": "node scripts/prepare-dist.js",
|
|
15
14
|
"build": "babel src --out-dir cjs",
|
|
16
|
-
"prepublishOnly": "npm run prepare-dist && npm run build"
|
|
15
|
+
"prepublishOnly": "npm run prepare-dist && npm run build",
|
|
16
|
+
"test": "tape6 --flags FO",
|
|
17
|
+
"test:bun": "tape6-bun --flags FO",
|
|
18
|
+
"test:deno-original": "tape6-deno --flags FO",
|
|
19
|
+
"test:deno": "deno run -A `tape6-runner main` --flags FO",
|
|
20
|
+
"start": "tape6-server --trace"
|
|
17
21
|
},
|
|
18
22
|
"repository": {
|
|
19
23
|
"type": "git",
|
|
@@ -33,10 +37,10 @@
|
|
|
33
37
|
},
|
|
34
38
|
"homepage": "https://github.com/uhop/list-toolkit#readme",
|
|
35
39
|
"devDependencies": {
|
|
36
|
-
"@babel/cli": "^7.
|
|
40
|
+
"@babel/cli": "^7.25.6",
|
|
37
41
|
"@babel/core": "^7.25.2",
|
|
38
42
|
"@babel/preset-env": "^7.25.4",
|
|
39
|
-
"tape-six": "^0.
|
|
43
|
+
"tape-six": "^0.12.2"
|
|
40
44
|
},
|
|
41
45
|
"files": [
|
|
42
46
|
"/src",
|
|
@@ -57,6 +61,12 @@
|
|
|
57
61
|
"tape6": {
|
|
58
62
|
"tests": [
|
|
59
63
|
"/tests/test-*.*js"
|
|
60
|
-
]
|
|
64
|
+
],
|
|
65
|
+
"importmap": {
|
|
66
|
+
"imports": {
|
|
67
|
+
"tape-six": "/node_modules/tape-six/index.js",
|
|
68
|
+
"list-toolkit/": "/src/"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
61
71
|
}
|
|
62
72
|
}
|
package/src/list/nodes.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
import {isRangeLike, normalizeNode, normalizeRange} from '../list-helpers.js';
|
|
4
|
-
import {addAlias, copyDescriptors} from '../meta-utils.js';
|
|
4
|
+
import {addAlias, copyDescriptors, canHaveProps} from '../meta-utils.js';
|
|
5
5
|
|
|
6
6
|
export const isNodeLike = ({nextName, prevName}, node) => node && node[prevName] && node[nextName];
|
|
7
7
|
export const isStandAlone = ({nextName, prevName}, node) => node && node[prevName] === node && node[nextName] === node;
|
|
@@ -22,9 +22,9 @@ export class HeadNode extends Node {
|
|
|
22
22
|
isNodeLike(node) {
|
|
23
23
|
if (!node) return false;
|
|
24
24
|
const next = node[this.nextName];
|
|
25
|
-
if (!next || typeof next
|
|
25
|
+
if (!next || canHaveProps[typeof next] !== 1) return false;
|
|
26
26
|
const prev = node[this.prevName];
|
|
27
|
-
return prev && typeof prev
|
|
27
|
+
return prev && canHaveProps[typeof prev] === 1;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
isCompatibleNames({nextName, prevName}) {
|
package/src/meta-utils.js
CHANGED
|
@@ -131,6 +131,8 @@ export const mapIterator = (iterator, callbackFn) => {
|
|
|
131
131
|
};
|
|
132
132
|
};
|
|
133
133
|
|
|
134
|
+
export const canHaveProps = {object: 1, function: 1};
|
|
135
|
+
|
|
134
136
|
export const copyOptions = (target, pattern, ...sources) => {
|
|
135
137
|
target = target || {};
|
|
136
138
|
const keys = Object.keys(pattern);
|
|
@@ -138,7 +140,7 @@ export const copyOptions = (target, pattern, ...sources) => {
|
|
|
138
140
|
target[key] = pattern[key];
|
|
139
141
|
}
|
|
140
142
|
for (const source of sources) {
|
|
141
|
-
if (!source || typeof source !==
|
|
143
|
+
if (!source || canHaveProps[typeof source] !== 1) continue;
|
|
142
144
|
for (const key of keys) {
|
|
143
145
|
if (key in source) target[key] = source[key];
|
|
144
146
|
}
|
package/src/slist/nodes.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
import {isRangeLike, normalizeNode, normalizeRange, normalizePtrRange} from '../list-helpers.js';
|
|
4
|
-
import {addAlias, copyDescriptors} from '../meta-utils.js';
|
|
4
|
+
import {addAlias, copyDescriptors, canHaveProps} from '../meta-utils.js';
|
|
5
5
|
|
|
6
6
|
export const isNodeLike = ({nextName}, node) => node && node[nextName];
|
|
7
7
|
export const isStandAlone = ({nextName}, node) => node && node[nextName] === node;
|
|
@@ -25,7 +25,7 @@ export class HeadNode extends Node {
|
|
|
25
25
|
isNodeLike(node) {
|
|
26
26
|
if (!node) return false;
|
|
27
27
|
const next = node[this.nextName];
|
|
28
|
-
return next && typeof next
|
|
28
|
+
return next && canHaveProps[typeof next] === 1;
|
|
29
29
|
}
|
|
30
30
|
isCompatibleNames({nextName}) {
|
|
31
31
|
return this.nextName === nextName;
|