mirror of https://github.com/grafana/grafana
Grafana UI: Expose unstable entrypoint (#97080)
* feat(grafana-ui): build unstable entrypoint for experimental components * feat(plugins): expose grafana/ui/unstable * build(grafana-ui): add rollup plugin to create alias package.json for unstable entrypoint * build(packages): rewrite prepare npm script to generate alias packagejson files * chore(packages): use relative paths in publishConfig for exports generation * chore(frontend): move npmcli/package-json package to root package.json * revert(grafana-ui): remove rollup plugin for generating alias package.json files * chore(grafana-ui): clean up unstable directory postpack to prevent yarn lock issues * build(packages): fix scope for pkgName usage * feat(packages): create separate cjs and esm builds that validate with arethetypeswrong cli * chore(yarn): refresh lock file * fix(packages): make sure alias package.jsons point to existing filespull/101546/head^2
parent
503bc2ba66
commit
859c12bbb4
@ -0,0 +1,84 @@ |
||||
import PackageJson from '@npmcli/package-json'; |
||||
import { mkdir } from 'node:fs/promises'; |
||||
import { join, dirname } from 'node:path'; |
||||
|
||||
const cwd = process.cwd(); |
||||
|
||||
try { |
||||
const pkgJson = await PackageJson.load(cwd); |
||||
const cjsIndex = pkgJson.content.publishConfig?.main ?? pkgJson.content.main; |
||||
const esmIndex = pkgJson.content.publishConfig?.module ?? pkgJson.content.module; |
||||
const cjsTypes = pkgJson.content.publishConfig?.types ?? pkgJson.content.types; |
||||
const esmTypes = `./${join(dirname(esmIndex), 'index.d.mts')}`; |
||||
|
||||
const exports = { |
||||
'./package.json': './package.json', |
||||
'.': { |
||||
import: { |
||||
types: esmTypes, |
||||
default: esmIndex, |
||||
}, |
||||
require: { |
||||
types: cjsTypes, |
||||
default: cjsIndex, |
||||
}, |
||||
}, |
||||
}; |
||||
|
||||
pkgJson.update({ |
||||
main: cjsIndex, |
||||
types: cjsTypes, |
||||
module: esmIndex, |
||||
exports, |
||||
}); |
||||
|
||||
await pkgJson.save(); |
||||
|
||||
// If an alias package name is provided we add an exports entry for the alias
|
||||
// then generate an additional "nested" package.json for typescript resolution that
|
||||
// doesn't use the exports property in package.json.
|
||||
if (process.env.ALIAS_PACKAGE_NAME) { |
||||
const aliasName = process.env.ALIAS_PACKAGE_NAME; |
||||
pkgJson.update({ |
||||
exports: { |
||||
...pkgJson.content.exports, |
||||
[`./${aliasName}`]: { |
||||
import: { |
||||
types: esmTypes.replace('index', aliasName), |
||||
default: esmIndex.replace('index', aliasName), |
||||
}, |
||||
require: { |
||||
types: cjsTypes.replace('index', aliasName), |
||||
default: cjsTypes.replace('index', aliasName), |
||||
}, |
||||
}, |
||||
}, |
||||
files: [...pkgJson.content.files, aliasName], |
||||
}); |
||||
await pkgJson.save(); |
||||
await createAliasPackageJsonFiles(pkgJson.content, aliasName); |
||||
} |
||||
} catch (e) { |
||||
console.error(e); |
||||
process.exit(1); |
||||
} |
||||
|
||||
async function createAliasPackageJsonFiles(packageJsonContent, aliasName) { |
||||
const pkgName = `${packageJsonContent.name}/${aliasName}`; |
||||
try { |
||||
console.log(`📦 Writing alias package.json for ${pkgName}.`); |
||||
const pkgJsonPath = `${cwd}/${aliasName}`; |
||||
await mkdir(pkgJsonPath, { recursive: true }); |
||||
const pkgJson = await PackageJson.create(pkgJsonPath, { |
||||
data: { |
||||
name: pkgName, |
||||
types: `../dist/cjs/${aliasName}.d.cts`, |
||||
main: `../dist/cjs/${aliasName}.cjs`, |
||||
module: `../dist/esm/${aliasName}.mjs`, |
||||
}, |
||||
}); |
||||
await pkgJson.save(); |
||||
} catch (error) { |
||||
throw new Error(`Error generating package.json for ${pkgName}`, error); |
||||
} |
||||
} |
@ -1,21 +0,0 @@ |
||||
const fs = require('fs'); |
||||
|
||||
const cwd = process.cwd(); |
||||
const packageJson = require(`${cwd}/package.json`); |
||||
|
||||
const newPackageJson = { |
||||
...packageJson, |
||||
main: packageJson.publishConfig?.main ?? packageJson.main, |
||||
}; |
||||
|
||||
if (packageJson.publishConfig?.types) { |
||||
newPackageJson.types = packageJson.publishConfig.types; |
||||
} |
||||
|
||||
if (packageJson.publishConfig?.module) { |
||||
newPackageJson.module = packageJson.publishConfig.module; |
||||
} |
||||
|
||||
try { |
||||
fs.writeFileSync(`${cwd}/package.json`, JSON.stringify(newPackageJson, null, 2)); |
||||
} catch (e) {} |
Loading…
Reference in new issue