openpencil/tools/release-packages/tests/publish-dirs.test.ts
2026-06-07 09:15:15 +03:00

73 lines
2.4 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { mkdir, readFile, writeFile } from 'node:fs/promises'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { preparePublishDirectories, publishPackageJSON } from '../src/publish-dirs'
async function fixtureRoot() {
const root = join(tmpdir(), `open-pencil-release-packages-${crypto.randomUUID()}`)
await mkdir(join(root, 'packages/example/dist'), { recursive: true })
await writeFile(join(root, 'packages/example/dist/index.js'), 'export {}\n')
await writeFile(
join(root, 'packages/example/package.json'),
JSON.stringify(
{
name: '@open-pencil/example',
version: '1.0.0',
scripts: { build: 'tsdown' },
dependencies: { '@open-pencil/core': 'workspace:*', zod: '^4.0.0' },
devDependencies: { typescript: '^5.0.0' },
publishConfig: { access: 'public', main: './dist/index.js', types: './dist/index.d.ts' }
},
null,
2
)
)
return root
}
describe('publishPackageJSON', () => {
test('rewrites workspace dependencies and strips private build fields', () => {
const json = publishPackageJSON(
{
name: '@open-pencil/example',
scripts: { build: 'tsdown' },
dependencies: { '@open-pencil/core': 'workspace:*', zod: '^4.0.0' },
devDependencies: { typescript: '^5.0.0' },
publishConfig: { access: 'public', main: './dist/index.js' }
},
'0.13.2'
)
expect(json).toEqual({
name: '@open-pencil/example',
dependencies: { '@open-pencil/core': '^0.13.2', zod: '^4.0.0' },
main: './dist/index.js'
})
})
})
describe('preparePublishDirectories', () => {
test('copies requested files and writes publish package metadata', async () => {
const root = await fixtureRoot()
const outRoot = join(root, '.publish')
await preparePublishDirectories({
coreVersion: '0.13.2',
outRoot,
packages: [{ dir: 'packages/example', include: ['dist'], extraFiles: [] }],
root
})
expect(await readFile(join(outRoot, 'example/dist/index.js'), 'utf8')).toBe('export {}\n')
expect(JSON.parse(await readFile(join(outRoot, 'example/package.json'), 'utf8'))).toEqual({
name: '@open-pencil/example',
version: '1.0.0',
dependencies: { '@open-pencil/core': '^0.13.2', zod: '^4.0.0' },
main: './dist/index.js',
types: './dist/index.d.ts'
})
})
})