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