fix: Buffer import breaks @trigger.dev/react (#714)

This commit is contained in:
Eric Allam
2023-10-31 15:28:55 +00:00
committed by GitHub
parent 9c5a7cf073
commit c1710ae72d
24 changed files with 373 additions and 17 deletions
+7
View File
@@ -0,0 +1,7 @@
---
"@trigger.dev/core-backend": patch
"@trigger.dev/sdk": patch
"@trigger.dev/core": patch
---
Creates a new package @trigger.dev/core-backend that includes code shared between @trigger.dev/sdk and the Trigger.dev server
@@ -1,9 +1,9 @@
import {
API_VERSIONS,
BloomFilter,
ApiEventLog,
ConnectionAuth,
EndpointHeadersSchema,
RunJobAutoYieldWithCompletedTaskExecutionError,
RunJobBody,
RunJobError,
RunJobInvalidPayloadError,
RunJobResumeWithTask,
@@ -14,27 +14,25 @@ import {
RunSourceContextSchema,
supportsFeature,
} from "@trigger.dev/core";
import { BloomFilter } from "@trigger.dev/core-backend";
import { RuntimeEnvironmentType, type Task } from "@trigger.dev/database";
import { generateErrorMessage } from "zod-error";
import { eventRecordToApiJson } from "~/api.server";
import {
MAX_RUN_CHUNK_EXECUTION_LIMIT,
MAX_RUN_YIELDED_EXECUTIONS,
RUN_CHUNK_EXECUTION_BUFFER,
} from "~/consts";
import { $transaction, PrismaClient, PrismaClientOrTransaction, prisma } from "~/db.server";
import { detectResponseIsTimeout } from "~/models/endpoint.server";
import { enqueueRunExecutionV2 } from "~/models/jobRunExecution.server";
import { resolveRunConnections } from "~/models/runConnection.server";
import { prepareTasksForCaching, prepareTasksForCachingLegacy } from "~/models/task.server";
import { CompleteRunTaskService } from "~/routes/api.v1.runs.$runId.tasks.$id.complete";
import { formatError } from "~/utils/formatErrors.server";
import { safeJsonZodParse } from "~/utils/json";
import { EndpointApi } from "../endpointApi.server";
import { logger } from "../logger.server";
import { prepareTasksForCaching, prepareTasksForCachingLegacy } from "~/models/task.server";
import {
MAX_RUN_CHUNK_EXECUTION_LIMIT,
MAX_RUN_YIELDED_EXECUTIONS,
RESPONSE_TIMEOUT_STATUS_CODES,
RUN_CHUNK_EXECUTION_BUFFER,
} from "~/consts";
import { ApiEventLog } from "@trigger.dev/core";
import { RunJobBody } from "@trigger.dev/core";
import { CompleteRunTaskService } from "~/routes/api.v1.runs.$runId.tasks.$id.complete";
import { detectResponseIsTimeout } from "~/models/endpoint.server";
import { forceYieldCoordinator } from "./forceYieldCoordinator.server";
type FoundRun = NonNullable<Awaited<ReturnType<typeof findRun>>>;
+1
View File
@@ -63,6 +63,7 @@
"@team-plain/typescript-sdk": "^2.2.0",
"@trigger.dev/companyicons": "^1.5.14",
"@trigger.dev/core": "workspace:*",
"@trigger.dev/core-backend": "workspace:*",
"@trigger.dev/database": "workspace:*",
"@trigger.dev/sdk": "workspace:*",
"@types/pg": "8.6.6",
+2
View File
@@ -12,6 +12,7 @@ module.exports = {
"marked",
"axios",
"@trigger.dev/core",
"@trigger.dev/core-backend",
"@trigger.dev/sdk",
"emails",
"highlight.run",
@@ -19,6 +20,7 @@ module.exports = {
watchPaths: async () => {
return [
"../../packages/core/src/**/*",
"../../packages/core-backend/src/**/*",
"../../packages/trigger-sdk/src/**/*",
"../../packages/emails/src/**/*",
];
+2
View File
@@ -23,6 +23,8 @@
"@trigger.dev/sdk/*": ["../../packages/trigger-sdk/src/*"],
"@trigger.dev/core": ["../../packages/core/src/index"],
"@trigger.dev/core/*": ["../../packages/core/src/*"],
"@trigger.dev/core-backend": ["../../packages/core-backend/src/index"],
"@trigger.dev/core-backend/*": ["../../packages/core-backend/src/*"],
"@trigger.dev/database": ["../../packages/database/src/index"],
"@trigger.dev/database/*": ["../../packages/database/src/*"],
"emails": ["../../packages/emails/src/index"],
+46
View File
@@ -0,0 +1,46 @@
## Troubleshooting
### `'TriggerProvider' not found`
When running the Remix app, you may see an error like this:
```
import { TriggerProvider } from "@trigger.dev/react";
^^^^^^^^^^^^^^^
SyntaxError: Named export 'TriggerProvider' not found. The requested module '@trigger.dev/react' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:
import pkg from '@trigger.dev/react';
const { TriggerProvider } = pkg;
```
To fix this, edit your `remix.config.js` file and add the `@trigger.dev/react` package to your list of `serverDependenciesToBundle`:
```js
export default {
// ... other config
serverDependenciesToBundle: ["@trigger.dev/react"],
};
```
### `[ERROR] Node builtin "buffer"`
When running the Remix app, you may see an error like this:
```
✘ [ERROR] Node builtin "buffer" (imported by "node_modules/@trigger.dev/core/dist/index.js") must be polyfilled for the browser.
You can enable this polyfill in your Remix config, e.g. `browserNodeBuiltinsPolyfill: { modules: { buffer: true } }`
[plugin browser-node-builtins-polyfill-plugin]
```
To fix this, edit your `remix.config.js` file and add the `browserNodeBuiltinsPolyfill` config:
```js
export default {
browserNodeBuiltinsPolyfill: {
modules: {
buffer: "empty",
},
},
};
```
@@ -5,3 +5,5 @@ description: "How to manually setup Trigger.dev in your Remix project"
---
<Snippet file="manual-setup-remix.mdx" />
<Snippet file="remix/troubleshooting.mdx" />
@@ -16,3 +16,5 @@ View our [guide for writing Jobs](/documentation/guides/create-a-job).
## Deployment
View our [deployment guide](/documentation/guides/deployment) to learn how to deploy your Jobs.
<Snippet file="remix/troubleshooting.mdx" />
+4
View File
@@ -5,6 +5,8 @@ description: "Start creating Jobs in 5 minutes in your Remix project."
icon: "r"
---
## Quickstart
This quick start guide will get you up and running with Trigger.dev.
<Accordion title="Need to create a new Remix project to add Trigger.dev to?">
@@ -84,6 +86,8 @@ If you navigate to your Trigger.dev project you will see this Job in the "Jobs"
</Steps>
<Snippet file="remix/troubleshooting.mdx" />
<Snippet file="quickstart-whats-next.mdx" />
<CardGroup cols={2}>
<Snippet file="card-react-hooks.mdx" />
View File
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Trigger.dev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+8
View File
@@ -0,0 +1,8 @@
module.exports = {
moduleFileExtensions: ["ts", "tsx", "js"],
transform: {
"^.+\\.(ts|tsx)$": "ts-jest",
},
testMatch: ["<rootDir>/test/**/*.ts?(x)", "<rootDir>/test/**/?(*.)+(spec|test).ts?(x)"],
testEnvironment: "node",
};
+42
View File
@@ -0,0 +1,42 @@
{
"name": "@trigger.dev/core-backend",
"version": "2.2.3",
"description": "Core code used across `@trigger.dev/sdk` and Trigger.dev server",
"license": "MIT",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"publishConfig": {
"access": "public"
},
"files": [
"dist"
],
"exports": {
".": {
"import": "./dist/index.js",
"require": "./dist/index.js"
},
"./package.json": "./package.json"
},
"sideEffects": false,
"scripts": {
"clean": "rimraf dist",
"build": "npm run clean && npm run build:tsup",
"build:tsup": "tsup --dts-resolve",
"typecheck": "tsc --noEmit",
"test": "jest"
},
"devDependencies": {
"@trigger.dev/tsconfig": "workspace:*",
"@types/jest": "^29.5.3",
"@types/node": "18",
"jest": "^29.6.2",
"rimraf": "^3.0.2",
"ts-jest": "^29.1.1",
"tsup": "^7.1.0",
"typescript": "^5.1.0"
},
"engines": {
"node": ">=18.0.0"
}
}
+1
View File
@@ -0,0 +1 @@
export * from "./bloom";
@@ -0,0 +1,28 @@
import { BloomFilter } from "../src";
describe("BloomFilter", () => {
it("should be able to correct test for inclusion in the set", () => {
const filter = new BloomFilter(1000);
filter.add("hello");
filter.add("world");
expect(filter.test("hello")).toBe(true);
expect(filter.test("world")).toBe(true);
expect(filter.test("foo")).toBe(false);
});
it("should be able to serialize and deserialize", () => {
const filter = new BloomFilter(1000);
filter.add("hello");
filter.add("world");
const serialized = filter.serialize();
const deserialized = BloomFilter.deserialize(serialized, 1000);
expect(deserialized.test("hello")).toBe(true);
expect(deserialized.test("world")).toBe(true);
expect(deserialized.test("foo")).toBe(false);
});
});
+11
View File
@@ -0,0 +1,11 @@
{
"extends": "@trigger.dev/tsconfig/node18.json",
"include": ["src/globals.d.ts", "./src/**/*.ts", "tsup.config.ts"],
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"declaration": false,
"declarationMap": false
},
"exclude": ["node_modules"]
}
+12
View File
@@ -0,0 +1,12 @@
{
"extends": "@trigger.dev/tsconfig/node18.json",
"include": ["src/globals.d.ts", "./src/**/*.ts", "tsup.config.ts", "./test/**/*.ts"],
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"declaration": false,
"declarationMap": false,
"types": ["jest"]
},
"exclude": ["node_modules"]
}
+20
View File
@@ -0,0 +1,20 @@
import { defineConfig } from "tsup";
export default defineConfig([
{
name: "main",
config: "tsconfig.build.json",
entry: ["./src/index.ts"],
outDir: "./dist",
platform: "neutral",
format: ["cjs"],
legacyOutput: true,
sourcemap: true,
clean: true,
bundle: true,
splitting: false,
dts: true,
external: ["http", "https", "util", "events", "tty", "os", "timers"],
esbuildPlugins: [],
},
]);
-1
View File
@@ -6,7 +6,6 @@ export * from "./retry";
export * from "./replacements";
export * from "./searchParams";
export * from "./eventFilterMatches";
export * from "./bloom";
export const API_VERSIONS = {
LAZY_LOADED_CACHED_TASKS: "2023-09-29",
+1
View File
@@ -26,6 +26,7 @@
},
"dependencies": {
"@trigger.dev/core": "workspace:^2.2.3",
"@trigger.dev/core-backend": "workspace:^2.2.3",
"chalk": "^5.2.0",
"cronstrue": "^2.21.0",
"debug": "^4.3.4",
+1 -1
View File
@@ -1,6 +1,5 @@
import {
API_VERSIONS,
BloomFilter,
CachedTask,
ConnectionAuth,
CronOptions,
@@ -19,6 +18,7 @@ import {
UpdateTriggerSourceBodyV2,
supportsFeature,
} from "@trigger.dev/core";
import { BloomFilter } from "@trigger.dev/core-backend";
import { AsyncLocalStorage } from "node:async_hooks";
import { webcrypto } from "node:crypto";
import { ApiClient } from "./apiClient";
+3 -1
View File
@@ -6,7 +6,9 @@
"emitDecoratorMetadata": true,
"paths": {
"@trigger.dev/core/*": ["../core/src/*"],
"@trigger.dev/core": ["../core/src/index"]
"@trigger.dev/core": ["../core/src/index"],
"@trigger.dev/core-backend/*": ["../core-backend/src/*"],
"@trigger.dev/core-backend": ["../core-backend/src/index"]
},
"lib": ["DOM", "DOM.Iterable"],
"declaration": false,
+148 -1
View File
@@ -107,6 +107,7 @@ importers:
'@total-typescript/ts-reset': ^0.4.2
'@trigger.dev/companyicons': ^1.5.14
'@trigger.dev/core': workspace:*
'@trigger.dev/core-backend': workspace:*
'@trigger.dev/database': workspace:*
'@trigger.dev/sdk': workspace:*
'@trigger.dev/tailwind-config': workspace:*
@@ -235,6 +236,7 @@ importers:
'@team-plain/typescript-sdk': 2.2.0
'@trigger.dev/companyicons': 1.5.14_biqbaboplfbrettd7655fr4n2y
'@trigger.dev/core': link:../../packages/core
'@trigger.dev/core-backend': link:../../packages/core-backend
'@trigger.dev/database': link:../../packages/database
'@trigger.dev/sdk': link:../../packages/trigger-sdk
'@types/pg': 8.6.6
@@ -783,6 +785,26 @@ importers:
tsup: 7.1.0_typescript@4.9.5
typescript: 4.9.5
packages/core-backend:
specifiers:
'@trigger.dev/tsconfig': workspace:*
'@types/jest': ^29.5.3
'@types/node': '18'
jest: ^29.6.2
rimraf: ^3.0.2
ts-jest: ^29.1.1
tsup: ^7.1.0
typescript: ^5.1.0
devDependencies:
'@trigger.dev/tsconfig': link:../../config-packages/tsconfig
'@types/jest': 29.5.3
'@types/node': 18.17.1
jest: 29.6.2_@types+node@18.17.1
rimraf: 3.0.2
ts-jest: 29.1.1_uvjn2wawyirmlmi655a42v3ske
tsup: 7.2.0_typescript@5.2.2
typescript: 5.2.2
packages/database:
specifiers:
'@prisma/client': 5.4.1
@@ -1057,6 +1079,7 @@ importers:
packages/trigger-sdk:
specifiers:
'@trigger.dev/core': workspace:^2.2.3
'@trigger.dev/core-backend': workspace:^2.2.3
'@trigger.dev/tsconfig': workspace:*
'@types/debug': ^4.1.7
'@types/node': '18'
@@ -1083,6 +1106,7 @@ importers:
zod: 3.22.3
dependencies:
'@trigger.dev/core': link:../core
'@trigger.dev/core-backend': link:../core-backend
chalk: 5.2.0
cronstrue: 2.21.0
debug: 4.3.4
@@ -22546,6 +22570,35 @@ packages:
- ts-node
dev: true
/jest-cli/29.6.2_@types+node@18.17.1:
resolution: {integrity: sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
dependencies:
'@jest/core': 29.6.2
'@jest/test-result': 29.6.2
'@jest/types': 29.6.1
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.10
import-local: 3.1.0
jest-config: 29.6.2_@types+node@18.17.1
jest-util: 29.6.2
jest-validate: 29.6.2
prompts: 2.4.2
yargs: 17.7.2
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
- supports-color
- ts-node
dev: true
/jest-config/29.6.2_@types+node@16.18.11:
resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -22586,6 +22639,46 @@ packages:
- supports-color
dev: true
/jest-config/29.6.2_@types+node@18.17.1:
resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@types/node': '*'
ts-node: '>=9.0.0'
peerDependenciesMeta:
'@types/node':
optional: true
ts-node:
optional: true
dependencies:
'@babel/core': 7.22.17
'@jest/test-sequencer': 29.6.2
'@jest/types': 29.6.1
'@types/node': 18.17.1
babel-jest: 29.6.2_@babel+core@7.22.17
chalk: 4.1.2
ci-info: 3.8.0
deepmerge: 4.3.1
glob: 7.2.3
graceful-fs: 4.2.10
jest-circus: 29.6.2
jest-environment-node: 29.6.2
jest-get-type: 29.4.3
jest-regex-util: 29.4.3
jest-resolve: 29.6.2
jest-runner: 29.6.2
jest-util: 29.6.2
jest-validate: 29.6.2
micromatch: 4.0.5
parse-json: 5.2.0
pretty-format: 29.6.2
slash: 3.0.0
strip-json-comments: 3.1.1
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
dev: true
/jest-config/29.6.2_@types+node@20.6.0:
resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -22966,6 +23059,27 @@ packages:
- ts-node
dev: true
/jest/29.6.2_@types+node@18.17.1:
resolution: {integrity: sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
dependencies:
'@jest/core': 29.6.2
'@jest/types': 29.6.1
import-local: 3.1.0
jest-cli: 29.6.2_@types+node@18.17.1
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
- supports-color
- ts-node
dev: true
/jiti/1.18.2:
resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==}
hasBin: true
@@ -30185,6 +30299,39 @@ packages:
/ts-interface-checker/0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
/ts-jest/29.1.1_uvjn2wawyirmlmi655a42v3ske:
resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
peerDependencies:
'@babel/core': '>=7.0.0-beta.0 <8'
'@jest/types': ^29.0.0
babel-jest: ^29.0.0
esbuild: '*'
jest: ^29.0.0
typescript: '>=4.3 <6'
peerDependenciesMeta:
'@babel/core':
optional: true
'@jest/types':
optional: true
babel-jest:
optional: true
esbuild:
optional: true
dependencies:
bs-logger: 0.2.6
fast-json-stable-stringify: 2.1.0
jest: 29.6.2_@types+node@18.17.1
jest-util: 29.6.2
json5: 2.2.3
lodash.memoize: 4.1.2
make-error: 1.3.6
semver: 7.5.4
typescript: 5.2.2
yargs-parser: 21.1.1
dev: true
/ts-jest/29.1.1_xlkreayjyan5lfqjb5gzdqf3my:
resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -30687,7 +30834,7 @@ packages:
joycon: 3.1.1
postcss-load-config: 4.0.1
resolve-from: 5.0.0
rollup: 3.10.0
rollup: 3.29.1
source-map: 0.8.0-beta.0
sucrase: 3.32.0
tree-kill: 1.2.2