UNPKG

@polkadot/dev

Version:

A collection of shared CI scripts and development environment used by @polkadot projects

114 lines (104 loc) 3.74 kB
// Copyright 2017-2025 @polkadot/dev authors & contributors // SPDX-License-Identifier: Apache-2.0 import pluginAlias from '@rollup/plugin-alias'; import pluginCommonjs from '@rollup/plugin-commonjs'; import pluginDynamicImportVars from '@rollup/plugin-dynamic-import-vars'; import pluginInject from '@rollup/plugin-inject'; import pluginJson from '@rollup/plugin-json'; import { nodeResolve as pluginResolve } from '@rollup/plugin-node-resolve'; import fs from 'node:fs'; import path from 'node:path'; import pluginCleanup from 'rollup-plugin-cleanup'; /** @typedef {{ entries?: Record<string, string>; external: string[]; globals?: Record<string, string>; index?: string; inject?: Record<string, string>; pkg: string; }} BundleDef */ /** @typedef {{ file: string; format: 'umd'; generatedCode: Record<string, unknown>; globals: Record<string, string>; inlineDynamicImports: true; intro: string; name: string; }} BundleOutput */ /** @typedef {{ context: 'global'; external: string[]; input: string; output: BundleOutput; plugins: any[]; }} Bundle */ /** * @param {string} pkg * @returns {string} */ function sanitizePkg (pkg) { return pkg.replace('@polkadot/', ''); } /** * @param {string} input * @returns {string} */ function createName (input) { return `polkadot-${sanitizePkg(input)}` .toLowerCase() .replace(/[^a-zA-Z0-9]+(.)/g, (_, c) => c.toUpperCase()); } /** * @param {string} pkg * @param {string} [index] * @returns {string} */ export function createInput (pkg, index) { const partialPath = `packages/${sanitizePkg(pkg)}/build`; return `${partialPath}/${ index || fs.existsSync(path.join(process.cwd(), partialPath, 'bundle.js')) ? 'bundle.js' : ( JSON.parse(fs.readFileSync(path.join(process.cwd(), partialPath, 'package.json'), 'utf8')).browser || 'index.js' ) }`; } /** * * @param {string} pkg * @param {string[]} external * @param {Record<string, string>} globals * @returns {BundleOutput} */ export function createOutput (pkg, external, globals) { const name = sanitizePkg(pkg); return { file: `packages/${name}/build/bundle-polkadot-${name}.js`, format: 'umd', generatedCode: { constBindings: true }, globals: external.reduce((all, p) => ({ [p]: createName(p), ...all }), { ...globals }), // combine multi-chunk builds with dynamic imports inlineDynamicImports: true, // this is a mini x-global, determine where our context lies intro: 'const global = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : window;', name: createName(pkg) }; } /** * * @param {BundleDef} param0 * @returns {Bundle} */ export function createBundle ({ entries = {}, external, globals = {}, index, inject = {}, pkg }) { return { // specify this (we define global in the output intro as globalThis || self || window) context: 'global', external, input: createInput(pkg, index), output: createOutput(pkg, external, globals), // NOTE The expect-error directives are due to rollup plugins, see // - https://github.com/rollup/plugins/issues/1488 // - https://github.com/rollup/plugins/issues/1329 plugins: [ // @ts-expect-error See the linked rollup issues above pluginAlias({ entries }), // @ts-expect-error See the linked rollup issues above pluginJson(), // @ts-expect-error See the linked rollup issues above pluginCommonjs(), // @ts-expect-error See the linked rollup issues above pluginDynamicImportVars(), // @ts-expect-error See the linked rollup issues above pluginInject(inject), pluginResolve({ browser: true }), pluginCleanup() ] }; }