| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import { describe, expect, it } from 'vitest'
- import {
- hasTypeRTRemoteNavigation,
- isForbiddenPublicationFile,
- validateTarballPayload,
- } from './publication-payload.ts'
- function validateFixtureTarball(files: readonly string[]): () => void {
- return () => {
- validateTarballPayload(files, 'fixture.tgz')
- }
- }
- describe('publication payload policy', () => {
- it.each([
- 'lib/index.js',
- 'lib/types/index.d.ts',
- 'lib/styles/base.css',
- ])('accepts %s', (file) => {
- expect(isForbiddenPublicationFile(file)).toBe(false)
- })
- it.each([
- 'src',
- './src',
- 'src/',
- 'src/index.ts',
- './src/index.ts',
- String.raw`src\index.ts`,
- 'lib/types/index.d.ts.map',
- './lib/types/index.d.ts.map',
- ])('rejects static manifest path %s', (file) => {
- expect(isForbiddenPublicationFile(file)).toBe(true)
- })
- it('rejects source members in packed tarballs', () => {
- expect(validateFixtureTarball([
- 'package/package.json',
- 'package/src/index.ts',
- ])).toThrow('fixture.tgz publishes source file package/src/index.ts')
- })
- it('rejects declaration maps in packed tarballs', () => {
- expect(validateFixtureTarball([
- 'package/package.json',
- 'package/lib/types/index.d.ts.map',
- ])).toThrow('fixture.tgz publishes declaration map package/lib/types/index.d.ts.map')
- })
- it('accepts a clean packed tarball', () => {
- expect(validateFixtureTarball([
- 'package/package.json',
- 'package/lib/index.js',
- 'package/lib/types/index.d.ts',
- 'package/lib/styles/base.css',
- ])).not.toThrow()
- })
- it('allows only the TypeRT declaration map and its navigable source tree when requested', () => {
- const policy = { typeRTRemoteNavigation: true }
- expect(isForbiddenPublicationFile('src/index.ts', policy)).toBe(false)
- expect(isForbiddenPublicationFile('lib/typert.remote-client.d.ts.map', policy)).toBe(false)
- expect(isForbiddenPublicationFile('lib/types/index.d.ts.map', policy)).toBe(true)
- expect(() => {
- validateTarballPayload([
- 'package/lib/typert.remote-client.d.ts.map',
- 'package/src/index.ts',
- ], 'fixture.tgz', policy)
- }).not.toThrow()
- })
- it('recognizes only the canonical Host-for-Client export pair', () => {
- expect(hasTypeRTRemoteNavigation({
- exports: {
- './remote': {
- types: './lib/typert.remote-client.d.ts',
- default: './lib/typert.remote-client.js',
- },
- },
- })).toBe(true)
- expect(hasTypeRTRemoteNavigation({ exports: { './remote': './lib/remote.js' } })).toBe(false)
- })
- })
|