@hakobu/hakobu 1.0.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.
Files changed (284) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +673 -0
  3. package/dictionary/angular-bridge.js +3 -0
  4. package/dictionary/any-promise.js +3 -0
  5. package/dictionary/async.js +3 -0
  6. package/dictionary/aws-sdk.js +7 -0
  7. package/dictionary/babel-core.js +3 -0
  8. package/dictionary/batch.js +3 -0
  9. package/dictionary/bcrypt.js +3 -0
  10. package/dictionary/better-sqlite3.js +3 -0
  11. package/dictionary/bignum.js +3 -0
  12. package/dictionary/bindings.js +3 -0
  13. package/dictionary/blessed.js +8 -0
  14. package/dictionary/body-parser.js +9 -0
  15. package/dictionary/browserify.js +7 -0
  16. package/dictionary/bson.js +3 -0
  17. package/dictionary/buffermaker.js +7 -0
  18. package/dictionary/bunyan.js +9 -0
  19. package/dictionary/busboy.js +7 -0
  20. package/dictionary/bytes.js +3 -0
  21. package/dictionary/callsites.js +3 -0
  22. package/dictionary/chokidar.js +3 -0
  23. package/dictionary/coffee-script.js +7 -0
  24. package/dictionary/colors.js +3 -0
  25. package/dictionary/compression.js +3 -0
  26. package/dictionary/compressjs.js +7 -0
  27. package/dictionary/connect-mongo.js +3 -0
  28. package/dictionary/connect-mongodb.js +3 -0
  29. package/dictionary/connect-redis.js +3 -0
  30. package/dictionary/connect.js +10 -0
  31. package/dictionary/consolidate.js +3 -0
  32. package/dictionary/cookie-parser.js +3 -0
  33. package/dictionary/cookie.js +3 -0
  34. package/dictionary/cors.js +3 -0
  35. package/dictionary/cron.js +3 -0
  36. package/dictionary/cross-env.js +11 -0
  37. package/dictionary/cross-spawn-async.js +3 -0
  38. package/dictionary/curve25519.js +3 -0
  39. package/dictionary/data-preflight.js +7 -0
  40. package/dictionary/debug.js +3 -0
  41. package/dictionary/denymount.js +3 -0
  42. package/dictionary/diff.js +3 -0
  43. package/dictionary/drivelist.js +22 -0
  44. package/dictionary/ed25519.js +3 -0
  45. package/dictionary/ejs.js +3 -0
  46. package/dictionary/elasticsearch.js +3 -0
  47. package/dictionary/electron.js +17 -0
  48. package/dictionary/emailjs.js +3 -0
  49. package/dictionary/engine.io.js +3 -0
  50. package/dictionary/epoll.js +3 -0
  51. package/dictionary/errorhandler.js +7 -0
  52. package/dictionary/errors.js +7 -0
  53. package/dictionary/eslint.js +7 -0
  54. package/dictionary/etcher-image-write.js +3 -0
  55. package/dictionary/exceljs.js +21 -0
  56. package/dictionary/exiftool.exe.js +13 -0
  57. package/dictionary/exiftool.pl.js +13 -0
  58. package/dictionary/express-load.js +12 -0
  59. package/dictionary/express-session.js +3 -0
  60. package/dictionary/express.js +14 -0
  61. package/dictionary/extender.js +11 -0
  62. package/dictionary/extsprintf.js +3 -0
  63. package/dictionary/faye-websocket.js +3 -0
  64. package/dictionary/feathers.js +3 -0
  65. package/dictionary/findup-sync.js +3 -0
  66. package/dictionary/floordate.js +3 -0
  67. package/dictionary/fmt.js +3 -0
  68. package/dictionary/formidable.js +3 -0
  69. package/dictionary/fs-extra.js +3 -0
  70. package/dictionary/fsevents.js +3 -0
  71. package/dictionary/geoip-lite.js +7 -0
  72. package/dictionary/github.js +7 -0
  73. package/dictionary/gm.js +3 -0
  74. package/dictionary/google-closure-compiler-java.js +13 -0
  75. package/dictionary/google-closure-compiler.js +13 -0
  76. package/dictionary/googleapis.js +7 -0
  77. package/dictionary/got.js +3 -0
  78. package/dictionary/graceful-fs.js +19 -0
  79. package/dictionary/grpc.js +11 -0
  80. package/dictionary/gulp.js +3 -0
  81. package/dictionary/hap-nodejs.js +3 -0
  82. package/dictionary/heapdump.js +3 -0
  83. package/dictionary/hoek.js +3 -0
  84. package/dictionary/homebridge.js +3 -0
  85. package/dictionary/http-proxy.js +3 -0
  86. package/dictionary/http-server.js +3 -0
  87. package/dictionary/image-size.js +3 -0
  88. package/dictionary/indexof.js +3 -0
  89. package/dictionary/inquirer.js +3 -0
  90. package/dictionary/j.js +16 -0
  91. package/dictionary/jade.js +3 -0
  92. package/dictionary/jsdom.js +3 -0
  93. package/dictionary/json-stringify-date.js +3 -0
  94. package/dictionary/json-stringify-safe.js +3 -0
  95. package/dictionary/jsonwebtoken.js +3 -0
  96. package/dictionary/kerberos.js +3 -0
  97. package/dictionary/knex.js +7 -0
  98. package/dictionary/later.js +7 -0
  99. package/dictionary/level.js +3 -0
  100. package/dictionary/leveldown.js +10 -0
  101. package/dictionary/levelup.js +3 -0
  102. package/dictionary/liftoff.js +12 -0
  103. package/dictionary/lodash.js +3 -0
  104. package/dictionary/log4js.js +7 -0
  105. package/dictionary/logform.js +7 -0
  106. package/dictionary/machinepack-urls.js +7 -0
  107. package/dictionary/markdown.js +3 -0
  108. package/dictionary/mdns.js +6 -0
  109. package/dictionary/method-override.js +3 -0
  110. package/dictionary/microjob.js +16 -0
  111. package/dictionary/mime-types.js +3 -0
  112. package/dictionary/mime.js +3 -0
  113. package/dictionary/minimatch.js +3 -0
  114. package/dictionary/minstache.js +3 -0
  115. package/dictionary/module-deps.js +3 -0
  116. package/dictionary/moment-timezone.js +3 -0
  117. package/dictionary/moment.js +7 -0
  118. package/dictionary/mongodb-core.js +22 -0
  119. package/dictionary/mongodb.js +7 -0
  120. package/dictionary/mongoose.js +7 -0
  121. package/dictionary/mongoskin.js +7 -0
  122. package/dictionary/ms.js +3 -0
  123. package/dictionary/msgpack.js +3 -0
  124. package/dictionary/multer.js +3 -0
  125. package/dictionary/muri.js +3 -0
  126. package/dictionary/native-or-bluebird.js +3 -0
  127. package/dictionary/natives.js +3 -0
  128. package/dictionary/nconf.js +7 -0
  129. package/dictionary/nedb.js +3 -0
  130. package/dictionary/negotiator.js +7 -0
  131. package/dictionary/newrelic.js +3 -0
  132. package/dictionary/nib.js +3 -0
  133. package/dictionary/nightmare.js +18 -0
  134. package/dictionary/node-forge.js +7 -0
  135. package/dictionary/node-libcurl.js +3 -0
  136. package/dictionary/node-notifier.js +30 -0
  137. package/dictionary/node-pre-gyp.js +7 -0
  138. package/dictionary/node-redis-pubsub.js +3 -0
  139. package/dictionary/node-sass.js +3 -0
  140. package/dictionary/node-uuid.js +3 -0
  141. package/dictionary/node-xlsx.js +3 -0
  142. package/dictionary/node-zookeeper-client.js +7 -0
  143. package/dictionary/nodegit.js +7 -0
  144. package/dictionary/nodemailer-sendmail-transport.js +3 -0
  145. package/dictionary/nodemailer.js +3 -0
  146. package/dictionary/npm-registry-client.js +7 -0
  147. package/dictionary/npm.js +7 -0
  148. package/dictionary/nssocket.js +3 -0
  149. package/dictionary/oauth2orize.js +7 -0
  150. package/dictionary/octobat.js +3 -0
  151. package/dictionary/open.js +13 -0
  152. package/dictionary/opn.js +4 -0
  153. package/dictionary/optimist.js +3 -0
  154. package/dictionary/passport-local.js +3 -0
  155. package/dictionary/passport.js +3 -0
  156. package/dictionary/pg-cursor.js +3 -0
  157. package/dictionary/pg-query-stream.js +3 -0
  158. package/dictionary/pg-types.js +7 -0
  159. package/dictionary/pg.js +7 -0
  160. package/dictionary/pg.js.js +7 -0
  161. package/dictionary/pgpass.js +7 -0
  162. package/dictionary/phantom.js +19 -0
  163. package/dictionary/phantomjs-prebuilt.js +16 -0
  164. package/dictionary/pkginfo.js +3 -0
  165. package/dictionary/pm2.js +7 -0
  166. package/dictionary/pmx.js +3 -0
  167. package/dictionary/pouchdb.js +3 -0
  168. package/dictionary/primus-emitter.js +3 -0
  169. package/dictionary/primus-spark-latency.js +3 -0
  170. package/dictionary/primus.js +3 -0
  171. package/dictionary/publicsuffixlist.js +15 -0
  172. package/dictionary/pug.js +3 -0
  173. package/dictionary/punt.js +3 -0
  174. package/dictionary/puppeteer.js +13 -0
  175. package/dictionary/pwd.js +3 -0
  176. package/dictionary/q.js +3 -0
  177. package/dictionary/raven.js +3 -0
  178. package/dictionary/rc.js +12 -0
  179. package/dictionary/readable-stream.js +3 -0
  180. package/dictionary/rechoir.js +3 -0
  181. package/dictionary/redis-parser.js +3 -0
  182. package/dictionary/redis.js +3 -0
  183. package/dictionary/regression.js +3 -0
  184. package/dictionary/reload.js +7 -0
  185. package/dictionary/request.js +3 -0
  186. package/dictionary/require-uncached.js +3 -0
  187. package/dictionary/require_optional.js +3 -0
  188. package/dictionary/s3.js +3 -0
  189. package/dictionary/safe_datejs.js +3 -0
  190. package/dictionary/sails.js +33 -0
  191. package/dictionary/sax.js +3 -0
  192. package/dictionary/scrypt.js +3 -0
  193. package/dictionary/semver.js +3 -0
  194. package/dictionary/sequelize.js +7 -0
  195. package/dictionary/serialport.js +3 -0
  196. package/dictionary/sha3.js +3 -0
  197. package/dictionary/sharp.js +11 -0
  198. package/dictionary/shelljs.js +7 -0
  199. package/dictionary/sinon.js +3 -0
  200. package/dictionary/socket.io-client.js +13 -0
  201. package/dictionary/socket.io.js +12 -0
  202. package/dictionary/sqip.js +7 -0
  203. package/dictionary/sqlite3.js +7 -0
  204. package/dictionary/steam-crypto.js +7 -0
  205. package/dictionary/steam-resources.js +19 -0
  206. package/dictionary/steam.js +3 -0
  207. package/dictionary/stripe-webhook-middleware.js +3 -0
  208. package/dictionary/stripe.js +3 -0
  209. package/dictionary/strong-globalize.js +3 -0
  210. package/dictionary/stylus.js +14 -0
  211. package/dictionary/supervisor.js +3 -0
  212. package/dictionary/svgo.js +8 -0
  213. package/dictionary/tabtab.js +3 -0
  214. package/dictionary/tesseract.js.js +7 -0
  215. package/dictionary/thread-stream.js +7 -0
  216. package/dictionary/throng.js +3 -0
  217. package/dictionary/time.js +3 -0
  218. package/dictionary/tinify.js +7 -0
  219. package/dictionary/tiny-worker.js +7 -0
  220. package/dictionary/tmp.js +3 -0
  221. package/dictionary/transformers.js +3 -0
  222. package/dictionary/uglify-js.js +9 -0
  223. package/dictionary/umd.js +19 -0
  224. package/dictionary/underscore.js +3 -0
  225. package/dictionary/union.js +3 -0
  226. package/dictionary/update-notifier.js +3 -0
  227. package/dictionary/usage.js +7 -0
  228. package/dictionary/v8flags.js +13 -0
  229. package/dictionary/verror.js +3 -0
  230. package/dictionary/voc.js +3 -0
  231. package/dictionary/webdriverio.js +7 -0
  232. package/dictionary/winston-uber.js +7 -0
  233. package/dictionary/winston.js +7 -0
  234. package/dictionary/ws.js +3 -0
  235. package/dictionary/xlsx.js +16 -0
  236. package/dictionary/xml2js.js +3 -0
  237. package/dictionary/yargs.js +3 -0
  238. package/dictionary/zeromq.js +13 -0
  239. package/lib-es5/addon-extract.js +164 -0
  240. package/lib-es5/analyzer.js +687 -0
  241. package/lib-es5/app-bundle.js +133 -0
  242. package/lib-es5/appdir.js +265 -0
  243. package/lib-es5/bin.js +304 -0
  244. package/lib-es5/bootstrap.js +179 -0
  245. package/lib-es5/bundler.js +496 -0
  246. package/lib-es5/chmod.js +15 -0
  247. package/lib-es5/colors.js +12 -0
  248. package/lib-es5/commands.js +376 -0
  249. package/lib-es5/common.js +328 -0
  250. package/lib-es5/compress_type.js +10 -0
  251. package/lib-es5/config.js +291 -0
  252. package/lib-es5/detector.js +421 -0
  253. package/lib-es5/esm-hooks.js +366 -0
  254. package/lib-es5/esm-resolver.js +292 -0
  255. package/lib-es5/esm-transformer.js +378 -0
  256. package/lib-es5/exports-resolver.js +184 -0
  257. package/lib-es5/external-artifacts.js +170 -0
  258. package/lib-es5/fabricator.js +137 -0
  259. package/lib-es5/follow.js +190 -0
  260. package/lib-es5/help.js +52 -0
  261. package/lib-es5/index.d.ts +2 -0
  262. package/lib-es5/index.js +552 -0
  263. package/lib-es5/log.js +7 -0
  264. package/lib-es5/mach-o.js +262 -0
  265. package/lib-es5/manifest.js +21 -0
  266. package/lib-es5/options.js +19 -0
  267. package/lib-es5/packager.js +1036 -0
  268. package/lib-es5/packer.js +137 -0
  269. package/lib-es5/pe-metadata.js +130 -0
  270. package/lib-es5/producer.js +378 -0
  271. package/lib-es5/refiner.js +87 -0
  272. package/lib-es5/resolver.js +142 -0
  273. package/lib-es5/runtime-diagnostics.js +172 -0
  274. package/lib-es5/sea.js +307 -0
  275. package/lib-es5/snapshot-fs-patch.js +396 -0
  276. package/lib-es5/snapshot-fs.js +255 -0
  277. package/lib-es5/snapshot-index.js +135 -0
  278. package/lib-es5/snapshot-path.js +168 -0
  279. package/lib-es5/types.js +9 -0
  280. package/lib-es5/walker.js +1019 -0
  281. package/lib-es5/windows-sign.js +139 -0
  282. package/package.json +99 -0
  283. package/prelude/bootstrap.js +2263 -0
  284. package/prelude/diagnostic.js +147 -0
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ /**
3
+ * Windows Authenticode Signing
4
+ *
5
+ * Signs Windows PE executables (.exe) using Authenticode via signtool.exe
6
+ * (Windows SDK) or osslsigncode (cross-platform, for signing from
7
+ * macOS/Linux CI).
8
+ *
9
+ * Signing is opt-in: when no certificate is configured, Hakobu produces
10
+ * unsigned executables (which is the normal case for local development).
11
+ *
12
+ * Environment variables:
13
+ * HAKOBU_WIN_CERT - Path to .pfx/.p12 certificate file
14
+ * HAKOBU_WIN_CERT_PASSWORD - Certificate password
15
+ * HAKOBU_WIN_TIMESTAMP_URL - Timestamp server URL (default: http://timestamp.digicert.com)
16
+ *
17
+ * See docs/windows-signing.md for full setup instructions.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.signWindowsExecutable = exports.hasWindowsSigningCredentials = void 0;
21
+ const child_process_1 = require("child_process");
22
+ const log_1 = require("./log");
23
+ // ─────────────────────────────────────────────────────────────────────
24
+ // Configuration
25
+ // ─────────────────────────────────────────────────────────────────────
26
+ const DEFAULT_TIMESTAMP_URL = 'http://timestamp.digicert.com';
27
+ // ─────────────────────────────────────────────────────────────────────
28
+ // Signing
29
+ // ─────────────────────────────────────────────────────────────────────
30
+ /**
31
+ * Check whether Windows signing credentials are configured.
32
+ * Returns true if a certificate path is available (via option or env var).
33
+ */
34
+ function hasWindowsSigningCredentials(certPath) {
35
+ return !!(certPath || process.env.HAKOBU_WIN_CERT);
36
+ }
37
+ exports.hasWindowsSigningCredentials = hasWindowsSigningCredentials;
38
+ /**
39
+ * Sign a Windows PE executable with Authenticode.
40
+ *
41
+ * Tries signtool.exe first (available on Windows with Windows SDK),
42
+ * then falls back to osslsigncode (available cross-platform via
43
+ * brew/apt/choco).
44
+ *
45
+ * @throws If signing credentials are missing or both tools fail.
46
+ */
47
+ function signWindowsExecutable(opts) {
48
+ const certPath = opts.certPath || process.env.HAKOBU_WIN_CERT;
49
+ const certPassword = opts.certPassword || process.env.HAKOBU_WIN_CERT_PASSWORD;
50
+ const timestampUrl = opts.timestampUrl || process.env.HAKOBU_WIN_TIMESTAMP_URL || DEFAULT_TIMESTAMP_URL;
51
+ if (!certPath) {
52
+ throw new Error('Cannot sign Windows executable: no certificate configured.\n' +
53
+ 'Set HAKOBU_WIN_CERT to the path of your .pfx/.p12 file.\n' +
54
+ 'See docs/windows-signing.md for setup instructions.');
55
+ }
56
+ // Try signtool.exe (Windows SDK)
57
+ if (trySigntool(opts.executable, certPath, certPassword, timestampUrl)) {
58
+ return;
59
+ }
60
+ // Fall back to osslsigncode (cross-platform)
61
+ if (tryOsslsigncode(opts.executable, certPath, certPassword, timestampUrl)) {
62
+ return;
63
+ }
64
+ throw new Error('Authenticode signing failed: neither signtool.exe nor osslsigncode found.\n' +
65
+ 'On Windows: install Windows SDK (provides signtool.exe).\n' +
66
+ 'On macOS/Linux: install osslsigncode (brew install osslsigncode / apt install osslsigncode).\n' +
67
+ 'See docs/windows-signing.md for details.');
68
+ }
69
+ exports.signWindowsExecutable = signWindowsExecutable;
70
+ /**
71
+ * Try signing with signtool.exe (Windows SDK).
72
+ * Returns true on success, false if signtool is not available.
73
+ */
74
+ function trySigntool(executable, certPath, certPassword, timestampUrl) {
75
+ const args = [
76
+ 'sign',
77
+ '/f', certPath,
78
+ '/fd', 'SHA256',
79
+ '/tr', timestampUrl,
80
+ '/td', 'SHA256',
81
+ ];
82
+ if (certPassword) {
83
+ args.push('/p', certPassword);
84
+ }
85
+ args.push(executable);
86
+ try {
87
+ (0, child_process_1.execFileSync)('signtool', args, { stdio: 'pipe' });
88
+ log_1.log.info(`Signed ${executable} with signtool (Authenticode SHA-256)`);
89
+ return true;
90
+ }
91
+ catch (err) {
92
+ // ENOENT means signtool not found — fall through to osslsigncode
93
+ if (err.code === 'ENOENT')
94
+ return false;
95
+ // signtool found but signing failed — throw
96
+ throw new Error(`signtool signing failed: ${err.message}\n` +
97
+ 'Check that your certificate is valid and the password is correct.');
98
+ }
99
+ }
100
+ /**
101
+ * Try signing with osslsigncode (cross-platform Authenticode signing).
102
+ * Returns true on success, false if osslsigncode is not available.
103
+ */
104
+ function tryOsslsigncode(executable, certPath, certPassword, timestampUrl) {
105
+ // osslsigncode signs in-place by writing to a temp file and replacing.
106
+ // Use -in and -out with the same file via a temp intermediate.
107
+ const tmpOut = executable + '.signed';
108
+ const args = [
109
+ 'sign',
110
+ '-pkcs12', certPath,
111
+ '-h', 'sha256',
112
+ '-ts', timestampUrl,
113
+ '-in', executable,
114
+ '-out', tmpOut,
115
+ ];
116
+ if (certPassword) {
117
+ args.push('-pass', certPassword);
118
+ }
119
+ try {
120
+ (0, child_process_1.execFileSync)('osslsigncode', args, { stdio: 'pipe' });
121
+ // Replace original with signed version
122
+ const fs = require('fs');
123
+ fs.renameSync(tmpOut, executable);
124
+ log_1.log.info(`Signed ${executable} with osslsigncode (Authenticode SHA-256)`);
125
+ return true;
126
+ }
127
+ catch (err) {
128
+ // Clean up temp file on failure
129
+ try {
130
+ require('fs').unlinkSync(tmpOut);
131
+ }
132
+ catch { }
133
+ if (err.code === 'ENOENT')
134
+ return false;
135
+ throw new Error(`osslsigncode signing failed: ${err.message}\n` +
136
+ 'Check that your certificate is valid and the password is correct.');
137
+ }
138
+ }
139
+ //# sourceMappingURL=windows-sign.js.map
package/package.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "name": "@hakobu/hakobu",
3
+ "version": "1.0.0",
4
+ "description": "Package your Node.js project into an executable",
5
+ "main": "lib-es5/index.js",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git@github.com:hakobujs/hakobu.git",
10
+ "directory": "packages/hakobu"
11
+ },
12
+ "types": "lib-es5/index.d.ts",
13
+ "bin": {
14
+ "hakobu": "lib-es5/bin.js"
15
+ },
16
+ "files": [
17
+ "lib-es5/*.js",
18
+ "lib-es5/index.d.ts",
19
+ "dictionary/*.js",
20
+ "prelude/*.js"
21
+ ],
22
+ "prettier": {
23
+ "singleQuote": true
24
+ },
25
+ "dependencies": {
26
+ "@babel/generator": "^7.23.0",
27
+ "@babel/parser": "^7.23.0",
28
+ "@babel/traverse": "^7.23.0",
29
+ "@babel/types": "^7.23.0",
30
+ "esbuild": "^0.27.3",
31
+ "into-stream": "^9.1.0",
32
+ "minimist": "^1.2.6",
33
+ "multistream": "^4.1.0",
34
+ "picocolors": "^1.1.0",
35
+ "picomatch": "^4.0.2",
36
+ "prebuild-install": "^7.1.1",
37
+ "resedit": "^3.0.2",
38
+ "resolve": "^1.22.10",
39
+ "resolve.exports": "^2.0.3",
40
+ "stream-meter": "^1.0.4",
41
+ "tar": "^7.5.7",
42
+ "tinyglobby": "^0.2.11",
43
+ "unzipper": "^0.12.3",
44
+ "@hakobu/hakobu-fetch": "1.0.0"
45
+ },
46
+ "optionalDependencies": {
47
+ "rolldown": "^1.0.0-rc.1"
48
+ },
49
+ "devDependencies": {
50
+ "@release-it/conventional-changelog": "^10.0.5",
51
+ "@types/babel__generator": "^7.6.5",
52
+ "@types/babel__traverse": "^7.20.3",
53
+ "@types/minimist": "^1.2.2",
54
+ "@types/multistream": "^4.1.0",
55
+ "@types/node": "^20.0.0",
56
+ "@types/picomatch": "^3.0.1",
57
+ "@types/resolve": "^1.20.2",
58
+ "@types/stream-meter": "^0.0.22",
59
+ "@types/tar": "^6.1.13",
60
+ "@types/unzipper": "^0.10.10",
61
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
62
+ "@typescript-eslint/parser": "^8.0.0",
63
+ "esbuild-register": "^3.6.0",
64
+ "eslint": "^9.0.0",
65
+ "eslint-config-airbnb-base": "^15.0.0",
66
+ "eslint-config-airbnb-typescript": "^18.0.0",
67
+ "eslint-config-prettier": "^10.0.0",
68
+ "eslint-plugin-import": "^2.31.0",
69
+ "globals": "^17.3.0",
70
+ "json-stable-stringify": "^1.0.1",
71
+ "lint-staged": "^15.0.0",
72
+ "prettier": "^3.0.3",
73
+ "release-it": "^19.2.4",
74
+ "rimraf": "^6.1.2",
75
+ "simple-git-hooks": "^2.11.1",
76
+ "typescript": "^4.7.2"
77
+ },
78
+ "lint-staged": {
79
+ "*.{js,css,md,json}": "prettier --write"
80
+ },
81
+ "publishConfig": {
82
+ "access": "public"
83
+ },
84
+ "engines": {
85
+ "node": ">=24.0.0"
86
+ },
87
+ "scripts": {
88
+ "clean": "rimraf lib-es5",
89
+ "build": "npm run clean && tsc",
90
+ "start": "tsc --watch",
91
+ "lint": "npm run lint:style && npm run lint:code",
92
+ "lint:style": "prettier -c \"{lib,prelude,test}/**/*.{ts,js}\"",
93
+ "lint:code": "eslint lib prelude test",
94
+ "fix": "npm run lint:style -- -w && npm run lint:code -- --fix",
95
+ "test": "npm run build && npm run test:host && npm run test:24",
96
+ "test:24": "node test/test.js node24 no-npm",
97
+ "test:host": "node test/test.js host only-npm"
98
+ }
99
+ }