From 3a14126709cca6ae6b61d756478cff1c1f9ec6ff Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Tue, 18 Nov 2025 21:17:14 +0000 Subject: [PATCH 1/9] fix! Change to ES Modules to support dynamic loading in Next.js --- .../server-ai-langchain/package.json | 11 ++- .../server-ai-langchain/tsconfig.json | 2 +- .../server-ai-openai/package.json | 9 ++- .../server-ai-openai/tsconfig.json | 2 +- .../server-ai-vercel/package.json | 9 ++- .../server-ai-vercel/tsconfig.json | 2 +- packages/sdk/server-ai/package.json | 11 ++- packages/sdk/server-ai/src/LDAIClientImpl.ts | 2 +- .../server-ai/src/LDAIConfigTrackerImpl.ts | 4 +- packages/sdk/server-ai/src/api/judge/Judge.ts | 2 +- .../src/api/providers/AIProviderFactory.ts | 77 +++++++------------ packages/sdk/server-ai/tsconfig.json | 8 +- 12 files changed, 76 insertions(+), 63 deletions(-) diff --git a/packages/ai-providers/server-ai-langchain/package.json b/packages/ai-providers/server-ai-langchain/package.json index 4a5aebccb0..db1c507b74 100644 --- a/packages/ai-providers/server-ai-langchain/package.json +++ b/packages/ai-providers/server-ai-langchain/package.json @@ -9,7 +9,14 @@ }, "main": "dist/index.js", "types": "dist/index.d.ts", - "type": "commonjs", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "default": "./dist/index.js" + } + }, "scripts": { "build": "npx tsc", "lint": "npx eslint . --ext .ts", @@ -27,6 +34,7 @@ "author": "LaunchDarkly", "license": "Apache-2.0", "devDependencies": { + "@langchain/community": "^0.3.0", "@langchain/core": "^0.3.0", "@launchdarkly/server-sdk-ai": "^0.14.1", "@trivago/prettier-plugin-sort-imports": "^4.1.1", @@ -47,6 +55,7 @@ "typescript": "5.1.6" }, "peerDependencies": { + "@langchain/community": "^0.2.0 || ^0.3.0", "@langchain/core": "^0.2.0 || ^0.3.0", "@launchdarkly/server-sdk-ai": "^0.14.0", "langchain": "^0.2.0 || ^0.3.0" diff --git a/packages/ai-providers/server-ai-langchain/tsconfig.json b/packages/ai-providers/server-ai-langchain/tsconfig.json index 6238d6a0f5..9e6ed5ffb2 100644 --- a/packages/ai-providers/server-ai-langchain/tsconfig.json +++ b/packages/ai-providers/server-ai-langchain/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ES2020", - "module": "CommonJS", + "module": "ES2020", "lib": ["ES2020"], "moduleResolution": "node", "esModuleInterop": true, diff --git a/packages/ai-providers/server-ai-openai/package.json b/packages/ai-providers/server-ai-openai/package.json index 90fd6832b9..e0b271cbc0 100644 --- a/packages/ai-providers/server-ai-openai/package.json +++ b/packages/ai-providers/server-ai-openai/package.json @@ -9,7 +9,14 @@ }, "main": "dist/index.js", "types": "dist/index.d.ts", - "type": "commonjs", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "default": "./dist/index.js" + } + }, "scripts": { "build": "npx tsc", "lint": "npx eslint . --ext .ts", diff --git a/packages/ai-providers/server-ai-openai/tsconfig.json b/packages/ai-providers/server-ai-openai/tsconfig.json index 6238d6a0f5..9e6ed5ffb2 100644 --- a/packages/ai-providers/server-ai-openai/tsconfig.json +++ b/packages/ai-providers/server-ai-openai/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ES2020", - "module": "CommonJS", + "module": "ES2020", "lib": ["ES2020"], "moduleResolution": "node", "esModuleInterop": true, diff --git a/packages/ai-providers/server-ai-vercel/package.json b/packages/ai-providers/server-ai-vercel/package.json index 8fc2c196ba..1368d4951d 100644 --- a/packages/ai-providers/server-ai-vercel/package.json +++ b/packages/ai-providers/server-ai-vercel/package.json @@ -9,7 +9,14 @@ }, "main": "dist/index.js", "types": "dist/index.d.ts", - "type": "commonjs", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "default": "./dist/index.js" + } + }, "scripts": { "build": "npx tsc", "lint": "npx eslint . --ext .ts", diff --git a/packages/ai-providers/server-ai-vercel/tsconfig.json b/packages/ai-providers/server-ai-vercel/tsconfig.json index 6238d6a0f5..9e6ed5ffb2 100644 --- a/packages/ai-providers/server-ai-vercel/tsconfig.json +++ b/packages/ai-providers/server-ai-vercel/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ES2020", - "module": "CommonJS", + "module": "ES2020", "lib": ["ES2020"], "moduleResolution": "node", "esModuleInterop": true, diff --git a/packages/sdk/server-ai/package.json b/packages/sdk/server-ai/package.json index 43393662e6..48883d9355 100644 --- a/packages/sdk/server-ai/package.json +++ b/packages/sdk/server-ai/package.json @@ -9,9 +9,16 @@ }, "main": "dist/src/index.js", "types": "dist/src/index.d.ts", - "type": "commonjs", + "type": "module", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "import": "./dist/src/index.js", + "default": "./dist/src/index.js" + } + }, "scripts": { - "build": "npx tsc", + "build": "npx tsc && ../../../scripts/replace-version.sh .", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", diff --git a/packages/sdk/server-ai/src/LDAIClientImpl.ts b/packages/sdk/server-ai/src/LDAIClientImpl.ts index 6955e1a05f..318ddaed71 100644 --- a/packages/sdk/server-ai/src/LDAIClientImpl.ts +++ b/packages/sdk/server-ai/src/LDAIClientImpl.ts @@ -1,4 +1,4 @@ -import * as Mustache from 'mustache'; +import Mustache from 'mustache'; import { LDContext, LDLogger } from '@launchdarkly/js-server-sdk-common'; diff --git a/packages/sdk/server-ai/src/LDAIConfigTrackerImpl.ts b/packages/sdk/server-ai/src/LDAIConfigTrackerImpl.ts index 582b03224e..71fd422939 100644 --- a/packages/sdk/server-ai/src/LDAIConfigTrackerImpl.ts +++ b/packages/sdk/server-ai/src/LDAIConfigTrackerImpl.ts @@ -1,6 +1,5 @@ import { LDContext } from '@launchdarkly/js-server-sdk-common'; -import { name as aiSdkName, version as aiSdkVersion } from '../package.json'; import { LDAIConfigTracker } from './api/config'; import { LDAIMetricSummary } from './api/config/LDAIConfigTracker'; import { EvalScore, JudgeResponse } from './api/judge/types'; @@ -14,6 +13,9 @@ import { } from './api/metrics'; import { LDClientMin } from './LDClientMin'; +const aiSdkName = '@launchdarkly/server-sdk-ai'; +const aiSdkVersion = '__LD_VERSION__'; + export class LDAIConfigTrackerImpl implements LDAIConfigTracker { private _trackedMetrics: LDAIMetricSummary = {}; diff --git a/packages/sdk/server-ai/src/api/judge/Judge.ts b/packages/sdk/server-ai/src/api/judge/Judge.ts index e608743acd..e71a43bdd3 100644 --- a/packages/sdk/server-ai/src/api/judge/Judge.ts +++ b/packages/sdk/server-ai/src/api/judge/Judge.ts @@ -1,4 +1,4 @@ -import * as Mustache from 'mustache'; +import Mustache from 'mustache'; import { LDLogger } from '@launchdarkly/js-server-sdk-common'; diff --git a/packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts b/packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts index 0d33eb69a4..f5b15c69c7 100644 --- a/packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts +++ b/packages/sdk/server-ai/src/api/providers/AIProviderFactory.ts @@ -43,9 +43,13 @@ export class AIProviderFactory { // Try each provider in order // eslint-disable-next-line no-restricted-syntax for (const providerType of providersToTry) { + logger?.debug( + `Attempting to create AIProvider for: ${aiConfig.provider?.name} with provider type: ${providerType}`, + ); // eslint-disable-next-line no-await-in-loop const provider = await this._tryCreateProvider(providerType, aiConfig, logger); if (provider) { + logger?.debug(`Successfully created AIProvider for: ${aiConfig.provider?.name}`); return provider; } } @@ -93,58 +97,35 @@ export class AIProviderFactory { providerType: SupportedAIProvider, aiConfig: LDAIConfigKind, logger?: LDLogger, - ): Promise { - switch (providerType) { - case 'openai': - return this._createProvider( - '@launchdarkly/server-sdk-ai-openai', - 'OpenAIProvider', - aiConfig, - logger, - ); - case 'langchain': - return this._createProvider( - '@launchdarkly/server-sdk-ai-langchain', - 'LangChainProvider', - aiConfig, - logger, - ); - case 'vercel': - return this._createProvider( - '@launchdarkly/server-sdk-ai-vercel', - 'VercelProvider', - aiConfig, - logger, - ); - default: - return undefined; - } - } - - /** - * Create a provider instance dynamically. - */ - private static async _createProvider( - packageName: string, - providerClassName: string, - aiConfig: LDAIConfigKind, - logger?: LDLogger, ): Promise { try { - // Try to dynamically import the provider - // This will work if the package is installed - // eslint-disable-next-line import/no-extraneous-dependencies, global-require, import/no-dynamic-require - const { [providerClassName]: ProviderClass } = require(packageName); + let module; - const provider = await ProviderClass.create(aiConfig, logger); - logger?.debug( - `Successfully created AIProvider for: ${aiConfig.provider?.name} with package ${packageName}`, - ); - return provider; - } catch (error) { - // If the provider is not available or creation fails, return undefined + switch (providerType) { + case 'openai': { + // eslint-disable-next-line import/no-extraneous-dependencies + module = await import('@launchdarkly/server-sdk-ai-openai' as any); + const provider = (await module.OpenAIProvider.create(aiConfig, logger)) as AIProvider; + return provider; + } + case 'langchain': { + // eslint-disable-next-line import/no-extraneous-dependencies + module = await import('@launchdarkly/server-sdk-ai-langchain' as any); + const provider = (await module.LangChainProvider.create(aiConfig, logger)) as AIProvider; + return provider; + } + case 'vercel': { + // eslint-disable-next-line import/no-extraneous-dependencies + module = await import('@launchdarkly/server-sdk-ai-vercel' as any); + const provider = (await module.VercelProvider.create(aiConfig, logger)) as AIProvider; + return provider; + } + default: + return undefined; + } + } catch (error: any) { logger?.warn( - `Error creating AIProvider for: ${aiConfig.provider?.name} with package ${packageName}: ${error}`, + `Unable to create AIProvider. Check that you have installed the correct package. ${error.message}`, ); return undefined; } diff --git a/packages/sdk/server-ai/tsconfig.json b/packages/sdk/server-ai/tsconfig.json index 19ba2bdc20..7663a65792 100644 --- a/packages/sdk/server-ai/tsconfig.json +++ b/packages/sdk/server-ai/tsconfig.json @@ -3,13 +3,13 @@ // Uses "." so it can load package.json. "rootDir": ".", "outDir": "dist", - "target": "es2017", - "lib": ["es6"], - "module": "commonjs", + "target": "es2020", + "lib": ["es2020"], + "module": "ES2020", "strict": true, "noImplicitOverride": true, - // Needed for CommonJS modules. "allowSyntheticDefaultImports": true, + "esModuleInterop": true, "sourceMap": true, "declaration": true, "declarationMap": true, // enables importers to jump to source From 52bae9543457c6655c36a630ef2f0b01905c9d0f Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Wed, 19 Nov 2025 15:19:16 +0000 Subject: [PATCH 2/9] fix unit tests for es modules --- .../server-ai-langchain/jest.config.js | 17 +++++++++++++++-- .../server-ai-langchain/tsconfig.eslint.json | 2 +- .../server-ai-openai/jest.config.js | 17 +++++++++++++++-- .../server-ai-openai/tsconfig.eslint.json | 2 +- .../server-ai-vercel/jest.config.js | 17 +++++++++++++++-- .../server-ai-vercel/tsconfig.eslint.json | 2 +- .../__tests__/LDAIConfigTrackerImpl.test.ts | 4 +++- packages/sdk/server-ai/jest.config.js | 16 ++++++++++++++-- packages/sdk/server-ai/tsconfig.eslint.json | 2 +- 9 files changed, 66 insertions(+), 13 deletions(-) diff --git a/packages/ai-providers/server-ai-langchain/jest.config.js b/packages/ai-providers/server-ai-langchain/jest.config.js index f106eb3bc9..c8c423a1d1 100644 --- a/packages/ai-providers/server-ai-langchain/jest.config.js +++ b/packages/ai-providers/server-ai-langchain/jest.config.js @@ -1,7 +1,20 @@ -module.exports = { - transform: { '^.+\\.ts?$': 'ts-jest' }, +export default { + preset: 'ts-jest/presets/default-esm', + extensionsToTreatAsEsm: ['.ts'], testMatch: ['**/__tests__/**/*test.ts?(x)'], testEnvironment: 'node', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], collectCoverageFrom: ['src/**/*.ts'], + moduleNameMapper: { + '^@launchdarkly/server-sdk-ai$': '/../../sdk/server-ai/src/index.ts', + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + transform: { + '^.+\\.ts$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, }; diff --git a/packages/ai-providers/server-ai-langchain/tsconfig.eslint.json b/packages/ai-providers/server-ai-langchain/tsconfig.eslint.json index 56c9b38305..39dd46ee4c 100644 --- a/packages/ai-providers/server-ai-langchain/tsconfig.eslint.json +++ b/packages/ai-providers/server-ai-langchain/tsconfig.eslint.json @@ -1,5 +1,5 @@ { "extends": "./tsconfig.json", - "include": ["/**/*.ts"], + "include": ["**/*.ts", "**/*.js"], "exclude": ["node_modules"] } diff --git a/packages/ai-providers/server-ai-openai/jest.config.js b/packages/ai-providers/server-ai-openai/jest.config.js index f106eb3bc9..c8c423a1d1 100644 --- a/packages/ai-providers/server-ai-openai/jest.config.js +++ b/packages/ai-providers/server-ai-openai/jest.config.js @@ -1,7 +1,20 @@ -module.exports = { - transform: { '^.+\\.ts?$': 'ts-jest' }, +export default { + preset: 'ts-jest/presets/default-esm', + extensionsToTreatAsEsm: ['.ts'], testMatch: ['**/__tests__/**/*test.ts?(x)'], testEnvironment: 'node', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], collectCoverageFrom: ['src/**/*.ts'], + moduleNameMapper: { + '^@launchdarkly/server-sdk-ai$': '/../../sdk/server-ai/src/index.ts', + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + transform: { + '^.+\\.ts$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, }; diff --git a/packages/ai-providers/server-ai-openai/tsconfig.eslint.json b/packages/ai-providers/server-ai-openai/tsconfig.eslint.json index 56c9b38305..39dd46ee4c 100644 --- a/packages/ai-providers/server-ai-openai/tsconfig.eslint.json +++ b/packages/ai-providers/server-ai-openai/tsconfig.eslint.json @@ -1,5 +1,5 @@ { "extends": "./tsconfig.json", - "include": ["/**/*.ts"], + "include": ["**/*.ts", "**/*.js"], "exclude": ["node_modules"] } diff --git a/packages/ai-providers/server-ai-vercel/jest.config.js b/packages/ai-providers/server-ai-vercel/jest.config.js index f106eb3bc9..c8c423a1d1 100644 --- a/packages/ai-providers/server-ai-vercel/jest.config.js +++ b/packages/ai-providers/server-ai-vercel/jest.config.js @@ -1,7 +1,20 @@ -module.exports = { - transform: { '^.+\\.ts?$': 'ts-jest' }, +export default { + preset: 'ts-jest/presets/default-esm', + extensionsToTreatAsEsm: ['.ts'], testMatch: ['**/__tests__/**/*test.ts?(x)'], testEnvironment: 'node', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], collectCoverageFrom: ['src/**/*.ts'], + moduleNameMapper: { + '^@launchdarkly/server-sdk-ai$': '/../../sdk/server-ai/src/index.ts', + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + transform: { + '^.+\\.ts$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, }; diff --git a/packages/ai-providers/server-ai-vercel/tsconfig.eslint.json b/packages/ai-providers/server-ai-vercel/tsconfig.eslint.json index 56c9b38305..39dd46ee4c 100644 --- a/packages/ai-providers/server-ai-vercel/tsconfig.eslint.json +++ b/packages/ai-providers/server-ai-vercel/tsconfig.eslint.json @@ -1,5 +1,5 @@ { "extends": "./tsconfig.json", - "include": ["/**/*.ts"], + "include": ["**/*.ts", "**/*.js"], "exclude": ["node_modules"] } diff --git a/packages/sdk/server-ai/__tests__/LDAIConfigTrackerImpl.test.ts b/packages/sdk/server-ai/__tests__/LDAIConfigTrackerImpl.test.ts index 33ec018cac..987eec71ea 100644 --- a/packages/sdk/server-ai/__tests__/LDAIConfigTrackerImpl.test.ts +++ b/packages/sdk/server-ai/__tests__/LDAIConfigTrackerImpl.test.ts @@ -1,10 +1,12 @@ import { LDContext } from '@launchdarkly/js-server-sdk-common'; -import { name as aiSdkName, version as aiSdkVersion } from '../package.json'; import { LDFeedbackKind } from '../src/api/metrics'; import { LDAIConfigTrackerImpl } from '../src/LDAIConfigTrackerImpl'; import { LDClientMin } from '../src/LDClientMin'; +const aiSdkName = '@launchdarkly/server-sdk-ai'; +const aiSdkVersion = '__LD_VERSION__'; + const mockTrack = jest.fn(); const mockVariation = jest.fn(); const mockLdClient: LDClientMin = { diff --git a/packages/sdk/server-ai/jest.config.js b/packages/sdk/server-ai/jest.config.js index f106eb3bc9..9225b65a0c 100644 --- a/packages/sdk/server-ai/jest.config.js +++ b/packages/sdk/server-ai/jest.config.js @@ -1,7 +1,19 @@ -module.exports = { - transform: { '^.+\\.ts?$': 'ts-jest' }, +export default { + preset: 'ts-jest/presets/default-esm', + extensionsToTreatAsEsm: ['.ts'], testMatch: ['**/__tests__/**/*test.ts?(x)'], testEnvironment: 'node', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], collectCoverageFrom: ['src/**/*.ts'], + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + transform: { + '^.+\\.ts$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, }; diff --git a/packages/sdk/server-ai/tsconfig.eslint.json b/packages/sdk/server-ai/tsconfig.eslint.json index 156dde8255..7cdd6638e1 100644 --- a/packages/sdk/server-ai/tsconfig.eslint.json +++ b/packages/sdk/server-ai/tsconfig.eslint.json @@ -1,5 +1,5 @@ { "extends": "./tsconfig.json", - "include": ["**/*.ts"], + "include": ["**/*.ts", "**/*.js"], "exclude": ["node_modules", "dist"] } From 04fad45884f49feb294c7b57cca148abce4fc64d Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Thu, 20 Nov 2025 18:48:04 +0000 Subject: [PATCH 3/9] Enable ESM and CSJ compatibility --- .../server-ai-langchain/jest.config.cjs | 7 ++++++ .../server-ai-langchain/jest.config.js | 20 ---------------- .../server-ai-langchain/package.json | 24 +++++++++++++------ .../server-ai-langchain/tsup.config.ts | 15 ++++++++++++ .../server-ai-openai/jest.config.cjs | 7 ++++++ .../server-ai-openai/jest.config.js | 20 ---------------- .../server-ai-openai/package.json | 24 +++++++++++++------ .../server-ai-openai/tsup.config.ts | 15 ++++++++++++ .../server-ai-vercel/jest.config.cjs | 7 ++++++ .../server-ai-vercel/jest.config.js | 20 ---------------- .../server-ai-vercel/package.json | 24 +++++++++++++------ .../server-ai-vercel/tsup.config.ts | 15 ++++++++++++ packages/sdk/server-ai/jest.config.cjs | 7 ++++++ packages/sdk/server-ai/jest.config.js | 19 --------------- packages/sdk/server-ai/package.json | 24 +++++++++++++------ packages/sdk/server-ai/src/index.ts | 6 ++++- packages/sdk/server-ai/tsconfig.json | 10 ++++---- packages/sdk/server-ai/tsup.config.ts | 15 ++++++++++++ 18 files changed, 166 insertions(+), 113 deletions(-) create mode 100644 packages/ai-providers/server-ai-langchain/jest.config.cjs delete mode 100644 packages/ai-providers/server-ai-langchain/jest.config.js create mode 100644 packages/ai-providers/server-ai-langchain/tsup.config.ts create mode 100644 packages/ai-providers/server-ai-openai/jest.config.cjs delete mode 100644 packages/ai-providers/server-ai-openai/jest.config.js create mode 100644 packages/ai-providers/server-ai-openai/tsup.config.ts create mode 100644 packages/ai-providers/server-ai-vercel/jest.config.cjs delete mode 100644 packages/ai-providers/server-ai-vercel/jest.config.js create mode 100644 packages/ai-providers/server-ai-vercel/tsup.config.ts create mode 100644 packages/sdk/server-ai/jest.config.cjs delete mode 100644 packages/sdk/server-ai/jest.config.js create mode 100644 packages/sdk/server-ai/tsup.config.ts diff --git a/packages/ai-providers/server-ai-langchain/jest.config.cjs b/packages/ai-providers/server-ai-langchain/jest.config.cjs new file mode 100644 index 0000000000..f106eb3bc9 --- /dev/null +++ b/packages/ai-providers/server-ai-langchain/jest.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + transform: { '^.+\\.ts?$': 'ts-jest' }, + testMatch: ['**/__tests__/**/*test.ts?(x)'], + testEnvironment: 'node', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + collectCoverageFrom: ['src/**/*.ts'], +}; diff --git a/packages/ai-providers/server-ai-langchain/jest.config.js b/packages/ai-providers/server-ai-langchain/jest.config.js deleted file mode 100644 index c8c423a1d1..0000000000 --- a/packages/ai-providers/server-ai-langchain/jest.config.js +++ /dev/null @@ -1,20 +0,0 @@ -export default { - preset: 'ts-jest/presets/default-esm', - extensionsToTreatAsEsm: ['.ts'], - testMatch: ['**/__tests__/**/*test.ts?(x)'], - testEnvironment: 'node', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - collectCoverageFrom: ['src/**/*.ts'], - moduleNameMapper: { - '^@launchdarkly/server-sdk-ai$': '/../../sdk/server-ai/src/index.ts', - '^(\\.{1,2}/.*)\\.js$': '$1', - }, - transform: { - '^.+\\.ts$': [ - 'ts-jest', - { - useESM: true, - }, - ], - }, -}; diff --git a/packages/ai-providers/server-ai-langchain/package.json b/packages/ai-providers/server-ai-langchain/package.json index db1c507b74..b1fb4cd8d6 100644 --- a/packages/ai-providers/server-ai-langchain/package.json +++ b/packages/ai-providers/server-ai-langchain/package.json @@ -1,30 +1,39 @@ { "name": "@launchdarkly/server-sdk-ai-langchain", - "version": "0.3.1", + "version": "0.3.3", "description": "LaunchDarkly AI SDK LangChain Provider for Server-Side JavaScript", "homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/ai-providers/server-ai-langchain", "repository": { "type": "git", "url": "https://github.com/launchdarkly/js-core.git" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.cts", "type": "module", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "default": "./dist/index.js" + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + }, + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } } }, "scripts": { - "build": "npx tsc", + "build": "tsup", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", "check": "yarn prettier && yarn lint && yarn build && yarn test", "test": "jest" }, + "files": [ + "dist" + ], "keywords": [ "launchdarkly", "ai", @@ -52,6 +61,7 @@ "langchain": "^0.3.0", "prettier": "^3.0.0", "ts-jest": "^29.1.1", + "tsup": "^8.5.1", "typescript": "5.1.6" }, "peerDependencies": { diff --git a/packages/ai-providers/server-ai-langchain/tsup.config.ts b/packages/ai-providers/server-ai-langchain/tsup.config.ts new file mode 100644 index 0000000000..67f4085eb1 --- /dev/null +++ b/packages/ai-providers/server-ai-langchain/tsup.config.ts @@ -0,0 +1,15 @@ +// It is a dev dependency and the linter doesn't understand. +// eslint-disable-next-line import/no-extraneous-dependencies +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: { + index: 'src/LangChainProvider.ts', + }, + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + dts: true, + external: [/^@launchdarkly\//], +}); diff --git a/packages/ai-providers/server-ai-openai/jest.config.cjs b/packages/ai-providers/server-ai-openai/jest.config.cjs new file mode 100644 index 0000000000..f106eb3bc9 --- /dev/null +++ b/packages/ai-providers/server-ai-openai/jest.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + transform: { '^.+\\.ts?$': 'ts-jest' }, + testMatch: ['**/__tests__/**/*test.ts?(x)'], + testEnvironment: 'node', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + collectCoverageFrom: ['src/**/*.ts'], +}; diff --git a/packages/ai-providers/server-ai-openai/jest.config.js b/packages/ai-providers/server-ai-openai/jest.config.js deleted file mode 100644 index c8c423a1d1..0000000000 --- a/packages/ai-providers/server-ai-openai/jest.config.js +++ /dev/null @@ -1,20 +0,0 @@ -export default { - preset: 'ts-jest/presets/default-esm', - extensionsToTreatAsEsm: ['.ts'], - testMatch: ['**/__tests__/**/*test.ts?(x)'], - testEnvironment: 'node', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - collectCoverageFrom: ['src/**/*.ts'], - moduleNameMapper: { - '^@launchdarkly/server-sdk-ai$': '/../../sdk/server-ai/src/index.ts', - '^(\\.{1,2}/.*)\\.js$': '$1', - }, - transform: { - '^.+\\.ts$': [ - 'ts-jest', - { - useESM: true, - }, - ], - }, -}; diff --git a/packages/ai-providers/server-ai-openai/package.json b/packages/ai-providers/server-ai-openai/package.json index e0b271cbc0..adb591fed3 100644 --- a/packages/ai-providers/server-ai-openai/package.json +++ b/packages/ai-providers/server-ai-openai/package.json @@ -1,30 +1,39 @@ { "name": "@launchdarkly/server-sdk-ai-openai", - "version": "0.3.1", + "version": "0.3.3", "description": "LaunchDarkly AI SDK OpenAI Provider for Server-Side JavaScript", "homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/ai-providers/server-ai-openai", "repository": { "type": "git", "url": "https://github.com/launchdarkly/js-core.git" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.cts", "type": "module", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "default": "./dist/index.js" + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + }, + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } } }, "scripts": { - "build": "npx tsc", + "build": "tsup", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", "check": "yarn prettier && yarn lint && yarn build && yarn test", "test": "jest" }, + "files": [ + "dist" + ], "keywords": [ "launchdarkly", "ai", @@ -51,6 +60,7 @@ "openai": "^6.0.0", "prettier": "^3.0.0", "ts-jest": "^29.1.1", + "tsup": "^8.5.1", "typescript": "5.1.6" }, "peerDependencies": { diff --git a/packages/ai-providers/server-ai-openai/tsup.config.ts b/packages/ai-providers/server-ai-openai/tsup.config.ts new file mode 100644 index 0000000000..fdd1460434 --- /dev/null +++ b/packages/ai-providers/server-ai-openai/tsup.config.ts @@ -0,0 +1,15 @@ +// It is a dev dependency and the linter doesn't understand. +// eslint-disable-next-line import/no-extraneous-dependencies +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: { + index: 'src/OpenAIProvider.ts', + }, + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + dts: true, + external: [/^@launchdarkly\//], +}); diff --git a/packages/ai-providers/server-ai-vercel/jest.config.cjs b/packages/ai-providers/server-ai-vercel/jest.config.cjs new file mode 100644 index 0000000000..f106eb3bc9 --- /dev/null +++ b/packages/ai-providers/server-ai-vercel/jest.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + transform: { '^.+\\.ts?$': 'ts-jest' }, + testMatch: ['**/__tests__/**/*test.ts?(x)'], + testEnvironment: 'node', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + collectCoverageFrom: ['src/**/*.ts'], +}; diff --git a/packages/ai-providers/server-ai-vercel/jest.config.js b/packages/ai-providers/server-ai-vercel/jest.config.js deleted file mode 100644 index c8c423a1d1..0000000000 --- a/packages/ai-providers/server-ai-vercel/jest.config.js +++ /dev/null @@ -1,20 +0,0 @@ -export default { - preset: 'ts-jest/presets/default-esm', - extensionsToTreatAsEsm: ['.ts'], - testMatch: ['**/__tests__/**/*test.ts?(x)'], - testEnvironment: 'node', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - collectCoverageFrom: ['src/**/*.ts'], - moduleNameMapper: { - '^@launchdarkly/server-sdk-ai$': '/../../sdk/server-ai/src/index.ts', - '^(\\.{1,2}/.*)\\.js$': '$1', - }, - transform: { - '^.+\\.ts$': [ - 'ts-jest', - { - useESM: true, - }, - ], - }, -}; diff --git a/packages/ai-providers/server-ai-vercel/package.json b/packages/ai-providers/server-ai-vercel/package.json index 1368d4951d..eef23dc5a0 100644 --- a/packages/ai-providers/server-ai-vercel/package.json +++ b/packages/ai-providers/server-ai-vercel/package.json @@ -1,30 +1,39 @@ { "name": "@launchdarkly/server-sdk-ai-vercel", - "version": "0.3.1", + "version": "0.3.3", "description": "LaunchDarkly AI SDK Vercel Provider for Server-Side JavaScript", "homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/ai-providers/server-ai-vercel", "repository": { "type": "git", "url": "https://github.com/launchdarkly/js-core.git" }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.cts", "type": "module", "exports": { ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "default": "./dist/index.js" + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + }, + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } } }, "scripts": { - "build": "npx tsc", + "build": "tsup", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", "check": "yarn prettier && yarn lint && yarn build && yarn test", "test": "jest" }, + "files": [ + "dist" + ], "keywords": [ "launchdarkly", "ai", @@ -55,6 +64,7 @@ "jest": "^29.6.1", "prettier": "^3.0.0", "ts-jest": "^29.1.1", + "tsup": "^8.5.1", "typescript": "5.1.6" }, "peerDependencies": { diff --git a/packages/ai-providers/server-ai-vercel/tsup.config.ts b/packages/ai-providers/server-ai-vercel/tsup.config.ts new file mode 100644 index 0000000000..b0a994b941 --- /dev/null +++ b/packages/ai-providers/server-ai-vercel/tsup.config.ts @@ -0,0 +1,15 @@ +// It is a dev dependency and the linter doesn't understand. +// eslint-disable-next-line import/no-extraneous-dependencies +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: { + index: 'src/VercelProvider.ts', + }, + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + dts: true, + external: [/^@launchdarkly\//], +}); diff --git a/packages/sdk/server-ai/jest.config.cjs b/packages/sdk/server-ai/jest.config.cjs new file mode 100644 index 0000000000..f106eb3bc9 --- /dev/null +++ b/packages/sdk/server-ai/jest.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + transform: { '^.+\\.ts?$': 'ts-jest' }, + testMatch: ['**/__tests__/**/*test.ts?(x)'], + testEnvironment: 'node', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + collectCoverageFrom: ['src/**/*.ts'], +}; diff --git a/packages/sdk/server-ai/jest.config.js b/packages/sdk/server-ai/jest.config.js deleted file mode 100644 index 9225b65a0c..0000000000 --- a/packages/sdk/server-ai/jest.config.js +++ /dev/null @@ -1,19 +0,0 @@ -export default { - preset: 'ts-jest/presets/default-esm', - extensionsToTreatAsEsm: ['.ts'], - testMatch: ['**/__tests__/**/*test.ts?(x)'], - testEnvironment: 'node', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - collectCoverageFrom: ['src/**/*.ts'], - moduleNameMapper: { - '^(\\.{1,2}/.*)\\.js$': '$1', - }, - transform: { - '^.+\\.ts$': [ - 'ts-jest', - { - useESM: true, - }, - ], - }, -}; diff --git a/packages/sdk/server-ai/package.json b/packages/sdk/server-ai/package.json index 48883d9355..a621a227a7 100644 --- a/packages/sdk/server-ai/package.json +++ b/packages/sdk/server-ai/package.json @@ -1,30 +1,39 @@ { "name": "@launchdarkly/server-sdk-ai", - "version": "0.14.1", + "version": "0.14.3", "description": "LaunchDarkly AI SDK for Server-Side JavaScript", "homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/sdk/server-ai", "repository": { "type": "git", "url": "https://github.com/launchdarkly/js-core.git" }, - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.cts", "type": "module", "exports": { ".": { - "types": "./dist/src/index.d.ts", - "import": "./dist/src/index.js", - "default": "./dist/src/index.js" + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + }, + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } } }, "scripts": { - "build": "npx tsc && ../../../scripts/replace-version.sh .", + "build": "tsup && ../../../scripts/replace-version.sh .", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", "check": "yarn prettier && yarn lint && yarn build && yarn test", "test": "jest" }, + "files": [ + "dist" + ], "keywords": [ "launchdarkly", "ai", @@ -52,6 +61,7 @@ "jest": "^29.6.1", "prettier": "^3.0.0", "ts-jest": "^29.1.1", + "tsup": "^8.5.1", "typescript": "5.1.6" }, "peerDependencies": { diff --git a/packages/sdk/server-ai/src/index.ts b/packages/sdk/server-ai/src/index.ts index 3dfc66c0dd..7c1bb54b3d 100644 --- a/packages/sdk/server-ai/src/index.ts +++ b/packages/sdk/server-ai/src/index.ts @@ -6,6 +6,10 @@ * * @packageDocumentation */ +// IMPORTANT: Namespace import required for CJS compatibility. js-server-sdk-common is CommonJS-only; +// Node.js ESM can't reliably import named exports from CJS. DO NOT change to named imports. +import * as common from '@launchdarkly/js-server-sdk-common'; + import { LDAIClient } from './api/LDAIClient'; import { LDAIClientImpl } from './LDAIClientImpl'; import { LDClientMin } from './LDClientMin'; @@ -19,6 +23,6 @@ export function initAi(ldClient: LDClientMin): LDAIClient { return new LDAIClientImpl(ldClient); } -export { LDLogger } from '@launchdarkly/js-server-sdk-common'; +export type LDLogger = common.LDLogger; export * from './api'; diff --git a/packages/sdk/server-ai/tsconfig.json b/packages/sdk/server-ai/tsconfig.json index 7663a65792..4d8ea40d13 100644 --- a/packages/sdk/server-ai/tsconfig.json +++ b/packages/sdk/server-ai/tsconfig.json @@ -1,21 +1,21 @@ { "compilerOptions": { - // Uses "." so it can load package.json. - "rootDir": ".", + "rootDir": "src", "outDir": "dist", "target": "es2020", "lib": ["es2020"], - "module": "ES2020", + "module": "ESNext", "strict": true, "noImplicitOverride": true, "allowSyntheticDefaultImports": true, "esModuleInterop": true, "sourceMap": true, "declaration": true, - "declarationMap": true, // enables importers to jump to source + "declarationMap": true, "resolveJsonModule": true, "stripInternal": true, - "moduleResolution": "node" + "moduleResolution": "bundler" }, + "include": ["src"], "exclude": ["**/*.test.ts", "dist", "node_modules", "__tests__", "examples"] } diff --git a/packages/sdk/server-ai/tsup.config.ts b/packages/sdk/server-ai/tsup.config.ts new file mode 100644 index 0000000000..206a4cb3ea --- /dev/null +++ b/packages/sdk/server-ai/tsup.config.ts @@ -0,0 +1,15 @@ +// It is a dev dependency and the linter doesn't understand. +// eslint-disable-next-line import/no-extraneous-dependencies +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: { + index: 'src/index.ts', + }, + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + dts: true, + external: [/^@launchdarkly\//], // Don't bundle any @launchdarkly packages +}); From 5e117c8fc45adbc56455439e0557d68fa09cef90 Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Thu, 20 Nov 2025 20:49:07 +0000 Subject: [PATCH 4/9] address feedback --- packages/ai-providers/server-ai-langchain/package.json | 4 ++-- packages/ai-providers/server-ai-langchain/tsup.config.ts | 2 +- packages/ai-providers/server-ai-openai/package.json | 4 ++-- packages/ai-providers/server-ai-openai/tsup.config.ts | 2 +- packages/ai-providers/server-ai-vercel/package.json | 4 ++-- packages/ai-providers/server-ai-vercel/tsup.config.ts | 2 +- packages/sdk/server-ai/package.json | 4 ++-- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/ai-providers/server-ai-langchain/package.json b/packages/ai-providers/server-ai-langchain/package.json index b1fb4cd8d6..3d00a83b04 100644 --- a/packages/ai-providers/server-ai-langchain/package.json +++ b/packages/ai-providers/server-ai-langchain/package.json @@ -1,6 +1,6 @@ { "name": "@launchdarkly/server-sdk-ai-langchain", - "version": "0.3.3", + "version": "0.3.1", "description": "LaunchDarkly AI SDK LangChain Provider for Server-Side JavaScript", "homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/ai-providers/server-ai-langchain", "repository": { @@ -9,7 +9,7 @@ }, "main": "./dist/index.cjs", "module": "./dist/index.js", - "types": "./dist/index.d.cts", + "types": "./dist/index.d.ts", "type": "module", "exports": { ".": { diff --git a/packages/ai-providers/server-ai-langchain/tsup.config.ts b/packages/ai-providers/server-ai-langchain/tsup.config.ts index 67f4085eb1..b4371d6daa 100644 --- a/packages/ai-providers/server-ai-langchain/tsup.config.ts +++ b/packages/ai-providers/server-ai-langchain/tsup.config.ts @@ -4,7 +4,7 @@ import { defineConfig } from 'tsup'; export default defineConfig({ entry: { - index: 'src/LangChainProvider.ts', + index: 'src/index.ts', }, format: ['esm', 'cjs'], splitting: false, diff --git a/packages/ai-providers/server-ai-openai/package.json b/packages/ai-providers/server-ai-openai/package.json index adb591fed3..a51e7b37b0 100644 --- a/packages/ai-providers/server-ai-openai/package.json +++ b/packages/ai-providers/server-ai-openai/package.json @@ -1,6 +1,6 @@ { "name": "@launchdarkly/server-sdk-ai-openai", - "version": "0.3.3", + "version": "0.3.1", "description": "LaunchDarkly AI SDK OpenAI Provider for Server-Side JavaScript", "homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/ai-providers/server-ai-openai", "repository": { @@ -9,7 +9,7 @@ }, "main": "./dist/index.cjs", "module": "./dist/index.js", - "types": "./dist/index.d.cts", + "types": "./dist/index.d.ts", "type": "module", "exports": { ".": { diff --git a/packages/ai-providers/server-ai-openai/tsup.config.ts b/packages/ai-providers/server-ai-openai/tsup.config.ts index fdd1460434..b4371d6daa 100644 --- a/packages/ai-providers/server-ai-openai/tsup.config.ts +++ b/packages/ai-providers/server-ai-openai/tsup.config.ts @@ -4,7 +4,7 @@ import { defineConfig } from 'tsup'; export default defineConfig({ entry: { - index: 'src/OpenAIProvider.ts', + index: 'src/index.ts', }, format: ['esm', 'cjs'], splitting: false, diff --git a/packages/ai-providers/server-ai-vercel/package.json b/packages/ai-providers/server-ai-vercel/package.json index eef23dc5a0..0d5733677a 100644 --- a/packages/ai-providers/server-ai-vercel/package.json +++ b/packages/ai-providers/server-ai-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@launchdarkly/server-sdk-ai-vercel", - "version": "0.3.3", + "version": "0.3.1", "description": "LaunchDarkly AI SDK Vercel Provider for Server-Side JavaScript", "homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/ai-providers/server-ai-vercel", "repository": { @@ -9,7 +9,7 @@ }, "main": "./dist/index.cjs", "module": "./dist/index.js", - "types": "./dist/index.d.cts", + "types": "./dist/index.d.ts", "type": "module", "exports": { ".": { diff --git a/packages/ai-providers/server-ai-vercel/tsup.config.ts b/packages/ai-providers/server-ai-vercel/tsup.config.ts index b0a994b941..b4371d6daa 100644 --- a/packages/ai-providers/server-ai-vercel/tsup.config.ts +++ b/packages/ai-providers/server-ai-vercel/tsup.config.ts @@ -4,7 +4,7 @@ import { defineConfig } from 'tsup'; export default defineConfig({ entry: { - index: 'src/VercelProvider.ts', + index: 'src/index.ts', }, format: ['esm', 'cjs'], splitting: false, diff --git a/packages/sdk/server-ai/package.json b/packages/sdk/server-ai/package.json index a621a227a7..d69db66942 100644 --- a/packages/sdk/server-ai/package.json +++ b/packages/sdk/server-ai/package.json @@ -1,6 +1,6 @@ { "name": "@launchdarkly/server-sdk-ai", - "version": "0.14.3", + "version": "0.14.1", "description": "LaunchDarkly AI SDK for Server-Side JavaScript", "homepage": "https://github.com/launchdarkly/js-core/tree/main/packages/sdk/server-ai", "repository": { @@ -9,7 +9,7 @@ }, "main": "./dist/index.cjs", "module": "./dist/index.js", - "types": "./dist/index.d.cts", + "types": "./dist/index.d.ts", "type": "module", "exports": { ".": { From dbaf40df114cc40789591c9d66137fec4a5e40bf Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Thu, 20 Nov 2025 21:29:48 +0000 Subject: [PATCH 5/9] fix docs build --- packages/sdk/server-ai/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/server-ai/tsconfig.json b/packages/sdk/server-ai/tsconfig.json index 4d8ea40d13..8d7285cfe5 100644 --- a/packages/sdk/server-ai/tsconfig.json +++ b/packages/sdk/server-ai/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "rootDir": "src", + "rootDir": ".", "outDir": "dist", "target": "es2020", "lib": ["es2020"], From d177bd4a5d62d1fc3f2764b368ed6d08584b1871 Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Thu, 20 Nov 2025 22:00:10 +0000 Subject: [PATCH 6/9] let release-please manage the version --- .../sdk/server-ai/__tests__/LDAIConfigTrackerImpl.test.ts | 4 +--- packages/sdk/server-ai/package.json | 2 +- packages/sdk/server-ai/src/LDAIConfigTrackerImpl.ts | 4 +--- packages/sdk/server-ai/src/sdkInfo.ts | 2 ++ release-please-config.json | 1 + 5 files changed, 6 insertions(+), 7 deletions(-) create mode 100644 packages/sdk/server-ai/src/sdkInfo.ts diff --git a/packages/sdk/server-ai/__tests__/LDAIConfigTrackerImpl.test.ts b/packages/sdk/server-ai/__tests__/LDAIConfigTrackerImpl.test.ts index 987eec71ea..02965a5e5f 100644 --- a/packages/sdk/server-ai/__tests__/LDAIConfigTrackerImpl.test.ts +++ b/packages/sdk/server-ai/__tests__/LDAIConfigTrackerImpl.test.ts @@ -3,9 +3,7 @@ import { LDContext } from '@launchdarkly/js-server-sdk-common'; import { LDFeedbackKind } from '../src/api/metrics'; import { LDAIConfigTrackerImpl } from '../src/LDAIConfigTrackerImpl'; import { LDClientMin } from '../src/LDClientMin'; - -const aiSdkName = '@launchdarkly/server-sdk-ai'; -const aiSdkVersion = '__LD_VERSION__'; +import { aiSdkName, aiSdkVersion } from '../src/sdkInfo'; const mockTrack = jest.fn(); const mockVariation = jest.fn(); diff --git a/packages/sdk/server-ai/package.json b/packages/sdk/server-ai/package.json index d69db66942..fc95ada347 100644 --- a/packages/sdk/server-ai/package.json +++ b/packages/sdk/server-ai/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsup && ../../../scripts/replace-version.sh .", + "build": "tsup", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", diff --git a/packages/sdk/server-ai/src/LDAIConfigTrackerImpl.ts b/packages/sdk/server-ai/src/LDAIConfigTrackerImpl.ts index 71fd422939..3615febcea 100644 --- a/packages/sdk/server-ai/src/LDAIConfigTrackerImpl.ts +++ b/packages/sdk/server-ai/src/LDAIConfigTrackerImpl.ts @@ -12,9 +12,7 @@ import { LDTokenUsage, } from './api/metrics'; import { LDClientMin } from './LDClientMin'; - -const aiSdkName = '@launchdarkly/server-sdk-ai'; -const aiSdkVersion = '__LD_VERSION__'; +import { aiSdkName, aiSdkVersion } from './sdkInfo'; export class LDAIConfigTrackerImpl implements LDAIConfigTracker { private _trackedMetrics: LDAIMetricSummary = {}; diff --git a/packages/sdk/server-ai/src/sdkInfo.ts b/packages/sdk/server-ai/src/sdkInfo.ts new file mode 100644 index 0000000000..253d0011aa --- /dev/null +++ b/packages/sdk/server-ai/src/sdkInfo.ts @@ -0,0 +1,2 @@ +export const aiSdkName = '@launchdarkly/server-sdk-ai'; +export const aiSdkVersion = '0.14.1'; // x-release-please-version diff --git a/release-please-config.json b/release-please-config.json index c748ecd195..171bb4445d 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -85,6 +85,7 @@ "packages/sdk/server-ai": { "bump-minor-pre-major": true, "extra-files": [ + "src/sdkInfo.ts", { "type": "json", "path": "examples/bedrock/package.json", From 46a645d079d531b6061aaa8416b0bf606d4b1d9c Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Thu, 20 Nov 2025 23:03:01 +0000 Subject: [PATCH 7/9] use tsup-node --- packages/ai-providers/server-ai-langchain/package.json | 2 +- packages/ai-providers/server-ai-langchain/tsup.config.ts | 1 - packages/ai-providers/server-ai-openai/package.json | 2 +- packages/ai-providers/server-ai-openai/tsup.config.ts | 1 - packages/ai-providers/server-ai-vercel/package.json | 2 +- packages/ai-providers/server-ai-vercel/tsup.config.ts | 1 - packages/sdk/server-ai/package.json | 2 +- packages/sdk/server-ai/tsup.config.ts | 1 - 8 files changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/ai-providers/server-ai-langchain/package.json b/packages/ai-providers/server-ai-langchain/package.json index 3d00a83b04..5c085b8a57 100644 --- a/packages/ai-providers/server-ai-langchain/package.json +++ b/packages/ai-providers/server-ai-langchain/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsup", + "build": "tsup-node", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", diff --git a/packages/ai-providers/server-ai-langchain/tsup.config.ts b/packages/ai-providers/server-ai-langchain/tsup.config.ts index b4371d6daa..c9bcc09917 100644 --- a/packages/ai-providers/server-ai-langchain/tsup.config.ts +++ b/packages/ai-providers/server-ai-langchain/tsup.config.ts @@ -11,5 +11,4 @@ export default defineConfig({ sourcemap: true, clean: true, dts: true, - external: [/^@launchdarkly\//], }); diff --git a/packages/ai-providers/server-ai-openai/package.json b/packages/ai-providers/server-ai-openai/package.json index a51e7b37b0..d92d8c5f78 100644 --- a/packages/ai-providers/server-ai-openai/package.json +++ b/packages/ai-providers/server-ai-openai/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsup", + "build": "tsup-node", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", diff --git a/packages/ai-providers/server-ai-openai/tsup.config.ts b/packages/ai-providers/server-ai-openai/tsup.config.ts index b4371d6daa..c9bcc09917 100644 --- a/packages/ai-providers/server-ai-openai/tsup.config.ts +++ b/packages/ai-providers/server-ai-openai/tsup.config.ts @@ -11,5 +11,4 @@ export default defineConfig({ sourcemap: true, clean: true, dts: true, - external: [/^@launchdarkly\//], }); diff --git a/packages/ai-providers/server-ai-vercel/package.json b/packages/ai-providers/server-ai-vercel/package.json index 0d5733677a..2c2c29ed5e 100644 --- a/packages/ai-providers/server-ai-vercel/package.json +++ b/packages/ai-providers/server-ai-vercel/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsup", + "build": "tsup-node", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", diff --git a/packages/ai-providers/server-ai-vercel/tsup.config.ts b/packages/ai-providers/server-ai-vercel/tsup.config.ts index b4371d6daa..c9bcc09917 100644 --- a/packages/ai-providers/server-ai-vercel/tsup.config.ts +++ b/packages/ai-providers/server-ai-vercel/tsup.config.ts @@ -11,5 +11,4 @@ export default defineConfig({ sourcemap: true, clean: true, dts: true, - external: [/^@launchdarkly\//], }); diff --git a/packages/sdk/server-ai/package.json b/packages/sdk/server-ai/package.json index fc95ada347..5c9609267f 100644 --- a/packages/sdk/server-ai/package.json +++ b/packages/sdk/server-ai/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsup", + "build": "tsup-node", "lint": "npx eslint . --ext .ts", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "lint:fix": "yarn run lint --fix", diff --git a/packages/sdk/server-ai/tsup.config.ts b/packages/sdk/server-ai/tsup.config.ts index 206a4cb3ea..c9bcc09917 100644 --- a/packages/sdk/server-ai/tsup.config.ts +++ b/packages/sdk/server-ai/tsup.config.ts @@ -11,5 +11,4 @@ export default defineConfig({ sourcemap: true, clean: true, dts: true, - external: [/^@launchdarkly\//], // Don't bundle any @launchdarkly packages }); From 576fe06272eff76eb3ba16fdcd5384a1e6a7a978 Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Fri, 21 Nov 2025 14:19:40 +0000 Subject: [PATCH 8/9] update rootdir --- packages/sdk/server-ai/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/server-ai/tsconfig.json b/packages/sdk/server-ai/tsconfig.json index 8d7285cfe5..4d8ea40d13 100644 --- a/packages/sdk/server-ai/tsconfig.json +++ b/packages/sdk/server-ai/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "rootDir": ".", + "rootDir": "src", "outDir": "dist", "target": "es2020", "lib": ["es2020"], From 0d9b6ac7a0828e63226db395ffb1f1c4d6d37e42 Mon Sep 17 00:00:00 2001 From: jsonbailey Date: Fri, 21 Nov 2025 14:34:54 +0000 Subject: [PATCH 9/9] rootdir needs to include the package for the doc building process --- packages/sdk/server-ai/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/server-ai/tsconfig.json b/packages/sdk/server-ai/tsconfig.json index 4d8ea40d13..8d7285cfe5 100644 --- a/packages/sdk/server-ai/tsconfig.json +++ b/packages/sdk/server-ai/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "rootDir": "src", + "rootDir": ".", "outDir": "dist", "target": "es2020", "lib": ["es2020"],