Adjust bundles (no @polkadot/networks) (#3754)

This commit is contained in:
Jaco
2021-07-09 15:33:23 +03:00
committed by GitHub
parent f0778b613f
commit 081f223bb2
13 changed files with 132 additions and 113 deletions

View File

@@ -15,7 +15,7 @@ Changes:
- Add `BlockNumberFor` type mapping
- Add Westend 9080 upgrade block
- Add `derive.crowdloan.contributions(paraId)`
- Allow building as a completely stand-alone browser bundle
- Allow building as a completely stand-alone browser bundle (experimental)
- Update to latest `@polkadot/x-rxjs` with RxJs 7.2

View File

@@ -22,7 +22,7 @@
"@babel/runtime": "^7.14.6",
"@polkadot/api": "4.17.2-17",
"@polkadot/types": "4.17.2-17",
"@polkadot/util": "^6.11.2-13",
"@polkadot/util": "^6.11.2-14",
"rxjs": "^7.2.0"
}
}

View File

@@ -23,12 +23,12 @@
"@polkadot/api": "4.17.2-17",
"@polkadot/rpc-core": "4.17.2-17",
"@polkadot/types": "4.17.2-17",
"@polkadot/util": "^6.11.2-13",
"@polkadot/util-crypto": "^6.11.2-13",
"@polkadot/util": "^6.11.2-14",
"@polkadot/util-crypto": "^6.11.2-14",
"rxjs": "^7.2.0"
},
"devDependencies": {
"@polkadot/keyring": "^6.11.2-13",
"@polkadot/keyring": "^6.11.2-14",
"@polkadot/rpc-provider": "4.17.2-17"
}
}

View File

@@ -21,13 +21,13 @@
"dependencies": {
"@babel/runtime": "^7.14.6",
"@polkadot/api-derive": "4.17.2-17",
"@polkadot/keyring": "^6.11.2-13",
"@polkadot/keyring": "^6.11.2-14",
"@polkadot/rpc-core": "4.17.2-17",
"@polkadot/rpc-provider": "4.17.2-17",
"@polkadot/types": "4.17.2-17",
"@polkadot/types-known": "4.17.2-17",
"@polkadot/util": "^6.11.2-13",
"@polkadot/util-crypto": "^6.11.2-13",
"@polkadot/util": "^6.11.2-14",
"@polkadot/util-crypto": "^6.11.2-14",
"eventemitter3": "^4.0.7",
"rxjs": "^7.2.0"
}

View File

@@ -22,10 +22,10 @@
"@babel/runtime": "^7.14.6",
"@polkadot/rpc-provider": "4.17.2-17",
"@polkadot/types": "4.17.2-17",
"@polkadot/util": "^6.11.2-13",
"@polkadot/util": "^6.11.2-14",
"rxjs": "^7.2.0"
},
"devDependencies": {
"@polkadot/keyring": "^6.11.2-13"
"@polkadot/keyring": "^6.11.2-14"
}
}

View File

@@ -21,15 +21,15 @@
"dependencies": {
"@babel/runtime": "^7.14.6",
"@polkadot/types": "4.17.2-17",
"@polkadot/util": "^6.11.2-13",
"@polkadot/util-crypto": "^6.11.2-13",
"@polkadot/x-fetch": "^6.11.2-13",
"@polkadot/x-global": "^6.11.2-13",
"@polkadot/x-ws": "^6.11.2-13",
"@polkadot/util": "^6.11.2-14",
"@polkadot/util-crypto": "^6.11.2-14",
"@polkadot/x-fetch": "^6.11.2-14",
"@polkadot/x-global": "^6.11.2-14",
"@polkadot/x-ws": "^6.11.2-14",
"eventemitter3": "^4.0.7"
},
"devDependencies": {
"@polkadot/keyring": "^6.11.2-13",
"@polkadot/keyring": "^6.11.2-14",
"@polkadot/types": "4.17.2-17",
"mock-socket": "^9.0.3",
"nock": "^13.1.1"

View File

@@ -32,7 +32,7 @@
"@polkadot/api": "4.17.2-17",
"@polkadot/rpc-provider": "4.17.2-17",
"@polkadot/types": "4.17.2-17",
"@polkadot/util": "^6.11.2-13",
"@polkadot/util": "^6.11.2-14",
"handlebars": "^4.7.7",
"websocket": "^1.0.34",
"yargs": "^17.0.1"

View File

@@ -20,8 +20,8 @@
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/types-known#readme",
"dependencies": {
"@babel/runtime": "^7.14.6",
"@polkadot/networks": "^6.11.2-13",
"@polkadot/networks": "^6.11.2-14",
"@polkadot/types": "4.17.2-17",
"@polkadot/util": "^6.11.2-13"
"@polkadot/util": "^6.11.2-14"
}
}

