@polkadot-api/cli 0.20.1 → 0.20.2-canary.e30969c
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sources":["../../../../src/commands/generate.ts"],"sourcesContent":["import { getMetadata } from \"@/metadata\"\nimport { readPapiConfig } from \"@/papiConfig\"\nimport { cliVersion } from \"@/version\"\nimport {\n capitalize,\n generateInkTypes,\n generateMultipleDescriptors,\n generateSolTypes,\n type KnownTypes,\n} from \"@polkadot-api/codegen\"\nimport { getInkLookup } from \"@polkadot-api/ink-contracts\"\nimport {\n EntryPointCodec,\n TypedefCodec,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n Binary,\n Blake2128,\n h64,\n HexString,\n Tuple,\n UnifiedMetadata,\n Vector,\n} from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { spawn } from \"child_process\"\nimport { existsSync } from \"fs\"\nimport fsExists from \"fs.promises.exists\"\nimport fs, { mkdtemp, rm } from \"fs/promises\"\nimport { tmpdir } from \"os\"\nimport path, { join } from \"path\"\nimport process from \"process\"\nimport { readPackage } from \"read-pkg\"\nimport { rollup, RollupBuild } from \"rollup\"\nimport esbuild from \"rollup-plugin-esbuild\"\nimport tsc from \"tsc-prog\"\nimport { updatePackage } from \"write-package\"\nimport { detectPackageManager } from \"../packageManager\"\nimport { CommonOptions } from \"./commonOptions\"\n\nexport interface GenerateOptions extends CommonOptions {\n clientLibrary?: string\n}\n\nexport async function generate(opts: GenerateOptions) {\n if (process.env.PAPI_SKIP_GENERATE) {\n return\n }\n if (opts.whitelist) {\n console.error(\n \"The --whitelist option has been removed. The whitelist should be placed at `.papi/whitelist.ts`\",\n )\n process.exit(1)\n }\n\n const config = await readPapiConfig(opts.config)\n if (!config) {\n throw new Error(\"Can't find the Polkadot-API configuration\")\n }\n const sources = config.entries\n\n if (Object.keys(sources).length == 0) {\n console.log(\"No chains defined in config file\")\n }\n\n console.log(`Reading metadata`)\n const chains = await Promise.all(\n Object.entries(sources).map(async ([key, source]) => ({\n key,\n ...(await getMetadata(source))!,\n knownTypes: {},\n })),\n )\n\n const contracts = Object.fromEntries(\n await Promise.all(\n ([\"ink\", \"sol\"] as const).map(async (kind) => [\n kind,\n Object.fromEntries(\n await Promise.all(\n Object.entries(config[kind] ?? {}).map(async ([key, v]) => [\n key,\n toHex(Blake2128(Binary.fromText(await fs.readFile(v, \"utf-8\")))),\n ]),\n ),\n ),\n ]),\n ),\n )\n\n if (chains.length === 0) {\n console.log(\"No entries in polkadot-api.json. Nothing to generate.\")\n return\n }\n\n const whitelist = await readWhitelist(\".papi/whitelist.ts\")\n\n const descriptorsDir = join(process.cwd(), config.descriptorPath)\n if (await alreadyGenerated(descriptorsDir, chains, contracts, whitelist)) {\n console.log(\"Detected previous descriptors with no changes needed.\")\n return\n }\n\n console.log(`Generating descriptors`)\n await cleanDescriptorsPackage(config.descriptorPath)\n if (!config.options?.noDescriptorsPackage) {\n await addDescriptorsToPackageJson(config.descriptorPath)\n }\n\n const clientPath = opts.clientLibrary ?? \"polkadot-api\"\n\n const descriptorSrcDir = join(descriptorsDir, \"src\")\n const hash = await outputCodegen(\n chains,\n descriptorSrcDir,\n clientPath,\n whitelist,\n )\n\n if (config.ink || config.sol) {\n outputContractCodegen(config, descriptorSrcDir)\n }\n\n await replacePackageJson(descriptorsDir, hash)\n const cleanCodegen = await compileCodegen(descriptorsDir)\n if (cleanCodegen) {\n await tagGenerated(descriptorsDir, chains, contracts, whitelist)\n await fs.rm(descriptorSrcDir, { recursive: true })\n }\n if (!config.options?.noDescriptorsPackage) {\n await runInstall()\n await flushBundlerCache()\n }\n}\n\nasync function tagGenerated(\n descriptorsDir: string,\n chains: {\n key: string\n metadataRaw: Uint8Array\n }[],\n contracts: Record<\"ink\" | \"sol\", Record<string, HexString>>,\n whitelist: string[] | null,\n) {\n const filePath = join(descriptorsDir, \"generated.json\")\n\n await fs.writeFile(\n filePath,\n JSON.stringify({\n cliVersion,\n whitelist,\n chains: Object.fromEntries(\n chains.map(({ key, metadataRaw }) => [\n key,\n toHex(Blake2128(metadataRaw)),\n ]),\n ),\n contracts,\n }),\n )\n}\nasync function alreadyGenerated(\n descriptorsDir: string,\n chains: {\n key: string\n metadataRaw: Uint8Array\n }[],\n contracts: Record<\"ink\" | \"sol\", Record<string, HexString>>,\n whitelist: string[] | null,\n) {\n const generatedJsôn = join(descriptorsDir, \"generated.json\")\n if (!existsSync(generatedJsôn)) return false\n\n try {\n const generated = JSON.parse(\n await fs.readFile(generatedJsôn, {\n encoding: \"utf-8\",\n }),\n )\n if (\n (generated.whitelist ?? [\"*\"]).join(\",\") !=\n (whitelist ?? [\"*\"]).join(\",\") ||\n generated.cliVersion !== cliVersion\n )\n return false\n\n return (\n chains.length === Object.entries(generated.chains).length &&\n chains.every(({ key, metadataRaw }) => {\n const hash = toHex(Blake2128(metadataRaw))\n return hash === generated.chains[key]\n }) &&\n ([\"ink\", \"sol\"] as const).every(\n (kind) =>\n Object.entries(contracts[kind]).length ===\n Object.entries(generated.contracts[kind]).length &&\n Object.entries(contracts[kind]).every(\n ([k, hash]) => hash === generated.contracts[kind][k],\n ),\n )\n )\n } catch {\n return false\n }\n}\n\nasync function cleanDescriptorsPackage(path: string) {\n const descriptorsDir = join(process.cwd(), path)\n if (!existsSync(descriptorsDir)) {\n await fs.mkdir(descriptorsDir, { recursive: true })\n\n // We have to keep the package.json in git because otherwise npm install on a fresh repo would fail\n await fs.writeFile(\n join(descriptorsDir, \".gitignore\"),\n \"*\\n!.gitignore\\n!package.json\\n\",\n )\n }\n\n const distDir = join(descriptorsDir, \"dist\")\n if (existsSync(distDir)) {\n await fs.rm(distDir, { recursive: true })\n }\n}\n\nasync function addDescriptorsToPackageJson(path: string) {\n const [packageJson, protocol] = await Promise.all([\n readPackage(),\n getPackageProtocol(),\n ])\n\n const packageSource = `${protocol}:${path}`\n const currentSource = packageJson.dependencies?.[\"@polkadot-api/descriptors\"]\n if (currentSource !== packageSource) {\n await updatePackage({\n dependencies: {\n \"@polkadot-api/descriptors\": packageSource,\n },\n })\n }\n}\n\nasync function getPackageProtocol() {\n const { packageManager, version } = await detectPackageManager()\n\n switch (packageManager) {\n case \"yarn\":\n const yarnMajorVersion = Number(version.split(\".\").at(0))\n\n return yarnMajorVersion >= 2 ? \"portal\" : \"file\"\n default:\n return \"file\"\n }\n}\n\nasync function runInstall() {\n const { executable } = await detectPackageManager()\n console.log(`${executable} install`)\n const child = spawn(executable, [\"install\"], {\n stdio: \"inherit\",\n shell: true,\n env: {\n ...process.env,\n PAPI_SKIP_GENERATE: \"true\",\n },\n })\n await new Promise((resolve) => child.on(\"close\", resolve))\n}\n\nconst generateMetadataExportFile = (input: Uint8Array): string =>\n `const binMeta: string = \"${Buffer.from(input).toString(\"base64\")}\"; export default binMeta;`\n\nasync function outputCodegen(\n chains: Array<{\n key: string\n metadata: UnifiedMetadata\n metadataRaw: Uint8Array\n knownTypes: KnownTypes\n codeHash?: HexString\n genesis?: HexString\n }>,\n outputFolder: string,\n clientPath: string,\n whitelist: string[] | Record<string, string[]> | null,\n) {\n const {\n commonFileContent,\n descriptorsFileContent,\n descriptorTypesFiles,\n metadataTypes,\n typesFileContent,\n publicTypes,\n } = generateMultipleDescriptors(\n chains,\n {\n client: clientPath,\n metadataTypes: \"./metadataTypes\",\n types: \"./common-types\",\n descriptorValues: \"./descriptors\",\n common: \"./common\",\n },\n {\n whitelist: whitelist ?? undefined,\n },\n )\n\n const hash = h64(\n Binary.fromText(Array.from(metadataTypes.checksumToIdx.keys()).join(\"\")),\n )\n\n const EntryPointsCodec = Vector(EntryPointCodec)\n const TypedefsCodec = Vector(TypedefCodec)\n const TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\n await fs.mkdir(outputFolder, { recursive: true })\n\n await fs.writeFile(path.join(outputFolder, \"common.ts\"), commonFileContent)\n // Going through base64 conversion instead of using binary loader because of esbuild issue\n // https://github.com/evanw/esbuild/issues/3894\n const metadataTypesBase64 = Buffer.from(\n TypesCodec.enc([metadataTypes.entryPoints, metadataTypes.typedefs]),\n ).toString(\"base64\")\n\n await fs.writeFile(\n path.join(outputFolder, \"metadataTypes.ts\"),\n `\nconst content = \"${metadataTypesBase64}\"\nexport default content\n `,\n )\n await fs.writeFile(\n path.join(outputFolder, \"descriptors.ts\"),\n descriptorsFileContent,\n )\n await fs.writeFile(\n path.join(outputFolder, \"common-types.ts\"),\n typesFileContent,\n )\n await Promise.all(\n chains\n .map((chain, i) => [\n fs.writeFile(\n join(outputFolder, `${chain.key}.ts`),\n descriptorTypesFiles[i].content,\n ),\n fs.writeFile(\n join(outputFolder, `${chain.key}_metadata.ts`),\n generateMetadataExportFile(chain.metadataRaw),\n ),\n ])\n .flat(),\n )\n\n await generateIndex(\n outputFolder,\n chains.map((chain) => chain.key),\n publicTypes,\n Object.fromEntries(\n chains.filter((x) => x.codeHash!!).map((x) => [x.codeHash, x.key]),\n ),\n )\n\n return hash\n}\n\nasync function outputContractCodegen(\n contracts: {\n ink?: Record<string, string>\n sol?: Record<string, string>\n },\n outputFolder: string,\n) {\n console.log(\"Generating smart contract types\")\n\n const contractsFolder = join(outputFolder, \"contracts\")\n if (!existsSync(contractsFolder))\n await fs.mkdir(contractsFolder, { recursive: true })\n\n const imports: string[] = []\n for (const [key, metadata] of Object.entries(contracts.ink ?? {})) {\n try {\n const types = generateInkTypes(\n getInkLookup(JSON.parse(await fs.readFile(metadata, \"utf-8\"))),\n )\n await fs.writeFile(join(contractsFolder, `${key}.ts`), types)\n imports.push(`export { descriptor as ${key} } from './${key}'`)\n } catch (ex) {\n console.error(\"Exception when generating descriptors for contract \" + key)\n console.error(ex)\n }\n }\n\n for (const [key, metadata] of Object.entries(contracts.sol ?? {})) {\n try {\n const types = generateSolTypes(\n JSON.parse(await fs.readFile(metadata, \"utf-8\")),\n )\n await fs.writeFile(join(contractsFolder, `${key}.ts`), types)\n imports.push(`export { descriptor as ${key} } from './${key}'`)\n } catch (ex) {\n console.error(\"Exception when generating descriptors for contract \" + key)\n console.error(ex)\n }\n }\n\n await fs.writeFile(\n join(contractsFolder, `index.ts`),\n imports.join(\"\\n\") + \"\\n\",\n )\n\n fs.appendFile(\n join(outputFolder, \"index.ts\"),\n `\n export * as contracts from './contracts';\n `,\n )\n}\n\nasync function compileCodegen(packageDir: string) {\n const srcDir = join(packageDir, \"src\")\n const outDir = join(packageDir, \"dist\")\n\n if (await fsExists(outDir)) {\n await fs.rm(outDir, { recursive: true })\n }\n\n const bundleSuccess = await bundleEsm(path.join(srcDir, \"index.ts\"), {\n dir: outDir,\n })\n\n // We need tsc to actually build the definitions file, and also perform the typecheck\n const program = tsc.createProgramFromConfig({\n basePath: srcDir,\n compilerOptions: {\n skipLibCheck: true,\n declaration: true,\n emitDeclarationOnly: true,\n target: \"esnext\",\n module: \"esnext\",\n resolveJsonModule: true,\n allowSyntheticDefaultImports: true,\n outDir,\n },\n })\n tsc.emit(program)\n\n const errors = [\n program.getGlobalDiagnostics(),\n program.getOptionsDiagnostics(),\n program.getSemanticDiagnostics(),\n program.getSyntacticDiagnostics(),\n program.getDeclarationDiagnostics(),\n program.getConfigFileParsingDiagnostics(),\n ].flat()\n\n return bundleSuccess && errors.length === 0\n}\n\nconst cacheMetadataStr = `\nexport const getMetadata: (codeHash: string) => Promise<Uint8Array | null> = async (\n codeHash: string\n)=> {\n try {\n return await metadatas[codeHash].getMetadata()\n } catch {}\n return null\n}`\n\nconst generateIndex = async (\n path: string,\n keys: string[],\n publicTypes: string[],\n metadatas: Record<string, string>,\n) => {\n const indexTs = [\n ...keys.flatMap((key) => [\n `import { default as ${key}, type ${capitalize(key)}WhitelistEntry } from \"./${key}\";`,\n `export { ${key} }`,\n `export type * from \"./${key}\";`,\n ]),\n `export {`,\n publicTypes.join(\", \"),\n `} from './common-types';`,\n `const metadatas: Record<string, { getMetadata: () => Promise<Uint8Array> }> = {${Object.entries(\n metadatas,\n )\n .map(([codeHash, key]) => `[\"${codeHash}\"]: ${key}`)\n .join(\",\\n\")}}`,\n cacheMetadataStr,\n `export type WhitelistEntry = ${keys.map((key) => `${capitalize(key)}WhitelistEntry`).join(\" | \")};`,\n `export type WhitelistEntriesByChain = Partial<{\"*\": WhitelistEntry[], ${keys.map((key) => `${key}: WhitelistEntry[]`).join(\",\\n\")}}>`,\n ].join(\"\\n\")\n await fs.writeFile(join(path, \"index.ts\"), indexTs)\n}\n\nasync function replacePackageJson(descriptorsDir: string, version: bigint) {\n await fs.writeFile(\n join(descriptorsDir, \"package.json\"),\n `{\n \"version\": \"0.1.0-autogenerated.${version}\",\n \"name\": \"@polkadot-api/descriptors\",\n \"files\": [\n \"dist\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"module\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"browser\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"sideEffects\": false,\n \"peerDependencies\": {\n \"polkadot-api\": \">=2.0.0-rc.1\"\n }\n}\n`,\n )\n}\n\nasync function readWhitelist(filename: string): Promise<string[] | null> {\n if (!(await fsExists(filename))) {\n return null\n }\n\n const tmpDir = await mkdtemp(join(tmpdir(), \"papi-\"))\n try {\n await bundleEsm(filename, { file: join(tmpDir, \"index.js\") })\n const { whitelist } = await import(join(tmpDir, \"index.js\"))\n return whitelist\n } finally {\n await rm(tmpDir, { recursive: true }).catch(console.error)\n }\n}\n\nasync function flushBundlerCache() {\n try {\n const viteMetadata = join(\n process.cwd(),\n \"node_modules\",\n \".vite\",\n \"deps\",\n \"_metadata.json\",\n )\n if (await fsExists(viteMetadata)) {\n await rm(viteMetadata)\n }\n } catch (ex) {\n console.error(ex)\n }\n}\n\nconst isExternal = (id: string) => !id.startsWith(\".\") && !path.isAbsolute(id)\n\nconst scaleBinaryPlugin = () => ({\n name: \"scale-binary\",\n async load(id: string) {\n if (!id.endsWith(\".scale\")) return null\n const data = await fs.readFile(id)\n const base64 = Buffer.from(data).toString(\"base64\")\n return `const base64 = \"${base64}\";\\nexport default base64;`\n },\n})\n\nasync function bundleEsm(\n entry: string,\n output: { dir: string } | { file: string },\n) {\n let bundle: RollupBuild | undefined\n try {\n bundle = await rollup({\n input: entry,\n external: isExternal,\n plugins: [scaleBinaryPlugin(), esbuild({ target: \"es2022\" })],\n logLevel: \"silent\",\n })\n await bundle.write({\n ...output,\n format: \"es\",\n })\n return true\n } catch (ex) {\n console.error(ex)\n return false\n } finally {\n await bundle?.close()\n }\n}\n"],"names":["path"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate.js","sources":["../../../../src/commands/generate.ts"],"sourcesContent":["import { getMetadata } from \"@/metadata\"\nimport { readPapiConfig } from \"@/papiConfig\"\nimport { cliVersion } from \"@/version\"\nimport {\n capitalize,\n generateInkTypes,\n generateMultipleDescriptors,\n generateSolTypes,\n type KnownTypes,\n} from \"@polkadot-api/codegen\"\nimport { getInkLookup } from \"@polkadot-api/ink-contracts\"\nimport {\n EntryPointCodec,\n TypedefCodec,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n Binary,\n Blake2128,\n h64,\n HexString,\n Tuple,\n UnifiedMetadata,\n Vector,\n} from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { spawn } from \"child_process\"\nimport { existsSync } from \"fs\"\nimport fsExists from \"fs.promises.exists\"\nimport fs, { mkdtemp, rm } from \"fs/promises\"\nimport { tmpdir } from \"os\"\nimport path, { join } from \"path\"\nimport process from \"process\"\nimport { readPackage } from \"read-pkg\"\nimport { rollup, RollupBuild } from \"rollup\"\nimport esbuild from \"rollup-plugin-esbuild\"\nimport tsc from \"tsc-prog\"\nimport { updatePackage } from \"write-package\"\nimport { detectPackageManager } from \"../packageManager\"\nimport { CommonOptions } from \"./commonOptions\"\n\nexport interface GenerateOptions extends CommonOptions {\n clientLibrary?: string\n}\n\nexport async function generate(opts: GenerateOptions) {\n if (process.env.PAPI_SKIP_GENERATE) {\n return\n }\n if (opts.whitelist) {\n console.error(\n \"The --whitelist option has been removed. The whitelist should be placed at `.papi/whitelist.ts`\",\n )\n process.exit(1)\n }\n\n const config = await readPapiConfig(opts.config)\n if (!config) {\n throw new Error(\"Can't find the Polkadot-API configuration\")\n }\n const sources = config.entries\n\n if (Object.keys(sources).length == 0) {\n console.log(\"No chains defined in config file\")\n }\n\n console.log(`Reading metadata`)\n const chains = await Promise.all(\n Object.entries(sources).map(async ([key, source]) => ({\n key,\n ...(await getMetadata(source))!,\n knownTypes: {},\n })),\n )\n\n const contracts = Object.fromEntries(\n await Promise.all(\n ([\"ink\", \"sol\"] as const).map(async (kind) => [\n kind,\n Object.fromEntries(\n await Promise.all(\n Object.entries(config[kind] ?? {}).map(async ([key, v]) => [\n key,\n toHex(Blake2128(Binary.fromText(await fs.readFile(v, \"utf-8\")))),\n ]),\n ),\n ),\n ]),\n ),\n )\n\n if (chains.length === 0) {\n console.log(\"No entries in polkadot-api.json. Nothing to generate.\")\n return\n }\n\n const whitelist = await readWhitelist(\".papi/whitelist.ts\")\n\n const descriptorsDir = join(process.cwd(), config.descriptorPath)\n if (await alreadyGenerated(descriptorsDir, chains, contracts, whitelist)) {\n console.log(\"Detected previous descriptors with no changes needed.\")\n return\n }\n\n console.log(`Generating descriptors`)\n await cleanDescriptorsPackage(config.descriptorPath)\n if (!config.options?.noDescriptorsPackage) {\n await addDescriptorsToPackageJson(config.descriptorPath)\n }\n\n const clientPath = opts.clientLibrary ?? \"polkadot-api\"\n\n const descriptorSrcDir = join(descriptorsDir, \"src\")\n const hash = await outputCodegen(\n chains,\n descriptorSrcDir,\n clientPath,\n whitelist,\n )\n\n if (config.ink || config.sol) {\n outputContractCodegen(config, descriptorSrcDir)\n }\n\n await replacePackageJson(descriptorsDir, hash)\n const cleanCodegen = await compileCodegen(descriptorsDir)\n if (cleanCodegen) {\n await tagGenerated(descriptorsDir, chains, contracts, whitelist)\n await fs.rm(descriptorSrcDir, { recursive: true })\n }\n if (!config.options?.noDescriptorsPackage) {\n await runInstall()\n await flushBundlerCache()\n }\n}\n\nasync function tagGenerated(\n descriptorsDir: string,\n chains: {\n key: string\n metadataRaw: Uint8Array\n }[],\n contracts: Record<\"ink\" | \"sol\", Record<string, HexString>>,\n whitelist: string[] | null,\n) {\n const filePath = join(descriptorsDir, \"generated.json\")\n\n await fs.writeFile(\n filePath,\n JSON.stringify({\n cliVersion,\n whitelist,\n chains: Object.fromEntries(\n chains.map(({ key, metadataRaw }) => [\n key,\n toHex(Blake2128(metadataRaw)),\n ]),\n ),\n contracts,\n }),\n )\n}\nasync function alreadyGenerated(\n descriptorsDir: string,\n chains: {\n key: string\n metadataRaw: Uint8Array\n }[],\n contracts: Record<\"ink\" | \"sol\", Record<string, HexString>>,\n whitelist: string[] | null,\n) {\n const generatedJsôn = join(descriptorsDir, \"generated.json\")\n if (!existsSync(generatedJsôn)) return false\n\n try {\n const generated = JSON.parse(\n await fs.readFile(generatedJsôn, {\n encoding: \"utf-8\",\n }),\n )\n if (\n (generated.whitelist ?? [\"*\"]).join(\",\") !=\n (whitelist ?? [\"*\"]).join(\",\") ||\n generated.cliVersion !== cliVersion\n )\n return false\n\n return (\n chains.length === Object.entries(generated.chains).length &&\n chains.every(({ key, metadataRaw }) => {\n const hash = toHex(Blake2128(metadataRaw))\n return hash === generated.chains[key]\n }) &&\n ([\"ink\", \"sol\"] as const).every(\n (kind) =>\n Object.entries(contracts[kind]).length ===\n Object.entries(generated.contracts[kind]).length &&\n Object.entries(contracts[kind]).every(\n ([k, hash]) => hash === generated.contracts[kind][k],\n ),\n )\n )\n } catch {\n return false\n }\n}\n\nasync function cleanDescriptorsPackage(path: string) {\n const descriptorsDir = join(process.cwd(), path)\n if (!existsSync(descriptorsDir)) {\n await fs.mkdir(descriptorsDir, { recursive: true })\n\n // We have to keep the package.json in git because otherwise npm install on a fresh repo would fail\n await fs.writeFile(\n join(descriptorsDir, \".gitignore\"),\n \"*\\n!.gitignore\\n!package.json\\n\",\n )\n }\n\n const distDir = join(descriptorsDir, \"dist\")\n if (existsSync(distDir)) {\n await fs.rm(distDir, { recursive: true })\n }\n}\n\nasync function addDescriptorsToPackageJson(path: string) {\n const [packageJson, protocol] = await Promise.all([\n readPackage(),\n getPackageProtocol(),\n ])\n\n const packageSource = `${protocol}:${path}`\n const currentSource = packageJson.dependencies?.[\"@polkadot-api/descriptors\"]\n if (currentSource !== packageSource) {\n await updatePackage({\n dependencies: {\n \"@polkadot-api/descriptors\": packageSource,\n },\n })\n }\n}\n\nasync function getPackageProtocol() {\n const { packageManager, version } = await detectPackageManager()\n\n switch (packageManager) {\n case \"yarn\":\n const yarnMajorVersion = Number(version.split(\".\").at(0))\n\n return yarnMajorVersion >= 2 ? \"portal\" : \"file\"\n default:\n return \"file\"\n }\n}\n\nasync function runInstall() {\n const { executable } = await detectPackageManager()\n console.log(`${executable} install`)\n const child = spawn(executable, [\"install\"], {\n stdio: \"inherit\",\n shell: true,\n env: {\n ...process.env,\n PAPI_SKIP_GENERATE: \"true\",\n },\n })\n await new Promise((resolve) => child.on(\"close\", resolve))\n}\n\nconst generateMetadataExportFile = (input: Uint8Array): string =>\n `const binMeta: string = \"${Buffer.from(input).toString(\"base64\")}\"; export default binMeta;`\n\nasync function outputCodegen(\n chains: Array<{\n key: string\n metadata: UnifiedMetadata\n metadataRaw: Uint8Array\n knownTypes: KnownTypes\n codeHash?: HexString\n genesis?: HexString\n }>,\n outputFolder: string,\n clientPath: string,\n whitelist: string[] | Record<string, string[]> | null,\n) {\n const {\n commonFileContent,\n descriptorsFileContent,\n descriptorTypesFiles,\n metadataTypes,\n typesFileContent,\n publicTypes,\n } = generateMultipleDescriptors(\n chains,\n {\n client: clientPath,\n metadataTypes: \"./metadataTypes\",\n types: \"./common-types\",\n descriptorValues: \"./descriptors\",\n common: \"./common\",\n },\n {\n whitelist: whitelist ?? undefined,\n },\n )\n\n const hash = h64(\n Binary.fromText(Array.from(metadataTypes.checksumToIdx.keys()).join(\"\")),\n )\n\n const EntryPointsCodec = Vector(EntryPointCodec)\n const TypedefsCodec = Vector(TypedefCodec)\n const TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\n await fs.mkdir(outputFolder, { recursive: true })\n\n await fs.writeFile(path.join(outputFolder, \"common.ts\"), commonFileContent)\n // Going through base64 conversion instead of using binary loader because of esbuild issue\n // https://github.com/evanw/esbuild/issues/3894\n const metadataTypesBase64 = Buffer.from(\n TypesCodec.enc([metadataTypes.entryPoints, metadataTypes.typedefs]),\n ).toString(\"base64\")\n\n await fs.writeFile(\n path.join(outputFolder, \"metadataTypes.ts\"),\n `\nconst content = \"${metadataTypesBase64}\"\nexport default content\n `,\n )\n await fs.writeFile(\n path.join(outputFolder, \"descriptors.ts\"),\n descriptorsFileContent,\n )\n await fs.writeFile(\n path.join(outputFolder, \"common-types.ts\"),\n typesFileContent,\n )\n await Promise.all(\n chains\n .map((chain, i) => [\n fs.writeFile(\n join(outputFolder, `${chain.key}.ts`),\n descriptorTypesFiles[i].content,\n ),\n fs.writeFile(\n join(outputFolder, `${chain.key}_metadata.ts`),\n generateMetadataExportFile(chain.metadataRaw),\n ),\n ])\n .flat(),\n )\n\n await generateIndex(\n outputFolder,\n chains.map((chain) => chain.key),\n publicTypes,\n Object.fromEntries(\n chains.filter((x) => x.codeHash!!).map((x) => [x.codeHash, x.key]),\n ),\n )\n\n return hash\n}\n\nasync function outputContractCodegen(\n contracts: {\n ink?: Record<string, string>\n sol?: Record<string, string>\n },\n outputFolder: string,\n) {\n console.log(\"Generating smart contract types\")\n\n const contractsFolder = join(outputFolder, \"contracts\")\n if (!existsSync(contractsFolder))\n await fs.mkdir(contractsFolder, { recursive: true })\n\n const imports: string[] = []\n for (const [key, metadata] of Object.entries(contracts.ink ?? {})) {\n try {\n const types = generateInkTypes(\n getInkLookup(JSON.parse(await fs.readFile(metadata, \"utf-8\"))),\n )\n await fs.writeFile(join(contractsFolder, `${key}.ts`), types)\n imports.push(`export { descriptor as ${key} } from './${key}'`)\n } catch (ex) {\n console.error(\"Exception when generating descriptors for contract \" + key)\n console.error(ex)\n }\n }\n\n for (const [key, metadata] of Object.entries(contracts.sol ?? {})) {\n try {\n const types = generateSolTypes(\n JSON.parse(await fs.readFile(metadata, \"utf-8\")),\n )\n await fs.writeFile(join(contractsFolder, `${key}.ts`), types)\n imports.push(`export { descriptor as ${key} } from './${key}'`)\n } catch (ex) {\n console.error(\"Exception when generating descriptors for contract \" + key)\n console.error(ex)\n }\n }\n\n await fs.writeFile(\n join(contractsFolder, `index.ts`),\n imports.join(\"\\n\") + \"\\n\",\n )\n\n fs.appendFile(\n join(outputFolder, \"index.ts\"),\n `\n export * as contracts from './contracts';\n `,\n )\n}\n\nasync function compileCodegen(packageDir: string) {\n const srcDir = join(packageDir, \"src\")\n const outDir = join(packageDir, \"dist\")\n\n if (await fsExists(outDir)) {\n await fs.rm(outDir, { recursive: true })\n }\n\n const bundleSuccess = await bundleEsm(path.join(srcDir, \"index.ts\"), {\n dir: outDir,\n })\n\n // We need tsc to actually build the definitions file, and also perform the typecheck\n const program = tsc.createProgramFromConfig({\n basePath: srcDir,\n compilerOptions: {\n skipLibCheck: true,\n declaration: true,\n emitDeclarationOnly: true,\n target: \"esnext\",\n module: \"esnext\",\n resolveJsonModule: true,\n allowSyntheticDefaultImports: true,\n outDir,\n },\n })\n tsc.emit(program)\n\n const errors = [\n program.getGlobalDiagnostics(),\n program.getOptionsDiagnostics(),\n program.getSemanticDiagnostics(),\n program.getSyntacticDiagnostics(),\n program.getDeclarationDiagnostics(),\n program.getConfigFileParsingDiagnostics(),\n ].flat()\n\n return bundleSuccess && errors.length === 0\n}\n\nconst cacheMetadataStr = `\nexport const getMetadata: (codeHash: string) => Promise<Uint8Array | null> = async (\n codeHash: string\n)=> {\n try {\n return await metadatas[codeHash].getMetadata()\n } catch {}\n return null\n}`\n\nconst generateIndex = async (\n path: string,\n keys: string[],\n publicTypes: string[],\n metadatas: Record<string, string>,\n) => {\n const indexTs = [\n ...keys.flatMap((key) => [\n `import { default as ${key}, type ${capitalize(key)}WhitelistEntry } from \"./${key}\";`,\n `export { ${key} }`,\n `export type * from \"./${key}\";`,\n ]),\n `export {`,\n publicTypes.join(\", \"),\n `} from './common-types';`,\n `const metadatas: Record<string, { getMetadata: () => Promise<Uint8Array> }> = {${Object.entries(\n metadatas,\n )\n .map(([codeHash, key]) => `[\"${codeHash}\"]: ${key}`)\n .join(\",\\n\")}}`,\n cacheMetadataStr,\n `export type WhitelistEntry = ${keys.map((key) => `${capitalize(key)}WhitelistEntry`).join(\" | \")};`,\n `export type WhitelistEntriesByChain = Partial<{\"*\": WhitelistEntry[], ${keys.map((key) => `${key}: WhitelistEntry[]`).join(\",\\n\")}}>`,\n ].join(\"\\n\")\n await fs.writeFile(join(path, \"index.ts\"), indexTs)\n}\n\nasync function replacePackageJson(descriptorsDir: string, version: bigint) {\n await fs.writeFile(\n join(descriptorsDir, \"package.json\"),\n `{\n \"version\": \"0.1.0-autogenerated.${version}\",\n \"name\": \"@polkadot-api/descriptors\",\n \"files\": [\n \"dist\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"module\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"browser\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"sideEffects\": false,\n \"peerDependencies\": {\n \"polkadot-api\": \">=2.0.0\"\n }\n}\n`,\n )\n}\n\nasync function readWhitelist(filename: string): Promise<string[] | null> {\n if (!(await fsExists(filename))) {\n return null\n }\n\n const tmpDir = await mkdtemp(join(tmpdir(), \"papi-\"))\n try {\n await bundleEsm(filename, { file: join(tmpDir, \"index.js\") })\n const { whitelist } = await import(join(tmpDir, \"index.js\"))\n return whitelist\n } finally {\n await rm(tmpDir, { recursive: true }).catch(console.error)\n }\n}\n\nasync function flushBundlerCache() {\n try {\n const viteMetadata = join(\n process.cwd(),\n \"node_modules\",\n \".vite\",\n \"deps\",\n \"_metadata.json\",\n )\n if (await fsExists(viteMetadata)) {\n await rm(viteMetadata)\n }\n } catch (ex) {\n console.error(ex)\n }\n}\n\nconst isExternal = (id: string) => !id.startsWith(\".\") && !path.isAbsolute(id)\n\nconst scaleBinaryPlugin = () => ({\n name: \"scale-binary\",\n async load(id: string) {\n if (!id.endsWith(\".scale\")) return null\n const data = await fs.readFile(id)\n const base64 = Buffer.from(data).toString(\"base64\")\n return `const base64 = \"${base64}\";\\nexport default base64;`\n },\n})\n\nasync function bundleEsm(\n entry: string,\n output: { dir: string } | { file: string },\n) {\n let bundle: RollupBuild | undefined\n try {\n bundle = await rollup({\n input: entry,\n external: isExternal,\n plugins: [scaleBinaryPlugin(), esbuild({ target: \"es2022\" })],\n logLevel: \"silent\",\n })\n await bundle.write({\n ...output,\n format: \"es\",\n })\n return true\n } catch (ex) {\n console.error(ex)\n return false\n } finally {\n await bundle?.close()\n }\n}\n"],"names":["path"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sources":["../../../src/commands/generate.ts"],"sourcesContent":["import { getMetadata } from \"@/metadata\"\nimport { readPapiConfig } from \"@/papiConfig\"\nimport { cliVersion } from \"@/version\"\nimport {\n capitalize,\n generateInkTypes,\n generateMultipleDescriptors,\n generateSolTypes,\n type KnownTypes,\n} from \"@polkadot-api/codegen\"\nimport { getInkLookup } from \"@polkadot-api/ink-contracts\"\nimport {\n EntryPointCodec,\n TypedefCodec,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n Binary,\n Blake2128,\n h64,\n HexString,\n Tuple,\n UnifiedMetadata,\n Vector,\n} from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { spawn } from \"child_process\"\nimport { existsSync } from \"fs\"\nimport fsExists from \"fs.promises.exists\"\nimport fs, { mkdtemp, rm } from \"fs/promises\"\nimport { tmpdir } from \"os\"\nimport path, { join } from \"path\"\nimport process from \"process\"\nimport { readPackage } from \"read-pkg\"\nimport { rollup, RollupBuild } from \"rollup\"\nimport esbuild from \"rollup-plugin-esbuild\"\nimport tsc from \"tsc-prog\"\nimport { updatePackage } from \"write-package\"\nimport { detectPackageManager } from \"../packageManager\"\nimport { CommonOptions } from \"./commonOptions\"\n\nexport interface GenerateOptions extends CommonOptions {\n clientLibrary?: string\n}\n\nexport async function generate(opts: GenerateOptions) {\n if (process.env.PAPI_SKIP_GENERATE) {\n return\n }\n if (opts.whitelist) {\n console.error(\n \"The --whitelist option has been removed. The whitelist should be placed at `.papi/whitelist.ts`\",\n )\n process.exit(1)\n }\n\n const config = await readPapiConfig(opts.config)\n if (!config) {\n throw new Error(\"Can't find the Polkadot-API configuration\")\n }\n const sources = config.entries\n\n if (Object.keys(sources).length == 0) {\n console.log(\"No chains defined in config file\")\n }\n\n console.log(`Reading metadata`)\n const chains = await Promise.all(\n Object.entries(sources).map(async ([key, source]) => ({\n key,\n ...(await getMetadata(source))!,\n knownTypes: {},\n })),\n )\n\n const contracts = Object.fromEntries(\n await Promise.all(\n ([\"ink\", \"sol\"] as const).map(async (kind) => [\n kind,\n Object.fromEntries(\n await Promise.all(\n Object.entries(config[kind] ?? {}).map(async ([key, v]) => [\n key,\n toHex(Blake2128(Binary.fromText(await fs.readFile(v, \"utf-8\")))),\n ]),\n ),\n ),\n ]),\n ),\n )\n\n if (chains.length === 0) {\n console.log(\"No entries in polkadot-api.json. Nothing to generate.\")\n return\n }\n\n const whitelist = await readWhitelist(\".papi/whitelist.ts\")\n\n const descriptorsDir = join(process.cwd(), config.descriptorPath)\n if (await alreadyGenerated(descriptorsDir, chains, contracts, whitelist)) {\n console.log(\"Detected previous descriptors with no changes needed.\")\n return\n }\n\n console.log(`Generating descriptors`)\n await cleanDescriptorsPackage(config.descriptorPath)\n if (!config.options?.noDescriptorsPackage) {\n await addDescriptorsToPackageJson(config.descriptorPath)\n }\n\n const clientPath = opts.clientLibrary ?? \"polkadot-api\"\n\n const descriptorSrcDir = join(descriptorsDir, \"src\")\n const hash = await outputCodegen(\n chains,\n descriptorSrcDir,\n clientPath,\n whitelist,\n )\n\n if (config.ink || config.sol) {\n outputContractCodegen(config, descriptorSrcDir)\n }\n\n await replacePackageJson(descriptorsDir, hash)\n const cleanCodegen = await compileCodegen(descriptorsDir)\n if (cleanCodegen) {\n await tagGenerated(descriptorsDir, chains, contracts, whitelist)\n await fs.rm(descriptorSrcDir, { recursive: true })\n }\n if (!config.options?.noDescriptorsPackage) {\n await runInstall()\n await flushBundlerCache()\n }\n}\n\nasync function tagGenerated(\n descriptorsDir: string,\n chains: {\n key: string\n metadataRaw: Uint8Array\n }[],\n contracts: Record<\"ink\" | \"sol\", Record<string, HexString>>,\n whitelist: string[] | null,\n) {\n const filePath = join(descriptorsDir, \"generated.json\")\n\n await fs.writeFile(\n filePath,\n JSON.stringify({\n cliVersion,\n whitelist,\n chains: Object.fromEntries(\n chains.map(({ key, metadataRaw }) => [\n key,\n toHex(Blake2128(metadataRaw)),\n ]),\n ),\n contracts,\n }),\n )\n}\nasync function alreadyGenerated(\n descriptorsDir: string,\n chains: {\n key: string\n metadataRaw: Uint8Array\n }[],\n contracts: Record<\"ink\" | \"sol\", Record<string, HexString>>,\n whitelist: string[] | null,\n) {\n const generatedJsôn = join(descriptorsDir, \"generated.json\")\n if (!existsSync(generatedJsôn)) return false\n\n try {\n const generated = JSON.parse(\n await fs.readFile(generatedJsôn, {\n encoding: \"utf-8\",\n }),\n )\n if (\n (generated.whitelist ?? [\"*\"]).join(\",\") !=\n (whitelist ?? [\"*\"]).join(\",\") ||\n generated.cliVersion !== cliVersion\n )\n return false\n\n return (\n chains.length === Object.entries(generated.chains).length &&\n chains.every(({ key, metadataRaw }) => {\n const hash = toHex(Blake2128(metadataRaw))\n return hash === generated.chains[key]\n }) &&\n ([\"ink\", \"sol\"] as const).every(\n (kind) =>\n Object.entries(contracts[kind]).length ===\n Object.entries(generated.contracts[kind]).length &&\n Object.entries(contracts[kind]).every(\n ([k, hash]) => hash === generated.contracts[kind][k],\n ),\n )\n )\n } catch {\n return false\n }\n}\n\nasync function cleanDescriptorsPackage(path: string) {\n const descriptorsDir = join(process.cwd(), path)\n if (!existsSync(descriptorsDir)) {\n await fs.mkdir(descriptorsDir, { recursive: true })\n\n // We have to keep the package.json in git because otherwise npm install on a fresh repo would fail\n await fs.writeFile(\n join(descriptorsDir, \".gitignore\"),\n \"*\\n!.gitignore\\n!package.json\\n\",\n )\n }\n\n const distDir = join(descriptorsDir, \"dist\")\n if (existsSync(distDir)) {\n await fs.rm(distDir, { recursive: true })\n }\n}\n\nasync function addDescriptorsToPackageJson(path: string) {\n const [packageJson, protocol] = await Promise.all([\n readPackage(),\n getPackageProtocol(),\n ])\n\n const packageSource = `${protocol}:${path}`\n const currentSource = packageJson.dependencies?.[\"@polkadot-api/descriptors\"]\n if (currentSource !== packageSource) {\n await updatePackage({\n dependencies: {\n \"@polkadot-api/descriptors\": packageSource,\n },\n })\n }\n}\n\nasync function getPackageProtocol() {\n const { packageManager, version } = await detectPackageManager()\n\n switch (packageManager) {\n case \"yarn\":\n const yarnMajorVersion = Number(version.split(\".\").at(0))\n\n return yarnMajorVersion >= 2 ? \"portal\" : \"file\"\n default:\n return \"file\"\n }\n}\n\nasync function runInstall() {\n const { executable } = await detectPackageManager()\n console.log(`${executable} install`)\n const child = spawn(executable, [\"install\"], {\n stdio: \"inherit\",\n shell: true,\n env: {\n ...process.env,\n PAPI_SKIP_GENERATE: \"true\",\n },\n })\n await new Promise((resolve) => child.on(\"close\", resolve))\n}\n\nconst generateMetadataExportFile = (input: Uint8Array): string =>\n `const binMeta: string = \"${Buffer.from(input).toString(\"base64\")}\"; export default binMeta;`\n\nasync function outputCodegen(\n chains: Array<{\n key: string\n metadata: UnifiedMetadata\n metadataRaw: Uint8Array\n knownTypes: KnownTypes\n codeHash?: HexString\n genesis?: HexString\n }>,\n outputFolder: string,\n clientPath: string,\n whitelist: string[] | Record<string, string[]> | null,\n) {\n const {\n commonFileContent,\n descriptorsFileContent,\n descriptorTypesFiles,\n metadataTypes,\n typesFileContent,\n publicTypes,\n } = generateMultipleDescriptors(\n chains,\n {\n client: clientPath,\n metadataTypes: \"./metadataTypes\",\n types: \"./common-types\",\n descriptorValues: \"./descriptors\",\n common: \"./common\",\n },\n {\n whitelist: whitelist ?? undefined,\n },\n )\n\n const hash = h64(\n Binary.fromText(Array.from(metadataTypes.checksumToIdx.keys()).join(\"\")),\n )\n\n const EntryPointsCodec = Vector(EntryPointCodec)\n const TypedefsCodec = Vector(TypedefCodec)\n const TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\n await fs.mkdir(outputFolder, { recursive: true })\n\n await fs.writeFile(path.join(outputFolder, \"common.ts\"), commonFileContent)\n // Going through base64 conversion instead of using binary loader because of esbuild issue\n // https://github.com/evanw/esbuild/issues/3894\n const metadataTypesBase64 = Buffer.from(\n TypesCodec.enc([metadataTypes.entryPoints, metadataTypes.typedefs]),\n ).toString(\"base64\")\n\n await fs.writeFile(\n path.join(outputFolder, \"metadataTypes.ts\"),\n `\nconst content = \"${metadataTypesBase64}\"\nexport default content\n `,\n )\n await fs.writeFile(\n path.join(outputFolder, \"descriptors.ts\"),\n descriptorsFileContent,\n )\n await fs.writeFile(\n path.join(outputFolder, \"common-types.ts\"),\n typesFileContent,\n )\n await Promise.all(\n chains\n .map((chain, i) => [\n fs.writeFile(\n join(outputFolder, `${chain.key}.ts`),\n descriptorTypesFiles[i].content,\n ),\n fs.writeFile(\n join(outputFolder, `${chain.key}_metadata.ts`),\n generateMetadataExportFile(chain.metadataRaw),\n ),\n ])\n .flat(),\n )\n\n await generateIndex(\n outputFolder,\n chains.map((chain) => chain.key),\n publicTypes,\n Object.fromEntries(\n chains.filter((x) => x.codeHash!!).map((x) => [x.codeHash, x.key]),\n ),\n )\n\n return hash\n}\n\nasync function outputContractCodegen(\n contracts: {\n ink?: Record<string, string>\n sol?: Record<string, string>\n },\n outputFolder: string,\n) {\n console.log(\"Generating smart contract types\")\n\n const contractsFolder = join(outputFolder, \"contracts\")\n if (!existsSync(contractsFolder))\n await fs.mkdir(contractsFolder, { recursive: true })\n\n const imports: string[] = []\n for (const [key, metadata] of Object.entries(contracts.ink ?? {})) {\n try {\n const types = generateInkTypes(\n getInkLookup(JSON.parse(await fs.readFile(metadata, \"utf-8\"))),\n )\n await fs.writeFile(join(contractsFolder, `${key}.ts`), types)\n imports.push(`export { descriptor as ${key} } from './${key}'`)\n } catch (ex) {\n console.error(\"Exception when generating descriptors for contract \" + key)\n console.error(ex)\n }\n }\n\n for (const [key, metadata] of Object.entries(contracts.sol ?? {})) {\n try {\n const types = generateSolTypes(\n JSON.parse(await fs.readFile(metadata, \"utf-8\")),\n )\n await fs.writeFile(join(contractsFolder, `${key}.ts`), types)\n imports.push(`export { descriptor as ${key} } from './${key}'`)\n } catch (ex) {\n console.error(\"Exception when generating descriptors for contract \" + key)\n console.error(ex)\n }\n }\n\n await fs.writeFile(\n join(contractsFolder, `index.ts`),\n imports.join(\"\\n\") + \"\\n\",\n )\n\n fs.appendFile(\n join(outputFolder, \"index.ts\"),\n `\n export * as contracts from './contracts';\n `,\n )\n}\n\nasync function compileCodegen(packageDir: string) {\n const srcDir = join(packageDir, \"src\")\n const outDir = join(packageDir, \"dist\")\n\n if (await fsExists(outDir)) {\n await fs.rm(outDir, { recursive: true })\n }\n\n const bundleSuccess = await bundleEsm(path.join(srcDir, \"index.ts\"), {\n dir: outDir,\n })\n\n // We need tsc to actually build the definitions file, and also perform the typecheck\n const program = tsc.createProgramFromConfig({\n basePath: srcDir,\n compilerOptions: {\n skipLibCheck: true,\n declaration: true,\n emitDeclarationOnly: true,\n target: \"esnext\",\n module: \"esnext\",\n resolveJsonModule: true,\n allowSyntheticDefaultImports: true,\n outDir,\n },\n })\n tsc.emit(program)\n\n const errors = [\n program.getGlobalDiagnostics(),\n program.getOptionsDiagnostics(),\n program.getSemanticDiagnostics(),\n program.getSyntacticDiagnostics(),\n program.getDeclarationDiagnostics(),\n program.getConfigFileParsingDiagnostics(),\n ].flat()\n\n return bundleSuccess && errors.length === 0\n}\n\nconst cacheMetadataStr = `\nexport const getMetadata: (codeHash: string) => Promise<Uint8Array | null> = async (\n codeHash: string\n)=> {\n try {\n return await metadatas[codeHash].getMetadata()\n } catch {}\n return null\n}`\n\nconst generateIndex = async (\n path: string,\n keys: string[],\n publicTypes: string[],\n metadatas: Record<string, string>,\n) => {\n const indexTs = [\n ...keys.flatMap((key) => [\n `import { default as ${key}, type ${capitalize(key)}WhitelistEntry } from \"./${key}\";`,\n `export { ${key} }`,\n `export type * from \"./${key}\";`,\n ]),\n `export {`,\n publicTypes.join(\", \"),\n `} from './common-types';`,\n `const metadatas: Record<string, { getMetadata: () => Promise<Uint8Array> }> = {${Object.entries(\n metadatas,\n )\n .map(([codeHash, key]) => `[\"${codeHash}\"]: ${key}`)\n .join(\",\\n\")}}`,\n cacheMetadataStr,\n `export type WhitelistEntry = ${keys.map((key) => `${capitalize(key)}WhitelistEntry`).join(\" | \")};`,\n `export type WhitelistEntriesByChain = Partial<{\"*\": WhitelistEntry[], ${keys.map((key) => `${key}: WhitelistEntry[]`).join(\",\\n\")}}>`,\n ].join(\"\\n\")\n await fs.writeFile(join(path, \"index.ts\"), indexTs)\n}\n\nasync function replacePackageJson(descriptorsDir: string, version: bigint) {\n await fs.writeFile(\n join(descriptorsDir, \"package.json\"),\n `{\n \"version\": \"0.1.0-autogenerated.${version}\",\n \"name\": \"@polkadot-api/descriptors\",\n \"files\": [\n \"dist\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"module\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"browser\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"sideEffects\": false,\n \"peerDependencies\": {\n \"polkadot-api\": \">=2.0.0-rc.1\"\n }\n}\n`,\n )\n}\n\nasync function readWhitelist(filename: string): Promise<string[] | null> {\n if (!(await fsExists(filename))) {\n return null\n }\n\n const tmpDir = await mkdtemp(join(tmpdir(), \"papi-\"))\n try {\n await bundleEsm(filename, { file: join(tmpDir, \"index.js\") })\n const { whitelist } = await import(join(tmpDir, \"index.js\"))\n return whitelist\n } finally {\n await rm(tmpDir, { recursive: true }).catch(console.error)\n }\n}\n\nasync function flushBundlerCache() {\n try {\n const viteMetadata = join(\n process.cwd(),\n \"node_modules\",\n \".vite\",\n \"deps\",\n \"_metadata.json\",\n )\n if (await fsExists(viteMetadata)) {\n await rm(viteMetadata)\n }\n } catch (ex) {\n console.error(ex)\n }\n}\n\nconst isExternal = (id: string) => !id.startsWith(\".\") && !path.isAbsolute(id)\n\nconst scaleBinaryPlugin = () => ({\n name: \"scale-binary\",\n async load(id: string) {\n if (!id.endsWith(\".scale\")) return null\n const data = await fs.readFile(id)\n const base64 = Buffer.from(data).toString(\"base64\")\n return `const base64 = \"${base64}\";\\nexport default base64;`\n },\n})\n\nasync function bundleEsm(\n entry: string,\n output: { dir: string } | { file: string },\n) {\n let bundle: RollupBuild | undefined\n try {\n bundle = await rollup({\n input: entry,\n external: isExternal,\n plugins: [scaleBinaryPlugin(), esbuild({ target: \"es2022\" })],\n logLevel: \"silent\",\n })\n await bundle.write({\n ...output,\n format: \"es\",\n })\n return true\n } catch (ex) {\n console.error(ex)\n return false\n } finally {\n await bundle?.close()\n }\n}\n"],"names":["path"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate.js","sources":["../../../src/commands/generate.ts"],"sourcesContent":["import { getMetadata } from \"@/metadata\"\nimport { readPapiConfig } from \"@/papiConfig\"\nimport { cliVersion } from \"@/version\"\nimport {\n capitalize,\n generateInkTypes,\n generateMultipleDescriptors,\n generateSolTypes,\n type KnownTypes,\n} from \"@polkadot-api/codegen\"\nimport { getInkLookup } from \"@polkadot-api/ink-contracts\"\nimport {\n EntryPointCodec,\n TypedefCodec,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n Binary,\n Blake2128,\n h64,\n HexString,\n Tuple,\n UnifiedMetadata,\n Vector,\n} from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { spawn } from \"child_process\"\nimport { existsSync } from \"fs\"\nimport fsExists from \"fs.promises.exists\"\nimport fs, { mkdtemp, rm } from \"fs/promises\"\nimport { tmpdir } from \"os\"\nimport path, { join } from \"path\"\nimport process from \"process\"\nimport { readPackage } from \"read-pkg\"\nimport { rollup, RollupBuild } from \"rollup\"\nimport esbuild from \"rollup-plugin-esbuild\"\nimport tsc from \"tsc-prog\"\nimport { updatePackage } from \"write-package\"\nimport { detectPackageManager } from \"../packageManager\"\nimport { CommonOptions } from \"./commonOptions\"\n\nexport interface GenerateOptions extends CommonOptions {\n clientLibrary?: string\n}\n\nexport async function generate(opts: GenerateOptions) {\n if (process.env.PAPI_SKIP_GENERATE) {\n return\n }\n if (opts.whitelist) {\n console.error(\n \"The --whitelist option has been removed. The whitelist should be placed at `.papi/whitelist.ts`\",\n )\n process.exit(1)\n }\n\n const config = await readPapiConfig(opts.config)\n if (!config) {\n throw new Error(\"Can't find the Polkadot-API configuration\")\n }\n const sources = config.entries\n\n if (Object.keys(sources).length == 0) {\n console.log(\"No chains defined in config file\")\n }\n\n console.log(`Reading metadata`)\n const chains = await Promise.all(\n Object.entries(sources).map(async ([key, source]) => ({\n key,\n ...(await getMetadata(source))!,\n knownTypes: {},\n })),\n )\n\n const contracts = Object.fromEntries(\n await Promise.all(\n ([\"ink\", \"sol\"] as const).map(async (kind) => [\n kind,\n Object.fromEntries(\n await Promise.all(\n Object.entries(config[kind] ?? {}).map(async ([key, v]) => [\n key,\n toHex(Blake2128(Binary.fromText(await fs.readFile(v, \"utf-8\")))),\n ]),\n ),\n ),\n ]),\n ),\n )\n\n if (chains.length === 0) {\n console.log(\"No entries in polkadot-api.json. Nothing to generate.\")\n return\n }\n\n const whitelist = await readWhitelist(\".papi/whitelist.ts\")\n\n const descriptorsDir = join(process.cwd(), config.descriptorPath)\n if (await alreadyGenerated(descriptorsDir, chains, contracts, whitelist)) {\n console.log(\"Detected previous descriptors with no changes needed.\")\n return\n }\n\n console.log(`Generating descriptors`)\n await cleanDescriptorsPackage(config.descriptorPath)\n if (!config.options?.noDescriptorsPackage) {\n await addDescriptorsToPackageJson(config.descriptorPath)\n }\n\n const clientPath = opts.clientLibrary ?? \"polkadot-api\"\n\n const descriptorSrcDir = join(descriptorsDir, \"src\")\n const hash = await outputCodegen(\n chains,\n descriptorSrcDir,\n clientPath,\n whitelist,\n )\n\n if (config.ink || config.sol) {\n outputContractCodegen(config, descriptorSrcDir)\n }\n\n await replacePackageJson(descriptorsDir, hash)\n const cleanCodegen = await compileCodegen(descriptorsDir)\n if (cleanCodegen) {\n await tagGenerated(descriptorsDir, chains, contracts, whitelist)\n await fs.rm(descriptorSrcDir, { recursive: true })\n }\n if (!config.options?.noDescriptorsPackage) {\n await runInstall()\n await flushBundlerCache()\n }\n}\n\nasync function tagGenerated(\n descriptorsDir: string,\n chains: {\n key: string\n metadataRaw: Uint8Array\n }[],\n contracts: Record<\"ink\" | \"sol\", Record<string, HexString>>,\n whitelist: string[] | null,\n) {\n const filePath = join(descriptorsDir, \"generated.json\")\n\n await fs.writeFile(\n filePath,\n JSON.stringify({\n cliVersion,\n whitelist,\n chains: Object.fromEntries(\n chains.map(({ key, metadataRaw }) => [\n key,\n toHex(Blake2128(metadataRaw)),\n ]),\n ),\n contracts,\n }),\n )\n}\nasync function alreadyGenerated(\n descriptorsDir: string,\n chains: {\n key: string\n metadataRaw: Uint8Array\n }[],\n contracts: Record<\"ink\" | \"sol\", Record<string, HexString>>,\n whitelist: string[] | null,\n) {\n const generatedJsôn = join(descriptorsDir, \"generated.json\")\n if (!existsSync(generatedJsôn)) return false\n\n try {\n const generated = JSON.parse(\n await fs.readFile(generatedJsôn, {\n encoding: \"utf-8\",\n }),\n )\n if (\n (generated.whitelist ?? [\"*\"]).join(\",\") !=\n (whitelist ?? [\"*\"]).join(\",\") ||\n generated.cliVersion !== cliVersion\n )\n return false\n\n return (\n chains.length === Object.entries(generated.chains).length &&\n chains.every(({ key, metadataRaw }) => {\n const hash = toHex(Blake2128(metadataRaw))\n return hash === generated.chains[key]\n }) &&\n ([\"ink\", \"sol\"] as const).every(\n (kind) =>\n Object.entries(contracts[kind]).length ===\n Object.entries(generated.contracts[kind]).length &&\n Object.entries(contracts[kind]).every(\n ([k, hash]) => hash === generated.contracts[kind][k],\n ),\n )\n )\n } catch {\n return false\n }\n}\n\nasync function cleanDescriptorsPackage(path: string) {\n const descriptorsDir = join(process.cwd(), path)\n if (!existsSync(descriptorsDir)) {\n await fs.mkdir(descriptorsDir, { recursive: true })\n\n // We have to keep the package.json in git because otherwise npm install on a fresh repo would fail\n await fs.writeFile(\n join(descriptorsDir, \".gitignore\"),\n \"*\\n!.gitignore\\n!package.json\\n\",\n )\n }\n\n const distDir = join(descriptorsDir, \"dist\")\n if (existsSync(distDir)) {\n await fs.rm(distDir, { recursive: true })\n }\n}\n\nasync function addDescriptorsToPackageJson(path: string) {\n const [packageJson, protocol] = await Promise.all([\n readPackage(),\n getPackageProtocol(),\n ])\n\n const packageSource = `${protocol}:${path}`\n const currentSource = packageJson.dependencies?.[\"@polkadot-api/descriptors\"]\n if (currentSource !== packageSource) {\n await updatePackage({\n dependencies: {\n \"@polkadot-api/descriptors\": packageSource,\n },\n })\n }\n}\n\nasync function getPackageProtocol() {\n const { packageManager, version } = await detectPackageManager()\n\n switch (packageManager) {\n case \"yarn\":\n const yarnMajorVersion = Number(version.split(\".\").at(0))\n\n return yarnMajorVersion >= 2 ? \"portal\" : \"file\"\n default:\n return \"file\"\n }\n}\n\nasync function runInstall() {\n const { executable } = await detectPackageManager()\n console.log(`${executable} install`)\n const child = spawn(executable, [\"install\"], {\n stdio: \"inherit\",\n shell: true,\n env: {\n ...process.env,\n PAPI_SKIP_GENERATE: \"true\",\n },\n })\n await new Promise((resolve) => child.on(\"close\", resolve))\n}\n\nconst generateMetadataExportFile = (input: Uint8Array): string =>\n `const binMeta: string = \"${Buffer.from(input).toString(\"base64\")}\"; export default binMeta;`\n\nasync function outputCodegen(\n chains: Array<{\n key: string\n metadata: UnifiedMetadata\n metadataRaw: Uint8Array\n knownTypes: KnownTypes\n codeHash?: HexString\n genesis?: HexString\n }>,\n outputFolder: string,\n clientPath: string,\n whitelist: string[] | Record<string, string[]> | null,\n) {\n const {\n commonFileContent,\n descriptorsFileContent,\n descriptorTypesFiles,\n metadataTypes,\n typesFileContent,\n publicTypes,\n } = generateMultipleDescriptors(\n chains,\n {\n client: clientPath,\n metadataTypes: \"./metadataTypes\",\n types: \"./common-types\",\n descriptorValues: \"./descriptors\",\n common: \"./common\",\n },\n {\n whitelist: whitelist ?? undefined,\n },\n )\n\n const hash = h64(\n Binary.fromText(Array.from(metadataTypes.checksumToIdx.keys()).join(\"\")),\n )\n\n const EntryPointsCodec = Vector(EntryPointCodec)\n const TypedefsCodec = Vector(TypedefCodec)\n const TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\n await fs.mkdir(outputFolder, { recursive: true })\n\n await fs.writeFile(path.join(outputFolder, \"common.ts\"), commonFileContent)\n // Going through base64 conversion instead of using binary loader because of esbuild issue\n // https://github.com/evanw/esbuild/issues/3894\n const metadataTypesBase64 = Buffer.from(\n TypesCodec.enc([metadataTypes.entryPoints, metadataTypes.typedefs]),\n ).toString(\"base64\")\n\n await fs.writeFile(\n path.join(outputFolder, \"metadataTypes.ts\"),\n `\nconst content = \"${metadataTypesBase64}\"\nexport default content\n `,\n )\n await fs.writeFile(\n path.join(outputFolder, \"descriptors.ts\"),\n descriptorsFileContent,\n )\n await fs.writeFile(\n path.join(outputFolder, \"common-types.ts\"),\n typesFileContent,\n )\n await Promise.all(\n chains\n .map((chain, i) => [\n fs.writeFile(\n join(outputFolder, `${chain.key}.ts`),\n descriptorTypesFiles[i].content,\n ),\n fs.writeFile(\n join(outputFolder, `${chain.key}_metadata.ts`),\n generateMetadataExportFile(chain.metadataRaw),\n ),\n ])\n .flat(),\n )\n\n await generateIndex(\n outputFolder,\n chains.map((chain) => chain.key),\n publicTypes,\n Object.fromEntries(\n chains.filter((x) => x.codeHash!!).map((x) => [x.codeHash, x.key]),\n ),\n )\n\n return hash\n}\n\nasync function outputContractCodegen(\n contracts: {\n ink?: Record<string, string>\n sol?: Record<string, string>\n },\n outputFolder: string,\n) {\n console.log(\"Generating smart contract types\")\n\n const contractsFolder = join(outputFolder, \"contracts\")\n if (!existsSync(contractsFolder))\n await fs.mkdir(contractsFolder, { recursive: true })\n\n const imports: string[] = []\n for (const [key, metadata] of Object.entries(contracts.ink ?? {})) {\n try {\n const types = generateInkTypes(\n getInkLookup(JSON.parse(await fs.readFile(metadata, \"utf-8\"))),\n )\n await fs.writeFile(join(contractsFolder, `${key}.ts`), types)\n imports.push(`export { descriptor as ${key} } from './${key}'`)\n } catch (ex) {\n console.error(\"Exception when generating descriptors for contract \" + key)\n console.error(ex)\n }\n }\n\n for (const [key, metadata] of Object.entries(contracts.sol ?? {})) {\n try {\n const types = generateSolTypes(\n JSON.parse(await fs.readFile(metadata, \"utf-8\")),\n )\n await fs.writeFile(join(contractsFolder, `${key}.ts`), types)\n imports.push(`export { descriptor as ${key} } from './${key}'`)\n } catch (ex) {\n console.error(\"Exception when generating descriptors for contract \" + key)\n console.error(ex)\n }\n }\n\n await fs.writeFile(\n join(contractsFolder, `index.ts`),\n imports.join(\"\\n\") + \"\\n\",\n )\n\n fs.appendFile(\n join(outputFolder, \"index.ts\"),\n `\n export * as contracts from './contracts';\n `,\n )\n}\n\nasync function compileCodegen(packageDir: string) {\n const srcDir = join(packageDir, \"src\")\n const outDir = join(packageDir, \"dist\")\n\n if (await fsExists(outDir)) {\n await fs.rm(outDir, { recursive: true })\n }\n\n const bundleSuccess = await bundleEsm(path.join(srcDir, \"index.ts\"), {\n dir: outDir,\n })\n\n // We need tsc to actually build the definitions file, and also perform the typecheck\n const program = tsc.createProgramFromConfig({\n basePath: srcDir,\n compilerOptions: {\n skipLibCheck: true,\n declaration: true,\n emitDeclarationOnly: true,\n target: \"esnext\",\n module: \"esnext\",\n resolveJsonModule: true,\n allowSyntheticDefaultImports: true,\n outDir,\n },\n })\n tsc.emit(program)\n\n const errors = [\n program.getGlobalDiagnostics(),\n program.getOptionsDiagnostics(),\n program.getSemanticDiagnostics(),\n program.getSyntacticDiagnostics(),\n program.getDeclarationDiagnostics(),\n program.getConfigFileParsingDiagnostics(),\n ].flat()\n\n return bundleSuccess && errors.length === 0\n}\n\nconst cacheMetadataStr = `\nexport const getMetadata: (codeHash: string) => Promise<Uint8Array | null> = async (\n codeHash: string\n)=> {\n try {\n return await metadatas[codeHash].getMetadata()\n } catch {}\n return null\n}`\n\nconst generateIndex = async (\n path: string,\n keys: string[],\n publicTypes: string[],\n metadatas: Record<string, string>,\n) => {\n const indexTs = [\n ...keys.flatMap((key) => [\n `import { default as ${key}, type ${capitalize(key)}WhitelistEntry } from \"./${key}\";`,\n `export { ${key} }`,\n `export type * from \"./${key}\";`,\n ]),\n `export {`,\n publicTypes.join(\", \"),\n `} from './common-types';`,\n `const metadatas: Record<string, { getMetadata: () => Promise<Uint8Array> }> = {${Object.entries(\n metadatas,\n )\n .map(([codeHash, key]) => `[\"${codeHash}\"]: ${key}`)\n .join(\",\\n\")}}`,\n cacheMetadataStr,\n `export type WhitelistEntry = ${keys.map((key) => `${capitalize(key)}WhitelistEntry`).join(\" | \")};`,\n `export type WhitelistEntriesByChain = Partial<{\"*\": WhitelistEntry[], ${keys.map((key) => `${key}: WhitelistEntry[]`).join(\",\\n\")}}>`,\n ].join(\"\\n\")\n await fs.writeFile(join(path, \"index.ts\"), indexTs)\n}\n\nasync function replacePackageJson(descriptorsDir: string, version: bigint) {\n await fs.writeFile(\n join(descriptorsDir, \"package.json\"),\n `{\n \"version\": \"0.1.0-autogenerated.${version}\",\n \"name\": \"@polkadot-api/descriptors\",\n \"files\": [\n \"dist\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"module\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"browser\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"sideEffects\": false,\n \"peerDependencies\": {\n \"polkadot-api\": \">=2.0.0\"\n }\n}\n`,\n )\n}\n\nasync function readWhitelist(filename: string): Promise<string[] | null> {\n if (!(await fsExists(filename))) {\n return null\n }\n\n const tmpDir = await mkdtemp(join(tmpdir(), \"papi-\"))\n try {\n await bundleEsm(filename, { file: join(tmpDir, \"index.js\") })\n const { whitelist } = await import(join(tmpDir, \"index.js\"))\n return whitelist\n } finally {\n await rm(tmpDir, { recursive: true }).catch(console.error)\n }\n}\n\nasync function flushBundlerCache() {\n try {\n const viteMetadata = join(\n process.cwd(),\n \"node_modules\",\n \".vite\",\n \"deps\",\n \"_metadata.json\",\n )\n if (await fsExists(viteMetadata)) {\n await rm(viteMetadata)\n }\n } catch (ex) {\n console.error(ex)\n }\n}\n\nconst isExternal = (id: string) => !id.startsWith(\".\") && !path.isAbsolute(id)\n\nconst scaleBinaryPlugin = () => ({\n name: \"scale-binary\",\n async load(id: string) {\n if (!id.endsWith(\".scale\")) return null\n const data = await fs.readFile(id)\n const base64 = Buffer.from(data).toString(\"base64\")\n return `const base64 = \"${base64}\";\\nexport default base64;`\n },\n})\n\nasync function bundleEsm(\n entry: string,\n output: { dir: string } | { file: string },\n) {\n let bundle: RollupBuild | undefined\n try {\n bundle = await rollup({\n input: entry,\n external: isExternal,\n plugins: [scaleBinaryPlugin(), esbuild({ target: \"es2022\" })],\n logLevel: \"silent\",\n })\n await bundle.write({\n ...output,\n format: \"es\",\n })\n return true\n } catch (ex) {\n console.error(ex)\n return false\n } finally {\n await bundle?.close()\n }\n}\n"],"names":["path"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkadot-api/cli",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.2-canary.e30969c",
|
|
4
4
|
"author": "Victor Oliva (https://github.com/voliva)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -43,23 +43,23 @@
|
|
|
43
43
|
"tsc-prog": "^2.3.0",
|
|
44
44
|
"typescript": "^6.0.2",
|
|
45
45
|
"write-package": "^7.2.0",
|
|
46
|
-
"@polkadot-api/codegen": "0.22.
|
|
47
|
-
"@polkadot-api/ink-contracts": "0.6.
|
|
48
|
-
"@polkadot-api/
|
|
49
|
-
"@polkadot-api/
|
|
50
|
-
"@polkadot-api/
|
|
51
|
-
"@polkadot-api/
|
|
52
|
-
"@polkadot-api/
|
|
53
|
-
"@polkadot-api/
|
|
54
|
-
"@polkadot-api/
|
|
55
|
-
"@polkadot-api/
|
|
56
|
-
"@polkadot-api/
|
|
57
|
-
"@polkadot-api/ws-provider": "0.9.
|
|
58
|
-
"@polkadot-api/
|
|
46
|
+
"@polkadot-api/codegen": "0.22.3-canary.e30969c",
|
|
47
|
+
"@polkadot-api/ink-contracts": "0.6.1-canary.e30969c",
|
|
48
|
+
"@polkadot-api/json-rpc-provider": "0.2.1-canary.e30969c",
|
|
49
|
+
"@polkadot-api/known-chains": "0.11.2-canary.e30969c",
|
|
50
|
+
"@polkadot-api/observable-client": "0.18.4-canary.e30969c",
|
|
51
|
+
"@polkadot-api/smoldot": "0.4.1-canary.e30969c",
|
|
52
|
+
"@polkadot-api/metadata-compatibility": "0.6.1-canary.e30969c",
|
|
53
|
+
"@polkadot-api/utils": "0.4.1-canary.e30969c",
|
|
54
|
+
"@polkadot-api/substrate-client": "0.7.1-canary.e30969c",
|
|
55
|
+
"@polkadot-api/ws-middleware": "0.3.1-canary.e30969c",
|
|
56
|
+
"@polkadot-api/sm-provider": "0.3.1-canary.e30969c",
|
|
57
|
+
"@polkadot-api/ws-provider": "0.9.1-canary.e30969c",
|
|
58
|
+
"@polkadot-api/substrate-bindings": "0.20.1-canary.e30969c"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@swc/core": "^1.15.24",
|
|
62
|
-
"@polkadot-api/json-rpc-provider": "0.2.
|
|
62
|
+
"@polkadot-api/json-rpc-provider": "0.2.1-canary.e30969c"
|
|
63
63
|
},
|
|
64
64
|
"scripts": {
|
|
65
65
|
"build-core": "tsc --noEmit && rollup -c",
|