From 38ceef7e87effbc413016610389572e76dcf297f Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Tue, 12 Mar 2024 06:52:55 -0700 Subject: [PATCH 01/10] Add integration test for Bun --- .github/workflows/ci.yml | 58 ++++++++++- integration/bun/.gitignore | 175 ++++++++++++++++++++++++++++++++++ integration/bun/bun.lockb | Bin 0 -> 166086 bytes integration/bun/index.test.ts | 23 +++++ integration/bun/index.ts | 16 ++++ integration/bun/package.json | 22 +++++ integration/bun/tsconfig.json | 109 +++++++++++++++++++++ tsconfig.json | 6 +- 8 files changed, 404 insertions(+), 5 deletions(-) create mode 100644 integration/bun/.gitignore create mode 100755 integration/bun/bun.lockb create mode 100644 integration/bun/index.test.ts create mode 100644 integration/bun/index.ts create mode 100644 integration/bun/package.json create mode 100644 integration/bun/tsconfig.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d4345e..89ebb17 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,8 +12,8 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] # See supported Node.js release schedule at https://nodejs.org/en/about/previous-releases + node-version: [18.x, 20.x] steps: - uses: actions/checkout@v3 @@ -27,23 +27,51 @@ jobs: - run: npm run check - run: npm run lint - integration: + + integration-node: needs: test runs-on: ubuntu-latest + env: + REPLICATE_API_TOKEN: ${{ secrets.REPLICATE_API_TOKEN }} + strategy: matrix: # See supported Node.js release schedule at https://nodejs.org/en/about/previous-releases node-version: [18.x, 20.x] - suite: [commonjs, esm, typescript, cloudflare-worker] + suite: [commonjs, esm, typescript] exclude: - suite: cloudflare-worker node-version: 18.x # Only test Cloudflare suite with the latest Node version fail-fast: false + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + # Build a production tarball and run the integration tests against it. + - run: | + PKG_TARBALL=$(npm --loglevel error pack) + npm --prefix integration/${{ matrix.suite }} install + npm --prefix integration/${{ matrix.suite }} install "file:/./$PKG_TARBALL" + npm --prefix integration/${{ matrix.suite }} test + + + integration-edge: + needs: test + runs-on: ubuntu-latest + env: REPLICATE_API_TOKEN: ${{ secrets.REPLICATE_API_TOKEN }} + strategy: + matrix: + node-version: [20.x] + suite: [cloudflare-worker] + steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} @@ -58,3 +86,27 @@ jobs: npm --prefix integration/${{ matrix.suite }} install npm --prefix integration/${{ matrix.suite }} install "file:/./$PKG_TARBALL" npm --prefix integration/${{ matrix.suite }} test + + + integration-bun: + needs: test + runs-on: ubuntu-latest + + env: + REPLICATE_API_TOKEN: ${{ secrets.REPLICATE_API_TOKEN }} + + strategy: + matrix: + bun-version: [1.0.11] + suite: [bun] + + steps: + - uses: actions/checkout@v3 + - name: Use Bun ${{ matrix.bun-version }} + uses: oven-sh/setup-bun@v1 + with: + bun-version: ${{ matrix.bun-version }} + - run: | + cd integration/${{ matrix.suite }} + bun install + bun test diff --git a/integration/bun/.gitignore b/integration/bun/.gitignore new file mode 100644 index 0000000..9b1ee42 --- /dev/null +++ b/integration/bun/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/integration/bun/bun.lockb b/integration/bun/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..d6625f0462674d93d1136228799f5298f4a6973d GIT binary patch literal 166086 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 literal 0 HcmV?d00001 diff --git a/integration/bun/index.test.ts b/integration/bun/index.test.ts new file mode 100644 index 0000000..e9fbaab --- /dev/null +++ b/integration/bun/index.test.ts @@ -0,0 +1,23 @@ +import { expect, test } from "bun:test"; +import main from "./index.js"; + +// Verify exported types. +import type { + Status, + Visibility, + WebhookEventType, + ApiError, + Collection, + Hardware, + Model, + ModelVersion, + Prediction, + Training, + Page, + ServerSentEvent, +} from "replicate"; + +test("main", async () => { + const output = await main(); + expect(output as any).toEqual("hello Brünnhilde Bun"); +}); diff --git a/integration/bun/index.ts b/integration/bun/index.ts new file mode 100644 index 0000000..263a86e --- /dev/null +++ b/integration/bun/index.ts @@ -0,0 +1,16 @@ +import Replicate from "replicate"; + +const replicate = new Replicate({ + auth: process.env.REPLICATE_API_TOKEN, +}); + +export default async function main() { + return await replicate.run( + "replicate/hello-world:5c7d5dc6dd8bf75c1acaa8565735e7986bc5b66206b55cca93cb72c9bf15ccaa", + { + input: { + text: "Brünnhilde Bun", + }, + } + ); +} diff --git a/integration/bun/package.json b/integration/bun/package.json new file mode 100644 index 0000000..cf08e7a --- /dev/null +++ b/integration/bun/package.json @@ -0,0 +1,22 @@ +{ + "name": "replicate-app-bun", + "version": "0.0.0", + "private": true, + "description": "Bun integration tests", + "main": "index.js", + "type": "module", + "scripts": { + "test": "tsc && node --test ./dist/index.test.js" + }, + "dependencies": { + "@types/node": "^20.11.0", + "replicate": "file:../../", + "typescript": "^5.3.3" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } +} diff --git a/integration/bun/tsconfig.json b/integration/bun/tsconfig.json new file mode 100644 index 0000000..4b733f2 --- /dev/null +++ b/integration/bun/tsconfig.json @@ -0,0 +1,109 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2018", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "nodenext", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/tsconfig.json b/tsconfig.json index b699d79..cfd779e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,8 @@ "allowJs": true }, "exclude": [ - "**/node_modules" + "**/node_modules", + "integration/bun/**" ] -} \ No newline at end of file +} + From adb8c27efdd94c2e64666bf60ab8e2e62bb0d5ed Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Mon, 18 Mar 2024 03:38:38 -0700 Subject: [PATCH 02/10] Remove comments in tsconfig.json --- integration/bun/tsconfig.json | 116 ++++------------------------------ 1 file changed, 11 insertions(+), 105 deletions(-) diff --git a/integration/bun/tsconfig.json b/integration/bun/tsconfig.json index 4b733f2..2ffa937 100644 --- a/integration/bun/tsconfig.json +++ b/integration/bun/tsconfig.json @@ -1,109 +1,15 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2018", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "nodenext", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ + "target": "es2018", + "module": "nodenext", + "inlineSourceMap": true, + "outDir": "./dist", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "skipDefaultLibCheck": true, + "skipLibCheck": true } } From 3c23c4c453016c644154ba0578aacb1f2478e113 Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Mon, 18 Mar 2024 03:39:31 -0700 Subject: [PATCH 03/10] Remove typescript dependency from package.json --- integration/bun/package.json | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/integration/bun/package.json b/integration/bun/package.json index cf08e7a..172dd10 100644 --- a/integration/bun/package.json +++ b/integration/bun/package.json @@ -6,17 +6,13 @@ "main": "index.js", "type": "module", "scripts": { - "test": "tsc && node --test ./dist/index.test.js" + "test": "node --test ./dist/index.test.js" }, "dependencies": { "@types/node": "^20.11.0", - "replicate": "file:../../", - "typescript": "^5.3.3" + "replicate": "file:../../" }, "devDependencies": { "@types/bun": "latest" - }, - "peerDependencies": { - "typescript": "^5.0.0" } } From ff0d425a47c0b8f9c3c81a6f26d75423530a76da Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Mon, 18 Mar 2024 03:44:16 -0700 Subject: [PATCH 04/10] Run tests with bun test --- integration/bun/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/bun/package.json b/integration/bun/package.json index 172dd10..47e1cc4 100644 --- a/integration/bun/package.json +++ b/integration/bun/package.json @@ -6,7 +6,7 @@ "main": "index.js", "type": "module", "scripts": { - "test": "node --test ./dist/index.test.js" + "test": "bun test" }, "dependencies": { "@types/node": "^20.11.0", From e43a0893c6843c402b6174a2054874e2cfc4f06f Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Mon, 18 Mar 2024 03:48:32 -0700 Subject: [PATCH 05/10] Trim down .gitignore --- integration/bun/.gitignore | 176 +------------------------------------ 1 file changed, 1 insertion(+), 175 deletions(-) diff --git a/integration/bun/.gitignore b/integration/bun/.gitignore index 9b1ee42..3c3629e 100644 --- a/integration/bun/.gitignore +++ b/integration/bun/.gitignore @@ -1,175 +1 @@ -# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore - -# Logs - -logs -_.log -npm-debug.log_ -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Caches - -.cache - -# Diagnostic reports (https://nodejs.org/api/report.html) - -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# Runtime data - -pids -_.pid -_.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover - -lib-cov - -# Coverage directory used by tools like istanbul - -coverage -*.lcov - -# nyc test coverage - -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) - -.grunt - -# Bower dependency directory (https://bower.io/) - -bower_components - -# node-waf configuration - -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) - -build/Release - -# Dependency directories - -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) - -web_modules/ - -# TypeScript cache - -*.tsbuildinfo - -# Optional npm cache directory - -.npm - -# Optional eslint cache - -.eslintcache - -# Optional stylelint cache - -.stylelintcache - -# Microbundle cache - -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history - -.node_repl_history - -# Output of 'npm pack' - -*.tgz - -# Yarn Integrity file - -.yarn-integrity - -# dotenv environment variable files - -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) - -.parcel-cache - -# Next.js build output - -.next -out - -# Nuxt.js build / generate output - -.nuxt -dist - -# Gatsby files - -# Comment in the public line in if your project uses Gatsby and not Next.js - -# https://nextjs.org/blog/next-9-1#public-directory-support - -# public - -# vuepress build output - -.vuepress/dist - -# vuepress v2.x temp and cache directory - -.temp - -# Docusaurus cache and generated files - -.docusaurus - -# Serverless directories - -.serverless/ - -# FuseBox cache - -.fusebox/ - -# DynamoDB Local files - -.dynamodb/ - -# TernJS port file - -.tern-port - -# Stores VSCode versions used for testing VSCode extensions - -.vscode-test - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store +node_modules From dc6a5beebad26390ed38241c76569fe06144e588 Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Mon, 18 Mar 2024 03:48:40 -0700 Subject: [PATCH 06/10] Update bun.lockb --- integration/bun/bun.lockb | Bin 166086 -> 166030 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/integration/bun/bun.lockb b/integration/bun/bun.lockb index d6625f0462674d93d1136228799f5298f4a6973d..dd45eaf0f1831cc4099e22920a740384a6ecba30 100755 GIT binary patch delta 9372 zcmeI2dvI0N6^HLW5=cUVgz%6A2nm%W1i~W_gAfn}NsvbZKB!V=prsvJWh_u?0KI^P z0E!r|dejgTPhG(PAuW8J#Q%W;`* zeq(c7ofkKoXh&L=L>dw%x^a=_glX=KNO59X=N)ri9k_kl)CJXNt{9lJdfwc|s}f@q zBRf-y;A5?yT zhQDd31S3Jp7=uKGrejbQX?qwCYBv#7qE!PZ3cROQkJuzoy9+`s+o#e}q}o6!sKInl zk; zM5{LVIY^I!iZlj}gZiHUT^b!RPDfMZ{1#OxHEa!1qf`g3kJ-_xYcR|F(JEIqAJPGQ zXb%oVm1nS=rW$yj*;2I&k1$8Hs$+rqrLsq%+Qs8gh0ZlS57izhGP_toic}k%f~tRs z`A^dPZwmx|jc__0r59QPsTbM5`jTSp;4+IYv*>rJ?os8|PO9o!Y2=DEnPF{XgGHsP z-e9&=UowK~%iM}8?tFIBb1>}Xa0S{I5WmnVg_jr*;QRQ6`GrE2?# z*-};O%#K#IYcRi5)h(utrjN==iPCVefyW3a!8TME(=KZ$)t7(P>}ZwiIXgE$Nb^einKR@B5N=S)j+18IwTjPDpC#T60@bUXPW(8s(hDO`&ljR!y#3a;AfUV z+7o*Tst#qSLd(p)237mkJttMWRjBq*IjV9hRll{?{yNl!GDD&3t%Fp%@QEt# zOj+L}xK?h*QiDo;oTO^K$>MjK)>yk})m>pT{{HA+EH2d<^_tmIRo~!4dH?E#&PIaD z_o_O)X^8@jyuUs(((Ag;VMX4y)CVo~JErfNzK3d$erWbbrXQm!-=)g`iM5j|&!=Xi z;o!R*GKW;vBYddiXXcm6{yVB8@}=4Tu=uG|p=N7$%-Ts+{o4G;JuY{ZUID+cZF=*7H8eoFiQpG!=ItPgF=h+W!waAQL4ehS^ku9j|6T@}$4zc>jP|zs3;!I?y0~yh*>EZ$&}+|D6465Bz)9-_qbmpY+@I zzkk+m1JthoU2)NqeT8J}(EYcQ{us^v+h+Z3v;MYOKbKG2te?AqX8&!oe(eaJf;(g~`Hn^Yf?_v5QeW9Ma(U(C z#?G7Wxjs^o(v>#?vHlZTE}`koEO$}gTZ`S?rgJ8`ov!Uud!VQDH~Vf@_CvZuP_EXL z0+p#Xag}S#r=Kxf{h_zH^?`b|2}e5=f-AFxCHl}d4zh5le6 z{RkanzSZW_FE_11sjM+yN9x!6FDu0c3k9p6xV2=RKr@wf*1Qw-PUc&Ws*6@!ll}DD zNzu+yv@Vq<5!wwZS}s-3E});sDjUt0Og+Z`tx{ZRDJm?a-KM274gMzcX|>+Rr@?FW zmA_CAsPK0wMe9$XTP&otsxr_Q(ju)ko&x7n*B8=4Eq|d@*ytzSK?-fXGiH^AwC<*@ ztK4b6KGgfz7pXR18om$wIZC0WR}KCy3#C&p02P*YgDqxIUkPWx-T0KPA1w77lwvtm z4PL9h{Dsbh2dHSEQu(w(^+)qPXg-$ALJhvFB*jvy+R8%~%BHTg@@esyzt8~CuRv}2 zVe{osuk%Yu(M_Q&nHCyEy}>W5bYnHPAOpuDxSQyem%c+ge{ZGh*Lym3tz;BIF-(FB zK&u_+_;H(DY9}p#jDZ?b+~xVhHn{;|E!^q&=xg=@?R+ij-2qw~TnFnx$5Y2oC!h|N z&NiK0THe*3*C{cL+*fH zS}=Nqjn_dvG{6>Ughyd3JOy_oDHM=hANjlX&lva;XIfClNr<$maxB8HiA}EFU7An zQ3=lPbf@bd?m_)D{JM5y;4|V+z;2ib-TA`0UeAKV*fD4Jm~Uzs85Dj-B=}g*)IWcpBExXd_g>&9Dic zgFWy(?1fk0b$Ao@!#gk*&V_4X29!cy29X82o(94o$c4c$1a1x!yajHB+d!|vbORfP z>NVPUm;id!HW~_H42*?z$beMP6TK__yFqu*?N+zf8$oxjczj=wR|}oJL3ggc5RT*H z7{RZg8NP(kG}Ox1Eb5nm)|=ml58xo^71wQ$2g5A9%aTl--R zKHVzydh0DH$9@FWd$jF3se4koxi5mWyI)#d8WU$*5x?QKUnMXoY&OtZr33Jvv-|)H!iEb zr9-_RSMLV<)9YQAX&EHofxV()@TD92Z!H|@x!J>p;H6qJ2$3qc7j4$aQjdnJFn@J zr`&e_k49~J`cLh2n_BC$KX$`?qA5+gce!?I60|?I+r@sa57L<_+Pa5^!)JiJ9xv~W`BMMZ(4l4MZYZfcX#l{ z`0=q`w!bXao6~)9*_HDa{e0p4D;Lk5zhLm`%i8?LROj}{m7_s;xdN1i-B^^1PVA-{Rge>vx#Idj)@ zSzejCyE65*vS8nZmE%g%GXjA?Y9LT?4w_PXXItm;>K=4GlHCDsZ%Plhx$aoX`d~^8 z(H3M?d$no9o#!1(8|%7yBhx##UUOPSUhcdrFWWrzg}hB0%C4=OmY$sMZU0e<_iV?0 zUPZ?db;((0Ulndn2SP>4CIhV?9kM~bE|3PjAqk2=C0?6h_X7tdpz?oc_^U*9a27}h zf;t*xIv7W!)TdD3jD=5-6Cz%Ee!?m%pJp%N?7_V7=$r60v$A@MxgsPu# zfxHx{MqX^TREhn}j#oA8Z+@xl0jQ>UD5}sf({oYHz$mjvD@c*Dy|TbqD(Yao1-^}H zfD>pZy+G}~*XLb$rmSnQG{Ms?I#W@~H))zTZ+?&H53-bOHCSe?r0Vrnv!$xuX0}vc z@=jFW^>goTya)9UsysOrMlNiB~n;fM2=^)sgiF%adv*cFXoYUl2RrJ!4U+s?YMF ztmn)xmA%JosdmceQEg?P+51t=-$9hWK)vZ985F7VUqzMomgZHlw=F@cKlI-G3zQ!HPq4lgxZnu$FPRsM8T zp_yh^pvs>uCuO24O1uTt6fLqqW2%OWEq@s*d%5LHHIui?_9icm?OAtP)(TX;SD{K+ zrH>O-y{)$RTGMLFi&x#DJchqJ`hvx!+M`}F8|9zZdr1$kbV)K~M6W0>6V_%9T3TbO zc)i7?vJathy=wMrrmvg6foc-pGW%`QcTg2Hc14SGGz6j>c-Io8>gYdaOErM^&6cWq z)chZqU#h$hQT+=4HT#&wk7-9&`JW@!(WjR9nI%e9J#PLl%-@)5ph10{pxWVE;8)Xh zi>F^fMI&r!4yh7aquMjtp*q5{&3_82BGoT@s@YQI_e9lSFVkGby-v$Iht+EzS*99J z3AX(G&EJ@+*Flyy1l0*;q~(7LjZJiX19e##A^0Lv{NuWC2m{8HKHqspIX zHr42~G;g?d(nfXX@g3gdYYc%BeSZ!1yT8ZR=D9U%y2oc0n(pzN?(v)M@i`Eh?(v)M z@tf}Po9^+ycF(UnsCwN#naXau$8WmFkM0ohx9)N@Vt-%v_{UqtRz|$ks>{5cRi)mB zsx&{lzzy?is*>wkue@(53;xOeUr%>wUi}#-d)qrEMCwm>gXWtu%Y1r{i1-C}xwZqg5La4-h4g&0&AOOvK0POf z%s0n;dZsM&XRC`dEp&^8^k6vHeDlnwN2VO}%{L$KT>{Jfz3Spt3oW#e7L8j{S6O7f zmegCDZ!xMSdJ1djce$G`60Hj@UMi~%>;#qN<~xbH9$8fy7B$;aPx61RE`DKMR9df?I7g=Mz&iLN+r>YCBcWUqr3$0zK_XicNvGNz_ z3Ufg(SnkE4-nzjIzgAt$qN)Y2`z`%6>JL%ZKp!xlR*D`mpO$3#3-o|G-&N5CuU(>B zdDucdvDK}%tY%8@1r?wzKWe^Q>a~73U9?l^bXaep-qh>-o2uNPc52P<5FNLcX7mI< z!QWfux@BszCt&IfGYUpSDU9*ktaMo|hf^H^T9g>v%oH(9~(ILF*CYKAJ?PWS*`@`8V00zP!7z{&TC=7#hVK|hr@v%@2IoMr5JA{5I zEl}$4y$vcs3z(Ave*4v~d$>IV?*N(59KVjyB=~@KTS3R?NXXzz>bN`;j$kLDsh}&T zR@Od&kKkh%P5ct{2QUe=wD%rp&F~Ps0tbOL$#CFbR9=DuptltJ&=+Ap^rNG-=sLI* zu7IoIr*IAY46cRiKxc*<;6|86KQ}`u^)i@3KbON*a5Y>9I?+}*E@wK0E&!d_o`UVL z1D23f2_CF~)$lYt1JA-9*arvTWjF}0!4Mb*^I#&J4_aLB1v)rF&&r>L%=Rm;x^ehyk0)iUZp67?Q=3iZjLwcf+c#{%+ zo%<5{XXhub<5ZDKy#*|wT`n8S1D#xppcr&A)$7AssETnpM4 zf!<&*C8q0|-XZBt&q91U?>!Cmun3zMTjA(Ssx36i!Z`}(5$ak1|1s2JUjchTmo8nZ zJeZEHYtBgM3A)Ja!grKd8Uy+bbzL>?z!r0{b^e|SvtSgl2jL<2!`R7N*8pA6y3<(8 z^L5nEA~C*E1-AAr1C$Y>yk>1Kfl^_P5*+TT|lRqp#NyK%XQA* zU+oH=i=^M{lF~5St#_}c z{b6$OnyEKj`O6#l<%qN(QrYK{W!<0PKE_QsBR^D75XwJ?ND7gL|NIe5(Ah${x?HNa zhV9U%I8+!aj2+6YIR97t>AmI`4e7qEZ-N^*peQ&hKk_qdzd+~xV@hg_x~+Tfm~-sKfn z6v^D^76n~iDB|F@B1)^D7fA5mNYVyfWSKp=~ z?ZX${{D$_CJO1HbYuI$;_Lp6WMGF1n2VGG^lhS&ZV1YdhhYcJ~w3yFUi~Nj@u4Cl- zx7_Z8hVB34-)_c9F5`*A!RhM%^2A`FwMZ$^HG;Ci- Date: Mon, 18 Mar 2024 03:54:14 -0700 Subject: [PATCH 07/10] Remove test script from package.json altogether --- integration/bun/package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/integration/bun/package.json b/integration/bun/package.json index 47e1cc4..9c81885 100644 --- a/integration/bun/package.json +++ b/integration/bun/package.json @@ -5,9 +5,6 @@ "description": "Bun integration tests", "main": "index.js", "type": "module", - "scripts": { - "test": "bun test" - }, "dependencies": { "@types/node": "^20.11.0", "replicate": "file:../../" From b711ee750483e8289f1a8decb4f853541f555164 Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Mon, 18 Mar 2024 04:03:58 -0700 Subject: [PATCH 08/10] Remove @types/node dependency --- integration/bun/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/integration/bun/package.json b/integration/bun/package.json index 9c81885..f4ba202 100644 --- a/integration/bun/package.json +++ b/integration/bun/package.json @@ -6,7 +6,6 @@ "main": "index.js", "type": "module", "dependencies": { - "@types/node": "^20.11.0", "replicate": "file:../../" }, "devDependencies": { From cfaa2c7c96013a925e06c39f5d0ae7a378868a83 Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Mon, 18 Mar 2024 04:07:09 -0700 Subject: [PATCH 09/10] Build and install tarball for Bun integration test --- .github/workflows/ci.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 89ebb17..c6ca04e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,15 +98,23 @@ jobs: strategy: matrix: bun-version: [1.0.11] + node-version: [20.x] suite: [bun] steps: - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" - name: Use Bun ${{ matrix.bun-version }} uses: oven-sh/setup-bun@v1 with: bun-version: ${{ matrix.bun-version }} - run: | + PKG_TARBALL=$(npm --loglevel error pack) cd integration/${{ matrix.suite }} - bun install + bun uninstall replicate + bun install "file:../../$PKG_TARBALL" bun test From 5b852fe80501ca833ed3c576cea253945610c760 Mon Sep 17 00:00:00 2001 From: Mattt Date: Mon, 18 Mar 2024 04:09:05 -0700 Subject: [PATCH 10/10] Update tsconfig.json Co-authored-by: Aron Carroll --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index cfd779e..e6b4ed6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,7 @@ }, "exclude": [ "**/node_modules", - "integration/bun/**" + "integration/**" ] }