@trigger.dev/cli init - Create a better file structure
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@trigger.dev/cli": patch
|
||||
---
|
||||
|
||||
Initializing a next.js project now creates a better file structure
|
||||
@@ -1,26 +1,9 @@
|
||||
import { Job, TriggerClient, eventTrigger } from "@trigger.dev/sdk";
|
||||
|
||||
import { createAppRoute } from "@trigger.dev/nextjs";
|
||||
import { client } from "../../../trigger";
|
||||
|
||||
const client = new TriggerClient({
|
||||
id: "my-nextjs-project",
|
||||
apiKey: process.env.TRIGGER_API_KEY,
|
||||
apiUrl: process.env.TRIGGER_API_URL,
|
||||
});
|
||||
|
||||
new Job(client, {
|
||||
id: "example-job",
|
||||
name: "Example Job",
|
||||
version: "0.0.1",
|
||||
trigger: eventTrigger({
|
||||
name: "example.event",
|
||||
}),
|
||||
run: async (payload, io, ctx) => {
|
||||
await io.logger.info("Hello world!", { payload });
|
||||
|
||||
return {
|
||||
message: "Hello world!",
|
||||
};
|
||||
},
|
||||
});
|
||||
// Replace this with your own jobs
|
||||
import "../../../jobs/examples";
|
||||
|
||||
//this route is used to send and receive data with Trigger.dev
|
||||
export const { POST, dynamic } = createAppRoute(client);
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
import { Job, eventTrigger } from "@trigger.dev/sdk";
|
||||
import { client } from "../trigger";
|
||||
|
||||
// your first job
|
||||
new Job(client, {
|
||||
id: "example-job",
|
||||
name: "Example Job",
|
||||
version: "0.0.1",
|
||||
trigger: eventTrigger({
|
||||
name: "example.event",
|
||||
}),
|
||||
run: async (payload, io, ctx) => {
|
||||
await io.logger.info("Hello world!", { payload });
|
||||
|
||||
return {
|
||||
message: "Hello world!",
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,9 @@
|
||||
|
||||
import { TriggerClient } from "@trigger.dev/sdk";
|
||||
|
||||
export const client = new TriggerClient({
|
||||
id: "nextjs-clerk",
|
||||
apiKey: process.env.TRIGGER_API_KEY,
|
||||
apiUrl: process.env.TRIGGER_API_URL,
|
||||
});
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { client } from "@/trigger";
|
||||
|
||||
import "@/jobs/github";
|
||||
import "@/jobs/openai";
|
||||
import "@/jobs/resend";
|
||||
@@ -7,6 +8,7 @@ import "@/jobs/slack";
|
||||
import "@/jobs/logging";
|
||||
import "@/jobs/schedules";
|
||||
import "@/jobs/events";
|
||||
|
||||
import { createPagesRoute } from "@trigger.dev/nextjs";
|
||||
|
||||
const { handler, config } = createPagesRoute(client);
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# next.js
|
||||
/.next/
|
||||
/out/
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# local env files
|
||||
.env*.local
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
@@ -0,0 +1,38 @@
|
||||
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
|
||||
|
||||
## Getting Started
|
||||
|
||||
First, run the development server:
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
# or
|
||||
yarn dev
|
||||
# or
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
||||
|
||||
You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
|
||||
|
||||
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
|
||||
|
||||
The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
|
||||
|
||||
This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
|
||||
|
||||
## Learn More
|
||||
|
||||
To learn more about Next.js, take a look at the following resources:
|
||||
|
||||
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
||||
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
||||
|
||||
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
|
||||
|
||||
## Deploy on Vercel
|
||||
|
||||
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
||||
|
||||
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
|
||||
@@ -0,0 +1,6 @@
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
reactStrictMode: true,
|
||||
}
|
||||
|
||||
module.exports = nextConfig
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "nextjs-pages",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/node": "20.3.3",
|
||||
"@types/react": "^18.0.21",
|
||||
"@types/react-dom": "^18.0.6",
|
||||
"autoprefixer": "10.4.14",
|
||||
"next": "13.4.8",
|
||||
"postcss": "8.4.24",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"tailwindcss": "3.3.2",
|
||||
"typescript": "5.1.6",
|
||||
"@trigger.dev/sdk": "^2.0.0-next.9",
|
||||
"@trigger.dev/nextjs": "^1.0.0-next.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@trigger.dev/cli": "workspace:*"
|
||||
},
|
||||
"trigger.dev": {
|
||||
"endpointId": "nextjs-pages"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg>
|
||||
|
After Width: | Height: | Size: 629 B |
@@ -0,0 +1,19 @@
|
||||
import { Job, eventTrigger } from "@trigger.dev/sdk";
|
||||
import { client } from "~/trigger";
|
||||
|
||||
// your first job
|
||||
new Job(client, {
|
||||
id: "example-job",
|
||||
name: "Example Job",
|
||||
version: "0.0.1",
|
||||
trigger: eventTrigger({
|
||||
name: "example.event",
|
||||
}),
|
||||
run: async (payload, io, ctx) => {
|
||||
await io.logger.info("Hello world!", { payload });
|
||||
|
||||
return {
|
||||
message: "Hello world!",
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,6 @@
|
||||
import '~/styles/globals.css'
|
||||
import type { AppProps } from 'next/app'
|
||||
|
||||
export default function App({ Component, pageProps }: AppProps) {
|
||||
return <Component {...pageProps} />
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import { Html, Head, Main, NextScript } from 'next/document'
|
||||
|
||||
export default function Document() {
|
||||
return (
|
||||
<Html lang="en">
|
||||
<Head />
|
||||
<body>
|
||||
<Main />
|
||||
<NextScript />
|
||||
</body>
|
||||
</Html>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
|
||||
import type { NextApiRequest, NextApiResponse } from 'next'
|
||||
|
||||
type Data = {
|
||||
name: string
|
||||
}
|
||||
|
||||
export default function handler(
|
||||
req: NextApiRequest,
|
||||
res: NextApiResponse<Data>
|
||||
) {
|
||||
res.status(200).json({ name: 'John Doe' })
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
import { createPagesRoute } from "@trigger.dev/nextjs";
|
||||
import { client } from "~/trigger";
|
||||
|
||||
//this route is used to send and receive data with Trigger.dev
|
||||
const { handler, config } = createPagesRoute(client);
|
||||
export { config };
|
||||
|
||||
export default handler;
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
import Image from 'next/image'
|
||||
import { Inter } from 'next/font/google'
|
||||
|
||||
const inter = Inter({ subsets: ['latin'] })
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<main
|
||||
className={`flex min-h-screen flex-col items-center justify-between p-24 ${inter.className}`}
|
||||
>
|
||||
<div className="z-10 w-full max-w-5xl items-center justify-between font-mono text-sm lg:flex">
|
||||
<p className="fixed left-0 top-0 flex w-full justify-center border-b border-gray-300 bg-gradient-to-b from-zinc-200 pb-6 pt-8 backdrop-blur-2xl dark:border-neutral-800 dark:bg-zinc-800/30 dark:from-inherit lg:static lg:w-auto lg:rounded-xl lg:border lg:bg-gray-200 lg:p-4 lg:dark:bg-zinc-800/30">
|
||||
Get started by editing
|
||||
<code className="font-mono font-bold">src/pages/index.tsx</code>
|
||||
</p>
|
||||
<div className="fixed bottom-0 left-0 flex h-48 w-full items-end justify-center bg-gradient-to-t from-white via-white dark:from-black dark:via-black lg:static lg:h-auto lg:w-auto lg:bg-none">
|
||||
<a
|
||||
className="pointer-events-none flex place-items-center gap-2 p-8 lg:pointer-events-auto lg:p-0"
|
||||
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template-tw&utm_campaign=create-next-app"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
By{' '}
|
||||
<Image
|
||||
src="/vercel.svg"
|
||||
alt="Vercel Logo"
|
||||
className="dark:invert"
|
||||
width={100}
|
||||
height={24}
|
||||
priority
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="relative flex place-items-center before:absolute before:h-[300px] before:w-[480px] before:-translate-x-1/2 before:rounded-full before:bg-gradient-radial before:from-white before:to-transparent before:blur-2xl before:content-[''] after:absolute after:-z-20 after:h-[180px] after:w-[240px] after:translate-x-1/3 after:bg-gradient-conic after:from-sky-200 after:via-blue-200 after:blur-2xl after:content-[''] before:dark:bg-gradient-to-br before:dark:from-transparent before:dark:to-blue-700/10 after:dark:from-sky-900 after:dark:via-[#0141ff]/40 before:lg:h-[360px]">
|
||||
<Image
|
||||
className="relative dark:drop-shadow-[0_0_0.3rem_#ffffff70] dark:invert"
|
||||
src="/next.svg"
|
||||
alt="Next.js Logo"
|
||||
width={180}
|
||||
height={37}
|
||||
priority
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="mb-32 grid text-center lg:mb-0 lg:grid-cols-4 lg:text-left">
|
||||
<a
|
||||
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=default-template-tw&utm_campaign=create-next-app"
|
||||
className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<h2 className={`mb-3 text-2xl font-semibold`}>
|
||||
Docs{' '}
|
||||
<span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
|
||||
->
|
||||
</span>
|
||||
</h2>
|
||||
<p className={`m-0 max-w-[30ch] text-sm opacity-50`}>
|
||||
Find in-depth information about Next.js features and API.
|
||||
</p>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=default-template-tw&utm_campaign=create-next-app"
|
||||
className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<h2 className={`mb-3 text-2xl font-semibold`}>
|
||||
Learn{' '}
|
||||
<span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
|
||||
->
|
||||
</span>
|
||||
</h2>
|
||||
<p className={`m-0 max-w-[30ch] text-sm opacity-50`}>
|
||||
Learn about Next.js in an interactive course with quizzes!
|
||||
</p>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=default-template-tw&utm_campaign=create-next-app"
|
||||
className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<h2 className={`mb-3 text-2xl font-semibold`}>
|
||||
Templates{' '}
|
||||
<span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
|
||||
->
|
||||
</span>
|
||||
</h2>
|
||||
<p className={`m-0 max-w-[30ch] text-sm opacity-50`}>
|
||||
Discover and deploy boilerplate example Next.js projects.
|
||||
</p>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template-tw&utm_campaign=create-next-app"
|
||||
className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<h2 className={`mb-3 text-2xl font-semibold`}>
|
||||
Deploy{' '}
|
||||
<span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
|
||||
->
|
||||
</span>
|
||||
</h2>
|
||||
<p className={`m-0 max-w-[30ch] text-sm opacity-50`}>
|
||||
Instantly deploy your Next.js site to a shareable URL with Vercel.
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</main>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
:root {
|
||||
--foreground-rgb: 0, 0, 0;
|
||||
--background-start-rgb: 214, 219, 220;
|
||||
--background-end-rgb: 255, 255, 255;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--foreground-rgb: 255, 255, 255;
|
||||
--background-start-rgb: 0, 0, 0;
|
||||
--background-end-rgb: 0, 0, 0;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
color: rgb(var(--foreground-rgb));
|
||||
background: linear-gradient(
|
||||
to bottom,
|
||||
transparent,
|
||||
rgb(var(--background-end-rgb))
|
||||
)
|
||||
rgb(var(--background-start-rgb));
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
|
||||
import { TriggerClient } from "@trigger.dev/sdk";
|
||||
|
||||
export const client = new TriggerClient({
|
||||
id: "nextjs-pages",
|
||||
apiKey: process.env.TRIGGER_API_KEY,
|
||||
apiUrl: process.env.TRIGGER_API_URL,
|
||||
});
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: [
|
||||
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
|
||||
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
|
||||
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
backgroundImage: {
|
||||
'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
|
||||
'gradient-conic':
|
||||
'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [],
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"noEmit": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"incremental": true,
|
||||
"paths": {
|
||||
"~/*": ["./src/*"]
|
||||
}
|
||||
},
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
@@ -69,6 +69,7 @@
|
||||
"path-to-regexp": "^6.2.1",
|
||||
"simple-git": "^3.19.0",
|
||||
"terminal-link": "^3.0.0",
|
||||
"tsconfig": "^7.0.0",
|
||||
"zod": "^3.20.2"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Command } from "commander";
|
||||
import inquirer from "inquirer";
|
||||
import { initCommand } from "../commands/init.js";
|
||||
import { COMMAND_NAME, DEFAULT_TRIGGER_URL } from "../consts.js";
|
||||
import { COMMAND_NAME, CLOUD_TRIGGER_URL } from "../consts.js";
|
||||
import { getVersion } from "../utils/getVersion.js";
|
||||
import pathModule from "node:path";
|
||||
import { devCommand } from "../commands/dev.js";
|
||||
@@ -67,7 +67,7 @@ export const promptTriggerUrl = async (): Promise<string> => {
|
||||
message: "Are you using the Trigger.dev cloud or self-hosted?",
|
||||
choices: [
|
||||
{
|
||||
name: `Trigger.dev Cloud (https://api.trigger.dev)`,
|
||||
name: `Trigger.dev Cloud (${CLOUD_TRIGGER_URL})`,
|
||||
value: "cloud",
|
||||
default: true,
|
||||
},
|
||||
@@ -80,7 +80,7 @@ export const promptTriggerUrl = async (): Promise<string> => {
|
||||
]);
|
||||
|
||||
if (instanceType === "cloud") {
|
||||
return DEFAULT_TRIGGER_URL;
|
||||
return CLOUD_TRIGGER_URL;
|
||||
}
|
||||
|
||||
const { triggerUrl } = await inquirer.prompt<{ triggerUrl: string }>({
|
||||
@@ -113,7 +113,7 @@ export const promptTriggerUrl = async (): Promise<string> => {
|
||||
export const promptApiKey = async (instanceUrl: string): Promise<string> => {
|
||||
// First prompt if they want to enter their API key now, and if they say Yes, then prompt for it and return it
|
||||
const { apiKey } = await inquirer.prompt<{ apiKey: string }>({
|
||||
type: "input",
|
||||
type: "password",
|
||||
name: "apiKey",
|
||||
message: `Enter your development API key (Find yours ➡️ ${instanceUrl})`,
|
||||
validate: (input) => {
|
||||
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
promptEndpointSlug,
|
||||
promptTriggerUrl,
|
||||
} from "../cli/index.js";
|
||||
import { COMMAND_NAME, DEFAULT_TRIGGER_URL } from "../consts.js";
|
||||
import { COMMAND_NAME, CLOUD_TRIGGER_URL, CLOUD_API_URL } from "../consts.js";
|
||||
import { addDependencies } from "../utils/addDependencies.js";
|
||||
import { logger } from "../utils/logger.js";
|
||||
import { resolvePath } from "../utils/parseNameAndPath.js";
|
||||
@@ -18,12 +18,14 @@ import { renderApiKey } from "../utils/renderApiKey.js";
|
||||
import { renderTitle } from "../utils/renderTitle.js";
|
||||
import { detectNextJsProject } from "../utils/detectNextJsProject.js";
|
||||
import { TriggerApi, WhoamiResponse } from "../utils/triggerApi.js";
|
||||
import { readFile } from "tsconfig";
|
||||
|
||||
export type InitCommandOptions = {
|
||||
projectPath: string;
|
||||
triggerUrl?: string;
|
||||
endpointSlug?: string;
|
||||
apiKey?: string;
|
||||
apiUrl?: string;
|
||||
};
|
||||
|
||||
type ResolvedOptions = Required<InitCommandOptions>;
|
||||
@@ -31,7 +33,7 @@ type ResolvedOptions = Required<InitCommandOptions>;
|
||||
export const initCommand = async (options: InitCommandOptions) => {
|
||||
renderTitle();
|
||||
|
||||
if (options.triggerUrl === DEFAULT_TRIGGER_URL) {
|
||||
if (options.triggerUrl === CLOUD_TRIGGER_URL) {
|
||||
logger.info(`✨ Initializing project in Trigger.dev Cloud`);
|
||||
} else if (typeof options.triggerUrl === "string") {
|
||||
logger.info(
|
||||
@@ -84,7 +86,7 @@ export const initCommand = async (options: InitCommandOptions) => {
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const apiClient = new TriggerApi(apiKey, resolvedOptions.triggerUrl);
|
||||
const apiClient = new TriggerApi(apiKey, resolvedOptions.apiUrl);
|
||||
const authorizedKey = await apiClient.whoami(apiKey);
|
||||
|
||||
if (!authorizedKey) {
|
||||
@@ -114,9 +116,19 @@ export const initCommand = async (options: InitCommandOptions) => {
|
||||
const routeDir = pathModule.join(resolvedPath, usesSrcDir ? "src" : "");
|
||||
|
||||
if (nextJsDir === "pages") {
|
||||
await createTriggerPageRoute(routeDir, resolvedOptions, usesSrcDir);
|
||||
await createTriggerPageRoute(
|
||||
resolvedPath,
|
||||
routeDir,
|
||||
resolvedOptions,
|
||||
usesSrcDir
|
||||
);
|
||||
} else {
|
||||
await createTriggerAppRoute(routeDir, resolvedOptions, usesSrcDir);
|
||||
await createTriggerAppRoute(
|
||||
resolvedPath,
|
||||
routeDir,
|
||||
resolvedOptions,
|
||||
usesSrcDir
|
||||
);
|
||||
}
|
||||
|
||||
await detectMiddlewareUsage(resolvedPath, usesSrcDir);
|
||||
@@ -175,6 +187,12 @@ const resolveOptionsWithPrompts = async (
|
||||
try {
|
||||
if (!options.triggerUrl) {
|
||||
resolvedOptions.triggerUrl = await promptTriggerUrl();
|
||||
|
||||
if (resolvedOptions.triggerUrl === CLOUD_TRIGGER_URL) {
|
||||
resolvedOptions.apiUrl = CLOUD_API_URL;
|
||||
} else {
|
||||
resolvedOptions.apiUrl = resolvedOptions.triggerUrl;
|
||||
}
|
||||
}
|
||||
|
||||
if (!options.apiKey) {
|
||||
@@ -370,27 +388,83 @@ async function getMiddlewareConfigMatcher(
|
||||
}
|
||||
}
|
||||
|
||||
async function createTriggerPageRoute(
|
||||
// Find the alias that points to the "src" directory.
|
||||
// So for example, the paths object could be:
|
||||
// {
|
||||
// "@/*": ["./src/*"]
|
||||
// }
|
||||
// In this case, we would return "@"
|
||||
function getPathAlias(tsconfig: any, usesSrcDir: boolean) {
|
||||
if (!tsconfig.compilerOptions.paths) {
|
||||
return;
|
||||
}
|
||||
|
||||
const paths = tsconfig.compilerOptions.paths;
|
||||
|
||||
const alias = Object.keys(paths).find((key) => {
|
||||
const value = paths[key];
|
||||
|
||||
if (value.length !== 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const path = value[0];
|
||||
|
||||
if (usesSrcDir) {
|
||||
return path === "./src/*";
|
||||
} else {
|
||||
return path === "./*";
|
||||
}
|
||||
});
|
||||
|
||||
// Make sure to remove the trailing "/*"
|
||||
if (alias) {
|
||||
return alias.slice(0, -2);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
async function createTriggerAppRoute(
|
||||
projectPath: string,
|
||||
path: string,
|
||||
options: ResolvedOptions,
|
||||
usesSrcDir = false
|
||||
) {
|
||||
const tsConfigPath = pathModule.join(projectPath, "tsconfig.json");
|
||||
const tsConfig = await readFile(tsConfigPath);
|
||||
|
||||
const pathAlias = getPathAlias(tsConfig, usesSrcDir);
|
||||
const routePathPrefix = pathAlias ? pathAlias + "/" : "../../../";
|
||||
|
||||
const routeContent = `
|
||||
import { Job, TriggerClient, eventTrigger } from "@trigger.dev/sdk";
|
||||
import { createPagesRoute } from "@trigger.dev/nextjs";
|
||||
import { createAppRoute } from "@trigger.dev/nextjs";
|
||||
import { client } from "${routePathPrefix}trigger";
|
||||
|
||||
// Replace this with your own jobs
|
||||
import "${routePathPrefix}jobs/examples";
|
||||
|
||||
//this route is used to send and receive data with Trigger.dev
|
||||
const { handler, config } = createPagesRoute(client);
|
||||
export { config };
|
||||
export const { POST, dynamic } = createAppRoute(client);
|
||||
`;
|
||||
|
||||
const triggerContent = `
|
||||
import { TriggerClient } from "@trigger.dev/sdk";
|
||||
|
||||
//used to send data to Trigger.dev and register jobs
|
||||
export const client = new TriggerClient({
|
||||
id: "${options.endpointSlug}",
|
||||
apiKey: process.env.TRIGGER_API_KEY,
|
||||
apiUrl: process.env.TRIGGER_API_URL,
|
||||
});
|
||||
`;
|
||||
|
||||
//your first job
|
||||
const jobsPathPrefix = pathAlias ? pathAlias + "/" : "../";
|
||||
|
||||
const jobsContent = `
|
||||
import { Job, eventTrigger } from "@trigger.dev/sdk";
|
||||
import { client } from "${jobsPathPrefix}trigger";
|
||||
|
||||
// your first job
|
||||
new Job(client, {
|
||||
id: "example-job",
|
||||
name: "Example Job",
|
||||
@@ -406,10 +480,114 @@ new Job(client, {
|
||||
};
|
||||
},
|
||||
});
|
||||
`;
|
||||
|
||||
const directories = pathModule.join(path, "app", "api", "trigger");
|
||||
await fs.mkdir(directories, { recursive: true });
|
||||
|
||||
const fileExists = await pathExists(pathModule.join(directories, "route.ts"));
|
||||
|
||||
if (fileExists) {
|
||||
logger.info("Skipping creation of app route because it already exists");
|
||||
return;
|
||||
}
|
||||
|
||||
await fs.writeFile(pathModule.join(directories, "route.ts"), routeContent);
|
||||
|
||||
logger.success(
|
||||
`✅ Created app route at ${usesSrcDir ? "src/" : ""}app/api/trigger.ts`
|
||||
);
|
||||
|
||||
const triggerFileExists = await pathExists(
|
||||
pathModule.join(path, "trigger.ts")
|
||||
);
|
||||
|
||||
if (!triggerFileExists) {
|
||||
await fs.writeFile(pathModule.join(path, "trigger.ts"), triggerContent);
|
||||
|
||||
logger.success(
|
||||
`✅ Created trigger client at ${usesSrcDir ? "src/" : ""}trigger.ts`
|
||||
);
|
||||
}
|
||||
|
||||
const exampleDirectories = pathModule.join(path, "jobs");
|
||||
await fs.mkdir(exampleDirectories, { recursive: true });
|
||||
|
||||
const exampleFileExists = await pathExists(
|
||||
pathModule.join(exampleDirectories, "examples.ts")
|
||||
);
|
||||
|
||||
if (!exampleFileExists) {
|
||||
await fs.writeFile(
|
||||
pathModule.join(exampleDirectories, "examples.ts"),
|
||||
jobsContent
|
||||
);
|
||||
|
||||
logger.success(
|
||||
`✅ Created example job at ${
|
||||
usesSrcDir ? "src/" : ""
|
||||
}jobs/examples/examples.ts`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function createTriggerPageRoute(
|
||||
projectPath: string,
|
||||
path: string,
|
||||
options: ResolvedOptions,
|
||||
usesSrcDir = false
|
||||
) {
|
||||
const tsConfigPath = pathModule.join(projectPath, "tsconfig.json");
|
||||
const tsConfig = await readFile(tsConfigPath);
|
||||
|
||||
const pathAlias = getPathAlias(tsConfig, usesSrcDir);
|
||||
const routePathPrefix = pathAlias ? pathAlias + "/" : "../..";
|
||||
|
||||
const routeContent = `
|
||||
import { createPagesRoute } from "@trigger.dev/nextjs";
|
||||
import { client } from "${routePathPrefix}trigger";
|
||||
|
||||
//this route is used to send and receive data with Trigger.dev
|
||||
const { handler, config } = createPagesRoute(client);
|
||||
export { config };
|
||||
|
||||
export default handler;
|
||||
`;
|
||||
|
||||
const triggerContent = `
|
||||
import { TriggerClient } from "@trigger.dev/sdk";
|
||||
|
||||
export const client = new TriggerClient({
|
||||
id: "${options.endpointSlug}",
|
||||
apiKey: process.env.TRIGGER_API_KEY,
|
||||
apiUrl: process.env.TRIGGER_API_URL,
|
||||
});
|
||||
`;
|
||||
|
||||
const jobsPathPrefix = pathAlias ? pathAlias + "/" : "../";
|
||||
|
||||
const jobsContent = `
|
||||
import { Job, eventTrigger } from "@trigger.dev/sdk";
|
||||
import { client } from "${jobsPathPrefix}trigger";
|
||||
|
||||
// your first job
|
||||
new Job(client, {
|
||||
id: "example-job",
|
||||
name: "Example Job",
|
||||
version: "0.0.1",
|
||||
trigger: eventTrigger({
|
||||
name: "example.event",
|
||||
}),
|
||||
run: async (payload, io, ctx) => {
|
||||
await io.logger.info("Hello world!", { payload });
|
||||
|
||||
return {
|
||||
message: "Hello world!",
|
||||
};
|
||||
},
|
||||
});
|
||||
`;
|
||||
|
||||
const directories = pathModule.join(path, "pages", "api");
|
||||
await fs.mkdir(directories, { recursive: true });
|
||||
|
||||
@@ -425,59 +603,38 @@ export default handler;
|
||||
logger.success(
|
||||
`✅ Created pages route at ${usesSrcDir ? "src/" : ""}pages/api/trigger.ts`
|
||||
);
|
||||
}
|
||||
|
||||
async function createTriggerAppRoute(
|
||||
path: string,
|
||||
options: ResolvedOptions,
|
||||
usesSrcDir = false
|
||||
) {
|
||||
const routeContent = `
|
||||
import { Job, TriggerClient, eventTrigger } from "@trigger.dev/sdk";
|
||||
import { createAppRoute } from "@trigger.dev/nextjs";
|
||||
const triggerFileExists = await pathExists(
|
||||
pathModule.join(path, "trigger.ts")
|
||||
);
|
||||
|
||||
//used to send data to Trigger.dev and register jobs
|
||||
export const client = new TriggerClient({
|
||||
id: "${options.endpointSlug}",
|
||||
apiKey: process.env.TRIGGER_API_KEY,
|
||||
apiUrl: process.env.TRIGGER_API_URL,
|
||||
});
|
||||
if (!triggerFileExists) {
|
||||
await fs.writeFile(pathModule.join(path, "trigger.ts"), triggerContent);
|
||||
|
||||
//your first job
|
||||
new Job(client, {
|
||||
id: "example-job",
|
||||
name: "Example Job",
|
||||
version: "0.0.1",
|
||||
trigger: eventTrigger({
|
||||
name: "example.event",
|
||||
}),
|
||||
run: async (payload, io, ctx) => {
|
||||
await io.logger.info("Hello world!", { payload });
|
||||
|
||||
return {
|
||||
message: "Hello world!",
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
//this route is used to send and receive data with Trigger.dev
|
||||
export const { POST, dynamic } = createAppRoute(client);
|
||||
`;
|
||||
|
||||
const directories = pathModule.join(path, "app", "api", "trigger");
|
||||
await fs.mkdir(directories, { recursive: true });
|
||||
|
||||
const fileExists = await pathExists(pathModule.join(directories, "route.ts"));
|
||||
|
||||
if (fileExists) {
|
||||
logger.info("Skipping creation of app route because it already exists");
|
||||
return;
|
||||
logger.success(
|
||||
`✅ Created TriggerClient at ${usesSrcDir ? "src/" : ""}trigger.ts`
|
||||
);
|
||||
}
|
||||
|
||||
await fs.writeFile(pathModule.join(directories, "route.ts"), routeContent);
|
||||
logger.success(
|
||||
`✅ Created app route at ${usesSrcDir ? "src/" : ""}app/api/trigger.ts`
|
||||
const exampleDirectories = pathModule.join(path, "jobs");
|
||||
await fs.mkdir(exampleDirectories, { recursive: true });
|
||||
|
||||
const exampleFileExists = await pathExists(
|
||||
pathModule.join(exampleDirectories, "examples.ts")
|
||||
);
|
||||
|
||||
if (!exampleFileExists) {
|
||||
await fs.writeFile(
|
||||
pathModule.join(exampleDirectories, "examples.ts"),
|
||||
jobsContent
|
||||
);
|
||||
|
||||
logger.success(
|
||||
`✅ Created example job at ${
|
||||
usesSrcDir ? "src/" : ""
|
||||
}jobs/examples/examples.ts`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function setupEnvironmentVariables(
|
||||
|
||||
@@ -18,4 +18,5 @@ export const TITLE_TEXT = `
|
||||
export const DEFAULT_APP_NAME = "my-triggers";
|
||||
export const COMMAND_NAME = "@trigger.dev/cli";
|
||||
export const TEMPLATE_ORGANIZATION = "triggerdotdev";
|
||||
export const DEFAULT_TRIGGER_URL = "https://api.trigger.dev";
|
||||
export const CLOUD_TRIGGER_URL = "https://cloud.trigger.dev";
|
||||
export const CLOUD_API_URL = "https://api.trigger.dev";
|
||||
|
||||
Generated
+231
-1
@@ -538,6 +538,37 @@ importers:
|
||||
msw: 0.47.4_typescript@5.0.4
|
||||
ts-loader: 9.4.2_typescript@5.0.4
|
||||
|
||||
examples/nextjs-pages:
|
||||
specifiers:
|
||||
'@trigger.dev/cli': workspace:*
|
||||
'@trigger.dev/nextjs': ^1.0.0-next.6
|
||||
'@trigger.dev/sdk': ^2.0.0-next.9
|
||||
'@types/node': 20.3.3
|
||||
'@types/react': ^18.0.21
|
||||
'@types/react-dom': ^18.0.6
|
||||
autoprefixer: 10.4.14
|
||||
next: 13.4.8
|
||||
postcss: 8.4.24
|
||||
react: ^18.2.0
|
||||
react-dom: ^18.2.0
|
||||
tailwindcss: 3.3.2
|
||||
typescript: 5.1.6
|
||||
dependencies:
|
||||
'@trigger.dev/nextjs': 1.0.0-next.6_ftcyxvcwljhc4ctqndod3jafc4
|
||||
'@trigger.dev/sdk': 2.0.0-next.9
|
||||
'@types/node': 20.3.3
|
||||
'@types/react': 18.0.26
|
||||
'@types/react-dom': 18.0.10
|
||||
autoprefixer: 10.4.14_postcss@8.4.24
|
||||
next: 13.4.8_biqbaboplfbrettd7655fr4n2y
|
||||
postcss: 8.4.24
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
tailwindcss: 3.3.2
|
||||
typescript: 5.1.6
|
||||
devDependencies:
|
||||
'@trigger.dev/cli': link:../../packages/cli
|
||||
|
||||
integrations/github:
|
||||
specifiers:
|
||||
'@octokit/request': ^6.2.5
|
||||
@@ -652,6 +683,7 @@ importers:
|
||||
rimraf: ^3.0.2
|
||||
simple-git: ^3.19.0
|
||||
terminal-link: ^3.0.0
|
||||
tsconfig: ^7.0.0
|
||||
tsup: ^6.5.0
|
||||
type-fest: ^3.6.0
|
||||
typescript: ^4.9.5
|
||||
@@ -673,6 +705,7 @@ importers:
|
||||
path-to-regexp: 6.2.1
|
||||
simple-git: 3.19.0
|
||||
terminal-link: 3.0.0
|
||||
tsconfig: 7.0.0
|
||||
zod: 3.21.4
|
||||
devDependencies:
|
||||
'@types/fs-extra': 11.0.1
|
||||
@@ -7126,6 +7159,10 @@ packages:
|
||||
resolution: {integrity: sha512-ZlbiFulnwiFsW9UV1ku1OvX/oyIPLtMk9p/nnvDSwI0s7vSoZdRtxXNsaO+ZXrLv/pMbXVGq4lL8TbY9iuGmVw==}
|
||||
dev: false
|
||||
|
||||
/@next/env/13.4.8:
|
||||
resolution: {integrity: sha512-twuSf1klb3k9wXI7IZhbZGtFCWvGD4wXTY2rmvzIgVhXhs7ISThrbNyutBx3jWIL8Y/Hk9+woytFz5QsgtcRKQ==}
|
||||
dev: false
|
||||
|
||||
/@next/eslint-plugin-next/13.4.6:
|
||||
resolution: {integrity: sha512-bPigeu0RI7bgy1ucBA2Yqcfg539y0Lzo38P2hIkrRB1GNvFSbYg6RTu8n6tGqPVrH3TTlPTNKLXG01wc+5NuwQ==}
|
||||
dependencies:
|
||||
@@ -7149,6 +7186,15 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-darwin-arm64/13.4.8:
|
||||
resolution: {integrity: sha512-MSFplVM4dTWOuKAUv0XR9gY7AWtMSBu9os9f+kp+s5rWhM1I2CdR3obFttd6366nS/W/VZxbPM5oEIdlIa46zA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-darwin-x64/13.3.1:
|
||||
resolution: {integrity: sha512-lT36yYxosCfLtplFzJWgo0hrPu6/do8+msgM7oQkPeohDNdhjtjFUgOOwdSnPublLR6Mo2Ym4P/wl5OANuD2bw==}
|
||||
engines: {node: '>= 10'}
|
||||
@@ -7166,6 +7212,15 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-darwin-x64/13.4.8:
|
||||
resolution: {integrity: sha512-Reox+UXgonon9P0WNDE6w85DGtyBqGitl/ryznOvn6TvfxEaZIpTgeu3ZrJLU9dHSMhiK7YAM793mE/Zii2/Qw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm64-gnu/13.3.1:
|
||||
resolution: {integrity: sha512-wRb76nLWJhonH8s3kxC/1tFguEkeOPayIwe9mkaz1G/yeS3OrjeyKMJsb4+Kdg0zbTo53bNCOl59NNtDM7yyyw==}
|
||||
engines: {node: '>= 10'}
|
||||
@@ -7183,6 +7238,15 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm64-gnu/13.4.8:
|
||||
resolution: {integrity: sha512-kdyzYvAYtqQVgzIKNN7e1rLU8aZv86FDSRqPlOkKZlvqudvTO0iohuTPmnEEDlECeBM6qRPShNffotDcU/R2KA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm64-musl/13.3.1:
|
||||
resolution: {integrity: sha512-qz3BzjJRZ16Iq/jrp+pjiYOc0jTjHlfmxQmZk9x/+5uhRP6/eWQSTAPVJ33BMo6oK5O5N4644OgTAbzXzorecg==}
|
||||
engines: {node: '>= 10'}
|
||||
@@ -7200,6 +7264,15 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm64-musl/13.4.8:
|
||||
resolution: {integrity: sha512-oWxx4yRkUGcR81XwbI+T0zhZ3bDF6V1aVLpG+C7hSG50ULpV8gC39UxVO22/bv93ZlcfMY4zl8xkz9Klct6dpQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-x64-gnu/13.3.1:
|
||||
resolution: {integrity: sha512-6mgkLmwlyWlomQmpl21I3hxgqE5INoW4owTlcLpNsd1V4wP+J46BlI/5zV5KWWbzjfncIqzXoeGs5Eg+1GHODA==}
|
||||
engines: {node: '>= 10'}
|
||||
@@ -7217,6 +7290,15 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-x64-gnu/13.4.8:
|
||||
resolution: {integrity: sha512-anhtvuO6eE9YRhYnaEGTfbpH3L5gT/9qPFcNoi6xS432r/4DAtpJY8kNktqkTVevVIC/pVumqO8tV59PR3zbNg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-x64-musl/13.3.1:
|
||||
resolution: {integrity: sha512-uqm5sielhQmKJM+qayIhgZv1KlS5pqTdQ99b+Z7hMWryXS96qE0DftTmMZowBcUL6x7s2vSXyH5wPtO1ON7LBg==}
|
||||
engines: {node: '>= 10'}
|
||||
@@ -7234,6 +7316,15 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-x64-musl/13.4.8:
|
||||
resolution: {integrity: sha512-aR+J4wWfNgH1DwCCBNjan7Iumx0lLtn+2/rEYuhIrYLY4vnxqSVGz9u3fXcgUwo6Q9LT8NFkaqK1vPprdq+BXg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-arm64-msvc/13.3.1:
|
||||
resolution: {integrity: sha512-WomIiTj/v3LevltlibNQKmvrOymNRYL+a0dp5R73IwPWN5FvXWwSELN/kiNALig/+T3luc4qHNTyvMCp9L6U5Q==}
|
||||
engines: {node: '>= 10'}
|
||||
@@ -7251,6 +7342,15 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-arm64-msvc/13.4.8:
|
||||
resolution: {integrity: sha512-OWBKIrJwQBTqrat0xhxEB/jcsjJR3+diD9nc/Y8F1mRdQzsn4bPsomgJyuqPVZs6Lz3K18qdIkvywmfSq75SsQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-ia32-msvc/13.3.1:
|
||||
resolution: {integrity: sha512-M+PoH+0+q658wRUbs285RIaSTYnGBSTdweH/0CdzDgA6Q4rBM0sQs4DHmO3BPP0ltCO/vViIoyG7ks66XmCA5g==}
|
||||
engines: {node: '>= 10'}
|
||||
@@ -7268,6 +7368,15 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-ia32-msvc/13.4.8:
|
||||
resolution: {integrity: sha512-agiPWGjUndXGTOn4ChbKipQXRA6/UPkywAWIkx7BhgGv48TiJfHTK6MGfBoL9tS6B4mtW39++uy0wFPnfD0JWg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-x64-msvc/13.3.1:
|
||||
resolution: {integrity: sha512-Sl1F4Vp5Z1rNXWZYqJwMuWRRol4bqOB6+/d7KqkgQ4AcafKPN1PZmpkCoxv4UFHtFNIB7EotnuIhtXu3zScicQ==}
|
||||
engines: {node: '>= 10'}
|
||||
@@ -7285,6 +7394,15 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-x64-msvc/13.4.8:
|
||||
resolution: {integrity: sha512-UIRKoByVKbuR6SnFG4JM8EMFlJrfEGuUQ1ihxzEleWcNwRMMiVaCj1KyqfTOW8VTQhJ0u8P1Ngg6q1RwnIBTtw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1:
|
||||
resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
|
||||
dependencies:
|
||||
@@ -10696,6 +10814,47 @@ packages:
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
dev: false
|
||||
|
||||
/@trigger.dev/nextjs/1.0.0-next.6_ftcyxvcwljhc4ctqndod3jafc4:
|
||||
resolution: {integrity: sha512-RnCGWGu6xOOakXVUhRLDDdQP8C1kPc3CPfAp1K4ANSPJAsahLt9Cq8GZTvw0RE3FboZ5ak+jzQs7bc5XPg5X0Q==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
'@trigger.dev/sdk': ^2.0.0-next.5
|
||||
next: ^13.3.1
|
||||
dependencies:
|
||||
'@trigger.dev/sdk': 2.0.0-next.9
|
||||
debug: 4.3.4
|
||||
next: 13.4.8_biqbaboplfbrettd7655fr4n2y
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@trigger.dev/sdk/2.0.0-next.9:
|
||||
resolution: {integrity: sha512-JpxUOtfm9qz+4Ib+XxNrouylrwFSKFKgJQ+EKz0PPsxfoOdbUHmdHh3qaNuESMLPXHGzh76gB+tj/A29rlgu/w==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
chalk: 5.2.0
|
||||
cronstrue: 2.21.0
|
||||
debug: 4.3.4
|
||||
evt: 2.4.13
|
||||
get-caller-file: 2.0.5
|
||||
git-remote-origin-url: 4.0.0
|
||||
git-repo-info: 2.1.1
|
||||
node-fetch: 2.6.11
|
||||
slug: 6.1.0
|
||||
terminal-link: 3.0.0
|
||||
ulid: 2.3.0
|
||||
uuid: 9.0.0
|
||||
ws: 8.12.0
|
||||
zod: 3.21.4
|
||||
zod-error: 1.1.0
|
||||
zod-to-json-schema: 3.20.2_zod@3.21.4
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- encoding
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
dev: false
|
||||
|
||||
/@tsconfig/node10/1.0.9:
|
||||
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
|
||||
|
||||
@@ -11148,6 +11307,10 @@ packages:
|
||||
/@types/node/20.3.2:
|
||||
resolution: {integrity: sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==}
|
||||
|
||||
/@types/node/20.3.3:
|
||||
resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==}
|
||||
dev: false
|
||||
|
||||
/@types/node/8.10.66:
|
||||
resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==}
|
||||
dev: true
|
||||
@@ -11257,6 +11420,14 @@ packages:
|
||||
resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
|
||||
dev: true
|
||||
|
||||
/@types/strip-bom/3.0.0:
|
||||
resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==}
|
||||
dev: false
|
||||
|
||||
/@types/strip-json-comments/0.0.30:
|
||||
resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==}
|
||||
dev: false
|
||||
|
||||
/@types/tar/6.1.4:
|
||||
resolution: {integrity: sha512-Cp4oxpfIzWt7mr2pbhHT2OTXGMAL0szYCzuf8lRWyIMCgsx6/Hfc3ubztuhvzXHXgraTQxyOCmmg7TDGIMIJJQ==}
|
||||
dependencies:
|
||||
@@ -19893,6 +20064,49 @@ packages:
|
||||
- babel-plugin-macros
|
||||
dev: false
|
||||
|
||||
/next/13.4.8_biqbaboplfbrettd7655fr4n2y:
|
||||
resolution: {integrity: sha512-lxUjndYKjZHGK3CWeN2RI+/6ni6EUvjiqGWXAYPxUfGIdFGQ5XoisrqAJ/dF74aP27buAfs8MKIbIMMdxjqSBg==}
|
||||
engines: {node: '>=16.8.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.1.0
|
||||
fibers: '>= 3.1.0'
|
||||
react: ^18.2.0
|
||||
react-dom: ^18.2.0
|
||||
sass: ^1.3.0
|
||||
peerDependenciesMeta:
|
||||
'@opentelemetry/api':
|
||||
optional: true
|
||||
fibers:
|
||||
optional: true
|
||||
sass:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@next/env': 13.4.8
|
||||
'@swc/helpers': 0.5.1
|
||||
busboy: 1.6.0
|
||||
caniuse-lite: 1.0.30001504
|
||||
postcss: 8.4.14
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0_react@18.2.0
|
||||
styled-jsx: 5.1.1_react@18.2.0
|
||||
watchpack: 2.4.0
|
||||
zod: 3.21.4
|
||||
optionalDependencies:
|
||||
'@next/swc-darwin-arm64': 13.4.8
|
||||
'@next/swc-darwin-x64': 13.4.8
|
||||
'@next/swc-linux-arm64-gnu': 13.4.8
|
||||
'@next/swc-linux-arm64-musl': 13.4.8
|
||||
'@next/swc-linux-x64-gnu': 13.4.8
|
||||
'@next/swc-linux-x64-musl': 13.4.8
|
||||
'@next/swc-win32-arm64-msvc': 13.4.8
|
||||
'@next/swc-win32-ia32-msvc': 13.4.8
|
||||
'@next/swc-win32-x64-msvc': 13.4.8
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- babel-plugin-macros
|
||||
dev: false
|
||||
|
||||
/ngrok/5.0.0-beta.2:
|
||||
resolution: {integrity: sha512-UzsyGiJ4yTTQLCQD11k1DQaMwq2/SsztBg2b34zAqcyjS25qjDpogMKPaCKHwe/APRTHeel3iDXcVctk5CNaCQ==}
|
||||
engines: {node: '>=14.2'}
|
||||
@@ -23352,7 +23566,6 @@ packages:
|
||||
/strip-json-comments/2.0.1:
|
||||
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/strip-json-comments/3.1.1:
|
||||
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
||||
@@ -24106,6 +24319,15 @@ packages:
|
||||
strip-bom: 3.0.0
|
||||
dev: true
|
||||
|
||||
/tsconfig/7.0.0:
|
||||
resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==}
|
||||
dependencies:
|
||||
'@types/strip-bom': 3.0.0
|
||||
'@types/strip-json-comments': 0.0.30
|
||||
strip-bom: 3.0.0
|
||||
strip-json-comments: 2.0.1
|
||||
dev: false
|
||||
|
||||
/tslib/1.14.1:
|
||||
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
|
||||
|
||||
@@ -25762,6 +25984,14 @@ packages:
|
||||
zod: 3.20.2
|
||||
dev: false
|
||||
|
||||
/zod-to-json-schema/3.20.2_zod@3.21.4:
|
||||
resolution: {integrity: sha512-qka3UAXmVXD8z5SHkRU89UyHp8JHJW7zc8RQCpt7QloJOn6uijwkjUm8o+M/cF1IysmKc5gxac/QeDikaQMdzQ==}
|
||||
peerDependencies:
|
||||
zod: ^3.20.0
|
||||
dependencies:
|
||||
zod: 3.21.4
|
||||
dev: false
|
||||
|
||||
/zod/3.20.2:
|
||||
resolution: {integrity: sha512-1MzNQdAvO+54H+EaK5YpyEy0T+Ejo/7YLHS93G3RnYWh5gaotGHwGeN/ZO687qEDU2y4CdStQYXVHIgrUl5UVQ==}
|
||||
dev: false
|
||||
|
||||
Reference in New Issue
Block a user