diff --git a/packages/typescript/package.json b/packages/typescript/package.json index dd5b609a..e38b4472 100644 --- a/packages/typescript/package.json +++ b/packages/typescript/package.json @@ -24,23 +24,23 @@ }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", - "@metamask/eslint-config": "^12.0.0", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", + "@metamask/eslint-config": "^12.2.0", + "@typescript-eslint/eslint-plugin": "^8.1.0", + "@typescript-eslint/parser": "^8.1.0", "eslint": "^8.57.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-import": "~2.26.0", "eslint-plugin-jsdoc": "^47.0.2", "eslint-plugin-prettier": "^4.2.1", "prettier": "^2.7.1", - "typescript": "~5.4.3" + "typescript": "~5.5.4" }, "peerDependencies": { "@metamask/eslint-config": "^12.2.0", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", + "@typescript-eslint/eslint-plugin": "^8.1.0", + "@typescript-eslint/parser": "^8.1.0", "eslint": "^8.57.0", - "typescript": "~4.8.4 || ~5.0 || ~5.1 || ~5.2 || ~5.3 || ~5.4" + "typescript": ">=4.8.4 <5.6" }, "engines": { "node": "^16.20 || ^18.18 || >=20" diff --git a/packages/typescript/rules-snapshot.json b/packages/typescript/rules-snapshot.json index a6585d6c..d663b6bf 100644 --- a/packages/typescript/rules-snapshot.json +++ b/packages/typescript/rules-snapshot.json @@ -2,7 +2,6 @@ "@typescript-eslint/array-type": "error", "@typescript-eslint/await-thenable": "error", "@typescript-eslint/ban-ts-comment": "error", - "@typescript-eslint/ban-types": "error", "@typescript-eslint/consistent-type-assertions": "error", "@typescript-eslint/consistent-type-definitions": ["error", "type"], "@typescript-eslint/consistent-type-exports": "error", @@ -75,16 +74,17 @@ } ], "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-array-delete": "error", "@typescript-eslint/no-base-to-string": "error", "@typescript-eslint/no-dupe-class-members": "error", "@typescript-eslint/no-duplicate-enum-values": "error", "@typescript-eslint/no-duplicate-type-constituents": "error", + "@typescript-eslint/no-empty-object-type": "error", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-extra-non-null-assertion": "error", "@typescript-eslint/no-floating-promises": "error", "@typescript-eslint/no-for-in-array": "error", "@typescript-eslint/no-implied-eval": "error", - "@typescript-eslint/no-loss-of-precision": "error", "@typescript-eslint/no-meaningless-void-operator": "error", "@typescript-eslint/no-misused-new": "error", "@typescript-eslint/no-misused-promises": "error", @@ -105,7 +105,6 @@ } ], "@typescript-eslint/no-this-alias": "error", - "@typescript-eslint/no-throw-literal": "error", "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", "@typescript-eslint/no-unnecessary-qualifier": "error", "@typescript-eslint/no-unnecessary-type-arguments": "error", @@ -116,8 +115,10 @@ "@typescript-eslint/no-unsafe-call": "off", "@typescript-eslint/no-unsafe-declaration-merging": "error", "@typescript-eslint/no-unsafe-enum-comparison": "error", + "@typescript-eslint/no-unsafe-function-type": "error", "@typescript-eslint/no-unsafe-member-access": "off", "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unsafe-unary-minus": "error", "@typescript-eslint/no-unused-expressions": [ "error", { @@ -141,15 +142,18 @@ } ], "@typescript-eslint/no-useless-constructor": "error", - "@typescript-eslint/no-var-requires": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/only-throw-error": "error", "@typescript-eslint/parameter-properties": "error", "@typescript-eslint/prefer-as-const": "error", "@typescript-eslint/prefer-enum-initializers": "error", "@typescript-eslint/prefer-for-of": "error", "@typescript-eslint/prefer-function-type": "error", "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", "@typescript-eslint/prefer-nullish-coalescing": "error", "@typescript-eslint/prefer-optional-chain": "error", + "@typescript-eslint/prefer-promise-reject-errors": "error", "@typescript-eslint/prefer-readonly": "error", "@typescript-eslint/prefer-reduce-type-parameter": "error", "@typescript-eslint/prefer-string-starts-ends-with": "error", @@ -187,7 +191,7 @@ "no-func-assign": "off", "no-implied-eval": "off", "no-import-assign": "off", - "no-loss-of-precision": "off", + "no-new-native-nonconstructor": "off", "no-new-symbol": "off", "no-obj-calls": "off", "no-redeclare": "off", @@ -211,6 +215,7 @@ "no-useless-constructor": "off", "no-var": "error", "prefer-const": "error", + "prefer-promise-reject-errors": "off", "prefer-rest-params": "error", "prefer-spread": "error", "require-await": "off" diff --git a/packages/typescript/src/index.js b/packages/typescript/src/index.js index 68d95c9c..7edc6c78 100644 --- a/packages/typescript/src/index.js +++ b/packages/typescript/src/index.js @@ -48,7 +48,6 @@ module.exports = { ], '@typescript-eslint/no-non-null-assertion': 'error', '@typescript-eslint/parameter-properties': 'error', - '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/prefer-for-of': 'error', '@typescript-eslint/prefer-function-type': 'error', '@typescript-eslint/prefer-optional-chain': 'error', @@ -167,10 +166,6 @@ module.exports = { 'no-shadow': 'off', '@typescript-eslint/no-shadow': ['error', { builtinGlobals: true }], - 'no-throw-literal': 'off', - '@typescript-eslint/no-throw-literal': 'error', - - 'no-unused-expressions': 'off', '@typescript-eslint/no-unused-expressions': [ 'error', { allowShortCircuit: true, allowTernary: true }, diff --git a/yarn.lock b/yarn.lock index 7f29de9b..1b2202e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -438,7 +438,14 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.0, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.10.0": + version: 4.11.0 + resolution: "@eslint-community/regexpp@npm:4.11.0" + checksum: 97d2fe46690b69417a551bd19a3dc53b6d9590d2295c43cc4c4e44e64131af541e2f4a44d5c12e87de990403654d3dae9d33600081f3a2f0386b368abc9111ec + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.6.0, @eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b @@ -1006,22 +1013,22 @@ __metadata: resolution: "@metamask/eslint-config-typescript@workspace:packages/typescript" dependencies: "@metamask/auto-changelog": ^3.4.4 - "@metamask/eslint-config": ^12.0.0 - "@typescript-eslint/eslint-plugin": ^6.21.0 - "@typescript-eslint/parser": ^6.21.0 + "@metamask/eslint-config": ^12.2.0 + "@typescript-eslint/eslint-plugin": ^8.1.0 + "@typescript-eslint/parser": ^8.1.0 eslint: ^8.57.0 eslint-config-prettier: ^8.5.0 eslint-plugin-import: ~2.26.0 eslint-plugin-jsdoc: ^47.0.2 eslint-plugin-prettier: ^4.2.1 prettier: ^2.7.1 - typescript: ~5.4.3 + typescript: ~5.5.4 peerDependencies: "@metamask/eslint-config": ^12.2.0 - "@typescript-eslint/eslint-plugin": ^6.21.0 - "@typescript-eslint/parser": ^6.21.0 + "@typescript-eslint/eslint-plugin": ^8.1.0 + "@typescript-eslint/parser": ^8.1.0 eslint: ^8.57.0 - typescript: ~4.8.4 || ~5.0 || ~5.1 || ~5.2 || ~5.3 || ~5.4 + typescript: ">=4.8.4 <5.6" languageName: unknown linkType: soft @@ -1385,7 +1392,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 @@ -1413,7 +1420,7 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": +"@types/semver@npm:^7.3.12": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 @@ -1443,46 +1450,44 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" +"@typescript-eslint/eslint-plugin@npm:^8.1.0": + version: 8.1.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.1.0" dependencies: - "@eslint-community/regexpp": ^4.5.1 - "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/type-utils": 6.21.0 - "@typescript-eslint/utils": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 - debug: ^4.3.4 + "@eslint-community/regexpp": ^4.10.0 + "@typescript-eslint/scope-manager": 8.1.0 + "@typescript-eslint/type-utils": 8.1.0 + "@typescript-eslint/utils": 8.1.0 + "@typescript-eslint/visitor-keys": 8.1.0 graphemer: ^1.4.0 - ignore: ^5.2.4 + ignore: ^5.3.1 natural-compare: ^1.4.0 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 + ts-api-utils: ^1.3.0 peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 5ef2c502255e643e98051e87eb682c2a257e87afd8ec3b9f6274277615e1c2caf3131b352244cfb1987b8b2c415645eeacb9113fa841fc4c9b2ac46e8aed6efd + checksum: e50e552ca531a4587e7976199320614758fe80c6c83c7f6780d8fe121856e99462cbee319136475be4b9ccec2ea13af347cf5a8e97c234f7c0afd28cb9867aca languageName: node linkType: hard -"@typescript-eslint/parser@npm:^6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/parser@npm:6.21.0" +"@typescript-eslint/parser@npm:^8.1.0": + version: 8.1.0 + resolution: "@typescript-eslint/parser@npm:8.1.0" dependencies: - "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/typescript-estree": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 + "@typescript-eslint/scope-manager": 8.1.0 + "@typescript-eslint/types": 8.1.0 + "@typescript-eslint/typescript-estree": 8.1.0 + "@typescript-eslint/visitor-keys": 8.1.0 debug: ^4.3.4 peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 162fe3a867eeeffda7328bce32dae45b52283c68c8cb23258fb9f44971f761991af61f71b8c9fe1aa389e93dfe6386f8509c1273d870736c507d76dd40647b68 + checksum: 17337b6b70f9b1f95bd161bf4e7a358714b2eca1e377857e0de0ba23be576fcb939cac74c497e447935cb771705f41e2dc7771b5e74308d73d9f29f05e6f1b3f languageName: node linkType: hard @@ -1496,30 +1501,28 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/scope-manager@npm:6.21.0" +"@typescript-eslint/scope-manager@npm:8.1.0": + version: 8.1.0 + resolution: "@typescript-eslint/scope-manager@npm:8.1.0" dependencies: - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 - checksum: 71028b757da9694528c4c3294a96cc80bc7d396e383a405eab3bc224cda7341b88e0fc292120b35d3f31f47beac69f7083196c70616434072fbcd3d3e62d3376 + "@typescript-eslint/types": 8.1.0 + "@typescript-eslint/visitor-keys": 8.1.0 + checksum: 7febb23f480802ecce3c99988392ce77187f14b06e384de0d246880493e58de878d3c4eac465899fe2dcd55617e71c6b978547844402f05d2f152c25dcbc8b19 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/type-utils@npm:6.21.0" +"@typescript-eslint/type-utils@npm:8.1.0": + version: 8.1.0 + resolution: "@typescript-eslint/type-utils@npm:8.1.0" dependencies: - "@typescript-eslint/typescript-estree": 6.21.0 - "@typescript-eslint/utils": 6.21.0 + "@typescript-eslint/typescript-estree": 8.1.0 + "@typescript-eslint/utils": 8.1.0 debug: ^4.3.4 - ts-api-utils: ^1.0.1 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + ts-api-utils: ^1.3.0 peerDependenciesMeta: typescript: optional: true - checksum: 77025473f4d80acf1fafcce99c5c283e557686a61861febeba9c9913331f8a41e930bf5cd8b7a54db502a57b6eb8ea6d155cbd4f41349ed00e3d7aeb1f477ddc + checksum: 226938167fb43c39df98d7fd875404fab862783113e9fac381725b4b45bdbbc6e8bc618057ecfd9a0a5ce724c9bf673ccdf10c9832eae22852d5576bcf119a47 languageName: node linkType: hard @@ -1530,10 +1533,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/types@npm:6.21.0" - checksum: 9501b47d7403417af95fc1fb72b2038c5ac46feac0e1598a46bcb43e56a606c387e9dcd8a2a0abe174c91b509f2d2a8078b093786219eb9a01ab2fbf9ee7b684 +"@typescript-eslint/types@npm:8.1.0": + version: 8.1.0 + resolution: "@typescript-eslint/types@npm:8.1.0" + checksum: 90c5177e2afe8be97fbeda49702cc37a17dd0c3537f9b43d72ae22fcdf76f505676579ced13e2cd2708e4cc4f7347872c76a0c8751f354de6874417f0fadbb76 languageName: node linkType: hard @@ -1555,39 +1558,36 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" +"@typescript-eslint/typescript-estree@npm:8.1.0": + version: 8.1.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.1.0" dependencies: - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 + "@typescript-eslint/types": 8.1.0 + "@typescript-eslint/visitor-keys": 8.1.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 - minimatch: 9.0.3 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 + minimatch: ^9.0.4 + semver: ^7.6.0 + ts-api-utils: ^1.3.0 peerDependenciesMeta: typescript: optional: true - checksum: dec02dc107c4a541e14fb0c96148f3764b92117c3b635db3a577b5a56fc48df7a556fa853fb82b07c0663b4bf2c484c9f245c28ba3e17e5cb0918ea4cab2ea21 + checksum: 5174ac942436d251037a2b3f8935337234ca538674ccfbe755b429ea4f7589c2eb6cd2dbcae5a5a9aee4f7a58fc47ec38b644d3838fbf0510634a4e60bc8f38b languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/utils@npm:6.21.0" +"@typescript-eslint/utils@npm:8.1.0": + version: 8.1.0 + resolution: "@typescript-eslint/utils@npm:8.1.0" dependencies: "@eslint-community/eslint-utils": ^4.4.0 - "@types/json-schema": ^7.0.12 - "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/typescript-estree": 6.21.0 - semver: ^7.5.4 + "@typescript-eslint/scope-manager": 8.1.0 + "@typescript-eslint/types": 8.1.0 + "@typescript-eslint/typescript-estree": 8.1.0 peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: b129b3a4aebec8468259f4589985cb59ea808afbfdb9c54f02fad11e17d185e2bf72bb332f7c36ec3c09b31f18fc41368678b076323e6e019d06f74ee93f7bf2 + eslint: ^8.57.0 || ^9.0.0 + checksum: b4532aaf76a1314a08f95be7682066c20cd6ff9baa078975f5c4e379c113befd69ace697aead692717a6c5396385bcb7886fec8454c7dd811f875fe08d67b8dd languageName: node linkType: hard @@ -1619,13 +1619,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" +"@typescript-eslint/visitor-keys@npm:8.1.0": + version: 8.1.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.1.0" dependencies: - "@typescript-eslint/types": 6.21.0 - eslint-visitor-keys: ^3.4.1 - checksum: 67c7e6003d5af042d8703d11538fca9d76899f0119130b373402819ae43f0bc90d18656aa7add25a24427ccf1a0efd0804157ba83b0d4e145f06107d7d1b7433 + "@typescript-eslint/types": 8.1.0 + eslint-visitor-keys: ^3.4.3 + checksum: 4dedea4009ee6e782ca14d0a1bfd2d6e763c0834fde976a99a8c32befba7dffbaa694c27a3d5dae8aea628278f96e06199eb6a7fb0bf19511815825f76eb04b4 languageName: node linkType: hard @@ -3655,6 +3655,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.3.1": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be + languageName: node + linkType: hard + "import-fresh@npm:^3.2.1": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" @@ -4755,15 +4762,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: ^2.0.1 - checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 - languageName: node - linkType: hard - "minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -4782,6 +4780,24 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: ^2.0.1 + checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 + languageName: node + linkType: hard + "minimist@npm:^1.2.0, minimist@npm:^1.2.6": version: 1.2.6 resolution: "minimist@npm:1.2.6" @@ -6089,7 +6105,7 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.0.1": +"ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" peerDependencies: @@ -6176,23 +6192,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~5.4.3": - version: 5.4.3 - resolution: "typescript@npm:5.4.3" +"typescript@npm:~5.5.4": + version: 5.5.4 + resolution: "typescript@npm:5.5.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: d74d731527e35e64d8d2dcf2f897cf8cfbc3428be0ad7c48434218ba4ae41239f53be7c90714089db1068c05cae22436af2ecba71fd36ecc5e7a9118af060198 + checksum: b309040f3a1cd91c68a5a58af6b9fdd4e849b8c42d837b2c2e73f9a4f96a98c4f1ed398a9aab576ee0a4748f5690cf594e6b99dbe61de7839da748c41e6d6ca8 languageName: node linkType: hard -"typescript@patch:typescript@~5.4.3#~builtin": - version: 5.4.3 - resolution: "typescript@patch:typescript@npm%3A5.4.3#~builtin::version=5.4.3&hash=701156" +"typescript@patch:typescript@~5.5.4#~builtin": + version: 5.5.4 + resolution: "typescript@patch:typescript@npm%3A5.5.4#~builtin::version=5.5.4&hash=701156" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 3a62fe90aa79d68c9ce38ea5edb2957e62801c733b99f0e5a2b8b50922761f68f7d9a40d28c544b449866e81185cddb93cba2496d0ff3fa52ef5b1f8bcace38c + checksum: fc52962f31a5bcb716d4213bef516885e4f01f30cea797a831205fc9ef12b405a40561c40eae3127ab85ba1548e7df49df2bcdee6b84a94bfbe3a0d7eff16b14 languageName: node linkType: hard