forked from
npmx.dev/npmx.dev
[READ-ONLY]
a fast, modern browser for the npm registry
1import { describe, expect, it } from 'vitest'
2import { isBinaryOnlyPackage, isCreatePackage } from '../../../../shared/utils/binary-detection'
3
4describe('binary-detection', () => {
5 describe('isCreatePackage', () => {
6 it('returns true for create-* packages', () => {
7 expect(isCreatePackage('create-vite')).toBe(true)
8 expect(isCreatePackage('create-svelte-app')).toBe(true)
9 expect(isCreatePackage('create-lit-app')).toBe(true)
10 })
11
12 it('returns true for scoped create-* packages', () => {
13 expect(isCreatePackage('@lit/create-lit')).toBe(true)
14 expect(isCreatePackage('@scope/create-something')).toBe(true)
15 })
16
17 it('returns false for non-create packages', () => {
18 expect(isCreatePackage('vite')).toBe(false)
19 expect(isCreatePackage('lit')).toBe(false)
20 expect(isCreatePackage('my-create-tool')).toBe(false)
21 })
22
23 it('returns false for scoped non-create packages', () => {
24 expect(isCreatePackage('@scope/some-package')).toBe(false)
25 })
26 })
27
28 describe('isBinaryOnlyPackage', () => {
29 it('returns true for create-* packages regardless of fields', () => {
30 expect(isBinaryOnlyPackage({ name: 'create-vite' })).toBe(true)
31 expect(isBinaryOnlyPackage({ name: 'create-vite', main: './index.js' })).toBe(true)
32 })
33
34 it('returns true for scoped create-* packages', () => {
35 expect(isBinaryOnlyPackage({ name: '@lit/create-lit' })).toBe(true)
36 })
37
38 it('returns true for packages with bin but no entry points', () => {
39 expect(isBinaryOnlyPackage({ name: 'eslint', bin: './bin/eslint.js' })).toBe(true)
40 expect(
41 isBinaryOnlyPackage({
42 name: 'typescript',
43 bin: { tsc: './bin/tsc', tsserver: './bin/tsserver' },
44 }),
45 ).toBe(true)
46 })
47
48 it('returns false for packages with bin and main', () => {
49 expect(
50 isBinaryOnlyPackage({
51 name: 'eslint',
52 bin: './bin/eslint.js',
53 main: './lib/index.js',
54 }),
55 ).toBe(false)
56 })
57
58 it('returns false for packages with bin and module', () => {
59 expect(
60 isBinaryOnlyPackage({
61 name: 'some-pkg',
62 bin: './bin/cli.js',
63 module: './dist/index.mjs',
64 }),
65 ).toBe(false)
66 })
67
68 it('returns false for packages with bin and exports', () => {
69 expect(
70 isBinaryOnlyPackage({
71 name: 'some-pkg',
72 bin: './bin/cli.js',
73 exports: { '.': './dist/index.js' },
74 }),
75 ).toBe(false)
76 })
77
78 it('returns false for packages with no bin and no entry points', () => {
79 expect(isBinaryOnlyPackage({ name: 'some-pkg' })).toBe(false)
80 })
81
82 it('returns false for packages with empty bin object', () => {
83 expect(isBinaryOnlyPackage({ name: 'some-pkg', bin: {} })).toBe(false)
84 })
85
86 it('returns false for library-only packages', () => {
87 expect(isBinaryOnlyPackage({ name: 'lodash', main: './lodash.js' })).toBe(false)
88 })
89 })
90})