publication-payload.spec.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { describe, expect, it } from 'vitest'
  2. import { isForbiddenPublicationFile, validateTarballPayload } from './publication-payload.ts'
  3. function validateFixtureTarball(files: readonly string[]): () => void {
  4. return () => {
  5. validateTarballPayload(files, 'fixture.tgz')
  6. }
  7. }
  8. describe('publication payload policy', () => {
  9. it.each([
  10. 'lib/index.js',
  11. 'lib/types/index.d.ts',
  12. 'lib/styles/base.css',
  13. ])('accepts %s', (file) => {
  14. expect(isForbiddenPublicationFile(file)).toBe(false)
  15. })
  16. it.each([
  17. 'src',
  18. './src',
  19. 'src/',
  20. 'src/index.ts',
  21. './src/index.ts',
  22. String.raw`src\index.ts`,
  23. 'lib/types/index.d.ts.map',
  24. './lib/types/index.d.ts.map',
  25. ])('rejects static manifest path %s', (file) => {
  26. expect(isForbiddenPublicationFile(file)).toBe(true)
  27. })
  28. it('rejects source members in packed tarballs', () => {
  29. expect(validateFixtureTarball([
  30. 'package/package.json',
  31. 'package/src/index.ts',
  32. ])).toThrow('fixture.tgz publishes source file package/src/index.ts')
  33. })
  34. it('rejects declaration maps in packed tarballs', () => {
  35. expect(validateFixtureTarball([
  36. 'package/package.json',
  37. 'package/lib/types/index.d.ts.map',
  38. ])).toThrow('fixture.tgz publishes declaration map package/lib/types/index.d.ts.map')
  39. })
  40. it('accepts a clean packed tarball', () => {
  41. expect(validateFixtureTarball([
  42. 'package/package.json',
  43. 'package/lib/index.js',
  44. 'package/lib/types/index.d.ts',
  45. 'package/lib/styles/base.css',
  46. ])).not.toThrow()
  47. })
  48. })