diff --git a/.github/actions/publish-generator/action.yaml b/.github/actions/publish-generator/action.yaml
index ac3097001aa2..cc8d5b7ddf13 100644
--- a/.github/actions/publish-generator/action.yaml
+++ b/.github/actions/publish-generator/action.yaml
@@ -45,7 +45,7 @@ runs:
shell: bash
run: |
echo "Building seed CLI once with Turbo caching..."
- pnpm turbo run dist:cli --filter=@fern-api/seed-cli
+ pnpm seed:build
- name: Run publish (auto)
if: inputs.manual-trigger == 'false'
@@ -179,7 +179,7 @@ runs:
SNIPPET_PACKAGE: ${{ steps.snippet-info.outputs.snippet_package }}
run: |
echo "Building snippet package: $SNIPPET_PACKAGE"
- pnpm --filter=$SNIPPET_PACKAGE compile
+ pnpm turbo run compile --filter=$SNIPPET_PACKAGE
- name: Test snippet package
if: steps.snippet-info.outputs.snippet_package != ''
@@ -188,7 +188,7 @@ runs:
SNIPPET_PACKAGE: ${{ steps.snippet-info.outputs.snippet_package }}
run: |
echo "Testing snippet package: $SNIPPET_PACKAGE"
- pnpm --filter=$SNIPPET_PACKAGE test
+ pnpm turbo run test --filter=$SNIPPET_PACKAGE
- name: Publish snippet package (auto)
if: inputs.manual-trigger == 'false' && steps.snippet-info.outputs.snippet_package != ''
@@ -200,7 +200,7 @@ runs:
run: |
echo "Publishing snippet package: $SNIPPET_PACKAGE at version $VERSION"
cd $SNIPPET_DIR
- pnpm --filter=$SNIPPET_PACKAGE dist $VERSION
+ pnpm turbo run dist --filter=$SNIPPET_PACKAGE -- $VERSION
cd dist
npm publish --access public --tag latest
@@ -214,6 +214,6 @@ runs:
run: |
echo "Publishing snippet package: $SNIPPET_PACKAGE at version $VERSION"
cd $SNIPPET_DIR
- pnpm --filter=$SNIPPET_PACKAGE dist $VERSION
+ pnpm turbo run dist --filter=$SNIPPET_PACKAGE -- $VERSION
cd dist
npm publish --access public --tag latest
diff --git a/.github/workflows/ci-dynamic-snippets.yml b/.github/workflows/ci-dynamic-snippets.yml
index 42534dd31845..b4e3ee4e64f0 100644
--- a/.github/workflows/ci-dynamic-snippets.yml
+++ b/.github/workflows/ci-dynamic-snippets.yml
@@ -41,10 +41,10 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest
- name: 🧪 Build
- run: pnpm --filter=@fern-api/typescript-dynamic-snippets compile
+ run: pnpm turbo run compile --filter=@fern-api/typescript-dynamic-snippets
- name: 🧪 Test
- run: pnpm --filter=@fern-api/typescript-dynamic-snippets test
+ run: pnpm turbo run test --filter=@fern-api/typescript-dynamic-snippets
test-python:
runs-on: ubuntu-latest
@@ -71,10 +71,10 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest
- name: 🧪 Build
- run: pnpm --filter=@fern-api/python-dynamic-snippets compile
+ run: pnpm turbo run compile --filter=@fern-api/python-dynamic-snippets
- name: 🧪 Test
- run: pnpm --filter=@fern-api/python-dynamic-snippets test
+ run: pnpm turbo run test --filter=@fern-api/python-dynamic-snippets
test-csharp:
runs-on: ubuntu-latest
@@ -101,10 +101,10 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest
- name: 🧪 Build
- run: pnpm --filter=@fern-api/csharp-dynamic-snippets compile
+ run: pnpm turbo run compile --filter=@fern-api/csharp-dynamic-snippets
- name: 🧪 Test
- run: pnpm --filter=@fern-api/csharp-dynamic-snippets test
+ run: pnpm turbo run test --filter=@fern-api/csharp-dynamic-snippets
test-go:
runs-on: ubuntu-latest
@@ -131,10 +131,10 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest
- name: 🧪 Build
- run: pnpm --filter=@fern-api/go-dynamic-snippets compile
+ run: pnpm turbo run compile --filter=@fern-api/go-dynamic-snippets
- name: 🧪 Test
- run: pnpm --filter=@fern-api/go-dynamic-snippets test
+ run: pnpm turbo run test --filter=@fern-api/go-dynamic-snippets
test-ruby:
runs-on: ubuntu-latest
@@ -161,10 +161,10 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest
- name: 🧪 Build
- run: pnpm --filter=@fern-api/ruby-dynamic-snippets compile
+ run: pnpm turbo run compile --filter=@fern-api/ruby-dynamic-snippets
- name: 🧪 Test
- run: pnpm --filter=@fern-api/ruby-dynamic-snippets test
+ run: pnpm turbo run test --filter=@fern-api/ruby-dynamic-snippets
test-php:
runs-on: ubuntu-latest
@@ -191,10 +191,10 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest
- name: 🧪 Build
- run: pnpm --filter=@fern-api/php-dynamic-snippets compile
+ run: pnpm turbo run compile --filter=@fern-api/php-dynamic-snippets
- name: 🧪 Test
- run: pnpm --filter=@fern-api/php-dynamic-snippets test
+ run: pnpm turbo run test --filter=@fern-api/php-dynamic-snippets
test-swift:
runs-on: ubuntu-latest
@@ -221,10 +221,10 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest
- name: 🧪 Build
- run: pnpm --filter=@fern-api/swift-dynamic-snippets compile
+ run: pnpm turbo run compile --filter=@fern-api/swift-dynamic-snippets
- name: 🧪 Test
- run: pnpm --filter=@fern-api/swift-dynamic-snippets test
+ run: pnpm turbo run test --filter=@fern-api/swift-dynamic-snippets
test-java:
runs-on: ubuntu-latest
@@ -251,7 +251,7 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest
- name: 🧪 Build
- run: pnpm --filter=@fern-api/java-dynamic-snippets compile
+ run: pnpm turbo run compile --filter=@fern-api/java-dynamic-snippets
- name: 🧪 Test
- run: pnpm --filter=@fern-api/java-dynamic-snippets test
+ run: pnpm turbo run test --filter=@fern-api/java-dynamic-snippets
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a7f18e202843..f3a645141ee0 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -222,7 +222,7 @@ jobs:
AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
AUTH0_CLIENT_ID: ${{ secrets.AUTH0_CLIENT_ID }}
run: |
- pnpm --filter @fern-api/cli dist:cli:dev
+ pnpm turbo run dist:cli:dev --filter @fern-api/cli
cli_path="$(pwd)/packages/cli/cli/dist/dev/cli.cjs"
./scripts/live-test.sh "$cli_path" "$FERN_ORG_TOKEN_DEV"
@@ -249,7 +249,7 @@ jobs:
AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
AUTH0_CLIENT_ID: ${{ secrets.AUTH0_CLIENT_ID }}
run: |
- pnpm --filter @fern-api/cli dist:cli:dev
+ pnpm turbo run dist:cli:dev --filter @fern-api/cli
$cliPath = Join-Path $env:GITHUB_WORKSPACE "packages\cli\cli\dist\dev\cli.cjs"
if (-not (Test-Path $cliPath)) {
Write-Error "CLI path does not exist: $cliPath"
@@ -285,7 +285,7 @@ jobs:
AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
AUTH0_CLIENT_ID: ${{ secrets.AUTH0_CLIENT_ID }}
run: |
- pnpm --filter @fern-api/cli dist:cli:dev
+ pnpm turbo run dist:cli:dev --filter @fern-api/cli
$cliPath = Join-Path $env:GITHUB_WORKSPACE "packages\cli\cli\dist\dev\cli.cjs"
if (-not (Test-Path $cliPath)) {
Write-Error "CLI path does not exist: $cliPath"
diff --git a/.github/workflows/definitions-validation.yml b/.github/workflows/definitions-validation.yml
index 1b3c70709b94..c15236f6d471 100644
--- a/.github/workflows/definitions-validation.yml
+++ b/.github/workflows/definitions-validation.yml
@@ -25,6 +25,6 @@ jobs:
AUTH0_CLIENT_ID: ${{ secrets.AUTH0_CLIENT_ID }}
POSTHOG_API_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
run: |
- pnpm --filter @fern-api/cli dist:cli:prod
+ pnpm turbo run dist:cli:prod --filter @fern-api/cli
cli_path="$(pwd)/packages/cli/cli/dist/prod/cli.cjs"
node $cli_path check
diff --git a/.github/workflows/publish-cli.yml b/.github/workflows/publish-cli.yml
index 75e2c1f1c35c..a210528df163 100644
--- a/.github/workflows/publish-cli.yml
+++ b/.github/workflows/publish-cli.yml
@@ -98,7 +98,7 @@ jobs:
AUTH0_CLIENT_ID: ${{ secrets.AUTH0_CLIENT_ID }}
POSTHOG_API_KEY: ${{ secrets.POSTHOG_PROJECT_API_KEY }}
run: |
- pnpm --filter @fern-api/cli dist:cli:prod
+ pnpm turbo run dist:cli:prod --filter @fern-api/cli
cli_path="$(pwd)/packages/cli/cli/dist/prod/cli.cjs"
./scripts/live-test.sh "$cli_path" "$FERN_TOKEN" "true"
diff --git a/.github/workflows/publish-generator-cli.yml b/.github/workflows/publish-generator-cli.yml
index 37fae18af56a..d31b95b5db77 100644
--- a/.github/workflows/publish-generator-cli.yml
+++ b/.github/workflows/publish-generator-cli.yml
@@ -79,10 +79,15 @@ jobs:
- name: Update npm
run: npm install -g npm@latest
- - name: 🧪 Build and test
+ - name: Build CLI
env:
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
- run: pnpm turbo compile test --filter=${{ env.PACKAGE_NAME }}
+ run: pnpm turbo run dist:cli --filter=${{ env.PACKAGE_NAME }}
+
+ - name: Test
+ env:
+ GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
+ run: pnpm turbo run test --filter=${{ env.PACKAGE_NAME }}
- name: Setup Node for npm publish
uses: actions/setup-node@v4
diff --git a/.github/workflows/publish-snippets-core.yml b/.github/workflows/publish-snippets-core.yml
index b417be6e8cc5..9a9aad4a0884 100644
--- a/.github/workflows/publish-snippets-core.yml
+++ b/.github/workflows/publish-snippets-core.yml
@@ -44,14 +44,14 @@ jobs:
run: go install github.com/fern-api/protoc-gen-openapi/cmd/protoc-gen-openapi@latest
- name: 🧪 Build
- run: pnpm --filter=${{ env.PACKAGE_NAME }} compile
+ run: pnpm turbo run compile --filter=${{ env.PACKAGE_NAME }}
- name: 🧪 Test
- run: pnpm --filter=${{ env.PACKAGE_NAME }} test
+ run: pnpm turbo run test --filter=${{ env.PACKAGE_NAME }}
- name: Publish @fern-api/snippets-core
run: |
cd packages/snippets/core
- pnpm --filter=${{ env.PACKAGE_NAME }} dist ${{ inputs.version }}
+ pnpm turbo run dist --filter=${{ env.PACKAGE_NAME }} -- ${{ inputs.version }}
cd dist
npm publish --access public --tag latest
diff --git a/.github/workflows/sdk-ete-tests.yml b/.github/workflows/sdk-ete-tests.yml
index a29892648343..096286743fc8 100644
--- a/.github/workflows/sdk-ete-tests.yml
+++ b/.github/workflows/sdk-ete-tests.yml
@@ -171,13 +171,13 @@ jobs:
- name: Build PHP SDK generator
if: ${{ inputs.language == 'php' || github.event_name == 'pull_request' || github.event_name == 'push' }}
- run: pnpm --filter @fern-api/php-sdk dist:cli
+ run: pnpm turbo run dist:cli --filter @fern-api/php-sdk
- name: Build Go SDK generator
if: ${{ inputs.language == 'go' }}
run: |
cd generators/go && go build ./...
- pnpm --filter @fern-api/go-sdk dist:cli
+ pnpm turbo run dist:cli --filter @fern-api/go-sdk
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
diff --git a/.github/workflows/test-definitions.yml b/.github/workflows/test-definitions.yml
index 5c36f4d9a7a9..92bce4903c8f 100644
--- a/.github/workflows/test-definitions.yml
+++ b/.github/workflows/test-definitions.yml
@@ -47,7 +47,7 @@ jobs:
env:
FORCE_COLOR: "2"
run: |
- pnpm --filter @fern-api/cli dist:cli:dev
+ pnpm turbo run dist:cli:dev --filter @fern-api/cli
cli_path="$(pwd)/packages/cli/cli/dist/dev/cli.cjs"
cd test-definitions
FERN_NO_VERSION_REDIRECTION=true node $cli_path check
diff --git a/.github/workflows/validate-changelog.yml b/.github/workflows/validate-changelog.yml
index be0383512462..71dfca4f7a5b 100644
--- a/.github/workflows/validate-changelog.yml
+++ b/.github/workflows/validate-changelog.yml
@@ -39,9 +39,6 @@ jobs:
- name: Install
uses: ./.github/actions/install
- - name: Compile
- run: pnpm exec turbo compile '--filter=@fern-api/seed-cli'
-
- name: Seed Build
run: pnpm seed:build
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e7edb65b44a8..a9dbaf5e9364 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -85,7 +85,7 @@ pnpm install
To compile all the packages in this monorepo, run `pnpm compile`.
-To compile a single package, filter to the relevant package: `pnpm --filter @fern-api/openapi-parser compile`.
+To compile a single package, filter to the relevant package: `pnpm turbo run compile --filter @fern-api/openapi-parser`.
### Step 3: Testing
@@ -93,7 +93,7 @@ This repo contains both unit tests and integration (end-to-end) tests.
To run all the unit tests: `pnpm test`.
-To run unit tests for a single package: `pnpm --filter @fern-api/openapi-parser test`
+To run unit tests for a single package: `pnpm turbo run test --filter @fern-api/openapi-parser`
To run the integration tests: `pnpm test:ete`.
diff --git a/cspell-words.txt b/cspell-words.txt
index 5dcdcaa4c028..730057198776 100644
--- a/cspell-words.txt
+++ b/cspell-words.txt
@@ -652,6 +652,7 @@ unioned
unioning
unist
unmarshal
+unminified
unnamespaced
unsanitized
unserviced
diff --git a/generators/csharp/CLAUDE.md b/generators/csharp/CLAUDE.md
index 620eca31312d..c84b4a365388 100644
--- a/generators/csharp/CLAUDE.md
+++ b/generators/csharp/CLAUDE.md
@@ -33,8 +33,8 @@ This file provides guidance for Claude Code when working with the C# generator.
```bash
pnpm install
-pnpm --filter @fern-api/fern-csharp-sdk compile
-pnpm --filter @fern-api/fern-csharp-model compile
+pnpm turbo run compile --filter @fern-api/fern-csharp-sdk
+pnpm turbo run compile --filter @fern-api/fern-csharp-model
```
### Configuration Options
diff --git a/generators/csharp/dynamic-snippets/build.cjs b/generators/csharp/dynamic-snippets/build.cjs
deleted file mode 100644
index c4d1cc026020..000000000000
--- a/generators/csharp/dynamic-snippets/build.cjs
+++ /dev/null
@@ -1,68 +0,0 @@
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile, mkdir } = require("fs/promises");
-const path = require("path");
-
-main();
-
-async function main() {
- const config = {
- entry: ['src/**/*.ts', '!src/__test__'],
- target: "es2017",
- platform: "node",
- minify: true,
- dts: true,
- sourcemap: true,
- tsconfig: "./build.tsconfig.json"
- };
-
- await tsup.build({
- ...config,
- format: ['cjs'],
- outDir: 'dist/cjs',
- clean: true,
- });
-
- await tsup.build({
- ...config,
- format: ['esm'],
- outDir: 'dist/esm',
- clean: false,
- });
-
- await mkdir(path.join(__dirname, "dist"), { recursive: true });
- process.chdir(path.join(__dirname, "dist"));
-
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: packageJson.name,
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- type: "module",
- exports: {
- // Conditional exports for ESM and CJS.
- "import": {
- "types": "./esm/index.d.ts",
- "default": "./esm/index.js"
- },
- "require": {
- "types": "./cjs/index.d.cts",
- "default": "./cjs/index.cjs"
- }
- },
- // Fallback for older tooling or direct imports.
- main: "./cjs/index.cjs",
- module: "./esm/index.js",
- types: "./cjs/index.d.cts",
- files: [
- "cjs",
- "esm"
- ]
- },
- undefined,
- 2
- )
- );
-}
\ No newline at end of file
diff --git a/generators/csharp/dynamic-snippets/package.json b/generators/csharp/dynamic-snippets/package.json
index f8b00f059f20..89199b558a39 100644
--- a/generators/csharp/dynamic-snippets/package.json
+++ b/generators/csharp/dynamic-snippets/package.json
@@ -26,7 +26,6 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist": "pnpm compile && node build.cjs",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
@@ -42,7 +41,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/csharp/model/build.mjs b/generators/csharp/model/build.mjs
new file mode 100644
index 000000000000..c5df3758b579
--- /dev/null
+++ b/generators/csharp/model/build.mjs
@@ -0,0 +1,5 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/csharp/model/package.json b/generators/csharp/model/package.json
index 5ea87838079c..78976e83aa4e 100644
--- a/generators/csharp/model/package.json
+++ b/generators/csharp/model/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap && cp -R ../base/src/asIs dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-csharp-model:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-csharp-model:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-csharp-model:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-csharp-model:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -49,7 +49,6 @@
"@fern-fern/ir-sdk": "^61.7.0",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/csharp/model/turbo.jsonc b/generators/csharp/model/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/csharp/model/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/csharp/sdk/build.mjs b/generators/csharp/sdk/build.mjs
new file mode 100644
index 000000000000..c5df3758b579
--- /dev/null
+++ b/generators/csharp/sdk/build.mjs
@@ -0,0 +1,5 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/csharp/sdk/package.json b/generators/csharp/sdk/package.json
index f81cde7814e9..88daaa4d72a3 100644
--- a/generators/csharp/sdk/package.json
+++ b/generators/csharp/sdk/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "rm -rf ./lib && rm -rf ./dist && pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap && cp -R ../base/src/asIs dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-csharp-sdk:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-csharp-sdk:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-csharp-sdk:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-csharp-sdk:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -54,7 +54,6 @@
"@types/node": "18.15.3",
"@types/url-join": "4.0.1",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"url-join": "^5.0.0",
"vitest": "^4.0.8"
diff --git a/generators/csharp/sdk/turbo.jsonc b/generators/csharp/sdk/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/csharp/sdk/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/go-v2/base/package.json b/generators/go-v2/base/package.json
index 7f9c9a75bc49..b96fc66c5073 100644
--- a/generators/go-v2/base/package.json
+++ b/generators/go-v2/base/package.json
@@ -26,12 +26,10 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
@@ -49,7 +47,6 @@
"@types/node": "18.15.3",
"dedent": "^1.5.1",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/go-v2/dynamic-snippets/build.cjs b/generators/go-v2/dynamic-snippets/build.cjs
deleted file mode 100644
index b31dc8034194..000000000000
--- a/generators/go-v2/dynamic-snippets/build.cjs
+++ /dev/null
@@ -1,80 +0,0 @@
-const { NodeModulesPolyfillPlugin } = require('@esbuild-plugins/node-modules-polyfill');
-const { NodeGlobalsPolyfillPlugin } = require('@esbuild-plugins/node-globals-polyfill');
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile, mkdir } = require("fs/promises");
-const path = require("path");
-
-main();
-
-async function main() {
- const config = {
- entry: ['src/**/*.ts', '!src/__test__'],
- target: "es2017",
- minify: true,
- dts: true,
- sourcemap: true,
- external: [
- '@fern-api/go-formatter',
- ],
- esbuildPlugins: [
- NodeModulesPolyfillPlugin(),
- NodeGlobalsPolyfillPlugin({
- process: true,
- buffer: true,
- util: true
- })
- ],
- tsconfig: "./build.tsconfig.json"
- };
-
- await tsup.build({
- ...config,
- format: ['cjs'],
- outDir: 'dist/cjs',
- clean: true,
- });
-
- await tsup.build({
- ...config,
- format: ['esm'],
- outDir: 'dist/esm',
- clean: false,
- });
-
- await mkdir(path.join(__dirname, "dist"), { recursive: true });
- process.chdir(path.join(__dirname, "dist"));
-
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: packageJson.name,
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- type: "module",
- exports: {
- // Conditional exports for ESM and CJS.
- "import": {
- "types": "./esm/index.d.ts",
- "default": "./esm/index.js"
- },
- "require": {
- "types": "./cjs/index.d.cts",
- "default": "./cjs/index.cjs"
- }
- },
- // Fallback for older tooling or direct imports.
- main: "./cjs/index.cjs",
- module: "./esm/index.js",
- types: "./cjs/index.d.cts",
- files: [
- "cjs",
- "esm"
- ]
- },
- undefined,
- 2
- )
- );
-}
\ No newline at end of file
diff --git a/generators/go-v2/dynamic-snippets/package.json b/generators/go-v2/dynamic-snippets/package.json
index fca99fafd755..9e23d25d5cf8 100644
--- a/generators/go-v2/dynamic-snippets/package.json
+++ b/generators/go-v2/dynamic-snippets/package.json
@@ -26,14 +26,11 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist": "pnpm compile && node build.cjs",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
},
"devDependencies": {
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@fern-api/browser-compatible-base-generator": "workspace:*",
"@fern-api/configs": "workspace:*",
"@fern-api/core-utils": "workspace:*",
@@ -43,7 +40,6 @@
"@fern-api/path-utils": "workspace:*",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/go-v2/model/build.mjs b/generators/go-v2/model/build.mjs
new file mode 100644
index 000000000000..c5df3758b579
--- /dev/null
+++ b/generators/go-v2/model/build.mjs
@@ -0,0 +1,5 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/go-v2/model/package.json b/generators/go-v2/model/package.json
index a0c4da2266e1..d4b07d645e63 100644
--- a/generators/go-v2/model/package.json
+++ b/generators/go-v2/model/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap && cp -R ../base/src/asIs dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-go-model:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-go-model:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-go-model:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-go-model:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -48,7 +48,6 @@
"@fern-fern/ir-sdk": "^61.7.0",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/go-v2/model/turbo.jsonc b/generators/go-v2/model/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/go-v2/model/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/go-v2/sdk/build.mjs b/generators/go-v2/sdk/build.mjs
index 0f67845e153b..c5df3758b579 100644
--- a/generators/go-v2/sdk/build.mjs
+++ b/generators/go-v2/sdk/build.mjs
@@ -1,21 +1,5 @@
-import { join, dirname } from "path";
-import { cp } from "fs/promises";
-import { fileURLToPath } from "url";
-import tsup from "tsup";
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
-
-main();
-
-async function main() {
- const filesFoldersToCopy = [
- ["../base/src/asIs", "./dist/asIs"],
- ];
- for (const [source, destination] of filesFoldersToCopy) {
- await cp(join(__dirname, source), join(__dirname, destination), {
- recursive: true,
- force: true,
- });
- }
-}
+await buildGenerator(getDirname(import.meta.url), {
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/go-v2/sdk/package.json b/generators/go-v2/sdk/package.json
index 538f4cca4257..2ea93e940f2b 100644
--- a/generators/go-v2/sdk/package.json
+++ b/generators/go-v2/sdk/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap && node build.mjs",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-go-sdk:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-go-sdk:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-go-sdk:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-go-sdk:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -55,7 +55,6 @@
"@types/node": "18.15.3",
"dedent": "^1.5.1",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/go-v2/sdk/turbo.jsonc b/generators/go-v2/sdk/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/go-v2/sdk/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/java-v2/base/package.json b/generators/java-v2/base/package.json
index 694989e489e5..d1e2c3ea6512 100644
--- a/generators/java-v2/base/package.json
+++ b/generators/java-v2/base/package.json
@@ -26,12 +26,10 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
diff --git a/generators/java-v2/dynamic-snippets/build.cjs b/generators/java-v2/dynamic-snippets/build.cjs
deleted file mode 100644
index d4c63fb6103e..000000000000
--- a/generators/java-v2/dynamic-snippets/build.cjs
+++ /dev/null
@@ -1,77 +0,0 @@
-const { NodeModulesPolyfillPlugin } = require('@esbuild-plugins/node-modules-polyfill');
-const { NodeGlobalsPolyfillPlugin } = require('@esbuild-plugins/node-globals-polyfill');
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile, mkdir } = require("fs/promises");
-const path = require("path");
-
-main();
-
-async function main() {
- const config = {
- entry: ['src/**/*.ts', '!src/__test__'],
- target: "es2017",
- minify: true,
- dts: true,
- sourcemap: true,
- esbuildPlugins: [
- NodeModulesPolyfillPlugin(),
- NodeGlobalsPolyfillPlugin({
- process: true,
- buffer: true,
- util: true
- })
- ],
- tsconfig: "./build.tsconfig.json"
- };
-
- await tsup.build({
- ...config,
- format: ['cjs'],
- outDir: 'dist/cjs',
- clean: true,
- });
-
- await tsup.build({
- ...config,
- format: ['esm'],
- outDir: 'dist/esm',
- clean: false,
- });
-
- await mkdir(path.join(__dirname, "dist"), { recursive: true });
- process.chdir(path.join(__dirname, "dist"));
-
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: packageJson.name,
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- type: "module",
- exports: {
- // Conditional exports for ESM and CJS.
- "import": {
- "types": "./esm/index.d.ts",
- "default": "./esm/index.js"
- },
- "require": {
- "types": "./cjs/index.d.cts",
- "default": "./cjs/index.cjs"
- }
- },
- // Fallback for older tooling or direct imports.
- main: "./cjs/index.cjs",
- module: "./esm/index.js",
- types: "./cjs/index.d.cts",
- files: [
- "cjs",
- "esm"
- ]
- },
- undefined,
- 2
- )
- );
-}
\ No newline at end of file
diff --git a/generators/java-v2/dynamic-snippets/package.json b/generators/java-v2/dynamic-snippets/package.json
index c1694dd29e79..76be0c1731f4 100644
--- a/generators/java-v2/dynamic-snippets/package.json
+++ b/generators/java-v2/dynamic-snippets/package.json
@@ -26,14 +26,11 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist": "pnpm compile && node build.cjs",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
},
"devDependencies": {
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@fern-api/browser-compatible-base-generator": "workspace:*",
"@fern-api/configs": "workspace:*",
"@fern-api/core-utils": "workspace:*",
@@ -44,7 +41,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/java-v2/sdk/build.mjs b/generators/java-v2/sdk/build.mjs
new file mode 100644
index 000000000000..2a1865dff73e
--- /dev/null
+++ b/generators/java-v2/sdk/build.mjs
@@ -0,0 +1,3 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url));
diff --git a/generators/java-v2/sdk/package.json b/generators/java-v2/sdk/package.json
index 39077c03c34b..13e4b3955df8 100644
--- a/generators/java-v2/sdk/package.json
+++ b/generators/java-v2/sdk/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-java-sdk:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-java-sdk:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-java-sdk:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-java-sdk:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -54,7 +54,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/openapi/build.mjs b/generators/openapi/build.mjs
new file mode 100644
index 000000000000..2a1865dff73e
--- /dev/null
+++ b/generators/openapi/build.mjs
@@ -0,0 +1,3 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url));
diff --git a/generators/openapi/package.json b/generators/openapi/package.json
index 7faa4b2f6390..4f01f8967aee 100644
--- a/generators/openapi/package.json
+++ b/generators/openapi/package.json
@@ -27,14 +27,14 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-openapi:latest .",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-openapi:latest .",
"dockerTagVersion": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-openapi:${0} .",
"format": "prettier --write --ignore-unknown --ignore-path ../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-openapi:latest .",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-openapi:latest .",
"podmanTagVersion": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-openapi:${0} .",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
@@ -55,7 +55,6 @@
"js-yaml": "^4.1.1",
"lodash-es": "^4.17.21",
"openapi-types": "^12.1.3",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"url-join": "^5.0.0",
"vitest": "^4.0.8"
diff --git a/generators/php/base/package.json b/generators/php/base/package.json
index d3309cad3cda..f8d2ca080b56 100644
--- a/generators/php/base/package.json
+++ b/generators/php/base/package.json
@@ -26,12 +26,10 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
@@ -48,7 +46,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/php/dynamic-snippets/build.cjs b/generators/php/dynamic-snippets/build.cjs
deleted file mode 100644
index 1a4c018666d9..000000000000
--- a/generators/php/dynamic-snippets/build.cjs
+++ /dev/null
@@ -1,77 +0,0 @@
-const { NodeModulesPolyfillPlugin } = require('@esbuild-plugins/node-modules-polyfill');
-const { NodeGlobalsPolyfillPlugin } = require('@esbuild-plugins/node-globals-polyfill');
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile, mkdir } = require("fs/promises");
-const path = require("path");
-
-main();
-
-async function main() {
- const config = {
- entry: ['src/**/*.ts', '!src/__test__'],
- target: "es2017",
- minify: true,
- dts: true,
- sourcemap: true,
- esbuildPlugins: [
- NodeModulesPolyfillPlugin(),
- NodeGlobalsPolyfillPlugin({
- process: true,
- buffer: true,
- util: true
- })
- ],
- tsconfig: "./build.tsconfig.json"
- };
-
- await tsup.build({
- ...config,
- format: ['cjs'],
- outDir: 'dist/cjs',
- clean: true,
- });
-
- await tsup.build({
- ...config,
- format: ['esm'],
- outDir: 'dist/esm',
- clean: false,
- });
-
- await mkdir(path.join(__dirname, "dist"), { recursive: true });
- process.chdir(path.join(__dirname, "dist"));
-
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: packageJson.name,
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- type: "module",
- exports: {
- // Conditional exports for ESM and CJS.
- "import": {
- "types": "./esm/index.d.ts",
- "default": "./esm/index.js"
- },
- "require": {
- "types": "./cjs/index.d.cts",
- "default": "./cjs/index.cjs"
- }
- },
- // Fallback for older tooling or direct imports.
- main: "./cjs/index.cjs",
- module: "./esm/index.js",
- types: "./cjs/index.d.cts",
- files: [
- "cjs",
- "esm"
- ]
- },
- undefined,
- 2
- )
- );
-}
diff --git a/generators/php/dynamic-snippets/package.json b/generators/php/dynamic-snippets/package.json
index c8f06f41758a..d87415e325ea 100644
--- a/generators/php/dynamic-snippets/package.json
+++ b/generators/php/dynamic-snippets/package.json
@@ -26,14 +26,11 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist": "pnpm compile && node build.cjs",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
},
"devDependencies": {
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@fern-api/browser-compatible-base-generator": "workspace:*",
"@fern-api/configs": "workspace:*",
"@fern-api/core-utils": "workspace:*",
@@ -44,7 +41,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/php/model/build.mjs b/generators/php/model/build.mjs
new file mode 100644
index 000000000000..c5df3758b579
--- /dev/null
+++ b/generators/php/model/build.mjs
@@ -0,0 +1,5 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/php/model/package.json b/generators/php/model/package.json
index 82fef1f0406b..d6c5899aafbc 100644
--- a/generators/php/model/package.json
+++ b/generators/php/model/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --sourcemap && cp -R ../base/src/asIs dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-php-model:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-php-model:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-php-model:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-php-model:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -47,7 +47,6 @@
"@fern-fern/ir-sdk": "^62.1.0",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8",
"zod": "^3.22.3"
diff --git a/generators/php/model/turbo.jsonc b/generators/php/model/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/php/model/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/php/sdk/build.mjs b/generators/php/sdk/build.mjs
new file mode 100644
index 000000000000..c5df3758b579
--- /dev/null
+++ b/generators/php/sdk/build.mjs
@@ -0,0 +1,5 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/php/sdk/package.json b/generators/php/sdk/package.json
index e41b667d5a75..74a6b866e9a7 100644
--- a/generators/php/sdk/package.json
+++ b/generators/php/sdk/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --sourcemap && cp -R ../base/src/asIs dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-php-sdk:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-php-sdk:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-php-sdk:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-php-sdk:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -56,7 +56,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8",
"zod": "^3.22.3"
diff --git a/generators/php/sdk/tsconfig.json b/generators/php/sdk/tsconfig.json
index 79b65f662d57..5bc8ebd57eb1 100644
--- a/generators/php/sdk/tsconfig.json
+++ b/generators/php/sdk/tsconfig.json
@@ -6,6 +6,9 @@
{
"path": "../model"
},
+ {
+ "path": "../dynamic-snippets"
+ },
{
"path": "../codegen"
},
@@ -13,16 +16,16 @@
"path": "../base"
},
{
- "path": "../../../packages/commons/fs-utils"
+ "path": "../../../packages/cli/logger"
},
{
- "path": "../../../packages/commons/core-utils"
+ "path": "../../../packages/commons/fs-utils"
},
{
- "path": "../dynamic-snippets"
+ "path": "../../../packages/commons/core-utils"
},
{
- "path": "../../../packages/cli/logger"
+ "path": "../../../packages/commons/mock-utils"
},
{
"path": "../../base"
diff --git a/generators/php/sdk/turbo.jsonc b/generators/php/sdk/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/php/sdk/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/postman/build.mjs b/generators/postman/build.mjs
new file mode 100644
index 000000000000..2a1865dff73e
--- /dev/null
+++ b/generators/postman/build.mjs
@@ -0,0 +1,3 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url));
diff --git a/generators/postman/package.json b/generators/postman/package.json
index 819ec7ccd3ca..3c76bf0d1bd4 100644
--- a/generators/postman/package.json
+++ b/generators/postman/package.json
@@ -27,14 +27,14 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-postman:latest .",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-postman:latest .",
"dockerTagVersion": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-postman:${0} .",
"format": "prettier --write --ignore-unknown --ignore-path ../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-postman:latest .",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-postman:latest .",
"podmanTagVersion": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-postman:${0} .",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
@@ -53,7 +53,6 @@
"depcheck": "^1.4.7",
"endent": "^2.1.0",
"lodash": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8",
"zod": "^3.22.3"
diff --git a/generators/postman/tsup.config.ts b/generators/postman/tsup.config.ts
deleted file mode 100644
index b948a27a8128..000000000000
--- a/generators/postman/tsup.config.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { defineConfig } from "tsup";
-
-export default defineConfig({
- entry: ["src/cli.ts"],
- format: "cjs",
- sourcemap: true
-});
diff --git a/generators/python-v2/base/tsconfig.json b/generators/python-v2/base/tsconfig.json
index 29ef7f562ba1..22b054f5d765 100644
--- a/generators/python-v2/base/tsconfig.json
+++ b/generators/python-v2/base/tsconfig.json
@@ -9,6 +9,9 @@
{
"path": "../ast"
},
+ {
+ "path": "../../../packages/commons/logging-execa"
+ },
{
"path": "../../../packages/commons/fs-utils"
},
diff --git a/generators/python-v2/dynamic-snippets/package.json b/generators/python-v2/dynamic-snippets/package.json
index 27aa5b3a2efa..3559d312d56d 100644
--- a/generators/python-v2/dynamic-snippets/package.json
+++ b/generators/python-v2/dynamic-snippets/package.json
@@ -26,14 +26,11 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist": "pnpm compile && node build.cjs",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
},
"devDependencies": {
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@fern-api/browser-compatible-base-generator": "workspace:*",
"@fern-api/configs": "workspace:*",
"@fern-api/core-utils": "workspace:*",
@@ -45,7 +42,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/python-v2/fastapi/build.mjs b/generators/python-v2/fastapi/build.mjs
new file mode 100644
index 000000000000..2a1865dff73e
--- /dev/null
+++ b/generators/python-v2/fastapi/build.mjs
@@ -0,0 +1,3 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url));
diff --git a/generators/python-v2/fastapi/package.json b/generators/python-v2/fastapi/package.json
index a60530df0ba5..94c84de96b39 100644
--- a/generators/python-v2/fastapi/package.json
+++ b/generators/python-v2/fastapi/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-fastapi-server-v2:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-fastapi-server-v2:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-fastapi-server-v2:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-fastapi-server-v2:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -42,7 +42,6 @@
"@fern-api/configs": "workspace:*",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/python-v2/pydantic-model/build.cjs b/generators/python-v2/pydantic-model/build.cjs
deleted file mode 100644
index 31d7e1d680cf..000000000000
--- a/generators/python-v2/pydantic-model/build.cjs
+++ /dev/null
@@ -1,16 +0,0 @@
-const tsup = require('tsup');
-
-main();
-
-async function main() {
- await tsup.build({
- entry: ['src/**/*.ts', '!src/__test__'],
- format: ['cjs'],
- sourcemap: true,
- clean: true,
- outDir: 'dist',
- external: [
- "@wasm-fmt/ruff_fmt",
- ],
- });
-}
\ No newline at end of file
diff --git a/generators/python-v2/pydantic-model/build.mjs b/generators/python-v2/pydantic-model/build.mjs
new file mode 100644
index 000000000000..a21b5cd4cabd
--- /dev/null
+++ b/generators/python-v2/pydantic-model/build.mjs
@@ -0,0 +1,7 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ tsupOptions: {
+ external: ['@wasm-fmt/ruff_fmt']
+ }
+});
diff --git a/generators/python-v2/pydantic-model/package.json b/generators/python-v2/pydantic-model/package.json
index 3491711f6519..7ec6bdbdac46 100644
--- a/generators/python-v2/pydantic-model/package.json
+++ b/generators/python-v2/pydantic-model/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && node build.cjs && cp -R ../base/src/asIs dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-pydantic-model-v2:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-pydantic-model-v2:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-pydantic-model-v2:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-pydantic-model-v2:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -49,7 +49,6 @@
"@fern-fern/ir-sdk": "^61.7.0",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8",
"zod": "^3.22.4"
diff --git a/generators/python-v2/sdk/build.mjs b/generators/python-v2/sdk/build.mjs
new file mode 100644
index 000000000000..2a1865dff73e
--- /dev/null
+++ b/generators/python-v2/sdk/build.mjs
@@ -0,0 +1,3 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url));
diff --git a/generators/python-v2/sdk/package.json b/generators/python-v2/sdk/package.json
index 4462e3a086ae..31647ecf1eb4 100644
--- a/generators/python-v2/sdk/package.json
+++ b/generators/python-v2/sdk/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-python-sdk:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-python-sdk:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-python-sdk:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-python-sdk:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -54,7 +54,6 @@
"@fern-fern/ir-sdk": "^61.7.0",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8",
"zod": "^3.22.4"
diff --git a/generators/python-v2/sdk/tsconfig.json b/generators/python-v2/sdk/tsconfig.json
index 5cfe758d6333..d5c718efd2e1 100644
--- a/generators/python-v2/sdk/tsconfig.json
+++ b/generators/python-v2/sdk/tsconfig.json
@@ -7,14 +7,29 @@
},
"include": ["./src/**/*"],
"references": [
+ {
+ "path": "../dynamic-snippets"
+ },
+ {
+ "path": "../base"
+ },
+ {
+ "path": "../ast"
+ },
+ {
+ "path": "../../../packages/commons/mock-utils"
+ },
{
"path": "../../../packages/cli/logger"
},
{
- "path": "../../base"
+ "path": "../../../packages/commons/fs-utils"
},
{
- "path": "../base"
+ "path": "../../browser-compatible-base"
+ },
+ {
+ "path": "../../base"
}
]
}
diff --git a/generators/ruby-v2/dynamic-snippets/build.cjs b/generators/ruby-v2/dynamic-snippets/build.cjs
deleted file mode 100644
index d4c63fb6103e..000000000000
--- a/generators/ruby-v2/dynamic-snippets/build.cjs
+++ /dev/null
@@ -1,77 +0,0 @@
-const { NodeModulesPolyfillPlugin } = require('@esbuild-plugins/node-modules-polyfill');
-const { NodeGlobalsPolyfillPlugin } = require('@esbuild-plugins/node-globals-polyfill');
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile, mkdir } = require("fs/promises");
-const path = require("path");
-
-main();
-
-async function main() {
- const config = {
- entry: ['src/**/*.ts', '!src/__test__'],
- target: "es2017",
- minify: true,
- dts: true,
- sourcemap: true,
- esbuildPlugins: [
- NodeModulesPolyfillPlugin(),
- NodeGlobalsPolyfillPlugin({
- process: true,
- buffer: true,
- util: true
- })
- ],
- tsconfig: "./build.tsconfig.json"
- };
-
- await tsup.build({
- ...config,
- format: ['cjs'],
- outDir: 'dist/cjs',
- clean: true,
- });
-
- await tsup.build({
- ...config,
- format: ['esm'],
- outDir: 'dist/esm',
- clean: false,
- });
-
- await mkdir(path.join(__dirname, "dist"), { recursive: true });
- process.chdir(path.join(__dirname, "dist"));
-
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: packageJson.name,
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- type: "module",
- exports: {
- // Conditional exports for ESM and CJS.
- "import": {
- "types": "./esm/index.d.ts",
- "default": "./esm/index.js"
- },
- "require": {
- "types": "./cjs/index.d.cts",
- "default": "./cjs/index.cjs"
- }
- },
- // Fallback for older tooling or direct imports.
- main: "./cjs/index.cjs",
- module: "./esm/index.js",
- types: "./cjs/index.d.cts",
- files: [
- "cjs",
- "esm"
- ]
- },
- undefined,
- 2
- )
- );
-}
\ No newline at end of file
diff --git a/generators/ruby-v2/dynamic-snippets/package.json b/generators/ruby-v2/dynamic-snippets/package.json
index 121e0be16e12..d6d69af9a876 100644
--- a/generators/ruby-v2/dynamic-snippets/package.json
+++ b/generators/ruby-v2/dynamic-snippets/package.json
@@ -26,14 +26,11 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist": "pnpm compile && node build.cjs",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
},
"devDependencies": {
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@fern-api/browser-compatible-base-generator": "workspace:*",
"@fern-api/configs": "workspace:*",
"@fern-api/core-utils": "workspace:*",
@@ -44,7 +41,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/ruby-v2/model/Dockerfile b/generators/ruby-v2/model/Dockerfile
index fbbf1133a6d1..1fadf102cad2 100644
--- a/generators/ruby-v2/model/Dockerfile
+++ b/generators/ruby-v2/model/Dockerfile
@@ -1,2 +1,21 @@
-*
-!generators/ruby-v2/model/dist
\ No newline at end of file
+FROM ruby:3.3-alpine3.20
+
+RUN apk --no-cache add \
+ bash \
+ build-base \
+ curl \
+ git \
+ zip \
+ nodejs \
+ npm
+
+RUN gem install rubocop rubocop-minitest
+
+RUN git config --global user.name "fern" && git config --global user.email "hey@buildwithfern.com"
+
+RUN npm install -f -g @fern-api/generator-cli@0.2.0
+
+COPY generators/ruby-v2/sdk/features.yml /assets/features.yml
+COPY generators/ruby-v2/sdk/dist /dist
+
+ENTRYPOINT ["node", "--enable-source-maps", "/dist/cli.cjs"]
\ No newline at end of file
diff --git a/generators/ruby-v2/model/Dockerfile.dockerignore b/generators/ruby-v2/model/Dockerfile.dockerignore
index 81767894be33..e163e4505f81 100644
--- a/generators/ruby-v2/model/Dockerfile.dockerignore
+++ b/generators/ruby-v2/model/Dockerfile.dockerignore
@@ -1,23 +1,3 @@
-FROM node:20.18-alpine3.20 AS node
-FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine3.21
-
-ENV YARN_CACHE_FOLDER=/.yarn
-ENV PATH="$PATH:/root/.dotnet/tools"
-ENV DOTNET_NOLOGO=1
-ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
-ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
-
-RUN apk --no-cache add bash curl git zip
-RUN git config --global user.name "fern" && git config --global user.email "hey@buildwithfern.com"
-
-# Copy over node contents to be able to run the compiled CLI
-COPY --from=node /usr/local/bin/node /usr/local/bin/
-COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
-RUN ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
- && ln -s ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
-
-# RUN dotnet tool install -g ruby-formatter --version "1.*"
-
-COPY generators/ruby-v2/model/dist /dist
-
-ENTRYPOINT ["node", "/dist/cli.cjs"]
\ No newline at end of file
+*
+!generators/ruby-v2/sdk/features.yml
+!generators/ruby-v2/sdk/dist
\ No newline at end of file
diff --git a/generators/ruby-v2/model/build.mjs b/generators/ruby-v2/model/build.mjs
new file mode 100644
index 000000000000..2a1865dff73e
--- /dev/null
+++ b/generators/ruby-v2/model/build.mjs
@@ -0,0 +1,3 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url));
diff --git a/generators/ruby-v2/model/package.json b/generators/ruby-v2/model/package.json
index 639147c20891..f9aef18d9420 100644
--- a/generators/ruby-v2/model/package.json
+++ b/generators/ruby-v2/model/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-ruby-model:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-ruby-model:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-ruby-model:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-ruby-model:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -48,7 +48,6 @@
"@fern-fern/ir-sdk": "^61.7.0",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/ruby-v2/sdk/build.mjs b/generators/ruby-v2/sdk/build.mjs
new file mode 100644
index 000000000000..c5df3758b579
--- /dev/null
+++ b/generators/ruby-v2/sdk/build.mjs
@@ -0,0 +1,5 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/ruby-v2/sdk/package.json b/generators/ruby-v2/sdk/package.json
index 964b08cbe1d9..726521acfc7d 100644
--- a/generators/ruby-v2/sdk/package.json
+++ b/generators/ruby-v2/sdk/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs && cp -r ../base/src/asIs ./dist/asIs",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-ruby-sdk-v2:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-ruby-sdk-v2:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-ruby-sdk-v2:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-ruby-sdk-v2:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -59,7 +59,6 @@
"dedent": "^1.5.1",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/ruby-v2/sdk/turbo.jsonc b/generators/ruby-v2/sdk/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/ruby-v2/sdk/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/ruby/model/build.mjs b/generators/ruby/model/build.mjs
new file mode 100644
index 000000000000..2a1865dff73e
--- /dev/null
+++ b/generators/ruby/model/build.mjs
@@ -0,0 +1,3 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url));
diff --git a/generators/ruby/model/package.json b/generators/ruby/model/package.json
index 3a7d25f37f5c..3ecb7865180b 100644
--- a/generators/ruby/model/package.json
+++ b/generators/ruby/model/package.json
@@ -26,14 +26,14 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-ruby-model:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-ruby-model:latest ../../..",
"dockerTagVersion": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-ruby-model:${0} ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-ruby-model:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-ruby-model:latest ../../..",
"podmanTagVersion": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-ruby-model:${0} ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
@@ -51,7 +51,6 @@
"@fern-fern/ir-sdk": "^39",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8",
"zod": "^3.22.3"
diff --git a/generators/ruby/sdk/build.mjs b/generators/ruby/sdk/build.mjs
new file mode 100644
index 000000000000..2a1865dff73e
--- /dev/null
+++ b/generators/ruby/sdk/build.mjs
@@ -0,0 +1,3 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url));
diff --git a/generators/ruby/sdk/package.json b/generators/ruby/sdk/package.json
index 40c9716ab2a8..04a56c95252b 100644
--- a/generators/ruby/sdk/package.json
+++ b/generators/ruby/sdk/package.json
@@ -26,7 +26,7 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap",
+ "dist:cli": "node build.mjs",
"env:prod": "env-cmd -r .env-cmdrc.cjs -e prod",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
@@ -45,7 +45,6 @@
"@fern-fern/ir-sdk": "^39",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8",
"zod": "^3.22.3"
diff --git a/generators/rust/CLAUDE.md b/generators/rust/CLAUDE.md
index 76fccae01f4d..a6f7440b6c64 100644
--- a/generators/rust/CLAUDE.md
+++ b/generators/rust/CLAUDE.md
@@ -43,10 +43,10 @@ This file provides guidance for Claude Code when working with the Rust generator
```bash
pnpm install
-pnpm --filter @fern-api/rust-sdk compile
-pnpm --filter @fern-api/rust-model compile
-pnpm --filter @fern-api/rust-sdk dist:cli # Build Docker CLI
-pnpm --filter @fern-api/rust-model dist:cli # Build Docker CLI
+pnpm turbo run compile --filter @fern-api/rust-sdk
+pnpm turbo run compile --filter @fern-api/rust-model
+pnpm turbo run dist:cli --filter @fern-api/rust-sdk # Build Docker CLI
+pnpm turbo run dist:cli --filter @fern-api/rust-model # Build Docker CLI
```
### Configuration Options
diff --git a/generators/rust/dynamic-snippets/build.cjs b/generators/rust/dynamic-snippets/build.cjs
deleted file mode 100644
index 80daf19a5bf7..000000000000
--- a/generators/rust/dynamic-snippets/build.cjs
+++ /dev/null
@@ -1,19 +0,0 @@
-const { pnpPlugin } = require("@yarnpkg/esbuild-plugin-pnp");
-const { build } = require("esbuild");
-const path = require("path");
-const { chmod } = require("fs/promises");
-
-main();
-
-async function main() {
- await build({
- entryPoints: ["./src/**/*.ts"],
- platform: "node",
- target: "node18",
- outdir: "./lib",
- bundle: false,
- plugins: [pnpPlugin()],
- logLevel: "info",
- tsconfig: "./build.tsconfig.json"
- });
-}
\ No newline at end of file
diff --git a/generators/rust/dynamic-snippets/build.tsconfig.json b/generators/rust/dynamic-snippets/build.tsconfig.json
deleted file mode 100644
index 27476223521c..000000000000
--- a/generators/rust/dynamic-snippets/build.tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "extends": "./tsconfig.json",
- "compilerOptions": {
- "composite": false,
- "incremental": false
- }
-}
diff --git a/generators/rust/dynamic-snippets/package.json b/generators/rust/dynamic-snippets/package.json
index f801a4c50b84..0410d3ea295e 100644
--- a/generators/rust/dynamic-snippets/package.json
+++ b/generators/rust/dynamic-snippets/package.json
@@ -9,6 +9,8 @@
},
"exports": {
".": {
+ "development": "./src/index.ts",
+ "source": "./src/index.ts",
"types": "./lib/index.d.ts",
"import": "./lib/index.js",
"default": "./lib/index.js"
@@ -38,9 +40,7 @@
"@fern-api/dynamic-ir-sdk": "^59.6.1",
"@fern-api/path-utils": "workspace:*",
"@types/node": "18.15.3",
- "@yarnpkg/esbuild-plugin-pnp": "3.0.0-rc.15",
"depcheck": "^1.4.7",
- "esbuild": "^0.25.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/rust/model/build.mjs b/generators/rust/model/build.mjs
new file mode 100644
index 000000000000..c5df3758b579
--- /dev/null
+++ b/generators/rust/model/build.mjs
@@ -0,0 +1,5 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/rust/model/package.json b/generators/rust/model/package.json
index 2ec4041c25d0..be9c3a4c8d13 100644
--- a/generators/rust/model/package.json
+++ b/generators/rust/model/package.json
@@ -26,13 +26,13 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "rm -rf ./lib && rm -rf ./dist && pnpm compile && tsup ./src/cli.ts --format cjs && cp -R ../base/src/asIs dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-rust-model:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-rust-model:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-rust-model:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-rust-model:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -50,7 +50,6 @@
"@fern-fern/ir-sdk": "^61.7.0",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8",
"zod": "^3.22.4"
diff --git a/generators/rust/model/turbo.jsonc b/generators/rust/model/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/rust/model/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/rust/sdk/build.mjs b/generators/rust/sdk/build.mjs
index 07ff2e360dd4..2fc77932adce 100644
--- a/generators/rust/sdk/build.mjs
+++ b/generators/rust/sdk/build.mjs
@@ -1,38 +1,11 @@
-import { join, dirname } from "path";
-import { cp, mkdir } from "fs/promises";
-import { fileURLToPath } from "url";
-import tsup from "tsup";
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
-
-main();
-
-async function main() {
- // Build with tsup
- await tsup.build({
- entry: ["src/cli.ts"],
- format: ["cjs"],
+await buildGenerator(getDirname(import.meta.url), {
+ tsupOptions: {
noExternal: [/@fern-api\/.*/, /dedent/],
- dts: false,
- splitting: false,
- sourcemap: false,
- clean: true,
- outDir: "dist"
- });
-
- // Copy necessary files
- const filesFoldersToCopy = [
- ["./features.yml", "./dist/assets/features.yml"],
- ["../base/src/asIs", "./dist/asIs"]
- ];
-
- for (const [source, destination] of filesFoldersToCopy) {
- const destDir = dirname(join(__dirname, destination));
- await mkdir(destDir, { recursive: true });
- await cp(join(__dirname, source), join(__dirname, destination), {
- recursive: true,
- force: true,
- });
- }
-}
\ No newline at end of file
+ },
+ copy: [
+ { from: './features.yml', to: './dist/assets/features.yml' },
+ { from: '../base/src/asIs', to: './dist/asIs' },
+ ],
+});
diff --git a/generators/rust/sdk/package.json b/generators/rust/sdk/package.json
index 463ec43e4fbb..fa3a68050e43 100644
--- a/generators/rust/sdk/package.json
+++ b/generators/rust/sdk/package.json
@@ -25,13 +25,13 @@
"clean": "rm -rf ./lib && rm -rf ./dist && tsc --build --clean",
"compile": "tsc --build",
"depcheck": "depcheck",
- "dist:cli": "rm -rf ./lib && rm -rf ./dist && pnpm compile && node build.mjs",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-rust-sdk:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-rust-sdk:latest ../../..",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
"lint:eslint:fix": "yarn lint:eslint --fix",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-rust-sdk:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-rust-sdk:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:update": "vitest --passWithNoTests --run -u"
@@ -55,7 +55,6 @@
"@fern-fern/ir-sdk": "^61.7.0",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8",
"zod": "^3.22.4"
diff --git a/generators/rust/sdk/tsup.config.ts b/generators/rust/sdk/tsup.config.ts
deleted file mode 100644
index 210098021568..000000000000
--- a/generators/rust/sdk/tsup.config.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defineConfig } from "tsup";
-
-export default defineConfig({
- entry: ["src/cli.ts"],
- format: ["cjs"],
- // Bundle ALL dependencies including workspace packages
- noExternal: [/@fern-api\/.*/, /dedent/],
- dts: false,
- splitting: false,
- sourcemap: false,
- clean: true
-});
diff --git a/generators/swift/dynamic-snippets/build.cjs b/generators/swift/dynamic-snippets/build.cjs
deleted file mode 100644
index 9041a057af78..000000000000
--- a/generators/swift/dynamic-snippets/build.cjs
+++ /dev/null
@@ -1,78 +0,0 @@
-const {
- NodeModulesPolyfillPlugin,
-} = require("@esbuild-plugins/node-modules-polyfill");
-const {
- NodeGlobalsPolyfillPlugin,
-} = require("@esbuild-plugins/node-globals-polyfill");
-const packageJson = require("./package.json");
-const tsup = require("tsup");
-const { writeFile, mkdir } = require("fs/promises");
-const path = require("path");
-
-main();
-
-async function main() {
- const config = {
- entry: ["src/**/*.ts", "!src/__test__"],
- target: "es2017",
- minify: true,
- dts: true,
- sourcemap: true,
- esbuildPlugins: [
- NodeModulesPolyfillPlugin(),
- NodeGlobalsPolyfillPlugin({
- process: true,
- buffer: true,
- util: true,
- }),
- ],
- tsconfig: "./build.tsconfig.json",
- };
-
- await tsup.build({
- ...config,
- format: ["cjs"],
- outDir: "dist/cjs",
- clean: true,
- });
-
- await tsup.build({
- ...config,
- format: ["esm"],
- outDir: "dist/esm",
- clean: false,
- });
-
- await mkdir(path.join(__dirname, "dist"), { recursive: true });
- process.chdir(path.join(__dirname, "dist"));
-
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: packageJson.name,
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- type: "module",
- exports: {
- // Conditional exports for ESM and CJS.
- import: {
- types: "./esm/index.d.ts",
- default: "./esm/index.js",
- },
- require: {
- types: "./cjs/index.d.cts",
- default: "./cjs/index.cjs",
- },
- },
- // Fallback for older tooling or direct imports.
- main: "./cjs/index.cjs",
- module: "./esm/index.js",
- types: "./cjs/index.d.cts",
- files: ["cjs", "esm"],
- },
- undefined,
- 2,
- ),
- );
-}
diff --git a/generators/swift/dynamic-snippets/package.json b/generators/swift/dynamic-snippets/package.json
index c069774dbad3..4059ef9db07f 100644
--- a/generators/swift/dynamic-snippets/package.json
+++ b/generators/swift/dynamic-snippets/package.json
@@ -26,14 +26,11 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist": "pnpm compile && node build.cjs",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
},
"devDependencies": {
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@fern-api/browser-compatible-base-generator": "workspace:*",
"@fern-api/configs": "workspace:*",
"@fern-api/core-utils": "workspace:*",
@@ -44,7 +41,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.2",
"vitest": "^4.0.8"
}
diff --git a/generators/swift/model/build.mjs b/generators/swift/model/build.mjs
new file mode 100644
index 000000000000..107d8359e863
--- /dev/null
+++ b/generators/swift/model/build.mjs
@@ -0,0 +1,5 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: [{ from: '../base/src/asIs', to: './dist/asIs' }, { from: '../base/src/template', to: './dist/template' }]
+});
diff --git a/generators/swift/model/package.json b/generators/swift/model/package.json
index eeb345bb6c48..642edaa0acde 100644
--- a/generators/swift/model/package.json
+++ b/generators/swift/model/package.json
@@ -26,9 +26,9 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --sourcemap && cp -R ../base/src/asIs dist && cp -R ../base/src/template dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-swift-model:latest ../../..",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-swift-model:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-swift-model:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-swift-model:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -49,7 +49,6 @@
"@types/lodash-es": "^4.17.12",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.2",
"vitest": "^4.0.8",
"zod": "^3.22.3"
diff --git a/generators/swift/model/turbo.jsonc b/generators/swift/model/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/swift/model/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/swift/sdk/build.mjs b/generators/swift/sdk/build.mjs
new file mode 100644
index 000000000000..b821019d1244
--- /dev/null
+++ b/generators/swift/sdk/build.mjs
@@ -0,0 +1,6 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: [
+ { from: '../base/src/asIs', to: './dist/asIs' }, { from: '../base/src/template', to: './dist/template' }]
+});
diff --git a/generators/swift/sdk/package.json b/generators/swift/sdk/package.json
index 4b90c360e40e..258592d01229 100644
--- a/generators/swift/sdk/package.json
+++ b/generators/swift/sdk/package.json
@@ -26,9 +26,9 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "rm -rf ./lib && rm -rf ./dist && pnpm compile && tsup ./src/cli.ts --format cjs --sourcemap && cp -R ../base/src/asIs dist && cp -R ../base/src/template dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-swift-sdk:latest ../../..",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-swift-sdk:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-swift-sdk:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-swift-sdk:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && yarn npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -54,7 +54,6 @@
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.2",
"vitest": "^4.0.8",
"zod": "^3.25.75"
diff --git a/generators/swift/sdk/turbo.jsonc b/generators/swift/sdk/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/swift/sdk/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/typescript-mcp/model/build.mjs b/generators/typescript-mcp/model/build.mjs
new file mode 100644
index 000000000000..286bbee80b30
--- /dev/null
+++ b/generators/typescript-mcp/model/build.mjs
@@ -0,0 +1,6 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/typescript-mcp/model/package.json b/generators/typescript-mcp/model/package.json
index 6e2531226a42..d396b03fde7f 100644
--- a/generators/typescript-mcp/model/package.json
+++ b/generators/typescript-mcp/model/package.json
@@ -26,9 +26,9 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --sourcemap && cp -R ../base/src/asIs dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-typescript-mcp-model:latest ../../..",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-typescript-mcp-model:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-typescript-mcp-model:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-typescript-mcp-model:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -43,7 +43,6 @@
"@fern-fern/ir-sdk": "^58.2.0",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/typescript-mcp/model/turbo.jsonc b/generators/typescript-mcp/model/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/typescript-mcp/model/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/typescript-mcp/server/build.mjs b/generators/typescript-mcp/server/build.mjs
new file mode 100644
index 000000000000..c5df3758b579
--- /dev/null
+++ b/generators/typescript-mcp/server/build.mjs
@@ -0,0 +1,5 @@
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: { from: '../base/src/asIs', to: './dist/asIs' }
+});
diff --git a/generators/typescript-mcp/server/package.json b/generators/typescript-mcp/server/package.json
index 254ddb26150b..bf25b1184035 100644
--- a/generators/typescript-mcp/server/package.json
+++ b/generators/typescript-mcp/server/package.json
@@ -26,9 +26,9 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm compile && tsup ./src/cli.ts --sourcemap && cp -R ../base/src/asIs dist",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-typescript-mcp-server:latest ../../..",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-typescript-mcp-server:latest ../../..",
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-typescript-mcp-server:latest ../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-typescript-mcp-server:latest ../../..",
"publish:cli": "pnpm dist:cli && cd dist && npm publish",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
@@ -46,7 +46,6 @@
"@fern-typescript/sdk-generator-cli": "workspace:*",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/typescript-mcp/server/turbo.jsonc b/generators/typescript-mcp/server/turbo.jsonc
new file mode 100644
index 000000000000..1b43312be3f1
--- /dev/null
+++ b/generators/typescript-mcp/server/turbo.jsonc
@@ -0,0 +1,20 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../base/src/asIs/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/generators/typescript-v2/dynamic-snippets/build.cjs b/generators/typescript-v2/dynamic-snippets/build.cjs
deleted file mode 100644
index 1a4c018666d9..000000000000
--- a/generators/typescript-v2/dynamic-snippets/build.cjs
+++ /dev/null
@@ -1,77 +0,0 @@
-const { NodeModulesPolyfillPlugin } = require('@esbuild-plugins/node-modules-polyfill');
-const { NodeGlobalsPolyfillPlugin } = require('@esbuild-plugins/node-globals-polyfill');
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile, mkdir } = require("fs/promises");
-const path = require("path");
-
-main();
-
-async function main() {
- const config = {
- entry: ['src/**/*.ts', '!src/__test__'],
- target: "es2017",
- minify: true,
- dts: true,
- sourcemap: true,
- esbuildPlugins: [
- NodeModulesPolyfillPlugin(),
- NodeGlobalsPolyfillPlugin({
- process: true,
- buffer: true,
- util: true
- })
- ],
- tsconfig: "./build.tsconfig.json"
- };
-
- await tsup.build({
- ...config,
- format: ['cjs'],
- outDir: 'dist/cjs',
- clean: true,
- });
-
- await tsup.build({
- ...config,
- format: ['esm'],
- outDir: 'dist/esm',
- clean: false,
- });
-
- await mkdir(path.join(__dirname, "dist"), { recursive: true });
- process.chdir(path.join(__dirname, "dist"));
-
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: packageJson.name,
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- type: "module",
- exports: {
- // Conditional exports for ESM and CJS.
- "import": {
- "types": "./esm/index.d.ts",
- "default": "./esm/index.js"
- },
- "require": {
- "types": "./cjs/index.d.cts",
- "default": "./cjs/index.cjs"
- }
- },
- // Fallback for older tooling or direct imports.
- main: "./cjs/index.cjs",
- module: "./esm/index.js",
- types: "./cjs/index.d.cts",
- files: [
- "cjs",
- "esm"
- ]
- },
- undefined,
- 2
- )
- );
-}
diff --git a/generators/typescript-v2/dynamic-snippets/package.json b/generators/typescript-v2/dynamic-snippets/package.json
index ae04983b41ed..bd45002eaeed 100644
--- a/generators/typescript-v2/dynamic-snippets/package.json
+++ b/generators/typescript-v2/dynamic-snippets/package.json
@@ -26,14 +26,11 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist": "pnpm compile && node build.cjs",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
},
"devDependencies": {
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@fern-api/browser-compatible-base-generator": "workspace:*",
"@fern-api/configs": "workspace:*",
"@fern-api/core-utils": "workspace:*",
@@ -43,7 +40,6 @@
"@fern-api/typescript-browser-compatible-base": "workspace:*",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"vitest": "^4.0.8"
}
diff --git a/generators/typescript/express/cli/.depcheckrc.json b/generators/typescript/express/cli/.depcheckrc.json
index 6b406215dacc..018f9dd71981 100644
--- a/generators/typescript/express/cli/.depcheckrc.json
+++ b/generators/typescript/express/cli/.depcheckrc.json
@@ -1,4 +1,4 @@
{
"ignores": [],
- "ignore-patterns": ["lib", "docker/bundle.js"]
+ "ignore-patterns": ["lib", "dist", "docker/bundle.js"]
}
diff --git a/generators/typescript/express/cli/build.mjs b/generators/typescript/express/cli/build.mjs
index 9776f80f1399..ec5c9d0504d5 100644
--- a/generators/typescript/express/cli/build.mjs
+++ b/generators/typescript/express/cli/build.mjs
@@ -1,31 +1,8 @@
-import { join, dirname } from "path";
-import { cp } from "fs/promises";
-import { fileURLToPath } from "url";
-import tsup from "tsup";
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
-
-main();
-
-async function main() {
- await tsup.build({
- entry: ["src/cli.ts"],
- format: ["cjs"],
- minify: false,
- outDir: "dist",
- sourcemap: true,
- clean: true,
- });
-
- const filesFoldersToCopy = [
- ["../../asIs/", "./dist/assets/asIs"],
- ["../../utils/core-utilities/", "./dist/assets/core-utilities"],
- ];
- for (const [source, destination] of filesFoldersToCopy) {
- await cp(join(__dirname, source), join(__dirname, destination), {
- recursive: true,
- force: true,
- });
- }
-}
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
+
+await buildGenerator(getDirname(import.meta.url), {
+ copy: [
+ { from: '../../asIs/', to: './dist/assets/asIs' },
+ { from: '../../utils/core-utilities/', to: './dist/assets/core-utilities' },
+ ],
+});
diff --git a/generators/typescript/express/cli/package.json b/generators/typescript/express/cli/package.json
index 5d5ed01448f6..e8baff373b2c 100644
--- a/generators/typescript/express/cli/package.json
+++ b/generators/typescript/express/cli/package.json
@@ -26,9 +26,9 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm clean && pnpm compile && node build.mjs",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-typescript-express:latest ../../../..",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-typescript-express:latest ../../../.."
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-typescript-express:latest ../../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-typescript-express:latest ../../../.."
},
"devDependencies": {
"@fern-api/configs": "workspace:*",
@@ -42,7 +42,6 @@
"@types/lodash-es": "^4.17.12",
"depcheck": "^1.4.7",
"lodash-es": "^4.17.21",
- "tsup": "^8.5.0",
"typescript": "5.9.3",
"zod": "^3.22.3"
}
diff --git a/generators/typescript/sdk/cli/.depcheckrc.json b/generators/typescript/sdk/cli/.depcheckrc.json
index 6b406215dacc..d389561009c7 100644
--- a/generators/typescript/sdk/cli/.depcheckrc.json
+++ b/generators/typescript/sdk/cli/.depcheckrc.json
@@ -1,4 +1,4 @@
{
"ignores": [],
- "ignore-patterns": ["lib", "docker/bundle.js"]
+ "ignore-patterns": ["dist", "lib", "docker/bundle.js"]
}
diff --git a/generators/typescript/sdk/cli/build.mjs b/generators/typescript/sdk/cli/build.mjs
index e288b319c6c1..2e49245ecf97 100644
--- a/generators/typescript/sdk/cli/build.mjs
+++ b/generators/typescript/sdk/cli/build.mjs
@@ -1,35 +1,10 @@
-import { join, dirname } from "path";
-import { cp } from "fs/promises";
-import { fileURLToPath } from "url";
-import tsup from "tsup";
+import { buildGenerator, getDirname } from '@fern-api/configs/build-utils.mjs';
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
-
-main();
-
-async function main() {
- await tsup.build({
- entry: ["src/cli.ts"],
- format: ["cjs"],
- minify: false,
- outDir: "dist",
- sourcemap: true,
- clean: true,
- });
- const filesFoldersToCopy = [
- ["../features.yml", "./dist/assets/features.yml"],
- [
- "../../asIs/readme/binary-response-addendum.md",
- "./dist/assets/readme/binary-response-addendum.md",
+await buildGenerator(getDirname(import.meta.url), {
+ copy: [
+ { from: '../features.yml', to: './dist/assets/features.yml' },
+ { from: '../../asIs/readme/binary-response-addendum.md', to: './dist/assets/readme/binary-response-addendum.md' },
+ { from: '../../asIs/', to: './dist/assets/asIs' },
+ { from: '../../utils/core-utilities/', to: './dist/assets/core-utilities' },
],
- ["../../asIs/", "./dist/assets/asIs"],
- ["../../utils/core-utilities/", "./dist/assets/core-utilities"],
- ];
- for (const [source, destination] of filesFoldersToCopy) {
- await cp(join(__dirname, source), join(__dirname, destination), {
- recursive: true,
- force: true,
- });
- }
-}
+});
diff --git a/generators/typescript/sdk/cli/package.json b/generators/typescript/sdk/cli/package.json
index 39122a907d9b..052c57e20cef 100644
--- a/generators/typescript/sdk/cli/package.json
+++ b/generators/typescript/sdk/cli/package.json
@@ -26,9 +26,9 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli": "pnpm clean && pnpm compile && node build.mjs",
- "dockerTagLatest": "pnpm dist:cli && docker build -f ./Dockerfile -t fernapi/fern-typescript-node-sdk:latest -t fernapi/fern-typescript-sdk:latest ../../../..",
- "podmanTagLatest": "pnpm dist:cli && podman build -f ./Dockerfile -t fernapi/fern-typescript-node-sdk:latest -t fernapi/fern-typescript-sdk:latest ../../../.."
+ "dist:cli": "node build.mjs",
+ "dockerTagLatest": "docker build -f ./Dockerfile -t fernapi/fern-typescript-node-sdk:latest -t fernapi/fern-typescript-sdk:latest ../../../..",
+ "podmanTagLatest": "podman build -f ./Dockerfile -t fernapi/fern-typescript-node-sdk:latest -t fernapi/fern-typescript-sdk:latest ../../../.."
},
"devDependencies": {
"@fern-api/base-generator": "workspace:*",
@@ -44,7 +44,6 @@
"@fern-typescript/sdk-generator": "workspace:*",
"@types/node": "18.15.3",
"depcheck": "^1.4.7",
- "tsup": "^8.5.0",
"typescript": "5.9.3"
}
}
diff --git a/generators/typescript/sdk/cli/turbo.jsonc b/generators/typescript/sdk/cli/turbo.jsonc
new file mode 100644
index 000000000000..25fe5c8387ae
--- /dev/null
+++ b/generators/typescript/sdk/cli/turbo.jsonc
@@ -0,0 +1,22 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli": {
+ "inputs": [
+ "../features.yml",
+ "../../asIs/**",
+ "../../utils/core-utilities/**",
+ /** same as global task **/
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build.mjs",
+ "$TURBO_ROOT$/packages/configs/**",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json"
+ ]
+ }
+ }
+}
diff --git a/package.json b/package.json
index 82557150acd1..d6e4cc4e522e 100644
--- a/package.json
+++ b/package.json
@@ -13,16 +13,16 @@
"scripts": {
"bootstrap": "./scripts/bootstrap.sh",
"sparse-checkout": "./scripts/sparse-checkout.sh",
- "clean": "turbo clean",
- "compile": "turbo compile",
- "compile:debug": "turbo compile:debug",
- "compile:win": "pnpm -r compile",
- "test": "turbo test --filter=!@fern-api/ete-tests",
- "test:debug": "turbo test:debug --filter=!@fern-api/ete-tests",
- "test:update": "turbo test:update --filter=!@fern-api/ete-tests",
- "test:update:dockerless": "turbo test:update --filter=!@fern-api/ete-tests --filter=!@fern-api/docker-utils",
- "test:ete": "pnpm --filter @fern-api/cli dist:cli:dev && pnpm --filter @fern-api/seed-cli dist:cli && pnpm --filter @fern-api/ete-tests test",
- "test:ete:update": "pnpm --filter @fern-api/cli dist:cli:dev && pnpm --filter @fern-api/seed-cli dist:cli && pnpm --filter @fern-api/ete-tests test -- -u",
+ "clean": "turbo run clean",
+ "compile": "turbo run compile",
+ "compile:debug": "turbo run compile:debug",
+ "compile:win": "turbo run compile",
+ "test": "turbo run test --filter=!@fern-api/ete-tests",
+ "test:debug": "turbo run test:debug --filter=!@fern-api/ete-tests",
+ "test:update": "turbo run test:update --filter=!@fern-api/ete-tests",
+ "test:update:dockerless": "turbo run test:update --filter=!@fern-api/ete-tests --filter=!@fern-api/docker-utils",
+ "test:ete": "pnpm fern-dev:build && pnpm seed:build && pnpm --filter @fern-api/ete-tests test",
+ "test:ete:update": "pnpm fern-dev:build && pnpm seed:build && pnpm --filter @fern-api/ete-tests test -- -u",
"lint:biome": "biome lint --error-on-warnings",
"lint:style": "stylelint 'packages/**/src/**/*.scss' --allow-empty-input --max-warnings 0",
"lint:style:fix": "pnpm lint:style --fix",
@@ -37,16 +37,16 @@
"check:biome": "biome check",
"check": "biome check",
"check:fix": "biome check --write",
- "depcheck": "turbo depcheck --continue=always",
+ "depcheck": "turbo run depcheck --continue=always",
"codegen:local": "pnpm fern:local generate",
"fern": "FERN_NO_VERSION_REDIRECTION=true node --enable-source-maps ./packages/cli/cli/dist/prod/cli.cjs",
"fern:local": "FERN_NO_VERSION_REDIRECTION=true node --enable-source-maps ./packages/cli/cli/dist/prod/cli.cjs",
"fern-dev:local": "FERN_NO_VERSION_REDIRECTION=true node --enable-source-maps ./packages/cli/cli/dist/dev/cli.cjs",
"fern:build": "cross-env POSTHOG_API_KEY=\"\" turbo run dist:cli:prod --filter=@fern-api/cli && echo 'Run node --enable-source-maps packages/cli/cli/dist/prod/cli.cjs'",
- "fern:build:unminified": "cross-env POSTHOG_API_KEY=\"\" pnpm --filter @fern-api/cli dist:cli:prod:unminified && echo 'Run node --enable-source-maps packages/cli/cli/dist/prod/cli.cjs'",
+ "fern:build:unminified": "cross-env POSTHOG_API_KEY=\"\" turbo run dist:cli:prod:unminified --filter @fern-api/cli && echo 'Run node --enable-source-maps packages/cli/cli/dist/prod/cli.cjs'",
"fern-dev:build": "turbo run dist:cli:dev --filter=@fern-api/cli && echo 'Run node --enable-source-maps packages/cli/cli/dist/dev/cli.cjs'",
- "fern-local:build": "pnpm --filter @fern-api/cli dist:cli:local && echo 'Run node --enable-source-maps packages/cli/cli/dist/local/cli.cjs'",
- "generator-cli:generate": "pnpm fern generate --api generator-cli --local && pnpm turbo --filter=@fern-api/generator-cli compile",
+ "fern-local:build": "turbo run dist:cli:local --filter @fern-api/cli && echo 'Run node --enable-source-maps packages/cli/cli/dist/local/cli.cjs'",
+ "generator-cli:generate": "pnpm fern:build && pnpm fern generate --api generator-cli --local && turbo dist:cli --filter=@fern-api/generator-cli",
"seed:build": "turbo run dist:cli --filter=@fern-api/seed-cli && echo 'Run node --enable-source-maps packages/seed/dist/cli.cjs'",
"publish": "pnpm -r publish --access public --no-git-checks --loglevel=verbose",
"jsonschema": "pnpm definition-yml:jsonschema && pnpm api-yml:jsonschema && pnpm package-yml:jsonschema && pnpm docs-yml:jsonschema && pnpm generators-yml:jsonschema && pnpm versions-yml:jsonschema && pnpm products-yml:jsonschema",
@@ -63,7 +63,7 @@
"root-package:check": "pnpm fern-script check-root-package",
"root-package:fix": "pnpm root-package:check --fix",
"seed": "node --enable-source-maps packages/seed/dist/cli.cjs",
- "seed:local": "pnpm --filter @fern-api/seed-cli dist:cli && node --enable-source-maps packages/seed/dist/cli.cjs",
+ "seed:local": "turbo run dist:cli --filter @fern-api/seed-cli && node --enable-source-maps packages/seed/dist/cli.cjs",
"ir:generate": "pnpm --filter @fern-api/ir-sdk generate",
"ir:generate:go": "cd packages/ir-sdk && fern ir ../../generators/go/internal/fern/ir.json --api ir-types-latest --language go && cd ../../generators/go && make install && make generate",
"openapi-ir:generate": "pnpm --filter @fern-api/openapi-ir generate",
@@ -76,16 +76,16 @@
"prepare": "husky",
"pre-commit": "tsx scripts/pre-commit.ts",
"fix:references": "npx nx g @nx/js:typescript-sync --updateReferences=true --updatePaths=false",
- "test:update-package": "sh -c 'for arg in \"$@\"; do if [[ $arg == --package=* ]]; then PACKAGE=${arg#--package=}; break; fi; done; pnpm --filter \"$PACKAGE\" compile && pnpm --filter \"$PACKAGE\" test:update' --",
- "csharp:build": "pnpm --filter @fern-api/fern-csharp-sdk dockerTagLatest",
- "go:build": "pnpm --filter @fern-api/go-sdk dockerTagLatest",
- "java:build": "pnpm --filter @fern-api/java-sdk dockerTagLatest",
- "php:build": "pnpm --filter @fern-api/php-sdk dockerTagLatest",
- "python:build": "pnpm --filter @fern-api/python-sdk dockerTagLatest",
- "ruby:build": "pnpm --filter @fern-api/ruby-sdk dockerTagLatest",
- "rust:build": "pnpm --filter @fern-api/rust-sdk dockerTagLatest",
- "swift:build": "pnpm --filter @fern-api/swift-sdk dockerTagLatest",
- "typescript:build": "pnpm --filter @fern-typescript/sdk-generator-cli dockerTagLatest"
+ "test:update-package": "sh -c 'for arg in \"$@\"; do if [[ $arg == --package=* ]]; then PACKAGE=${arg#--package=}; break; fi; done; turbo run compile --filter \"$PACKAGE\" && turbo run test:update --filter \"$PACKAGE\"' --",
+ "csharp:build": "turbo run dockerTagLatest --filter @fern-api/fern-csharp-sdk",
+ "go:build": "turbo run dockerTagLatest --filter @fern-api/go-sdk",
+ "java:build": "turbo run dockerTagLatest --filter @fern-api/java-sdk",
+ "php:build": "turbo run dockerTagLatest --filter @fern-api/php-sdk",
+ "python:build": "turbo run dockerTagLatest --filter @fern-api/python-sdk",
+ "ruby:build": "turbo run dockerTagLatest --filter @fern-api/ruby-sdk",
+ "rust:build": "turbo run dockerTagLatest --filter @fern-api/rust-sdk",
+ "swift:build": "turbo run dockerTagLatest --filter @fern-api/swift-sdk",
+ "typescript:build": "turbo run dockerTagLatest --filter @fern-typescript/sdk-generator-cli"
},
"devDependencies": {
"@babel/core": "^7.26.0",
@@ -108,7 +108,7 @@
"stylelint-config-standard-scss": "^5.0.0",
"tsup": "^8.5.0",
"tsx": "^4.20.3",
- "turbo": "^2.5.5",
+ "turbo": "^2.6.1",
"typescript": "5.9.3",
"vitest": "^4.0.8"
},
diff --git a/packages/cli/cli/build-utils.mjs b/packages/cli/cli/build-utils.mjs
new file mode 100644
index 000000000000..7dbb715d6983
--- /dev/null
+++ b/packages/cli/cli/build-utils.mjs
@@ -0,0 +1,115 @@
+import packageJson from "./package.json" with { type: "json" };
+import tsup from 'tsup';
+import { writeFile } from "fs/promises";
+import path from "path";
+import { fileURLToPath } from 'url';
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
+/**
+ * Get a dependency version from package.json, preferring dependencies over devDependencies.
+ * This ensures we don't miss runtime dependencies regardless of where they're declared.
+ */
+function getDependencyVersion(packageName) {
+ return packageJson.dependencies?.[packageName] ?? packageJson.devDependencies?.[packageName];
+}
+
+/**
+ * Common external dependencies for full builds (dev/prod with extensive externals)
+ */
+export const FULL_EXTERNALS = [
+ '@boundaryml/baml',
+ /^prettier(?:\/.*)?$/,
+ /^prettier2(?:\/.*)?$/,
+ /^vitest(?:\/.*)?$/,
+ /^depcheck(?:\/.*)?$/,
+ /^tsup(?:\/.*)?$/,
+ /^typescript(?:\/.*)?$/,
+ /^@types\/.*$/,
+];
+
+/**
+ * Minimal external dependencies for local/unminified builds
+ */
+export const MINIMAL_EXTERNALS = ['@boundaryml/baml'];
+
+/**
+ * Common tsup overrides for production-like builds with optimization
+ */
+export const PRODUCTION_TSUP_OVERRIDES = {
+ platform: 'node',
+ target: 'node18',
+ external: FULL_EXTERNALS,
+ metafile: true,
+};
+
+/**
+ * Build the Fern CLI with the specified configuration
+ * @param {Object} config - Build configuration
+ * @param {string} config.outDir - Output directory (e.g., 'dist/prod', 'dist/dev')
+ * @param {boolean} config.minify - Whether to minify the output
+ * @param {Object} config.env - Environment variables to inject
+ * @param {string[]} [config.runtimeDependencies] - List of runtime dependencies to include in package.json
+ * @param {Object} [config.packageJsonOverrides] - Overrides for the generated package.json
+ * @param {Object} [config.tsupOverrides] - Additional tsup configuration options
+ */
+export async function buildCli(config) {
+ const {
+ outDir,
+ minify,
+ env,
+ runtimeDependencies = ['@boundaryml/baml'],
+ packageJsonOverrides = {},
+ tsupOverrides = {}
+ } = config;
+
+ // Build with tsup
+ await tsup.build({
+ entry: ['src/cli.ts'],
+ format: ['cjs'],
+ minify,
+ outDir,
+ sourcemap: true,
+ clean: true,
+ env: {
+ ...env,
+ CLI_VERSION: process.argv[2] || packageJson.version,
+ },
+ ...tsupOverrides
+ });
+
+ // Change to output directory
+ process.chdir(path.join(__dirname, outDir));
+
+ // Collect runtime dependencies
+ const dependencies = {};
+ for (const dep of runtimeDependencies) {
+ const version = getDependencyVersion(dep);
+ if (version) {
+ dependencies[dep] = version;
+ }
+ }
+
+ // Validate that all required dependencies were found
+ const missingDeps = runtimeDependencies.filter(dep => !dependencies[dep]);
+ if (missingDeps.length > 0) {
+ throw new Error(
+ `Missing required runtime dependencies in package.json: ${missingDeps.join(", ")}. ` +
+ `These must be declared in either dependencies or devDependencies.`
+ );
+ }
+
+ // Write package.json
+ const outputPackageJson = {
+ version: process.argv[2] || packageJson.version,
+ repository: packageJson.repository,
+ files: ["cli.cjs"],
+ dependencies,
+ ...packageJsonOverrides
+ };
+
+ await writeFile(
+ "package.json",
+ JSON.stringify(outputPackageJson, undefined, 2)
+ );
+}
diff --git a/packages/cli/cli/build.dev.cjs b/packages/cli/cli/build.dev.cjs
deleted file mode 100644
index d101d075b77f..000000000000
--- a/packages/cli/cli/build.dev.cjs
+++ /dev/null
@@ -1,91 +0,0 @@
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile } = require("fs/promises");
-const path = require("path");
-
-main();
-
-/**
- * Get a dependency version from package.json, preferring dependencies over devDependencies.
- * This ensures we don't miss runtime dependencies regardless of where they're declared.
- */
-function getDependencyVersion(packageName) {
- return packageJson.dependencies?.[packageName] ?? packageJson.devDependencies?.[packageName];
-}
-
-async function main() {
- await tsup.build({
- entry: ['src/cli.ts'],
- format: ['cjs'],
- outDir: 'dist/dev',
- minify: false,
- sourcemap: true,
- platform: 'node',
- target: 'node18',
- external: [
- '@boundaryml/baml',
- /^prettier(?:\/.*)?$/,
- /^prettier2(?:\/.*)?$/,
- /^vitest(?:\/.*)?$/,
- /^depcheck(?:\/.*)?$/,
- /^tsup(?:\/.*)?$/,
- /^typescript(?:\/.*)?$/,
- /^@types\/.*$/,
- ],
- metafile: true,
- env: {
- AUTH0_DOMAIN: "fern-dev.us.auth0.com",
- AUTH0_CLIENT_ID: "4QiMvRvRUYpnycrVDK2M59hhJ6kcHYFQ",
- DEFAULT_FIDDLE_ORIGIN: "https://fiddle-coordinator-dev2.buildwithfern.com",
- DEFAULT_VENUS_ORIGIN: "https://venus-dev2.buildwithfern.com",
- DEFAULT_FDR_ORIGIN: "https://registry-dev2.buildwithfern.com",
- DEFAULT_FDR_LAMBDA_DOCS_ORIGIN: "https://ykq45y6fvnszd35iv5yuuatkze0rpwuz.lambda-url.us-east-1.on.aws",
- VENUS_AUDIENCE: "venus-dev",
- LOCAL_STORAGE_FOLDER: ".fern-dev",
- POSTHOG_API_KEY: null,
- DOCS_DOMAIN_SUFFIX: "docs.dev.buildwithfern.com",
- DOCS_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle2.s3.amazonaws.com/',
- APP_DOCS_TAR_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle4.s3.amazonaws.com/',
- APP_DOCS_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle3.s3.amazonaws.com/',
- CLI_NAME: "fern-dev",
- CLI_VERSION: process.argv[2] || packageJson.version,
- CLI_PACKAGE_NAME: "@fern-api/fern-api-dev",
- },
- });
-
- process.chdir(path.join(__dirname, "dist/dev"));
-
- // Collect runtime dependencies that need to be included in the published package
- const runtimeDependencies = {
- "@boundaryml/baml": getDependencyVersion("@boundaryml/baml")
- };
-
- // Validate that all required dependencies were found
- const missingDeps = Object.entries(runtimeDependencies)
- .filter(([_, version]) => !version)
- .map(([name, _]) => name);
-
- if (missingDeps.length > 0) {
- throw new Error(
- `Missing required runtime dependencies in package.json: ${missingDeps.join(", ")}. ` +
- `These must be declared in either dependencies or devDependencies.`
- );
- }
-
- // write cli's package.json
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: "@fern-api/fern-api-dev",
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- files: ["cli.cjs"],
- bin: { "fern-dev": "cli.cjs" },
- dependencies: runtimeDependencies
- },
- undefined,
- 2
- )
- );
-}
diff --git a/packages/cli/cli/build.dev.mjs b/packages/cli/cli/build.dev.mjs
new file mode 100644
index 000000000000..26c23813e42b
--- /dev/null
+++ b/packages/cli/cli/build.dev.mjs
@@ -0,0 +1,29 @@
+import { buildCli, PRODUCTION_TSUP_OVERRIDES } from './build-utils.mjs';
+
+buildCli({
+ outDir: 'dist/dev',
+ minify: false,
+ env: {
+ AUTH0_DOMAIN: "fern-dev.us.auth0.com",
+ AUTH0_CLIENT_ID: "4QiMvRvRUYpnycrVDK2M59hhJ6kcHYFQ",
+ DEFAULT_FIDDLE_ORIGIN: "https://fiddle-coordinator-dev2.buildwithfern.com",
+ DEFAULT_VENUS_ORIGIN: "https://venus-dev2.buildwithfern.com",
+ DEFAULT_FDR_ORIGIN: "https://registry-dev2.buildwithfern.com",
+ DEFAULT_FDR_LAMBDA_DOCS_ORIGIN: "https://ykq45y6fvnszd35iv5yuuatkze0rpwuz.lambda-url.us-east-1.on.aws",
+ VENUS_AUDIENCE: "venus-dev",
+ LOCAL_STORAGE_FOLDER: ".fern-dev",
+ POSTHOG_API_KEY: null,
+ DOCS_DOMAIN_SUFFIX: "docs.dev.buildwithfern.com",
+ DOCS_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle2.s3.amazonaws.com/',
+ APP_DOCS_TAR_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle4.s3.amazonaws.com/',
+ APP_DOCS_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle3.s3.amazonaws.com/',
+ CLI_NAME: "fern-dev",
+ CLI_PACKAGE_NAME: "@fern-api/fern-api-dev",
+ },
+ runtimeDependencies: ['@boundaryml/baml'],
+ packageJsonOverrides: {
+ name: "@fern-api/fern-api-dev",
+ bin: { "fern-dev": "cli.cjs" },
+ },
+ tsupOverrides: PRODUCTION_TSUP_OVERRIDES
+});
diff --git a/packages/cli/cli/build.local.cjs b/packages/cli/cli/build.local.cjs
deleted file mode 100644
index de192ac4d86b..000000000000
--- a/packages/cli/cli/build.local.cjs
+++ /dev/null
@@ -1,80 +0,0 @@
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile } = require("fs/promises");
-const path = require("path");
-
-main();
-
-/**
- * Get a dependency version from package.json, preferring dependencies over devDependencies.
- * This ensures we don't miss runtime dependencies regardless of where they're declared.
- */
-function getDependencyVersion(packageName) {
- return packageJson.dependencies?.[packageName] ?? packageJson.devDependencies?.[packageName];
-}
-
-async function main() {
- await tsup.build({
- entry: ['src/cli.ts'],
- format: ['cjs'],
- minify: false,
- outDir: 'dist/local',
- sourcemap: true,
- external: ['@boundaryml/baml'],
- env: {
- AUTH0_DOMAIN: "fern-dev.us.auth0.com",
- AUTH0_CLIENT_ID: "4QiMvRvRUYpnycrVDK2M59hhJ6kcHYFQ",
- DEFAULT_FIDDLE_ORIGIN: "https://fiddle-coordinator-dev2.buildwithfern.com",
- DEFAULT_VENUS_ORIGIN: "https://venus-dev2.buildwithfern.com",
- DEFAULT_FDR_ORIGIN: "http://localhost:8080",
- OVERRIDE_FDR_ORIGIN: "http://localhost:8080",
- DEFAULT_FDR_LAMBDA_DOCS_ORIGIN: "https://ykq45y6fvnszd35iv5yuuatkze0rpwuz.lambda-url.us-east-1.on.aws",
- VENUS_AUDIENCE: "venus-dev",
- LOCAL_STORAGE_FOLDER: ".fern-local",
- POSTHOG_API_KEY: null,
- DOCS_DOMAIN_SUFFIX: "docs.dev.buildwithfern.com",
- DOCS_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle2.s3.amazonaws.com/',
- APP_DOCS_TAR_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle4.s3.amazonaws.com/',
- APP_DOCS_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle3.s3.amazonaws.com/',
- CLI_NAME: "fern-local",
- CLI_VERSION: process.argv[2] || packageJson.version,
- CLI_PACKAGE_NAME: "fern-api",
- },
- });
-
- process.chdir(path.join(__dirname, "dist/local"));
-
- // Collect runtime dependencies that need to be included in the published package
- const runtimeDependencies = {
- "@boundaryml/baml": getDependencyVersion("@boundaryml/baml")
- };
-
- // Validate that all required dependencies were found
- const missingDeps = Object.entries(runtimeDependencies)
- .filter(([_, version]) => !version)
- .map(([name, _]) => name);
-
- if (missingDeps.length > 0) {
- throw new Error(
- `Missing required runtime dependencies in package.json: ${missingDeps.join(", ")}. ` +
- `These must be declared in either dependencies or devDependencies.`
- );
- }
-
- // write cli's package.json
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: "fern-api",
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- files: ["cli.cjs"],
- bin: { fern: "cli.cjs" },
- dependencies: runtimeDependencies
- },
- undefined,
- 2
- )
- );
-}
diff --git a/packages/cli/cli/build.local.mjs b/packages/cli/cli/build.local.mjs
new file mode 100644
index 000000000000..d473b6fabd9f
--- /dev/null
+++ b/packages/cli/cli/build.local.mjs
@@ -0,0 +1,32 @@
+import { buildCli, MINIMAL_EXTERNALS } from './build-utils.mjs';
+
+buildCli({
+ outDir: 'dist/local',
+ minify: false,
+ env: {
+ AUTH0_DOMAIN: "fern-dev.us.auth0.com",
+ AUTH0_CLIENT_ID: "4QiMvRvRUYpnycrVDK2M59hhJ6kcHYFQ",
+ DEFAULT_FIDDLE_ORIGIN: "https://fiddle-coordinator-dev2.buildwithfern.com",
+ DEFAULT_VENUS_ORIGIN: "https://venus-dev2.buildwithfern.com",
+ DEFAULT_FDR_ORIGIN: "http://localhost:8080",
+ OVERRIDE_FDR_ORIGIN: "http://localhost:8080",
+ DEFAULT_FDR_LAMBDA_DOCS_ORIGIN: "https://ykq45y6fvnszd35iv5yuuatkze0rpwuz.lambda-url.us-east-1.on.aws",
+ VENUS_AUDIENCE: "venus-dev",
+ LOCAL_STORAGE_FOLDER: ".fern-local",
+ POSTHOG_API_KEY: null,
+ DOCS_DOMAIN_SUFFIX: "docs.dev.buildwithfern.com",
+ DOCS_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle2.s3.amazonaws.com/',
+ APP_DOCS_TAR_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle4.s3.amazonaws.com/',
+ APP_DOCS_PREVIEW_BUCKET: 'https://dev2-local-preview-bundle3.s3.amazonaws.com/',
+ CLI_NAME: "fern-local",
+ CLI_PACKAGE_NAME: "fern-api",
+ },
+ runtimeDependencies: ['@boundaryml/baml'],
+ packageJsonOverrides: {
+ name: "fern-api",
+ bin: { fern: "cli.cjs" },
+ },
+ tsupOverrides: {
+ external: MINIMAL_EXTERNALS,
+ }
+});
diff --git a/packages/cli/cli/build.prod-unminified.cjs b/packages/cli/cli/build.prod-unminified.cjs
deleted file mode 100644
index b32db331a036..000000000000
--- a/packages/cli/cli/build.prod-unminified.cjs
+++ /dev/null
@@ -1,55 +0,0 @@
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile } = require("fs/promises");
-const path = require("path");
-
-main();
-
-async function main() {
- await tsup.build({
- entry: ['src/cli.ts'],
- format: ['cjs'],
- minify: false,
- outDir: 'dist/prod',
- sourcemap: true,
- external: ['@boundaryml/baml'],
- env: {
- AUTH0_DOMAIN: "fern-prod.us.auth0.com",
- AUTH0_CLIENT_ID: "syaWnk6SjNoo5xBf1omfvziU3q7085lh",
- DEFAULT_FIDDLE_ORIGIN: "https://fiddle-coordinator.buildwithfern.com",
- DEFAULT_VENUS_ORIGIN: "https://venus.buildwithfern.com",
- DEFAULT_FDR_ORIGIN: "https://registry.buildwithfern.com",
- VENUS_AUDIENCE: "venus-prod",
- LOCAL_STORAGE_FOLDER: ".fern",
- POSTHOG_API_KEY: process.env.POSTHOG_API_KEY ?? "",
- DOCS_DOMAIN_SUFFIX: "docs.buildwithfern.com",
- DOCS_PREVIEW_BUCKET: 'https://prod-local-preview-bundle2.s3.amazonaws.com/',
- APP_DOCS_TAR_PREVIEW_BUCKET: 'https://prod-local-preview-bundle4.s3.amazonaws.com/',
- APP_DOCS_PREVIEW_BUCKET: 'https://prod-local-preview-bundle3.s3.amazonaws.com/',
- CLI_NAME: "fern",
- CLI_VERSION: process.argv[2] || packageJson.version,
- CLI_PACKAGE_NAME: "fern-api",
- },
- });
-
- process.chdir(path.join(__dirname, "dist/prod"));
-
- // write cli's package.json
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: "fern-api",
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- files: ["cli.cjs"],
- bin: { fern: "cli.cjs" },
- dependencies: {
- "@boundaryml/baml": packageJson.devDependencies["@boundaryml/baml"]
- }
- },
- undefined,
- 2
- )
- );
-}
diff --git a/packages/cli/cli/build.prod-unminified.mjs b/packages/cli/cli/build.prod-unminified.mjs
new file mode 100644
index 000000000000..468a5eb358e7
--- /dev/null
+++ b/packages/cli/cli/build.prod-unminified.mjs
@@ -0,0 +1,30 @@
+import { buildCli, MINIMAL_EXTERNALS } from './build-utils.mjs';
+
+buildCli({
+ outDir: 'dist/prod-unminified',
+ minify: false,
+ env: {
+ AUTH0_DOMAIN: "fern-prod.us.auth0.com",
+ AUTH0_CLIENT_ID: "syaWnk6SjNoo5xBf1omfvziU3q7085lh",
+ DEFAULT_FIDDLE_ORIGIN: "https://fiddle-coordinator.buildwithfern.com",
+ DEFAULT_VENUS_ORIGIN: "https://venus.buildwithfern.com",
+ DEFAULT_FDR_ORIGIN: "https://registry.buildwithfern.com",
+ VENUS_AUDIENCE: "venus-prod",
+ LOCAL_STORAGE_FOLDER: ".fern",
+ POSTHOG_API_KEY: process.env.POSTHOG_API_KEY ?? "",
+ DOCS_DOMAIN_SUFFIX: "docs.buildwithfern.com",
+ DOCS_PREVIEW_BUCKET: 'https://prod-local-preview-bundle2.s3.amazonaws.com/',
+ APP_DOCS_TAR_PREVIEW_BUCKET: 'https://prod-local-preview-bundle4.s3.amazonaws.com/',
+ APP_DOCS_PREVIEW_BUCKET: 'https://prod-local-preview-bundle3.s3.amazonaws.com/',
+ CLI_NAME: "fern",
+ CLI_PACKAGE_NAME: "fern-api",
+ },
+ runtimeDependencies: ['@boundaryml/baml'],
+ packageJsonOverrides: {
+ name: "fern-api",
+ bin: { fern: "cli.cjs" },
+ },
+ tsupOverrides: {
+ external: MINIMAL_EXTERNALS,
+ }
+});
diff --git a/packages/cli/cli/build.prod.cjs b/packages/cli/cli/build.prod.cjs
deleted file mode 100644
index 08c9e893aa80..000000000000
--- a/packages/cli/cli/build.prod.cjs
+++ /dev/null
@@ -1,92 +0,0 @@
-const packageJson = require("./package.json");
-const tsup = require('tsup');
-const { writeFile } = require("fs/promises");
-const path = require("path");
-
-main();
-
-/**
- * Get a dependency version from package.json, preferring dependencies over devDependencies.
- * This ensures we don't miss runtime dependencies regardless of where they're declared.
- */
-function getDependencyVersion(packageName) {
- return packageJson.dependencies?.[packageName] ?? packageJson.devDependencies?.[packageName];
-}
-
-async function main() {
- await tsup.build({
- entry: ['src/cli.ts'],
- format: ['cjs'],
- minify: true,
- outDir: 'dist/prod',
- sourcemap: true,
- platform: 'node',
- target: 'node18',
- external: [
- '@boundaryml/baml',
- /^prettier(?:\/.*)?$/,
- /^prettier2(?:\/.*)?$/,
- /^vitest(?:\/.*)?$/,
- /^depcheck(?:\/.*)?$/,
- /^tsup(?:\/.*)?$/,
- /^typescript(?:\/.*)?$/,
- /^@types\/.*$/,
- ],
- metafile: true,
- env: {
- AUTH0_DOMAIN: "fern-prod.us.auth0.com",
- AUTH0_CLIENT_ID: "syaWnk6SjNoo5xBf1omfvziU3q7085lh",
- DEFAULT_FIDDLE_ORIGIN: "https://fiddle-coordinator.buildwithfern.com",
- DEFAULT_VENUS_ORIGIN: "https://venus.buildwithfern.com",
- DEFAULT_FDR_ORIGIN: "https://registry.buildwithfern.com",
- DEFAULT_FDR_LAMBDA_DOCS_ORIGIN: "https://ykq45y6fvnszd35iv5yuuatkze0rpwuz.lambda-url.us-east-1.on.aws",
- VENUS_AUDIENCE: "venus-prod",
- LOCAL_STORAGE_FOLDER: ".fern",
- POSTHOG_API_KEY: process.env.POSTHOG_API_KEY ?? "",
- DOCS_DOMAIN_SUFFIX: "docs.buildwithfern.com",
- DOCS_PREVIEW_BUCKET: 'https://prod-local-preview-bundle2.s3.amazonaws.com/',
- APP_DOCS_TAR_PREVIEW_BUCKET: 'https://prod-local-preview-bundle4.s3.amazonaws.com/',
- APP_DOCS_PREVIEW_BUCKET: 'https://prod-local-preview-bundle3.s3.amazonaws.com/',
- CLI_NAME: "fern",
- CLI_VERSION: process.argv[2] || packageJson.version,
- CLI_PACKAGE_NAME: "fern-api",
- },
- });
-
- process.chdir(path.join(__dirname, "dist/prod"));
-
- // Collect runtime dependencies that need to be included in the published package
- const runtimeDependencies = {
- "@boundaryml/baml": getDependencyVersion("@boundaryml/baml"),
- "cli-progress": getDependencyVersion("cli-progress")
- };
-
- // Validate that all required dependencies were found
- const missingDeps = Object.entries(runtimeDependencies)
- .filter(([_, version]) => !version)
- .map(([name, _]) => name);
-
- if (missingDeps.length > 0) {
- throw new Error(
- `Missing required runtime dependencies in package.json: ${missingDeps.join(", ")}. ` +
- `These must be declared in either dependencies or devDependencies.`
- );
- }
-
- // write cli's package.json
- await writeFile(
- "package.json",
- JSON.stringify(
- {
- name: "fern-api",
- version: process.argv[2] || packageJson.version,
- repository: packageJson.repository,
- files: ["cli.cjs"],
- bin: { fern: "cli.cjs" },
- dependencies: runtimeDependencies
- },
- undefined,
- 2
- )
- );
-}
diff --git a/packages/cli/cli/build.prod.mjs b/packages/cli/cli/build.prod.mjs
new file mode 100644
index 000000000000..2c80dd120c55
--- /dev/null
+++ b/packages/cli/cli/build.prod.mjs
@@ -0,0 +1,29 @@
+import { buildCli, PRODUCTION_TSUP_OVERRIDES } from './build-utils.mjs';
+
+buildCli({
+ outDir: 'dist/prod',
+ minify: true,
+ env: {
+ AUTH0_DOMAIN: "fern-prod.us.auth0.com",
+ AUTH0_CLIENT_ID: "syaWnk6SjNoo5xBf1omfvziU3q7085lh",
+ DEFAULT_FIDDLE_ORIGIN: "https://fiddle-coordinator.buildwithfern.com",
+ DEFAULT_VENUS_ORIGIN: "https://venus.buildwithfern.com",
+ DEFAULT_FDR_ORIGIN: "https://registry.buildwithfern.com",
+ DEFAULT_FDR_LAMBDA_DOCS_ORIGIN: "https://ykq45y6fvnszd35iv5yuuatkze0rpwuz.lambda-url.us-east-1.on.aws",
+ VENUS_AUDIENCE: "venus-prod",
+ LOCAL_STORAGE_FOLDER: ".fern",
+ POSTHOG_API_KEY: process.env.POSTHOG_API_KEY ?? "",
+ DOCS_DOMAIN_SUFFIX: "docs.buildwithfern.com",
+ DOCS_PREVIEW_BUCKET: 'https://prod-local-preview-bundle2.s3.amazonaws.com/',
+ APP_DOCS_TAR_PREVIEW_BUCKET: 'https://prod-local-preview-bundle4.s3.amazonaws.com/',
+ APP_DOCS_PREVIEW_BUCKET: 'https://prod-local-preview-bundle3.s3.amazonaws.com/',
+ CLI_NAME: "fern",
+ CLI_PACKAGE_NAME: "fern-api",
+ },
+ runtimeDependencies: ['@boundaryml/baml', 'cli-progress'],
+ packageJsonOverrides: {
+ name: "fern-api",
+ bin: { fern: "cli.cjs" },
+ },
+ tsupOverrides: PRODUCTION_TSUP_OVERRIDES
+});
diff --git a/packages/cli/cli/package.json b/packages/cli/cli/package.json
index 1582dd708b20..9776d0cedc58 100644
--- a/packages/cli/cli/package.json
+++ b/packages/cli/cli/package.json
@@ -32,10 +32,10 @@
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist:cli:dev": "pnpm compile && node build.dev.cjs",
- "dist:cli:local": "pnpm compile && node build.local.cjs",
- "dist:cli:prod": "pnpm compile && node build.prod.cjs",
- "dist:cli:prod:unminified": "pnpm compile && node build.prod-unminified.cjs",
+ "dist:cli:dev": "node build.dev.mjs",
+ "dist:cli:local": "node build.local.mjs",
+ "dist:cli:prod": "node build.prod.mjs",
+ "dist:cli:prod:unminified": "node build.prod-unminified.mjs",
"format": "prettier --write --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"format:check": "prettier --check --ignore-unknown --ignore-path ../../../shared/.prettierignore \"**\"",
"lint:eslint": "eslint --max-warnings 0 . --ignore-pattern=../../../.eslintignore",
diff --git a/packages/cli/cli/turbo.jsonc b/packages/cli/cli/turbo.jsonc
new file mode 100644
index 000000000000..3990e9d23a41
--- /dev/null
+++ b/packages/cli/cli/turbo.jsonc
@@ -0,0 +1,21 @@
+{
+ "extends": ["//"],
+ "tasks": {
+ "dist:cli:prod:unminified": {
+ "outputs": ["dist/prod-unminified/**"],
+ "dependsOn": ["^compile", "compile"],
+ "inputs": [
+ "src/**",
+ "tests/**",
+ "package.json",
+ "tsconfig.json",
+ "build-utils.mjs",
+ "build.prod.mjs",
+ "$TURBO_ROOT$/shared/.prettierignore",
+ "$TURBO_ROOT$/shared/stylelintrc.shared.json",
+ "$TURBO_ROOT$/tsconfig.eslint.json",
+ "$TURBO_ROOT$/packages/configs/**"
+ ]
+ }
+ }
+}
diff --git a/packages/cli/configuration-loader/tsconfig.json b/packages/cli/configuration-loader/tsconfig.json
index 16eee853eb45..10d2a343d897 100644
--- a/packages/cli/configuration-loader/tsconfig.json
+++ b/packages/cli/configuration-loader/tsconfig.json
@@ -10,25 +10,22 @@
"include": ["./src/**/*"],
"references": [
{
- "path": "../../commons/core-utils"
- },
- {
- "path": "../../commons/fs-utils"
+ "path": "../task-context"
},
{
- "path": "../configuration"
+ "path": "../../commons/github"
},
{
- "path": "../fern-definition/schema"
+ "path": "../../commons/fs-utils"
},
{
- "path": "../logger"
+ "path": "../../commons/core-utils"
},
{
- "path": "../task-context"
+ "path": "../configuration"
},
{
- "path": "../../commons/github"
+ "path": "../logger"
}
]
}
diff --git a/packages/cli/docs-preview/tsconfig.json b/packages/cli/docs-preview/tsconfig.json
index fa0dd74fe417..ed2efed9533f 100644
--- a/packages/cli/docs-preview/tsconfig.json
+++ b/packages/cli/docs-preview/tsconfig.json
@@ -35,6 +35,9 @@
},
{
"path": "../docs-resolver"
+ },
+ {
+ "path": "../../commons/core-utils"
}
]
}
diff --git a/packages/cli/generation/protoc-gen-fern/build.tsconfig.json b/packages/cli/generation/protoc-gen-fern/build.tsconfig.json
deleted file mode 100644
index a3bf8730a45d..000000000000
--- a/packages/cli/generation/protoc-gen-fern/build.tsconfig.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "extends": "@fern-api/configs/tsconfig/main.json",
- "compilerOptions": {
- "verbatimModuleSyntax": false,
- "module": "CommonJS"
- },
- "include": ["./package.json", "./src/**/*"],
- "references": [
- {
- "path": "../../../commons/casings-generator"
- },
- {
- "path": "../../../commons/core-utils"
- },
- {
- "path": "../../../commons/ir-utils"
- },
- {
- "path": "../../../ir-sdk"
- },
- {
- "path": "../../api-importers/v3-importer-commons"
- },
- {
- "path": "../../logger"
- }
- ]
-}
diff --git a/packages/cli/generation/protoc-gen-fern/package.json b/packages/cli/generation/protoc-gen-fern/package.json
index c05e3d09845c..9b93730863fe 100644
--- a/packages/cli/generation/protoc-gen-fern/package.json
+++ b/packages/cli/generation/protoc-gen-fern/package.json
@@ -24,13 +24,12 @@
"bin": {
"protoc-gen-fern": "bin/protoc-gen-fern"
},
- "files": ["lib"],
+ "files": ["bin", "lib"],
"scripts": {
"clean": "rm -rf ./lib && tsc --build --clean",
"compile": "tsc --build",
"compile:debug": "tsc --build --sourceMap",
"depcheck": "depcheck",
- "dist": "tsc --project build.tsconfig.json --outDir ./dist/cjs",
"test": "vitest --passWithNoTests --run",
"test:debug": "pnpm run test --inspect --no-file-parallelism",
"test:update": "vitest --passWithNoTests --run -u"
diff --git a/packages/cli/git-diff-1763508841128.patch b/packages/cli/git-diff-1763508841128.patch
deleted file mode 100644
index 5ce479f43246..000000000000
--- a/packages/cli/git-diff-1763508841128.patch
+++ /dev/null
@@ -1,2985 +0,0 @@
-diff --git a/.fern/metadata.json b/.fern/metadata.json
-deleted file mode 100644
-index ed7073e..0000000
---- a/.fern/metadata.json
-+++ /dev/null
-@@ -1,5 +0,0 @@
--{
-- "cliVersion": "0.110.1",
-- "generatorName": "fernapi/fern-typescript-sdk",
-- "generatorVersion": "3.28.4"
--}
-diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
-index 5834b38..92f2abb 100644
---- a/.github/workflows/ci.yml
-+++ b/.github/workflows/ci.yml
-@@ -11,7 +11,7 @@ jobs:
- uses: actions/checkout@v4
-
- - name: Set up node
-- uses: actions/setup-node@v4
-+ uses: actions/setup-node@v3
-
- - name: Install pnpm
- uses: pnpm/action-setup@v4
-@@ -30,7 +30,7 @@ jobs:
- uses: actions/checkout@v4
-
- - name: Set up node
-- uses: actions/setup-node@v4
-+ uses: actions/setup-node@v3
-
- - name: Install pnpm
- uses: pnpm/action-setup@v4
-diff --git a/.npmignore b/.npmignore
-index c0c40ac..b7e5ad3 100644
---- a/.npmignore
-+++ b/.npmignore
-@@ -4,7 +4,6 @@ tests
- .gitignore
- .github
- .fernignore
--.prettierrc.yml
- biome.json
- tsconfig.json
- yarn.lock
-diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
-deleted file mode 100644
-index fe5bc2f..0000000
---- a/CONTRIBUTING.md
-+++ /dev/null
-@@ -1,133 +0,0 @@
--# Contributing
--
--Thanks for your interest in contributing to this SDK! This document provides guidelines for contributing to the project.
--
--## Getting Started
--
--### Prerequisites
--
--- Node.js 20 or higher
--- pnpm package manager
--
--### Installation
--
--Install the project dependencies:
--
--```bash
--pnpm install
--```
--
--### Building
--
--Build the project:
--
--```bash
--pnpm build
--```
--
--### Testing
--
--Run the test suite:
--
--```bash
--pnpm test
--```
--
--Run specific test types:
--- `pnpm test:unit` - Run unit tests
--- `pnpm test:wire` - Run wire/integration tests
--
--### Linting and Formatting
--
--Check code style:
--
--```bash
--pnpm run lint
--pnpm run format:check
--```
--
--Fix code style issues:
--
--```bash
--pnpm run lint:fix
--pnpm run format:fix
--```
--
--Or use the combined check command:
--
--```bash
--pnpm run check:fix
--```
--
--## About Generated Code
--
--**Important**: Most files in this SDK are automatically generated by [Fern](https://buildwithfern.com) from the API definition. Direct modifications to generated files will be overwritten the next time the SDK is generated.
--
--### Generated Files
--
--The following directories contain generated code:
--- `src/api/` - API client classes and types
--- `src/serialization/` - Serialization/deserialization logic
--- Most TypeScript files in `src/`
--
--### How to Customize
--
--If you need to customize the SDK, you have two options:
--
--#### Option 1: Use `.fernignore`
--
--For custom code that should persist across SDK regenerations:
--
--1. Create a `.fernignore` file in the project root
--2. Add file patterns for files you want to preserve (similar to `.gitignore` syntax)
--3. Add your custom code to those files
--
--Files listed in `.fernignore` will not be overwritten when the SDK is regenerated.
--
--For more information, see the [Fern documentation on custom code](https://buildwithfern.com/learn/sdks/overview/custom-code).
--
--#### Option 2: Contribute to the Generator
--
--If you want to change how code is generated for all users of this SDK:
--
--1. The TypeScript SDK generator lives in the [Fern repository](https://github.com/fern-api/fern)
--2. Generator code is located at `generators/typescript/sdk/`
--3. Follow the [Fern contributing guidelines](https://github.com/fern-api/fern/blob/main/CONTRIBUTING.md)
--4. Submit a pull request with your changes to the generator
--
--This approach is best for:
--- Bug fixes in generated code
--- New features that would benefit all users
--- Improvements to code generation patterns
--
--## Making Changes
--
--### Workflow
--
--1. Create a new branch for your changes
--2. Make your modifications
--3. Run tests to ensure nothing breaks: `pnpm test`
--4. Run linting and formatting: `pnpm run check:fix`
--5. Build the project: `pnpm build`
--6. Commit your changes with a clear commit message
--7. Push your branch and create a pull request
--
--### Commit Messages
--
--Write clear, descriptive commit messages that explain what changed and why.
--
--### Code Style
--
--This project uses automated code formatting and linting. Run `pnpm run check:fix` before committing to ensure your code meets the project's style guidelines.
--
--## Questions or Issues?
--
--If you have questions or run into issues:
--
--1. Check the [Fern documentation](https://buildwithfern.com)
--2. Search existing [GitHub issues](https://github.com/fern-api/fern/issues)
--3. Open a new issue if your question hasn't been addressed
--
--## License
--
--By contributing to this project, you agree that your contributions will be licensed under the same license as the project.
-diff --git a/README.md b/README.md
-index c08d0f9..ed474f3 100644
---- a/README.md
-+++ b/README.md
-@@ -1,10 +1,27 @@
- # Fern TypeScript Library
-
--[](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=https%3A%2F%2Fgithub.com%2Ffern-demo%2Fauto-version-testing-ts-sdk)
-+[](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=Fern%2FTypeScript)
- [](https://www.npmjs.com/package/)
-
- The Fern TypeScript library provides convenient access to the Fern APIs from TypeScript.
-
-+## Table of Contents
-+
-+- [Installation](#installation)
-+- [Reference](#reference)
-+- [Usage](#usage)
-+- [Request and Response Types](#request-and-response-types)
-+- [Exception Handling](#exception-handling)
-+- [Advanced](#advanced)
-+ - [Additional Headers](#additional-headers)
-+ - [Additional Query String Parameters](#additional-query-string-parameters)
-+ - [Retries](#retries)
-+ - [Timeouts](#timeouts)
-+ - [Aborting Requests](#aborting-requests)
-+ - [Access Raw Response Data](#access-raw-response-data)
-+ - [Runtime Compatibility](#runtime-compatibility)
-+- [Contributing](#contributing)
-+
- ## Installation
-
- ```sh
-@@ -13,7 +30,7 @@ npm i -s
-
- ## Reference
-
--A full reference for this library is available [here](https://github.com/fern-demo/auto-version-testing-ts-sdk/blob/HEAD/./reference.md).
-+A full reference for this library is available [here](./reference.md).
-
- ## Usage
-
-@@ -31,7 +48,7 @@ await client.plant.addPlant({
- });
- ```
-
--## Request And Response Types
-+## Request and Response Types
-
- The SDK exports all request and response types as TypeScript interfaces. Simply import them with the
- following namespace:
-@@ -144,69 +161,6 @@ console.log(data);
- console.log(rawResponse.headers['X-My-Header']);
- ```
-
--### Logging
--
--The SDK supports logging. You can configure the logger by passing in a `logging` object to the client options.
--
--```typescript
--import { FernApiClient, logging } from "FernApi";
--
--const client = new FernApiClient({
-- ...
-- logging: {
-- level: logging.LogLevel.Debug, // defaults to logging.LogLevel.Info
-- logger: new logging.ConsoleLogger(), // defaults to ConsoleLogger
-- silent: false, // defaults to true, set to false to enable logging
-- }
--});
--```
--The `logging` object can have the following properties:
--- `level`: The log level to use. Defaults to `logging.LogLevel.Info`.
--- `logger`: The logger to use. Defaults to a `logging.ConsoleLogger`.
--- `silent`: Whether to silence the logger. Defaults to `true`.
--
--The `level` property can be one of the following values:
--- `logging.LogLevel.Debug`
--- `logging.LogLevel.Info`
--- `logging.LogLevel.Warn`
--- `logging.LogLevel.Error`
--
--To provide a custom logger, you can pass in an object that implements the `logging.ILogger` interface.
--
--Custom logger examples
--
--Here's an example using the popular `winston` logging library.
--```ts
--import winston from 'winston';
--
--const winstonLogger = winston.createLogger({...});
--
--const logger: logging.ILogger = {
-- debug: (msg, ...args) => winstonLogger.debug(msg, ...args),
-- info: (msg, ...args) => winstonLogger.info(msg, ...args),
-- warn: (msg, ...args) => winstonLogger.warn(msg, ...args),
-- error: (msg, ...args) => winstonLogger.error(msg, ...args),
--};
--```
--
--Here's an example using the popular `pino` logging library.
--
--```ts
--import pino from 'pino';
--
--const pinoLogger = pino({...});
--
--const logger: logging.ILogger = {
-- debug: (msg, ...args) => pinoLogger.debug(args, msg),
-- info: (msg, ...args) => pinoLogger.info(args, msg),
-- warn: (msg, ...args) => pinoLogger.warn(args, msg),
-- error: (msg, ...args) => pinoLogger.error(args, msg),
--};
--```
--
client.plant.getPlantById(plantId) -> FernApi.PlantResponseclient.plant.getPlantById({ ...params }) -> FernApi.PlantResponseclient.user.getUserByName(username) -> FernApi.Userclient.user.getUserByName({ ...params }) -> FernApi.User