| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  | import PackageJson from '@npmcli/package-json'; | 
					
						
							|  |  |  | import { mkdir } from 'node:fs/promises'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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; | 
					
						
							| 
									
										
										
										
											2025-06-12 21:25:16 +08:00
										 |  |  |   const typesIndex = pkgJson.content.publishConfig?.types ?? pkgJson.content.types; | 
					
						
							| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   const exports = { | 
					
						
							|  |  |  |     './package.json': './package.json', | 
					
						
							|  |  |  |     '.': { | 
					
						
							|  |  |  |       import: { | 
					
						
							| 
									
										
										
										
											2025-06-12 21:25:16 +08:00
										 |  |  |         types: typesIndex, | 
					
						
							| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  |         default: esmIndex, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       require: { | 
					
						
							| 
									
										
										
										
											2025-06-12 21:25:16 +08:00
										 |  |  |         types: typesIndex, | 
					
						
							| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  |         default: cjsIndex, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2025-03-06 14:09:42 +08:00
										 |  |  |   // Fix so scenes can access `@grafana/schema` nested dist import paths e.g.
 | 
					
						
							|  |  |  |   // import {} from '@grafana/schema/dist/esm/raw/composable/bargauge/panelcfg/x/BarGaugePanelCfg_types.gen'
 | 
					
						
							|  |  |  |   if (pkgJson.content.name === '@grafana/schema') { | 
					
						
							|  |  |  |     exports['./dist/*'] = { | 
					
						
							|  |  |  |       types: './dist/*', | 
					
						
							|  |  |  |       default: './dist/*', | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-10 21:45:34 +08:00
										 |  |  |   // Fix for @grafana/i18n so eslint-plugin can be imported by consumers
 | 
					
						
							|  |  |  |   if (pkgJson.content.name === '@grafana/i18n') { | 
					
						
							|  |  |  |     exports['./eslint-plugin'] = { | 
					
						
							|  |  |  |       import: './dist/eslint/index.cjs', | 
					
						
							|  |  |  |       require: './dist/eslint/index.cjs', | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  |   pkgJson.update({ | 
					
						
							|  |  |  |     main: cjsIndex, | 
					
						
							| 
									
										
										
										
											2025-06-12 21:25:16 +08:00
										 |  |  |     types: typesIndex, | 
					
						
							| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  |     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: { | 
					
						
							| 
									
										
										
										
											2025-06-12 21:25:16 +08:00
										 |  |  |             types: typesIndex.replace('index', aliasName), | 
					
						
							| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  |             default: esmIndex.replace('index', aliasName), | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           require: { | 
					
						
							| 
									
										
										
										
											2025-06-12 21:25:16 +08:00
										 |  |  |             types: typesIndex.replace('index', aliasName), | 
					
						
							| 
									
										
										
										
											2025-03-27 15:59:57 +08:00
										 |  |  |             default: cjsIndex.replace('index', aliasName), | 
					
						
							| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  |           }, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       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, | 
					
						
							| 
									
										
										
										
											2025-06-12 21:25:16 +08:00
										 |  |  |         types: `../dist/types/${aliasName}.d.ts`, | 
					
						
							| 
									
										
										
										
											2025-03-04 16:55:41 +08:00
										 |  |  |         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); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |