From 42a430a840b13f1197261dccc03878d502dc1574 Mon Sep 17 00:00:00 2001 From: Stainless Bot Date: Fri, 1 Sep 2023 18:15:40 +0000 Subject: [PATCH] fix(client): use explicit file extensions in _shims imports --- build | 1 + jest.config.js | 2 +- package.json | 36 ++++++++++++++----- scripts/replace-self-referencing-imports.js | 11 ++++-- scripts/resolve-full-paths.js | 16 +++++++++ ...eStream.node.ts => ReadableStream-node.ts} | 0 src/_shims/{agent.node.ts => agent-node.ts} | 0 src/_shims/agent.ts | 2 +- src/_shims/{fetch.deno.ts => fetch-deno.ts} | 0 .../{fetch.node.d.ts => fetch-node.d.ts} | 0 src/_shims/{fetch.node.js => fetch-node.js} | 0 src/_shims/{fetch.node.mjs => fetch-node.mjs} | 0 ...eFromPath.node.ts => fileFromPath-node.ts} | 2 +- src/_shims/fileFromPath.ts | 4 +-- .../{formdata.deno.ts => form-data-deno.ts} | 0 ...formdata.node.d.ts => form-data-node.d.ts} | 0 .../{formdata.node.js => form-data-node.js} | 0 .../{formdata.node.mjs => form-data-node.mjs} | 0 src/_shims/{formdata.d.ts => form-data.d.ts} | 0 src/_shims/{formdata.js => form-data.js} | 0 src/_shims/{formdata.mjs => form-data.mjs} | 0 ....ts => getMultipartRequestOptions-node.ts} | 2 +- src/_shims/getMultipartRequestOptions.ts | 2 +- ...readable.node.ts => node-readable-node.ts} | 0 src/uploads.ts | 2 +- tests/form.test.ts | 2 +- tests/uploads.test.ts | 2 +- tsconfig.build.json | 9 +++-- tsconfig.json | 2 +- 29 files changed, 70 insertions(+), 25 deletions(-) create mode 100644 scripts/resolve-full-paths.js rename src/_shims/{ReadableStream.node.ts => ReadableStream-node.ts} (100%) rename src/_shims/{agent.node.ts => agent-node.ts} (100%) rename src/_shims/{fetch.deno.ts => fetch-deno.ts} (100%) rename src/_shims/{fetch.node.d.ts => fetch-node.d.ts} (100%) rename src/_shims/{fetch.node.js => fetch-node.js} (100%) rename src/_shims/{fetch.node.mjs => fetch-node.mjs} (100%) rename src/_shims/{fileFromPath.node.ts => fileFromPath-node.ts} (93%) rename src/_shims/{formdata.deno.ts => form-data-deno.ts} (100%) rename src/_shims/{formdata.node.d.ts => form-data-node.d.ts} (100%) rename src/_shims/{formdata.node.js => form-data-node.js} (100%) rename src/_shims/{formdata.node.mjs => form-data-node.mjs} (100%) rename src/_shims/{formdata.d.ts => form-data.d.ts} (100%) rename src/_shims/{formdata.js => form-data.js} (100%) rename src/_shims/{formdata.mjs => form-data.mjs} (100%) rename src/_shims/{getMultipartRequestOptions.node.ts => getMultipartRequestOptions-node.ts} (94%) rename src/_shims/{node-readable.node.ts => node-readable-node.ts} (100%) diff --git a/build b/build index 4c9c9608..d703d816 100755 --- a/build +++ b/build @@ -12,6 +12,7 @@ rm -rf dist; mkdir dist # Copy src to dist/src and build from dist/src into dist, so that # the source map for index.js.map will refer to ./src/index.ts etc cp -rp src README.md dist +rm dist/src/_shims/*-deno.* for file in LICENSE CHANGELOG.md; do if [ -e "${file}" ]; then cp "${file}" dist; fi done diff --git a/jest.config.js b/jest.config.js index 3e22b32f..b16b5b41 100644 --- a/jest.config.js +++ b/jest.config.js @@ -4,7 +4,7 @@ module.exports = { testEnvironment: 'node', moduleNameMapper: { '^@anthropic-ai/sdk$': '/src/index.ts', - '^@anthropic-ai/sdk/_shims/(.*)$': '/src/_shims/$1.node', + '^@anthropic-ai/sdk/_shims/(.*)$': '/src/_shims/$1-node', '^@anthropic-ai/sdk/(.*)$': '/src/$1', }, modulePathIgnorePatterns: ['/ecosystem-tests/', '/dist/', '/deno_tests/'], diff --git a/package.json b/package.json index e2f7b86c..e3388942 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,9 @@ "license": "MIT", "private": false, "exports": { - "./_shims/*": { + "./_shims/*.mjs": { "deno": { "types": "./dist/_shims/*.d.ts", - "require": "./dist/_shims/*.js", "default": "./dist/_shims/*.mjs" }, "bun": { @@ -23,28 +22,47 @@ }, "browser": { "types": "./dist/_shims/*.d.ts", - "require": "./dist/_shims/*.js", "default": "./dist/_shims/*.mjs" }, "worker": { "types": "./dist/_shims/*.d.ts", - "require": "./dist/_shims/*.js", "default": "./dist/_shims/*.mjs" }, "workerd": { "types": "./dist/_shims/*.d.ts", - "require": "./dist/_shims/*.js", "default": "./dist/_shims/*.mjs" }, "node": { - "types": "./dist/_shims/*.node.d.ts", - "require": "./dist/_shims/*.node.js", - "default": "./dist/_shims/*.node.mjs" + "types": "./dist/_shims/*-node.d.ts", + "default": "./dist/_shims/*-node.mjs" }, "types": "./dist/_shims/*.d.ts", - "require": "./dist/_shims/*.js", "default": "./dist/_shims/*.mjs" }, + "./_shims/*.js": { + "deno": { + "types": "./dist/_shims/*.d.ts", + "default": "./dist/_shims/*.js" + }, + "browser": { + "types": "./dist/_shims/*.d.ts", + "default": "./dist/_shims/*.js" + }, + "worker": { + "types": "./dist/_shims/*.d.ts", + "default": "./dist/_shims/*.js" + }, + "workerd": { + "types": "./dist/_shims/*.d.ts", + "default": "./dist/_shims/*.js" + }, + "node": { + "types": "./dist/_shims/*-node.d.ts", + "default": "./dist/_shims/*-node.js" + }, + "types": "./dist/_shims/*.d.ts", + "default": "./dist/_shims/*.js" + }, ".": { "require": { "types": "./dist/index.d.ts", diff --git a/scripts/replace-self-referencing-imports.js b/scripts/replace-self-referencing-imports.js index a0e097d2..d4e63ade 100644 --- a/scripts/replace-self-referencing-imports.js +++ b/scripts/replace-self-referencing-imports.js @@ -2,14 +2,21 @@ Object.defineProperty(exports, '__esModule', { value: true }); const path = require('path'); -const distSrcDir = path.resolve(__dirname, '..', 'dist', 'src'); +const distDir = path.resolve(__dirname, '..', 'dist'); +const distSrcDir = path.join(distDir, 'src'); function replaceSelfReferencingImports({ orig, file, config }) { // replace self-referencing imports in source files to reduce errors users will // see if they go to definition - if (!file.startsWith(distSrcDir)) return orig; + if (!file.startsWith(distDir)) return orig; + return orig.replace(/['"]([^"'\r\n]+)['"]/, (match, importPath) => { if (!importPath.startsWith('@anthropic-ai/sdk/')) return match; + if (!file.startsWith(distSrcDir)) { + const ext = file.endsWith('.d.ts') ? '' : path.extname(file); + const { dir, base } = path.parse(importPath); + return JSON.stringify(`${dir}/${base}${ext}`); + } let relativePath = path.relative( path.dirname(file), path.join(distSrcDir, importPath.substring('@anthropic-ai/sdk/'.length)), diff --git a/scripts/resolve-full-paths.js b/scripts/resolve-full-paths.js new file mode 100644 index 00000000..f8f979ad --- /dev/null +++ b/scripts/resolve-full-paths.js @@ -0,0 +1,16 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); + +const path = require('path'); + +// tsc-alias --resolveFullPaths is buggy, it replaces 'formdata-node' +// with 'formdata-node.js' because we have a file with that name +function resolveFullPaths({ orig, file, config }) { + return orig.replace(/['"]([^"'\r\n]+)['"]/, (match, importPath) => { + if (!importPath.startsWith('.')) return match; + const { dir, name } = path.parse(importPath); + const ext = /\.mjs$/.test(file) ? '.mjs' : '.js'; + return JSON.stringify(`${dir}/${name}${ext}`); + }); +} +exports.default = resolveFullPaths; diff --git a/src/_shims/ReadableStream.node.ts b/src/_shims/ReadableStream-node.ts similarity index 100% rename from src/_shims/ReadableStream.node.ts rename to src/_shims/ReadableStream-node.ts diff --git a/src/_shims/agent.node.ts b/src/_shims/agent-node.ts similarity index 100% rename from src/_shims/agent.node.ts rename to src/_shims/agent-node.ts diff --git a/src/_shims/agent.ts b/src/_shims/agent.ts index c39d1cfb..24e5bf7c 100644 --- a/src/_shims/agent.ts +++ b/src/_shims/agent.ts @@ -2,7 +2,7 @@ * Disclaimer: modules in _shims aren't intended to be imported by SDK users. * * This is a stub for non-node environments. - * In node environments, it gets replaced agent.node.ts by the package export map + * In node environments, it gets replaced agent-node.ts by the package export map */ export type Agent = any; diff --git a/src/_shims/fetch.deno.ts b/src/_shims/fetch-deno.ts similarity index 100% rename from src/_shims/fetch.deno.ts rename to src/_shims/fetch-deno.ts diff --git a/src/_shims/fetch.node.d.ts b/src/_shims/fetch-node.d.ts similarity index 100% rename from src/_shims/fetch.node.d.ts rename to src/_shims/fetch-node.d.ts diff --git a/src/_shims/fetch.node.js b/src/_shims/fetch-node.js similarity index 100% rename from src/_shims/fetch.node.js rename to src/_shims/fetch-node.js diff --git a/src/_shims/fetch.node.mjs b/src/_shims/fetch-node.mjs similarity index 100% rename from src/_shims/fetch.node.mjs rename to src/_shims/fetch-node.mjs diff --git a/src/_shims/fileFromPath.node.ts b/src/_shims/fileFromPath-node.ts similarity index 93% rename from src/_shims/fileFromPath.node.ts rename to src/_shims/fileFromPath-node.ts index 676d2e2d..065fd7ec 100644 --- a/src/_shims/fileFromPath.node.ts +++ b/src/_shims/fileFromPath-node.ts @@ -3,7 +3,7 @@ */ import { fileFromPath as _fileFromPath } from 'formdata-node/file-from-path'; -import type { File, FilePropertyBag } from './formdata.node'; +import type { File, FilePropertyBag } from './form-data-node'; export type FileFromPathOptions = Omit; diff --git a/src/_shims/fileFromPath.ts b/src/_shims/fileFromPath.ts index 57692354..0ec8a23c 100644 --- a/src/_shims/fileFromPath.ts +++ b/src/_shims/fileFromPath.ts @@ -1,11 +1,11 @@ /** * Disclaimer: modules in _shims aren't intended to be imported by SDK users. * - * This is a stub that gets replaced by fileFromPath.node.js for node environments + * This is a stub that gets replaced by fileFromPath-node.js for node environments * in the package export map */ -import type { FilePropertyBag, File } from './formdata'; +import type { FilePropertyBag, File } from './form-data'; export type FileFromPathOptions = Omit; diff --git a/src/_shims/formdata.deno.ts b/src/_shims/form-data-deno.ts similarity index 100% rename from src/_shims/formdata.deno.ts rename to src/_shims/form-data-deno.ts diff --git a/src/_shims/formdata.node.d.ts b/src/_shims/form-data-node.d.ts similarity index 100% rename from src/_shims/formdata.node.d.ts rename to src/_shims/form-data-node.d.ts diff --git a/src/_shims/formdata.node.js b/src/_shims/form-data-node.js similarity index 100% rename from src/_shims/formdata.node.js rename to src/_shims/form-data-node.js diff --git a/src/_shims/formdata.node.mjs b/src/_shims/form-data-node.mjs similarity index 100% rename from src/_shims/formdata.node.mjs rename to src/_shims/form-data-node.mjs diff --git a/src/_shims/formdata.d.ts b/src/_shims/form-data.d.ts similarity index 100% rename from src/_shims/formdata.d.ts rename to src/_shims/form-data.d.ts diff --git a/src/_shims/formdata.js b/src/_shims/form-data.js similarity index 100% rename from src/_shims/formdata.js rename to src/_shims/form-data.js diff --git a/src/_shims/formdata.mjs b/src/_shims/form-data.mjs similarity index 100% rename from src/_shims/formdata.mjs rename to src/_shims/form-data.mjs diff --git a/src/_shims/getMultipartRequestOptions.node.ts b/src/_shims/getMultipartRequestOptions-node.ts similarity index 94% rename from src/_shims/getMultipartRequestOptions.node.ts rename to src/_shims/getMultipartRequestOptions-node.ts index 3d690749..ac13a075 100644 --- a/src/_shims/getMultipartRequestOptions.node.ts +++ b/src/_shims/getMultipartRequestOptions-node.ts @@ -2,7 +2,7 @@ * Disclaimer: modules in _shims aren't intended to be imported by SDK users. */ -import { FormData } from './formdata.node'; +import { FormData } from './form-data-node'; import type { RequestOptions } from '../core'; import { Readable } from 'node:stream'; import { FormDataEncoder } from 'form-data-encoder'; diff --git a/src/_shims/getMultipartRequestOptions.ts b/src/_shims/getMultipartRequestOptions.ts index b9abe643..f74227d0 100644 --- a/src/_shims/getMultipartRequestOptions.ts +++ b/src/_shims/getMultipartRequestOptions.ts @@ -2,7 +2,7 @@ * Disclaimer: modules in _shims aren't intended to be imported by SDK users. */ -import { FormData } from './formdata'; +import { FormData } from './form-data'; import type { RequestOptions } from '../core'; import { MultipartBody } from '../uploads'; diff --git a/src/_shims/node-readable.node.ts b/src/_shims/node-readable-node.ts similarity index 100% rename from src/_shims/node-readable.node.ts rename to src/_shims/node-readable-node.ts diff --git a/src/uploads.ts b/src/uploads.ts index 055878e3..fd16f68e 100644 --- a/src/uploads.ts +++ b/src/uploads.ts @@ -1,7 +1,7 @@ import { type RequestOptions } from './core'; import { type Readable } from '@anthropic-ai/sdk/_shims/node-readable'; import { type BodyInit } from '@anthropic-ai/sdk/_shims/fetch'; -import { FormData, File, type Blob, type FilePropertyBag } from '@anthropic-ai/sdk/_shims/formdata'; +import { FormData, File, type Blob, type FilePropertyBag } from '@anthropic-ai/sdk/_shims/form-data'; import { getMultipartRequestOptions } from '@anthropic-ai/sdk/_shims/getMultipartRequestOptions'; import { fileFromPath } from '@anthropic-ai/sdk/_shims/fileFromPath'; import { type FsReadStream, isFsReadStream } from '@anthropic-ai/sdk/_shims/node-readable'; diff --git a/tests/form.test.ts b/tests/form.test.ts index 4e8056f2..7628ddbd 100644 --- a/tests/form.test.ts +++ b/tests/form.test.ts @@ -1,5 +1,5 @@ import { multipartFormRequestOptions, createForm } from '@anthropic-ai/sdk/core'; -import { Blob } from '@anthropic-ai/sdk/_shims/formdata'; +import { Blob } from '@anthropic-ai/sdk/_shims/form-data'; import { toFile } from '@anthropic-ai/sdk'; describe('form data validation', () => { diff --git a/tests/uploads.test.ts b/tests/uploads.test.ts index a52764f4..85f8bef6 100644 --- a/tests/uploads.test.ts +++ b/tests/uploads.test.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import { toFile, type ResponseLike } from '@anthropic-ai/sdk/uploads'; -import { File } from '@anthropic-ai/sdk/_shims/formdata'; +import { File } from '@anthropic-ai/sdk/_shims/form-data'; class MyClass { name: string = 'foo'; diff --git a/tsconfig.build.json b/tsconfig.build.json index 9c9d8244..a83edac9 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -5,7 +5,7 @@ "compilerOptions": { "rootDir": "./dist/src", "paths": { - "@anthropic-ai/sdk/_shims/*": ["dist/src/_shims/*.node"], + "@anthropic-ai/sdk/_shims/*": ["dist/src/_shims/*-node"], "@anthropic-ai/sdk": ["dist/src/index.ts"], "@anthropic-ai/sdk/*": ["dist/src/*"], "digest-fetch": ["./typings/digest-fetch"] @@ -18,14 +18,17 @@ "sourceMap": true }, "tsc-alias": { - "resolveFullPaths": true, "fileExtensions": { "inputGlob": "{mjs,cjs,js,jsx,mts,cts,ts,tsx}" }, "replacers": { - "replace-absolute-imports": { + "replace-self-referencing-imports": { "enabled": true, "file": "./scripts/replace-self-referencing-imports.js" + }, + "resolve-full-paths": { + "enabled": true, + "file": "./scripts/resolve-full-paths.js" } } } diff --git a/tsconfig.json b/tsconfig.json index 6ec26e6a..70bb78ed 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,7 @@ "esModuleInterop": true, "baseUrl": "./", "paths": { - "@anthropic-ai/sdk/_shims/*": ["src/_shims/*.node"], + "@anthropic-ai/sdk/_shims/*": ["src/_shims/*-node"], "@anthropic-ai/sdk": ["src/index.ts"], "@anthropic-ai/sdk/*": ["src/*"], "digest-fetch": ["./typings/digest-fetch"]