Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kentcdodds/lineage

src/classify.node.test.ts

85 lines · 2.7 KB · TypeScript
import assert from 'node:assert/strict'
import test from 'node:test'
import {
	classifyPath,
	kindFor,
	languageFor,
	parseLinguistGenerated,
	patchLooksGenerated,
} from './classify.ts'

test('counts hand-written source, including names that mention generated', () => {
	const result = classifyPath('packages/worker/src/identity/generated-username.ts')
	assert.equal(result.countable, true)
	assert.equal(result.language, 'TypeScript')
	assert.equal(result.kind, 'source')
	assert.equal(
		classifyPath('packages/worker/src/app/saved-ui-hosted-html.ts').countable,
		true,
	)
})

test('skips wrangler types even though they are committed', () => {
	const result = classifyPath('packages/worker/worker-configuration.d.ts', {
		patch: '+// Generated by Wrangler by running `wrangler types`\n+interface Env {}',
	})
	assert.equal(result.countable, false)
	assert.match(result.reason, /wrangler-types|generated-content-marker/)
})

test('skips generated declaration stubs and lockfiles', () => {
	assert.equal(
		classifyPath('packages/worker/src/generated-guide-catalog.d.ts').countable,
		false,
	)
	assert.equal(
		classifyPath('packages/shared/src/generated-ui-utils.ts').countable,
		false,
	)
	assert.equal(classifyPath('package-lock.json').countable, false)
	assert.equal(classifyPath('pnpm-lock.yaml').countable, false)
})

test('skips files under generated directories', () => {
	assert.equal(
		classifyPath('packages/worker/src/generated/guide-catalog.mjs').countable,
		false,
	)
})

test('classifies tests, docs, and source', () => {
	assert.equal(kindFor('tools/ci/resource-utils.node.test.ts'), 'tests')
	assert.equal(kindFor('docs/use/packages.md'), 'docs')
	assert.equal(kindFor('README.md'), 'docs')
	assert.equal(kindFor('packages/worker/src/index.ts'), 'source')
	assert.equal(languageFor('packages/worker/src/app.ts'), 'TypeScript')
	assert.equal(languageFor('docs/use/packages.md'), 'Markdown')
})

test('detects generated file headers in patches', () => {
	assert.equal(
		patchLooksGenerated(
			'@@ -1,2 +1,3 @@\n+/* eslint-disable */\n+// Generated by Wrangler by running `wrangler types`\n interface Env {}',
		),
		true,
	)
	assert.equal(
		patchLooksGenerated('@@ -1 +1 @@\n-export const x = 1\n+export const x = 2\n'),
		false,
	)
})

test('honors linguist-generated attributes', () => {
	const patterns = parseLinguistGenerated(
		'packages/worker/migrations/*.sql text eol=lf\n*.generated.ts linguist-generated=true\n',
	)
	const result = classifyPath('src/foo.generated.ts', {
		ignore: {
			gitignore: [],
			linguistGenerated: patterns,
			knownGeneratedPaths: new Set(),
		},
	})
	assert.equal(result.countable, false)
	assert.equal(result.reason, 'gitattributes-linguist-generated')
})