Skip to content

Commit c14d903

Browse files
erikianerickzhao
andauthored
feat!: bump engines requirement to Node 22 (#347)
BREAKING CHANGE: bumps required Node.js version to >=22.12.0. ESM-only. * use `node:` imports * use `"@tsconfig/node22` * remove `rimraf` * update `glob` and remove inlined types * esm: add `"type": "module"` and update imports * esm: update test imports and dependencies * remove `default` exports * remove unused `import`s * fix Windows tests * update `import`s / `export`s in `src/asar.ts` * remove `promisify(stream.pipeline)` * remove `lodash` * remove `enginesStrict` * rename `bin/asar.js` to `bin/asar.mjs` * bump `minimatch` to `10.0.1` * `var` -> `const` * add `noUnusedLocals: true` to `tsconfig.json` * update `wrappedFs` * update `commander` * update `chai` * add docs publishing flow * docs: update README imports --------- Co-authored-by: Erick Zhao <[email protected]>
1 parent 31529fd commit c14d903

33 files changed

+679
-611
lines changed

.github/workflows/docs.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Publish documentation
2+
3+
on:
4+
push:
5+
tags:
6+
- v[0-9]+.[0-9]+.[0-9]+*
7+
8+
permissions:
9+
id-token: write
10+
contents: read
11+
12+
jobs:
13+
docs:
14+
runs-on: ubuntu-latest
15+
environment: docs-publish
16+
steps:
17+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag: v4.2.2
18+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # tag: v4.4.0
19+
with:
20+
node-version: 22.12.x
21+
- name: Install dependencies
22+
run: yarn --frozen-lockfile
23+
- name: Build API documentation
24+
run: yarn build:docs
25+
- name: Azure login
26+
uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
27+
with:
28+
client-id: ${{ secrets.AZURE_OIDC_CLIENT_ID }}
29+
tenant-id: ${{ secrets.AZURE_OIDC_TENANT_ID }}
30+
subscription-id: ${{ secrets.AZURE_OIDC_SUBSCRIPTION_ID }}
31+
- name: Upload to Azure Blob Storage
32+
uses: azure/cli@089eac9d8cc39f5d003e94f8b65efc51076c9cbd # tag: v2.1.0
33+
with:
34+
inlineScript: |
35+
az storage blob upload-batch --account-name ${{ secrets.AZURE_ECOSYSTEM_PACKAGES_STORAGE_ACCOUNT_NAME }} -d '$web/asar/${{ github.ref_name }}' -s ./docs --overwrite --auth-mode login

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- name: Setup Node.js
2525
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
2626
with:
27-
node-version: 20.x
27+
node-version: '22.12.x'
2828
cache: 'yarn'
2929
- name: Install
3030
run: yarn install --frozen-lockfile

.github/workflows/test.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ jobs:
1818
fail-fast: false
1919
matrix:
2020
node-version:
21-
- '20.19'
22-
- '18.18'
23-
- '16.20'
21+
- '22.12.x'
2422
os:
2523
- macos-latest
2624
- ubuntu-22.04

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
npm-debug.log
1010
.idea
1111
lib
12+
docs

.mocharc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module.exports = {
1+
export default {
22
'watch-files': ['test/**/*.js', 'lib/**/*.js'],
33
recursive: true,
44
file: './test/mocha.setup.js', // setup file before everything else loads

.nvmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
22.12

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ all files together without compression, while having random access support.
1616

1717
### Install
1818

19-
This module requires Node 10 or later.
19+
This module requires Node 22.12.0 or later.
2020

2121
```bash
2222
$ npm install --engine-strict @electron/asar
@@ -86,12 +86,12 @@ $ asar pack app app.asar --unpack-dir "{**/x1,**/x2,z4/w1}"
8686
### Example
8787

8888
```javascript
89-
const asar = require('@electron/asar');
89+
import { createPackage } from '@electron/asar';
9090

9191
const src = 'some/path/';
9292
const dest = 'name.asar';
9393

94-
await asar.createPackage(src, dest);
94+
await createPackage(src, dest);
9595
console.log('done.');
9696
```
9797

@@ -103,7 +103,7 @@ nothing, or a `stream.Transform`. The latter will be used on files that will be
103103
in the `.asar` file to transform them (e.g. compress).
104104

105105
```javascript
106-
const asar = require('@electron/asar');
106+
import { createPackageWithOptions } from '@electron/asar';
107107

108108
const src = 'some/path/';
109109
const dest = 'name.asar';
@@ -112,7 +112,7 @@ function transform (filename) {
112112
return new CustomTransformStream()
113113
}
114114

115-
await asar.createPackageWithOptions(src, dest, { transform: transform });
115+
await createPackageWithOptions(src, dest, { transform: transform });
116116
console.log('done.');
117117
```
118118

bin/asar.js renamed to bin/asar.mjs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
#!/usr/bin/env node
22

3-
var packageJSON = require('../package.json')
4-
var splitVersion = function (version) { return version.split('.').map(function (part) { return Number(part) }) }
5-
var requiredNodeVersion = splitVersion(packageJSON.engines.node.slice(2))
6-
var actualNodeVersion = splitVersion(process.versions.node)
3+
import packageJSON from '../package.json' with { type: 'json' };
4+
import { createPackageWithOptions, listPackage, extractFile, extractAll } from '../lib/asar.js';
5+
import { program } from 'commander';
6+
import fs from 'node:fs';
7+
import path from 'node:path';
8+
9+
const splitVersion = function (version) { return version.split('.').map(function (part) { return Number(part) }) }
10+
const requiredNodeVersion = splitVersion(packageJSON.engines.node.slice(2))
11+
const actualNodeVersion = splitVersion(process.versions.node)
712

813
if (actualNodeVersion[0] < requiredNodeVersion[0] || (actualNodeVersion[0] === requiredNodeVersion[0] && actualNodeVersion[1] < requiredNodeVersion[1])) {
914
console.error('CANNOT RUN WITH NODE ' + process.versions.node)
1015
console.error('asar requires Node ' + packageJSON.engines.node + '.')
1116
process.exit(1)
1217
}
1318

14-
// Not consts so that this file can load in Node < 4.0
15-
var asar = require('../lib/asar')
16-
var program = require('commander')
17-
1819
program.version('v' + packageJSON.version)
1920
.description('Manipulate asar archive files')
2021

@@ -35,7 +36,7 @@ program.command('pack <dir> <output>')
3536
builddir: options.sb,
3637
dot: !options.excludeHidden
3738
}
38-
asar.createPackageWithOptions(dir, output, options).catch(error => {
39+
createPackageWithOptions(dir, output, options).catch(error => {
3940
console.error(error)
4041
process.exit(1)
4142
})
@@ -49,8 +50,8 @@ program.command('list <archive>')
4950
options = {
5051
isPack: options.isPack
5152
}
52-
var files = asar.listPackage(archive, options)
53-
for (var i in files) {
53+
const files = listPackage(archive, options)
54+
for (const i in files) {
5455
console.log(files[i])
5556
}
5657
})
@@ -59,15 +60,15 @@ program.command('extract-file <archive> <filename>')
5960
.alias('ef')
6061
.description('extract one file from archive')
6162
.action(function (archive, filename) {
62-
require('fs').writeFileSync(require('path').basename(filename),
63-
asar.extractFile(archive, filename))
63+
fs.writeFileSync(path.basename(filename),
64+
extractFile(archive, filename))
6465
})
6566

6667
program.command('extract <archive> <dest>')
6768
.alias('e')
6869
.description('extract archive')
6970
.action(function (archive, dest) {
70-
asar.extractAll(archive, dest)
71+
extractAll(archive, dest)
7172
})
7273

7374
program.command('*', { hidden: true})

package.json

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@
22
"name": "@electron/asar",
33
"description": "Creating Electron app packages",
44
"version": "0.0.0-development",
5-
"main": "./lib/asar.js",
5+
"type": "module",
6+
"exports": "./lib/asar.js",
67
"types": "./lib/asar.d.ts",
78
"bin": {
8-
"asar": "./bin/asar.js"
9+
"asar": "./bin/asar.mjs"
910
},
1011
"files": [
1112
"bin",
1213
"lib"
1314
],
1415
"engines": {
15-
"node": ">=10.12.0"
16+
"node": ">=22.12.0"
1617
},
1718
"license": "MIT",
1819
"homepage": "https://github.com/electron/asar",
@@ -28,6 +29,7 @@
2829
},
2930
"scripts": {
3031
"build": "tsc",
32+
"build:docs": "typedoc src/asar.ts",
3133
"mocha": "xvfb-maybe electron-mocha && mocha",
3234
"mocha:update": "mocha --update",
3335
"mocha:watch": "mocha --watch",
@@ -39,21 +41,21 @@
3941
"prepare": "tsc"
4042
},
4143
"dependencies": {
42-
"commander": "^5.0.0",
43-
"glob": "^7.1.6",
44-
"minimatch": "^3.0.4"
44+
"commander": "^13.1.0",
45+
"glob": "^11.0.1",
46+
"minimatch": "^10.0.1"
4547
},
4648
"devDependencies": {
47-
"@types/minimatch": "^3.0.5",
48-
"@types/node": "^12.0.0",
49-
"chai": "^4.5.0",
50-
"electron": "^22.0.0",
51-
"electron-mocha": "^13.0.1",
52-
"lodash": "^4.17.15",
53-
"mocha": "^10.1.0",
49+
"@tsconfig/node22": "^22.0.1",
50+
"@types/mocha": "^10.0.10",
51+
"@types/node": "~22.10.7",
52+
"chai": "^5.2.0",
53+
"electron": "^34.5.0",
54+
"electron-mocha": "^13.1.0",
55+
"mocha": "~11.0.2",
5456
"mocha-chai-jest-snapshot": "^1.1.6",
5557
"prettier": "^3.3.3",
56-
"rimraf": "^3.0.2",
58+
"typedoc": "~0.25.13",
5759
"typescript": "^5.5.4",
5860
"xvfb-maybe": "^0.2.1"
5961
}

0 commit comments

Comments
 (0)