Skip to content

Commit 2838a3e

Browse files
committed
Require Node.js 12 and move to ESM
1 parent 1f954bc commit 2838a3e

8 files changed

Lines changed: 43 additions & 48 deletions

File tree

.github/workflows/main.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ jobs:
1010
fail-fast: false
1111
matrix:
1212
node-version:
13+
- 16
1314
- 14
1415
- 12
1516
- 10
16-
- 8
1717
steps:
1818
- uses: actions/checkout@v2
19-
- uses: actions/setup-node@v1
19+
- uses: actions/setup-node@v2
2020
with:
2121
node-version: ${{ matrix.node-version }}
2222
- run: npm install

index.d.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ _Specifying `null` or `undefined` results in an empty array._
55
66
@example
77
```
8-
import arrify = require('arrify');
8+
import arrify from 'arrify';
99
1010
arrify('🦄');
1111
//=> ['🦄']
@@ -23,16 +23,14 @@ arrify(undefined);
2323
//=> []
2424
```
2525
*/
26-
declare function arrify<ValueType>(
26+
export default function arrify<ValueType>(
2727
value: ValueType
2828
): ValueType extends (null | undefined)
29-
? []
29+
? [] // eslint-disable-line @typescript-eslint/ban-types
3030
: ValueType extends string
31-
? [string]
32-
: ValueType extends ReadonlyArray<unknown> // TODO: Use 'readonly unknown[]' in the next major version
33-
? ValueType
34-
: ValueType extends Iterable<infer T>
35-
? T[]
36-
: [ValueType];
37-
38-
export = arrify;
31+
? [string]
32+
: ValueType extends readonly unknown[]
33+
? ValueType
34+
: ValueType extends Iterable<infer T>
35+
? T[]
36+
: [ValueType];

index.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
'use strict';
2-
3-
const arrify = value => {
1+
export default function arrify(value) {
42
if (value === null || value === undefined) {
53
return [];
64
}
@@ -18,6 +16,4 @@ const arrify = value => {
1816
}
1917

2018
return [value];
21-
};
22-
23-
module.exports = arrify;
19+
}

index.test-d.ts

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,33 @@
1-
import {expectType, expectError} from 'tsd';
2-
import arrify = require('.');
1+
/* eslint-disable @typescript-eslint/ban-types */
2+
import {expectType, expectError, expectAssignable} from 'tsd';
3+
import arrify from './index.js';
34

45
expectType<[]>(arrify(null));
56
expectType<[]>(arrify(undefined));
67
expectType<[string]>(arrify('🦄'));
78
expectType<string[]>(arrify(['🦄']));
8-
expectType<[boolean]>(arrify(true));
9+
expectAssignable<[boolean]>(arrify(true));
910
expectType<[number]>(arrify(1));
10-
expectType<[{}]>(arrify({}));
11+
expectAssignable<[Record<string, unknown>]>(arrify({}));
1112
expectType<[number, string]>(arrify([1, 'foo']));
12-
expectType<(string | boolean)[]>(
13+
expectType<Array<string | boolean>>(
1314
arrify(new Set<string | boolean>(['🦄', true]))
1415
);
1516
expectType<number[]>(arrify(new Set([1, 2])));
1617
expectError(arrify(['🦄'] as const).push(''));
17-
expectType<number[] | []>(arrify(Boolean() ? [1, 2] : null));
18-
expectType<number[] | []>(arrify(Boolean() ? [1, 2] : undefined));
19-
expectType<number[] | [string]>(arrify(Boolean() ? [1, 2] : '🦄'));
20-
expectType<number[] | string[]>(arrify(Boolean() ? [1, 2] : ['🦄']));
21-
expectType<number[] | [boolean]>(arrify(Boolean() ? [1, 2] : true));
22-
expectType<number[] | [number]>(arrify(Boolean() ? [1, 2] : 3));
23-
expectType<number[] | [{}]>(arrify(Boolean() ? [1, 2] : {}));
24-
expectType<number[] | [number, string]>(
25-
arrify(Boolean() ? [1, 2] : [1, 'foo'])
18+
expectType<[number, number] | []>(arrify(false ? [1, 2] : null));
19+
expectType<[number, number] | []>(arrify(false ? [1, 2] : undefined));
20+
expectType<[number, number] | [string]>(arrify(false ? [1, 2] : '🦄'));
21+
expectType<[number, number] | [string]>(arrify(false ? [1, 2] : ['🦄']));
22+
expectAssignable<number[] | [boolean]>(arrify(false ? [1, 2] : true));
23+
expectAssignable<number[] | [number]>(arrify(false ? [1, 2] : 3));
24+
expectAssignable<number[] | [Record<string, unknown>]>(arrify(false ? [1, 2] : {}));
25+
expectAssignable<number[] | [number, string]>(
26+
arrify(false ? [1, 2] : [1, 'foo'])
2627
);
27-
expectType<number[] | (string | boolean)[]>(
28-
arrify(Boolean() ? [1, 2] : new Set<string | boolean>(['🦄', true]))
28+
expectAssignable<number[] | Array<string | boolean>>(
29+
arrify(false ? [1, 2] : new Set<string | boolean>(['🦄', true]))
2930
);
30-
expectType<number[] | [boolean] | [string]>(
31-
arrify(Boolean() ? [1, 2] : Boolean() ? true : '🦄')
31+
expectAssignable<number[] | [boolean] | [string]>(
32+
arrify(false ? [1, 2] : (false ? true : '🦄'))
3233
);

license

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
3+
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
66

package.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44
"description": "Convert a value to an array",
55
"license": "MIT",
66
"repository": "sindresorhus/arrify",
7+
"funding": "https://github.com/sponsors/sindresorhus",
78
"author": {
89
"name": "Sindre Sorhus",
910
"email": "sindresorhus@gmail.com",
10-
"url": "sindresorhus.com"
11+
"url": "https://sindresorhus.com"
1112
},
13+
"type": "module",
14+
"exports": "./index.js",
1215
"engines": {
13-
"node": ">=8"
16+
"node": ">=12"
1417
},
1518
"scripts": {
1619
"test": "xo && ava && tsd"
@@ -28,8 +31,8 @@
2831
"ensure"
2932
],
3033
"devDependencies": {
31-
"ava": "^1.4.1",
32-
"tsd": "^0.7.2",
33-
"xo": "^0.24.0"
34+
"ava": "^3.15.0",
35+
"tsd": "^0.14.0",
36+
"xo": "^0.39.1"
3437
}
3538
}

readme.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,16 @@
22

33
> Convert a value to an array
44
5-
65
## Install
76

87
```
98
$ npm install arrify
109
```
1110

12-
1311
## Usage
1412

1513
```js
16-
const arrify = require('arrify');
14+
import arrify from 'arrify';
1715

1816
arrify('🦄');
1917
//=> ['🦄']
@@ -33,7 +31,6 @@ arrify(undefined);
3331

3432
*Specifying `null` or `undefined` results in an empty array.*
3533

36-
3734
---
3835

3936
<div align="center">

test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import test from 'ava';
2-
import arrify from '.';
2+
import arrify from './index.js';
33

44
test('main', t => {
55
t.deepEqual(arrify('foo'), ['foo']);

0 commit comments

Comments
 (0)