| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import * as fs from 'node:fs'
- import * as path from 'node:path'
- const SRC_DIR = path.resolve(__dirname, '..', 'src')
- interface ExportMap {
- [key: string]: {
- import: string
- types: string
- }
- }
- function getAllSourceFiles(dir: string): ExportMap {
- const entries = fs.readdirSync(dir, { withFileTypes: true })
- const exportsMap: ExportMap = {}
- for (const entry of entries) {
- const fullPath = path.join(dir, entry.name)
- if (entry.isDirectory()) {
- Object.assign(exportsMap, getAllSourceFiles(fullPath))
- } else if (entry.isFile() && /\.(ts|tsx|css)$/.test(entry.name)) {
- const relativePath = path.relative(SRC_DIR, fullPath)
- const noExtension = relativePath.replace(/\.(ts|tsx)$/, '')
- const segments = noExtension.split(path.sep)
- // If filename is "index", remove it from the export path
- const isIndex = segments[segments.length - 1] === 'index'
- const exportSegments = isIndex ? segments.slice(0, -1) : segments
- const subpath = `./${exportSegments.join('/')}` // clean export
- const filePath = `./src/${relativePath.replace(/\\/g, '/')}`
- exportsMap[subpath] = {
- import: filePath,
- types: filePath,
- }
- }
- }
- return exportsMap
- }
- function updatePackageJson(exportsMap: ExportMap): void {
- const packageJsonPath = path.resolve(__dirname, '..', 'package.json')
- const packageJsonRaw = fs.readFileSync(packageJsonPath, 'utf8')
- const packageJson = JSON.parse(packageJsonRaw)
- packageJson.exports = {
- './package.json': './package.json',
- '.': {
- import: './index.tsx',
- types: './index.tsx',
- },
- ...exportsMap,
- }
- fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))
- console.log('✅ package.json exports updated (with clean index paths).')
- }
- // Run the export generation
- const exportsMap = getAllSourceFiles(SRC_DIR)
- updatePackageJson(exportsMap)
|