Skip to content

Commit

Permalink
build: use TypeScript project references for faster builds (#631)
Browse files Browse the repository at this point in the history
* switch to composite tsconfig

* use project references to speed up typechecking, linting, and tests

* fix types etc

* switch to jest preset
  • Loading branch information
macalinao committed Jun 16, 2022
1 parent f695ab1 commit 0d668c6
Show file tree
Hide file tree
Showing 24 changed files with 71 additions and 28 deletions.
8 changes: 5 additions & 3 deletions .eslintrc.cjs
Expand Up @@ -2,19 +2,21 @@

"use strict";

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
require("@rushstack/eslint-patch/modern-module-resolution");

/** @type import('eslint').Linter.Config */
/** @type import('@typescript-eslint/utils').TSESLint.Linter.Config */
module.exports = {
env: {
browser: true,
node: true,
jest: true,
},
ignorePatterns: ["*.js", "*.cjs"],
settings: { react: { version: "18" } },
extends: ["@saberhq/eslint-config-react"],
parserOptions: {
project: "tsconfig.json",
project: ["tsconfig.json", "./**/tsconfig*.json"],
EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true,
},
};
7 changes: 1 addition & 6 deletions jest.config.mjs
Expand Up @@ -2,15 +2,10 @@

/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
export default {
preset: "ts-jest",
testEnvironment: "node",
extensionsToTreatAsEsm: [".ts"],
preset: "ts-jest/presets/default-esm",
globals: {
"ts-jest": {
useESM: true,
tsconfig: {
types: ["node", "jest"],
},
},
},
moduleNameMapper: {
Expand Down
2 changes: 2 additions & 0 deletions package.json
Expand Up @@ -20,6 +20,7 @@
"@rushstack/eslint-patch": "^1.1.3",
"@saberhq/eslint-config": "workspace:*",
"@saberhq/eslint-config-react": "workspace:*",
"@saberhq/tsconfig": "workspace:*",
"@saberhq/use-solana": "workspace:*",
"@size-limit/file": "^7.0.8",
"@size-limit/webpack": "^7.0.8",
Expand All @@ -34,6 +35,7 @@
"@types/react": "^18.0.13",
"@types/source-map-support": "^0.5.4",
"@types/w3c-web-usb": "^1.0.6",
"@typescript-eslint/utils": "^5.28.0",
"@yarnpkg/doctor": "^3.1.3",
"bn.js": "^5.2.1",
"buffer": "^6.0.3",
Expand Down
3 changes: 2 additions & 1 deletion packages/anchor-contrib/tsconfig.json
@@ -1,6 +1,7 @@
{
"extends": "@saberhq/tsconfig/tsconfig.module.json",
"extends": "@saberhq/tsconfig/tsconfig.mono.json",
"compilerOptions": {
"rootDir": "src/",
"outDir": "dist/esm/"
},
"include": ["src/"]
Expand Down
3 changes: 2 additions & 1 deletion packages/chai-solana/tsconfig.json
@@ -1,6 +1,7 @@
{
"extends": "@saberhq/tsconfig/tsconfig.module.json",
"extends": "@saberhq/tsconfig/tsconfig.mono.json",
"compilerOptions": {
"rootDir": "src/",
"outDir": "dist/esm/"
},
"include": ["src/"]
Expand Down
2 changes: 2 additions & 0 deletions packages/eslint-config-react/tsconfig.json
@@ -1,6 +1,8 @@
{
"extends": "@saberhq/tsconfig/tsconfig.cjs.json",
"compilerOptions": {
"rootDir": "src/",
"composite": true,
"outDir": "dist/cjs/",
"types": ["node"]
},
Expand Down
2 changes: 2 additions & 0 deletions packages/eslint-config/src/eslint-config.cts
@@ -1,3 +1,5 @@
import "@typescript-eslint/eslint-plugin";

import type { Linter } from "eslint";

const config: Linter.Config = {
Expand Down
2 changes: 2 additions & 0 deletions packages/eslint-config/tsconfig.json
@@ -1,6 +1,8 @@
{
"extends": "@saberhq/tsconfig/tsconfig.cjs.json",
"compilerOptions": {
"rootDir": "src/",
"composite": true,
"outDir": "dist/cjs/",
"types": ["node"]
},
Expand Down
3 changes: 2 additions & 1 deletion packages/option-utils/tsconfig.json
@@ -1,6 +1,7 @@
{
"extends": "@saberhq/tsconfig/tsconfig.module.json",
"extends": "@saberhq/tsconfig/tsconfig.mono.json",
"compilerOptions": {
"rootDir": "src/",
"outDir": "dist/esm/"
},
"include": ["src/"]
Expand Down
10 changes: 5 additions & 5 deletions packages/solana-contrib/tsconfig.cjs.json
@@ -1,8 +1,8 @@
{
"extends": "./tsconfig.json",
"extends": "@saberhq/tsconfig/tsconfig.cjs.json",
"compilerOptions": {
"module": "CommonJS",
"moduleResolution": "node",
"outDir": "dist/cjs/"
}
"outDir": "dist/cjs/",
"lib": ["ES2021.Promise", "ES2019"]
},
"include": ["src/"]
}
3 changes: 2 additions & 1 deletion packages/solana-contrib/tsconfig.json
@@ -1,6 +1,7 @@
{
"extends": "@saberhq/tsconfig/tsconfig.module.json",
"extends": "@saberhq/tsconfig/tsconfig.mono.json",
"compilerOptions": {
"rootDir": "src/",
"outDir": "dist/esm/",
"lib": ["ES2021.Promise", "ES2019"]
},
Expand Down
2 changes: 0 additions & 2 deletions packages/stableswap-sdk/.eslintignore

This file was deleted.

3 changes: 2 additions & 1 deletion packages/stableswap-sdk/tsconfig.json
@@ -1,6 +1,7 @@
{
"extends": "@saberhq/tsconfig/tsconfig.module.json",
"extends": "@saberhq/tsconfig/tsconfig.mono.json",
"compilerOptions": {
"rootDir": "src/",
"outDir": "dist/esm/"
},
"include": ["src/"],
Expand Down
3 changes: 2 additions & 1 deletion packages/token-utils/tsconfig.json
@@ -1,6 +1,7 @@
{
"extends": "@saberhq/tsconfig/tsconfig.module.json",
"extends": "@saberhq/tsconfig/tsconfig.mono.json",
"compilerOptions": {
"rootDir": "src/",
"outDir": "dist/esm/"
},
"include": ["src/"]
Expand Down
1 change: 1 addition & 0 deletions packages/tsconfig/tsconfig.cjs.json
@@ -1,4 +1,5 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "./tsconfig.lib.json",
"display": "Saber CommonJS TSConfig",
"compilerOptions": {
Expand Down
3 changes: 2 additions & 1 deletion packages/tsconfig/tsconfig.module.json
@@ -1,7 +1,8 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "./tsconfig.lib.json",
"display": "Saber Node16 TSConfig (recommended)",
"compilerOptions": {
"moduleResolution": "node16"
"moduleResolution": "Node16"
}
}
1 change: 1 addition & 0 deletions packages/tsconfig/tsconfig.module.react.json
@@ -1,4 +1,5 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "./tsconfig.react.json",
"display": "Saber Node16 React TSConfig (recommended)",
"compilerOptions": {
Expand Down
8 changes: 8 additions & 0 deletions packages/tsconfig/tsconfig.mono.json
@@ -0,0 +1,8 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "./tsconfig.module.json",
"display": "Saber Node16 TSConfig for monorepos (recommended)",
"compilerOptions": {
"composite": true
}
}
1 change: 1 addition & 0 deletions packages/tsconfig/tsconfig.react.json
@@ -1,4 +1,5 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "./tsconfig.lib.json",
"display": "Saber Emotion TSConfig",
"compilerOptions": {
Expand Down
3 changes: 2 additions & 1 deletion packages/tuple-utils/tsconfig.json
@@ -1,6 +1,7 @@
{
"extends": "@saberhq/tsconfig/tsconfig.module.json",
"extends": "@saberhq/tsconfig/tsconfig.mono.json",
"compilerOptions": {
"rootDir": "src/",
"outDir": "dist/esm/"
},
"include": ["src/"]
Expand Down
2 changes: 2 additions & 0 deletions packages/use-solana/tsconfig.json
@@ -1,6 +1,8 @@
{
"extends": "@saberhq/tsconfig/tsconfig.react.json",
"compilerOptions": {
"rootDir": "src/",
"composite": true,
"jsxImportSource": "react",
"lib": ["ES2015", "DOM"],
"outDir": "dist/esm/",
Expand Down
2 changes: 2 additions & 0 deletions packages/wallet-adapter-icons/tsconfig.json
@@ -1,6 +1,8 @@
{
"extends": "@saberhq/tsconfig/tsconfig.module.react.json",
"compilerOptions": {
"rootDir": "src/",
"composite": true,
"jsxImportSource": "react",
"outDir": "dist/esm/",
"skipLibCheck": false,
Expand Down
19 changes: 17 additions & 2 deletions tsconfig.json
@@ -1,9 +1,24 @@
{
"extends": "./packages/tsconfig/tsconfig.react.json",
"extends": "@saberhq/tsconfig/tsconfig.react.json",
"compilerOptions": {
"allowJs": true,
"noEmit": true,
"jsxImportSource": "react",
"types": ["jest"]
},
"include": ["packages/", "jest.config.mjs"]
"files": ["jest.config.mjs", ".eslintrc.cjs"],
"include": ["./**/*.test.ts"],
"references": [
{ "path": "packages/anchor-contrib/" },
{ "path": "packages/chai-solana/" },
{ "path": "packages/eslint-config/" },
{ "path": "packages/eslint-config-react/" },
{ "path": "packages/option-utils/" },
{ "path": "packages/solana-contrib/" },
{ "path": "packages/stableswap-sdk/" },
{ "path": "packages/token-utils/" },
{ "path": "packages/tuple-utils/" },
{ "path": "packages/use-solana/" },
{ "path": "packages/wallet-adapter-icons/" }
]
}
6 changes: 4 additions & 2 deletions yarn.lock
Expand Up @@ -2329,6 +2329,7 @@ __metadata:
"@rushstack/eslint-patch": ^1.1.3
"@saberhq/eslint-config": "workspace:*"
"@saberhq/eslint-config-react": "workspace:*"
"@saberhq/tsconfig": "workspace:*"
"@saberhq/use-solana": "workspace:*"
"@size-limit/file": ^7.0.8
"@size-limit/webpack": ^7.0.8
Expand All @@ -2343,6 +2344,7 @@ __metadata:
"@types/react": ^18.0.13
"@types/source-map-support": ^0.5.4
"@types/w3c-web-usb": ^1.0.6
"@typescript-eslint/utils": ^5.28.0
"@yarnpkg/doctor": ^3.1.3
bn.js: ^5.2.1
buffer: ^6.0.3
Expand Down Expand Up @@ -2435,7 +2437,7 @@ __metadata:
languageName: unknown
linkType: soft

"@saberhq/tsconfig@workspace:^, @saberhq/tsconfig@workspace:packages/tsconfig":
"@saberhq/tsconfig@workspace:*, @saberhq/tsconfig@workspace:^, @saberhq/tsconfig@workspace:packages/tsconfig":
version: 0.0.0-use.local
resolution: "@saberhq/tsconfig@workspace:packages/tsconfig"
languageName: unknown
Expand Down Expand Up @@ -3499,7 +3501,7 @@ __metadata:
languageName: node
linkType: hard

"@typescript-eslint/utils@npm:5.28.0":
"@typescript-eslint/utils@npm:5.28.0, @typescript-eslint/utils@npm:^5.28.0":
version: 5.28.0
resolution: "@typescript-eslint/utils@npm:5.28.0"
dependencies:
Expand Down

0 comments on commit 0d668c6

Please sign in to comment.