openpencil/tools/release-packages/tests/publish-dirs.test.ts
Danila Poyarkov 62ba072b26
refactor(ai): ship Harness as optional companion (#561)
* Revert "feat(ai): add HarnessAgent sidecar foundation (#560)"

This reverts commit 83a5ea1b42.

* Revert "Revert "feat(ai): add HarnessAgent sidecar foundation (#560)""

This reverts commit 0d8c03515888c62dc47186d4a3b0b7b04e78f8af.

* refactor(ai): ship Harness as optional companion

* fix(ai): support Harness companion on Windows

* test(ai): restore navigator after Harness Windows test
2026-08-19 20:04:35 +03:00

94 lines
2.8 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 {
DEFAULT_PACKAGES,
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('DEFAULT_PACKAGES', () => {
test('includes every public workspace package that release publish must pack', () => {
expect(DEFAULT_PACKAGES.map((pkg) => pkg.dir)).toEqual([
'packages/scene-graph',
'packages/pen',
'packages/kiwi',
'packages/fig',
'packages/core',
'packages/dom-css',
'packages/cli',
'packages/mcp',
'packages/harness',
'packages/vue'
])
})
})
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'
})
})
})