check-workspace-constraints.spec.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /** Experimental-package publication and dependency constraints. */
  2. import { describe, expect, it } from 'vitest'
  3. import {
  4. checkExperimentalDependencyIsolation,
  5. checkExperimentalManifest,
  6. type WorkspaceManifest,
  7. } from './check-workspace-constraints.ts'
  8. const experimental: WorkspaceManifest = {
  9. dir: 'packages/experimental/prototype',
  10. manifest: { name: '@deepseek-ai/dsh-prototype', private: true },
  11. }
  12. describe('experimental workspace constraints', () => {
  13. it('requires private manifests without publication metadata', () => {
  14. expect(checkExperimentalManifest(experimental)).toEqual([])
  15. expect(checkExperimentalManifest({
  16. ...experimental,
  17. manifest: { ...experimental.manifest, private: false, publishConfig: { access: 'public' } },
  18. })).toEqual([
  19. '@deepseek-ai/dsh-prototype: experimental package must set "private": true',
  20. '@deepseek-ai/dsh-prototype: experimental package must omit publishConfig',
  21. ])
  22. })
  23. it.each(['dependencies', 'optionalDependencies', 'peerDependencies'] as const)(
  24. 'rejects release %s on an experimental package',
  25. (section) => {
  26. expect(checkExperimentalDependencyIsolation([experimental, {
  27. dir: 'packages/core/consumer',
  28. manifest: {
  29. name: '@deepseek-ai/dsh-consumer',
  30. [section]: { '@deepseek-ai/dsh-prototype': 'workspace:^' },
  31. },
  32. }])).toEqual([
  33. `@deepseek-ai/dsh-consumer: ${section}.@deepseek-ai/dsh-prototype must not reference an experimental package`,
  34. ])
  35. },
  36. )
  37. it('allows development and experimental consumers but rejects the Python release runtime', () => {
  38. const manifests: WorkspaceManifest[] = [experimental, {
  39. dir: 'packages/core/test-only',
  40. manifest: {
  41. name: '@deepseek-ai/dsh-test-only',
  42. devDependencies: { '@deepseek-ai/dsh-prototype': 'workspace:^' },
  43. },
  44. }, {
  45. dir: 'packages/experimental/consumer',
  46. manifest: {
  47. name: '@deepseek-ai/dsh-experimental-consumer',
  48. dependencies: { '@deepseek-ai/dsh-prototype': 'workspace:^' },
  49. },
  50. }, {
  51. dir: 'python/sdk-runtime',
  52. manifest: {
  53. name: '@deepseek-ai/dsh-python-runtime',
  54. dependencies: { '@deepseek-ai/dsh-prototype': 'workspace:^' },
  55. },
  56. }]
  57. expect(checkExperimentalDependencyIsolation(manifests)).toEqual([
  58. '@deepseek-ai/dsh-python-runtime: dependencies.@deepseek-ai/dsh-prototype must not reference an experimental package',
  59. ])
  60. })
  61. })