prepare-package-set.spec.ts 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { afterEach, describe, expect, it, vi } from 'vitest'
  2. import {
  3. assertDesktopHostPackageFiles,
  4. selectDesktopPackageClosure,
  5. type PackedDesktopPackage,
  6. } from '../scripts/prepare-package-set.ts'
  7. function packed(name: string, manifest: Record<string, unknown> = {}): PackedDesktopPackage {
  8. return { tarball: `${name}.tgz`, manifest: { name, version: '1.0.0', ...manifest } }
  9. }
  10. describe('desktop package-set selection', () => {
  11. afterEach(() => {
  12. vi.unstubAllEnvs()
  13. })
  14. it('does not select a packaging target when imported as a library', async () => {
  15. vi.stubEnv('DSH_DESKTOP_TARGET_PLATFORM', 'linux')
  16. vi.stubEnv('DSH_DESKTOP_TARGET_ARCH', 'x64')
  17. vi.resetModules()
  18. await expect(import('../scripts/prepare-package-set.ts')).resolves.toHaveProperty('prepareDesktopPackageSet')
  19. })
  20. it('includes only the available internal production closure', () => {
  21. const available = new Map<string, PackedDesktopPackage>([
  22. ['@deepseek-ai/dsh', packed('@deepseek-ai/dsh', {
  23. dependencies: { '@deepseek-ai/dsh-base': '^1.0.0', external: '^2.0.0' },
  24. optionalDependencies: { '@deepseek-ai/platform-package': '1.0.0', '@deepseek-ai/missing-platform': '1.0.0' },
  25. })],
  26. ['@deepseek-ai/dsh-desktop-host', packed('@deepseek-ai/dsh-desktop-host', {
  27. dependencies: { '@deepseek-ai/dsh': '^1.0.0' },
  28. })],
  29. ['@deepseek-ai/dsh-base', packed('@deepseek-ai/dsh-base', {
  30. peerDependencies: { '@deepseek-ai/cordis': '^1.0.0' },
  31. })],
  32. ['@deepseek-ai/cordis', packed('@deepseek-ai/cordis')],
  33. ['@deepseek-ai/platform-package', packed('@deepseek-ai/platform-package')],
  34. ['@deepseek-ai/unused', packed('@deepseek-ai/unused')],
  35. ])
  36. expect(selectDesktopPackageClosure(available).map(entry => entry.manifest.name)).toEqual([
  37. '@deepseek-ai/cordis',
  38. '@deepseek-ai/dsh',
  39. '@deepseek-ai/dsh-base',
  40. '@deepseek-ai/dsh-desktop-host',
  41. '@deepseek-ai/platform-package',
  42. ])
  43. })
  44. it.each([
  45. '@deepseek-ai/dsh-base', '@deepseek-ai/cordis', '@deepseek-ai/node-addon-system',
  46. ])('rejects required prepared package %s absent from the packed release inputs', (dependency) => {
  47. const available = new Map<string, PackedDesktopPackage>([
  48. ['@deepseek-ai/dsh', packed('@deepseek-ai/dsh', {
  49. dependencies: { [dependency]: '^1.0.0' },
  50. })],
  51. ['@deepseek-ai/dsh-desktop-host', packed('@deepseek-ai/dsh-desktop-host', {
  52. dependencies: { '@deepseek-ai/dsh': '^1.0.0' },
  53. })],
  54. ])
  55. expect(() => selectDesktopPackageClosure(available)).toThrow(/unpacked package/u)
  56. expect(() => selectDesktopPackageClosure(new Map([
  57. ['@deepseek-ai/dsh', packed('@deepseek-ai/dsh')],
  58. ]))).toThrow(/omit @deepseek-ai\/dsh-desktop-host/u)
  59. })
  60. it('leaves independently published Office packages to npm resolution', () => {
  61. const available = new Map<string, PackedDesktopPackage>([
  62. ['@deepseek-ai/dsh', packed('@deepseek-ai/dsh', {
  63. dependencies: {
  64. '@deepseek-ai/libreoffice-kit': '0.0.1',
  65. '@deepseek-ai/libreoffice-kit-wasm': '0.0.1',
  66. },
  67. })],
  68. ['@deepseek-ai/dsh-desktop-host', packed('@deepseek-ai/dsh-desktop-host')],
  69. ])
  70. expect(selectDesktopPackageClosure(available).map(entry => entry.manifest.name)).toEqual([
  71. '@deepseek-ai/dsh', '@deepseek-ai/dsh-desktop-host',
  72. ])
  73. })
  74. it('requires the Desktop Host entry', () => {
  75. const files = [
  76. 'package/lib/index.js',
  77. ]
  78. expect(() => {
  79. assertDesktopHostPackageFiles(files)
  80. }).not.toThrow()
  81. expect(() => {
  82. assertDesktopHostPackageFiles(files.slice(1))
  83. }).toThrow(/lib\/index\.js/u)
  84. })
  85. })