View File

@@ -4,13 +4,15 @@
import type { ChainUpgrades } from '@polkadot/types/types';
import type { ChainUpgradesRaw } from './types';
import networks from '@polkadot/networks';
import { selectableNetworks } from '@polkadot/networks';
import { assert, BN, hexToU8a, stringify } from '@polkadot/util';
import kusama from './kusama';
import polkadot from './polkadot';
import westend from './westend';
const allKnown = { kusama, polkadot, westend };
// testnets are not available in the networks map
const NET_EXTRA: Record<string, { genesisHash: string[] }> = {
westend: {
@@ -35,7 +37,7 @@ function checkOrder (network: string, versions: ChainUpgradesRaw): [number, numb
/** @internal */
function mapRaw ([network, versions]: [string, ChainUpgradesRaw]): ChainUpgrades {
const chain = networks.find((n) => n.network === network) || NET_EXTRA[network];
const chain = selectableNetworks.find((n) => n.network === network) || NET_EXTRA[network];
assert(chain, () => `Unable to find info for chain ${network}`);
@@ -50,6 +52,6 @@ function mapRaw ([network, versions]: [string, ChainUpgradesRaw]): ChainUpgrades
}
// Type overrides for specific spec types & versions as given in runtimeVersion
const upgrades = Object.entries({ kusama, polkadot, westend }).map(mapRaw);
const upgrades = Object.entries(allKnown).map(mapRaw);
export default upgrades;

View File

@@ -20,12 +20,12 @@
"homepage": "https://github.com/polkadot-js/api/tree/master/packages/types#readme",
"dependencies": {
"@babel/runtime": "^7.14.6",
"@polkadot/util": "^6.11.2-13",
"@polkadot/util-crypto": "^6.11.2-13",
"@polkadot/util": "^6.11.2-14",
"@polkadot/util-crypto": "^6.11.2-14",
"rxjs": "^7.2.0"
},
"devDependencies": {
"@polkadot/keyring": "^6.11.2-13",
"@polkadot/keyring": "^6.11.2-14",
"@types/bn.js": "^4.11.6",
"bn.js": "^4.11.9"
}

View File

@@ -14,7 +14,6 @@ const pkgs = [
const external = [
...pkgs,
'@polkadot/keyring',
'@polkadot/networks',
'@polkadot/util',
'@polkadot/util-crypto'
];
@@ -22,7 +21,10 @@ const external = [
const entries = ['api-derive', 'rpc-core', 'rpc-provider', 'types-known'].reduce((all, p) => ({
...all,
[`@polkadot/${p}`]: path.resolve(process.cwd(), `packages/${p}/build/bundle.js`)
}), {});
}), {
// re-exported in @polkadot/util-crypto, map directly
'@polkadot/networks': '@polkadot/util-crypto'
});
const overrides = {};

View File

@@ -2,34 +2,49 @@
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style></style>
<title>Bundler tests</title>
<style>
pre {
margin: 0.5rem 0;
}
pre.header {
background: #ddd;
margin-top: 1.5rem;
padding: 0.25rem 0.75rem;
}
</style>
</head>
<body>
Executing bundle tests, see the dev console for output ...
<script>
function log (label, result) {
label.startsWith('*')
? console.log(label)
: console.log(label.padStart(24), '=', result);
const pre = document.createElement('pre');
if (typeof result !== 'undefined') {
pre.innerHTML = `${label.padStart(24)} = ${result}`;
} else {
pre.innerHTML = label;
pre.className = 'header';
}
document.body.appendChild(pre);
}
</script>
<script src="node_modules/@polkadot/util/bundle-polkadot-util.js"></script>
<script src="node_modules/@polkadot/networks/bundle-polkadot-networks.js"></script>
<script src="node_modules/@polkadot/util-crypto/bundle-polkadot-util-crypto.js"></script>
<script src="node_modules/@polkadot/keyring/bundle-polkadot-keyring.js"></script>
<script src="packages/types/build/bundle-polkadot-types.js"></script>
<script>
log('*** polkadotTypes');
log('polkadotTypes');
const { TypeRegistry } = polkadotTypes;
const registry = new TypeRegistry();
console.log('createType', registry.createType('Balance', 1234567890).toHuman());
log('createType', registry.createType('Balance', 1234567890).toHuman());
</script>
<script src="packages/api/build/bundle-polkadot-api.js"></script>
<script>
log('*** polkadotApi');
log('polkadotApi');
const { ApiPromise, WsProvider } = polkadotApi;
const provider = new WsProvider('wss://rpc.polkadot.io');

152
yarn.lock
View File

@@ -1869,7 +1869,7 @@ __metadata:
"@babel/runtime": ^7.14.6
"@polkadot/api": 4.17.2-17
"@polkadot/types": 4.17.2-17
"@polkadot/util": ^6.11.2-13
"@polkadot/util": ^6.11.2-14
rxjs: ^7.2.0
languageName: unknown
linkType: soft
@@ -1880,12 +1880,12 @@ __metadata:
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/api": 4.17.2-17
"@polkadot/keyring": ^6.11.2-13
"@polkadot/keyring": ^6.11.2-14
"@polkadot/rpc-core": 4.17.2-17
"@polkadot/rpc-provider": 4.17.2-17
"@polkadot/types": 4.17.2-17
"@polkadot/util": ^6.11.2-13
"@polkadot/util-crypto": ^6.11.2-13
"@polkadot/util": ^6.11.2-14
"@polkadot/util-crypto": ^6.11.2-14
rxjs: ^7.2.0
languageName: unknown
linkType: soft
@@ -1896,13 +1896,13 @@ __metadata:
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/api-derive": 4.17.2-17
"@polkadot/keyring": ^6.11.2-13
"@polkadot/keyring": ^6.11.2-14
"@polkadot/rpc-core": 4.17.2-17
"@polkadot/rpc-provider": 4.17.2-17
"@polkadot/types": 4.17.2-17
"@polkadot/types-known": 4.17.2-17
"@polkadot/util": ^6.11.2-13
"@polkadot/util-crypto": ^6.11.2-13
"@polkadot/util": ^6.11.2-14
"@polkadot/util-crypto": ^6.11.2-14
eventemitter3: ^4.0.7
rxjs: ^7.2.0
languageName: unknown
@@ -2002,26 +2002,26 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/keyring@npm:^6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/keyring@npm:6.11.2-13"
"@polkadot/keyring@npm:^6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/keyring@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/util": 6.11.2-13
"@polkadot/util-crypto": 6.11.2-13
"@polkadot/util": 6.11.2-14
"@polkadot/util-crypto": 6.11.2-14
peerDependencies:
"@polkadot/util": 6.11.2-13
"@polkadot/util-crypto": 6.11.2-13
checksum: 865e1ec06f648a1dcb1176aad381a531be94045ac7a2174b8e23739846aa31f3dec71cdb05019d8186b2a9aa2e7c58386c868c303f99967be06fb30b7a0f4867
"@polkadot/util": 6.11.2-14
"@polkadot/util-crypto": 6.11.2-14
checksum: 58c94a3938459f2e5c15147be37e2f65bfcd6226576a4f56656a90f961fb06084150fb356ce175c6f8006edd629b4b954830e32c7eba1ae2c5f1edcc26684b90
languageName: node
linkType: hard
"@polkadot/networks@npm:6.11.2-13, @polkadot/networks@npm:^6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/networks@npm:6.11.2-13"
"@polkadot/networks@npm:6.11.2-14, @polkadot/networks@npm:^6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/networks@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
checksum: 1ed2929d71341524eb0ea946e798be57c2be3ce41f5b11fa5b6f2ab7d21f8b7c9bb9b861076e59cd3dec339f9e64203bd3930b4277a2112b1d055a1ff80b353d
checksum: 79eb7fb38f5302fab4f094da9fde4739da679b4175d56cbf342cea7e9f675c3b5f5a1064688fe71a9fadb033a720caa91a1f05eae66691cff6ce46f611f5d4fe
languageName: node
linkType: hard
@@ -2030,10 +2030,10 @@ __metadata:
resolution: "@polkadot/rpc-core@workspace:packages/rpc-core"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/keyring": ^6.11.2-13
"@polkadot/keyring": ^6.11.2-14
"@polkadot/rpc-provider": 4.17.2-17
"@polkadot/types": 4.17.2-17
"@polkadot/util": ^6.11.2-13
"@polkadot/util": ^6.11.2-14
rxjs: ^7.2.0
languageName: unknown
linkType: soft
@@ -2043,13 +2043,13 @@ __metadata:
resolution: "@polkadot/rpc-provider@workspace:packages/rpc-provider"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/keyring": ^6.11.2-13
"@polkadot/keyring": ^6.11.2-14
"@polkadot/types": 4.17.2-17
"@polkadot/util": ^6.11.2-13
"@polkadot/util-crypto": ^6.11.2-13
"@polkadot/x-fetch": ^6.11.2-13
"@polkadot/x-global": ^6.11.2-13
"@polkadot/x-ws": ^6.11.2-13
"@polkadot/util": ^6.11.2-14
"@polkadot/util-crypto": ^6.11.2-14
"@polkadot/x-fetch": ^6.11.2-14
"@polkadot/x-global": ^6.11.2-14
"@polkadot/x-ws": ^6.11.2-14
eventemitter3: ^4.0.7
mock-socket: ^9.0.3
nock: ^13.1.1
@@ -2075,7 +2075,7 @@ __metadata:
"@polkadot/api": 4.17.2-17
"@polkadot/rpc-provider": 4.17.2-17
"@polkadot/types": 4.17.2-17
"@polkadot/util": ^6.11.2-13
"@polkadot/util": ^6.11.2-14
"@types/websocket": ^1.0.3
"@types/yargs": ^17.0.2
handlebars: ^4.7.7
@@ -2095,9 +2095,9 @@ __metadata:
resolution: "@polkadot/types-known@workspace:packages/types-known"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/networks": ^6.11.2-13
"@polkadot/networks": ^6.11.2-14
"@polkadot/types": 4.17.2-17
"@polkadot/util": ^6.11.2-13
"@polkadot/util": ^6.11.2-14
languageName: unknown
linkType: soft
@@ -2106,24 +2106,24 @@ __metadata:
resolution: "@polkadot/types@workspace:packages/types"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/keyring": ^6.11.2-13
"@polkadot/util": ^6.11.2-13
"@polkadot/util-crypto": ^6.11.2-13
"@polkadot/keyring": ^6.11.2-14
"@polkadot/util": ^6.11.2-14
"@polkadot/util-crypto": ^6.11.2-14
"@types/bn.js": ^4.11.6
bn.js: ^4.11.9
rxjs: ^7.2.0
languageName: unknown
linkType: soft
"@polkadot/util-crypto@npm:6.11.2-13, @polkadot/util-crypto@npm:^6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/util-crypto@npm:6.11.2-13"
"@polkadot/util-crypto@npm:6.11.2-14, @polkadot/util-crypto@npm:^6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/util-crypto@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/networks": 6.11.2-13
"@polkadot/util": 6.11.2-13
"@polkadot/networks": 6.11.2-14
"@polkadot/util": 6.11.2-14
"@polkadot/wasm-crypto": ^4.1.2
"@polkadot/x-randomvalues": 6.11.2-13
"@polkadot/x-randomvalues": 6.11.2-14
base-x: ^3.0.8
base64-js: ^1.5.1
blakejs: ^1.1.1
@@ -2136,23 +2136,23 @@ __metadata:
tweetnacl: ^1.0.3
xxhashjs: ^0.2.2
peerDependencies:
"@polkadot/util": 6.11.2-13
checksum: 58085ea425a6fb3ebefd620be5e77b32e50e5bb8c0b5897cc787fa92ed4c6fec2249d4536cb7aa62bd04982bd0eff7568e96ff75acac9e7a2c3ff0a5699511db
"@polkadot/util": 6.11.2-14
checksum: 33ffa87047534db0c5e211ba1f8946b27920c91799ead7a03e28089152b3ea04023ca08f6906b6f15ef23ef8fa6d90e276c4ba90539c0d47d4c463dee98d5c32
languageName: node
linkType: hard
"@polkadot/util@npm:6.11.2-13, @polkadot/util@npm:^6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/util@npm:6.11.2-13"
"@polkadot/util@npm:6.11.2-14, @polkadot/util@npm:^6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/util@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/x-textdecoder": 6.11.2-13
"@polkadot/x-textencoder": 6.11.2-13
"@polkadot/x-textdecoder": 6.11.2-14
"@polkadot/x-textencoder": 6.11.2-14
"@types/bn.js": ^4.11.6
bn.js: ^4.11.9
camelcase: ^5.3.1
ip-regex: ^4.3.0
checksum: a22a82f34a0efcc157994696309ac74170a341af26e3e07a5b1ab3267f418bb96598a6f94cf16120307bf208e49def8856c2c1edfc9f98be05cc5bcc5652a450
checksum: d69a6257c0a45bf554bb0a9d535f987d582e5950047f74e0fe6e6446f03a386bd9ff8a16ac25b976567afa20c47483722b85c1e5b50b807e97183c796827b991
languageName: node
linkType: hard
@@ -2188,66 +2188,66 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/x-fetch@npm:^6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/x-fetch@npm:6.11.2-13"
"@polkadot/x-fetch@npm:^6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/x-fetch@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/x-global": 6.11.2-13
"@polkadot/x-global": 6.11.2-14
"@types/node-fetch": ^2.5.11
node-fetch: ^2.6.1
checksum: 016f59de4523694d696261c95dff178dd5487596877372a4620668f178fc08c9387220ccbf87002b75fbbfb8d5e2fd0ad9b7fc2dd87978a46952c5b815784dba
checksum: c3cf1fd329253c60341d781349f0f0303f47218ed4e6ad72d938e1f0f771422acaac55a3e86bdbe4f19a200f933e55fdc898ed140d0bf54ecb75563b94b15bb6
languageName: node
linkType: hard
"@polkadot/x-global@npm:6.11.2-13, @polkadot/x-global@npm:^6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/x-global@npm:6.11.2-13"
"@polkadot/x-global@npm:6.11.2-14, @polkadot/x-global@npm:^6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/x-global@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
checksum: f36d2424b8853f3e2c35cbc5a4fa181e3c5037b2e8a18cf19c02c61cdcc5644eb63fb94b33e1a0066f0a49727192d59c41802c63fe8d71a4b11f36aa9d36c769
checksum: 258d7b2bf0ee2ba87db66680712d1a9e85b8fa8deda1a4f74690f95da945832c7c991642ccb2e315c0ef840b24ca073e28e21b2c7bbf1d51f3e9445c54a7af91
languageName: node
linkType: hard
"@polkadot/x-randomvalues@npm:6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/x-randomvalues@npm:6.11.2-13"
"@polkadot/x-randomvalues@npm:6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/x-randomvalues@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/x-global": 6.11.2-13
checksum: 866cbd8cca67c402e5e21e2048c2bba93a68061d11df070f0f5657156fbc217b8358ded29e1b688202de7e4b9d80e9f830fb7a7fbf5fe554594b155fd6f9c79f
"@polkadot/x-global": 6.11.2-14
checksum: a7299aeed5be016c2b43728820446c4d6dda97e27e290dab7026d192a0919e76b334fa1224e3ecb06b5ab331fa2aabbcda8592e80eaa1569c1d87922786e4d70
languageName: node
linkType: hard
"@polkadot/x-textdecoder@npm:6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/x-textdecoder@npm:6.11.2-13"
"@polkadot/x-textdecoder@npm:6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/x-textdecoder@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/x-global": 6.11.2-13
checksum: a9717ceab95dd836401ebda3c9e1b48fb9e08842155dc5a3be22e3d760c31cbbda58c0a1fedcca0a36d6b7c229f14577e3d05e23b7402b453f8cd622d3a20719
"@polkadot/x-global": 6.11.2-14
checksum: f77516022920ade7ea52e541d67c9563a48bb77713595a4ed1b59094d337ce87880ca82f60df6db3fef9ea8ceafef898d904c5ed47be4d9bfa7f3a908d8c9ce3
languageName: node
linkType: hard
"@polkadot/x-textencoder@npm:6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/x-textencoder@npm:6.11.2-13"
"@polkadot/x-textencoder@npm:6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/x-textencoder@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/x-global": 6.11.2-13
checksum: 43d5f0d72d03d16b1caceb1dd5db8827741ced7a02899499e5a4abcdaa63d9298aae08a5e163a298c3de5f252b2c3eb2c99d2f4b120219ea70f2d332677ac06e
"@polkadot/x-global": 6.11.2-14
checksum: 2185d30e64700021cee4416208b29185afcd76e889c9fec98edaf6e6d7e3b0f9477242020ffc925bc9518a01e32ad110f223e5bacf8cc35bb81f5f05bcc087da
languageName: node
linkType: hard
"@polkadot/x-ws@npm:^6.11.2-13":
version: 6.11.2-13
resolution: "@polkadot/x-ws@npm:6.11.2-13"
"@polkadot/x-ws@npm:^6.11.2-14":
version: 6.11.2-14
resolution: "@polkadot/x-ws@npm:6.11.2-14"
dependencies:
"@babel/runtime": ^7.14.6
"@polkadot/x-global": 6.11.2-13
"@polkadot/x-global": 6.11.2-14
"@types/websocket": ^1.0.3
websocket: ^1.0.34
checksum: 78aac28e6b3162e90ae94c5f41ec9084b0fd0be992511e141a4bd6bcb7f37c902e1f658542424c52e63049d79bb92d54f44370b133696b3c08781dda044a4431
checksum: 031b47da9cf9eb299a768d9e1141f03182168b514fc9b61c55189cdbac7abba69dd109281926357c64f5d24b5324d0951129ae20df873b511167880720f60c20
languageName: node
linkType: hard