diff --git a/packages/no-relative-imports/package.json b/packages/no-relative-imports/package.json index 020a9d6238..0475d053bc 100644 --- a/packages/no-relative-imports/package.json +++ b/packages/no-relative-imports/package.json @@ -23,6 +23,7 @@ "scripts": { "package": "tsc", "test": "vitest run", + "typecheck:tests": "bash typecheck-tests.sh", "prepare": "pnpm package" }, "exports": { diff --git a/packages/no-relative-imports/src/configParsing.ts b/packages/no-relative-imports/src/configParsing.ts new file mode 100644 index 0000000000..088dd6e4c1 --- /dev/null +++ b/packages/no-relative-imports/src/configParsing.ts @@ -0,0 +1,12 @@ +/** + * TS Configs... I hate them. + * + * TS Configs can point to other configs in two way: + * + * - `extends`, which is a "super" config that you need to fall back on. + * An important note about "super" configs, is that the paths are relative + * to the folder that the "super" config is in. OR the baseUrl. + * - `references`, which lets you provide an array of TS Configs or directories + * that include TS Configs. + * These configs have different file includes and excludes. + */ diff --git a/packages/no-relative-imports/test/basic-base-url/src/foo.ts b/packages/no-relative-imports/test/basic-base-url/src/foo.ts new file mode 100644 index 0000000000..820c643a23 --- /dev/null +++ b/packages/no-relative-imports/test/basic-base-url/src/foo.ts @@ -0,0 +1 @@ +export const A = 69; diff --git a/packages/no-relative-imports/test/basic-base-url/src/main.ts b/packages/no-relative-imports/test/basic-base-url/src/main.ts new file mode 100644 index 0000000000..9e69316070 --- /dev/null +++ b/packages/no-relative-imports/test/basic-base-url/src/main.ts @@ -0,0 +1,2 @@ +import { A } from 'foo'; +void A; diff --git a/packages/no-relative-imports/test/basic-base-url/tsconfig.json b/packages/no-relative-imports/test/basic-base-url/tsconfig.json new file mode 100644 index 0000000000..66c88c3b9b --- /dev/null +++ b/packages/no-relative-imports/test/basic-base-url/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": "./src/", + "paths": { + "foo": ["./foo"] + } + } +} diff --git a/packages/no-relative-imports/test/basic/src/foo.ts b/packages/no-relative-imports/test/basic/src/foo.ts new file mode 100644 index 0000000000..820c643a23 --- /dev/null +++ b/packages/no-relative-imports/test/basic/src/foo.ts @@ -0,0 +1 @@ +export const A = 69; diff --git a/packages/no-relative-imports/test/basic/src/main.ts b/packages/no-relative-imports/test/basic/src/main.ts new file mode 100644 index 0000000000..9e69316070 --- /dev/null +++ b/packages/no-relative-imports/test/basic/src/main.ts @@ -0,0 +1,2 @@ +import { A } from 'foo'; +void A; diff --git a/packages/no-relative-imports/test/basic/tsconfig.json b/packages/no-relative-imports/test/basic/tsconfig.json new file mode 100644 index 0000000000..02d5bce3f8 --- /dev/null +++ b/packages/no-relative-imports/test/basic/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": { + "foo": ["./src/foo"] + } + } +} diff --git a/packages/no-relative-imports/test/extends-child-base-url/base-config/tsconfig.json b/packages/no-relative-imports/test/extends-child-base-url/base-config/tsconfig.json new file mode 100644 index 0000000000..2e13f81714 --- /dev/null +++ b/packages/no-relative-imports/test/extends-child-base-url/base-config/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": { + "bar": ["./bar"] + } + } +} diff --git a/packages/no-relative-imports/test/extends-child-base-url/src/bar.ts b/packages/no-relative-imports/test/extends-child-base-url/src/bar.ts new file mode 100644 index 0000000000..86dac194fa --- /dev/null +++ b/packages/no-relative-imports/test/extends-child-base-url/src/bar.ts @@ -0,0 +1 @@ +export const B = 69; diff --git a/packages/no-relative-imports/test/extends-child-base-url/src/foo.ts b/packages/no-relative-imports/test/extends-child-base-url/src/foo.ts new file mode 100644 index 0000000000..820c643a23 --- /dev/null +++ b/packages/no-relative-imports/test/extends-child-base-url/src/foo.ts @@ -0,0 +1 @@ +export const A = 69; diff --git a/packages/no-relative-imports/test/extends-child-base-url/src/main.ts b/packages/no-relative-imports/test/extends-child-base-url/src/main.ts new file mode 100644 index 0000000000..b2f8008634 --- /dev/null +++ b/packages/no-relative-imports/test/extends-child-base-url/src/main.ts @@ -0,0 +1,4 @@ +import { B } from 'bar'; +import { A } from 'foo'; +void A; +void B; diff --git a/packages/no-relative-imports/test/extends-child-base-url/tsconfig.json b/packages/no-relative-imports/test/extends-child-base-url/tsconfig.json new file mode 100644 index 0000000000..9dfa5714a3 --- /dev/null +++ b/packages/no-relative-imports/test/extends-child-base-url/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "./base-config/tsconfig.json", + "compilerOptions": { + "baseUrl": "./src/", + "paths": { + "foo": ["./foo"] + } + } +} diff --git a/packages/no-relative-imports/test/extends/base-config/tsconfig.json b/packages/no-relative-imports/test/extends/base-config/tsconfig.json new file mode 100644 index 0000000000..934b238b66 --- /dev/null +++ b/packages/no-relative-imports/test/extends/base-config/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": { + "bar": ["../src/bar"] + } + } +} diff --git a/packages/no-relative-imports/test/extends/src/bar.ts b/packages/no-relative-imports/test/extends/src/bar.ts new file mode 100644 index 0000000000..86dac194fa --- /dev/null +++ b/packages/no-relative-imports/test/extends/src/bar.ts @@ -0,0 +1 @@ +export const B = 69; diff --git a/packages/no-relative-imports/test/extends/src/foo.ts b/packages/no-relative-imports/test/extends/src/foo.ts new file mode 100644 index 0000000000..820c643a23 --- /dev/null +++ b/packages/no-relative-imports/test/extends/src/foo.ts @@ -0,0 +1 @@ +export const A = 69; diff --git a/packages/no-relative-imports/test/extends/src/main.ts b/packages/no-relative-imports/test/extends/src/main.ts new file mode 100644 index 0000000000..6d8ccfc718 --- /dev/null +++ b/packages/no-relative-imports/test/extends/src/main.ts @@ -0,0 +1,6 @@ +// As far as I can tell now, you can't have paths in a base/super config if you don't have a baseUrl set??? +// How does it work for svelte though???.... +import { A } from 'foo'; +// import { B } from 'bar'; +void A; +// void B; diff --git a/packages/no-relative-imports/test/extends/tsconfig.json b/packages/no-relative-imports/test/extends/tsconfig.json new file mode 100644 index 0000000000..2d27479ebb --- /dev/null +++ b/packages/no-relative-imports/test/extends/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "./base-config/tsconfig.json", + "compilerOptions": { + "paths": { + "foo": ["./src/foo"] + } + } +} diff --git a/packages/no-relative-imports/typecheck-tests.sh b/packages/no-relative-imports/typecheck-tests.sh new file mode 100755 index 0000000000..6f4eb2458c --- /dev/null +++ b/packages/no-relative-imports/typecheck-tests.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# Exit on any error +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +NC='\033[0m' # No Color + +# Track if any typecheck fails +FAILED=0 + +# Check if a specific test case was provided +# Skip the "--" argument if present (from pnpm run) +TEST_CASE="$1" +if [ "$1" = "--" ]; then + TEST_CASE="$2" +fi + +if [ -n "$TEST_CASE" ]; then + # Specific test case requested + TEST_DIR="test/$TEST_CASE" + + if [ ! -d "$TEST_DIR" ]; then + echo -e "${RED}Error: Test directory '$TEST_DIR' does not exist${NC}" + echo "" + echo "Available test cases:" + for dir in test/*/; do + if [ -f "$dir/tsconfig.json" ]; then + basename "$dir" + fi + done + exit 1 + fi + + if [ ! -f "$TEST_DIR/tsconfig.json" ]; then + echo -e "${YELLOW}Warning: No tsconfig.json found in '$TEST_DIR'${NC}" + exit 1 + fi + + echo "Running TypeScript type checking on $TEST_DIR..." + echo "" + + if pnpm tsc --noEmit -p "$TEST_DIR"; then + echo -e "${GREEN}✓${NC} $TEST_DIR passed" + exit 0 + else + echo -e "${RED}✗${NC} $TEST_DIR failed" + exit 1 + fi +else + # Run on all test directories + echo "Running TypeScript type checking on all test directories..." + echo "" + + for dir in test/*/; do + if [ -f "$dir/tsconfig.json" ]; then + echo "Checking $dir..." + if pnpm tsc --noEmit -p "$dir"; then + echo -e "${GREEN}✓${NC} $dir passed" + else + echo -e "${RED}✗${NC} $dir failed" + FAILED=1 + fi + echo "" + fi + done + + if [ $FAILED -eq 0 ]; then + echo -e "${GREEN}All type checks passed!${NC}" + exit 0 + else + echo -e "${RED}Some type checks failed${NC}" + exit 1 + fi +fi \ No newline at end of file