commit
df01c46c1c
|
@ -55,6 +55,7 @@ module.exports = defineConfig({
|
|||
'@typescript-eslint/no-empty-interface': 'off',
|
||||
'@typescript-eslint/no-inferrable-types': 'off',
|
||||
'@typescript-eslint/no-var-requires': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports' }],
|
||||
},
|
||||
})
|
||||
|
|
14
README.md
14
README.md
|
@ -1,17 +1,17 @@
|
|||
# Hello middleware for Hono
|
||||
# Sentry middleware for Hono
|
||||
|
||||
An example project of the third-party middleware for [Hono](https://github.com/honojs/hono).
|
||||
This middleware add `X-Message` header to the Response.
|
||||
Sentry middleware for [Hono](https://github.com/honojs/hono).
|
||||
This middleware sends captured exceptions to the Sentry data source named by the `SENTRY_DSN` environment variable via [toucan-js](https://github.com/robertcepa/toucan-js).
|
||||
|
||||
## Usage
|
||||
|
||||
```ts
|
||||
import { hello } from '@honojs/hello'
|
||||
import { sentry } from '@honojs/sentry'
|
||||
import { Hono } from 'hono'
|
||||
|
||||
const app = new Hono()
|
||||
|
||||
app.use('*', hello('Hello!! Hono!!'))
|
||||
app.use('*', sentry())
|
||||
app.get('/', (c) => c.text('foo'))
|
||||
|
||||
export default app
|
||||
|
@ -21,12 +21,12 @@ export default app
|
|||
|
||||
```ts
|
||||
import { serve } from 'https://deno.land/std/http/server.ts'
|
||||
import { hello } from 'https://deno.land/x/hono_hello/mod.ts'
|
||||
import { sentry } from 'https://deno.land/x/hono_sentry/mod.ts'
|
||||
import { Hono } from 'https://deno.land/x/hono/mod.ts'
|
||||
|
||||
const app = new Hono()
|
||||
|
||||
app.use('*', hello('Hello!! Hono!!'))
|
||||
app.use('*', sentry({ dsn: 'https://xxxxxx@xxx.ingest.sentry.io/xxxxxx' }))
|
||||
app.get('/', (c) => c.text('foo'))
|
||||
|
||||
serve(app.fetch)
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
# Hello middleware for Hono
|
||||
# Sentry middleware for Hono
|
||||
|
||||
An example project of the third-party middleware for [Hono](https://github.com/honojs/hono).
|
||||
This middleware add `X-Message` header to the Response.
|
||||
Sentry middleware for [Hono](https://github.com/honojs/hono).
|
||||
This middleware sends captured exceptions to the Sentry data source named by the `SENTRY_DSN` environment variable via [toucan-js](https://github.com/robertcepa/toucan-js).
|
||||
|
||||
## Usage
|
||||
|
||||
```ts
|
||||
import { hello } from '@honojs/hello'
|
||||
import { sentry } from '@honojs/sentry'
|
||||
import { Hono } from 'hono'
|
||||
|
||||
const app = new Hono()
|
||||
|
||||
app.use('*', hello('Hello!! Hono!!'))
|
||||
app.use('*', sentry())
|
||||
app.get('/', (c) => c.text('foo'))
|
||||
|
||||
export default app
|
||||
|
@ -21,12 +21,12 @@ export default app
|
|||
|
||||
```ts
|
||||
import { serve } from 'https://deno.land/std/http/server.ts'
|
||||
import { hello } from 'https://deno.land/x/hono_hello/mod.ts'
|
||||
import { sentry } from 'https://deno.land/x/hono_sentry/mod.ts'
|
||||
import { Hono } from 'https://deno.land/x/hono/mod.ts'
|
||||
|
||||
const app = new Hono()
|
||||
|
||||
app.use('*', hello('Hello!! Hono!!'))
|
||||
app.use('*', sentry({ dsn: 'https://xxxxxx@xxx.ingest.sentry.io/xxxxxx' }))
|
||||
app.get('/', (c) => c.text('foo'))
|
||||
|
||||
serve(app.fetch)
|
||||
|
|
|
@ -1,8 +1,62 @@
|
|||
import type { Handler } from 'https://raw.githubusercontent.com/honojs/hono/v2.0.6/deno_dist/mod.ts'
|
||||
import type { Context, Handler } from 'https://raw.githubusercontent.com/honojs/hono/v2.0.6/deno_dist/mod.ts'
|
||||
import Toucan from "https://cdn.skypack.dev/toucan-js@2.6.1"
|
||||
|
||||
export const hello = (message: string = 'Hello'): Handler => {
|
||||
return async (c, next) => {
|
||||
await next()
|
||||
c.res.headers.append('X-Message', message)
|
||||
declare module 'https://raw.githubusercontent.com/honojs/hono/v2.0.6/deno_dist/mod.ts' {
|
||||
interface ContextVariableMap {
|
||||
sentry: Toucan
|
||||
}
|
||||
}
|
||||
|
||||
class MockContext implements ExecutionContext {
|
||||
passThroughOnException(): void {
|
||||
throw new Error('Method not implemented.')
|
||||
}
|
||||
async waitUntil(promise: Promise<any>): Promise<void> {
|
||||
await promise
|
||||
}
|
||||
}
|
||||
|
||||
export type Options = {
|
||||
dsn?: string
|
||||
allowedCookies?: string[] | RegExp
|
||||
allowedHeaders?: string[] | RegExp
|
||||
allowedSearchParams?: string[] | RegExp
|
||||
attachStacktrace?: boolean
|
||||
debug?: boolean
|
||||
environment?: string
|
||||
maxBreadcrumbs?: number
|
||||
pkg?: Record<string, any>
|
||||
release?: string
|
||||
}
|
||||
|
||||
export const sentry = (options?: Options, callback?: (sentry: Toucan) => void): Handler => {
|
||||
return async (c, next) => {
|
||||
let hasExecutionContext = true
|
||||
try {
|
||||
c.executionCtx
|
||||
} catch {
|
||||
hasExecutionContext = false
|
||||
}
|
||||
const sentry = new Toucan({
|
||||
dsn: c.env.SENTRY_DSN || c.env.NEXT_PUBLIC_SENTRY_DSN,
|
||||
allowedHeaders: ['user-agent'],
|
||||
allowedSearchParams: /(.*)/,
|
||||
request: c.req,
|
||||
context: hasExecutionContext ? c.executionCtx : new MockContext(),
|
||||
...options,
|
||||
})
|
||||
|
||||
if (callback) callback(sentry)
|
||||
|
||||
try {
|
||||
await next()
|
||||
} catch (error) {
|
||||
sentry.captureException(error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const getSentry = (c: Context) => {
|
||||
return c.get('sentry')
|
||||
}
|
||||
|
|
|
@ -1,15 +1,29 @@
|
|||
import { hello } from '../deno_dist/mod.ts'
|
||||
import { assertNotEquals } from 'https://deno.land/std@0.148.0/testing/asserts.ts'
|
||||
import { sentry } from '../deno_dist/mod.ts'
|
||||
import { assertEquals, Hono } from './deps.ts'
|
||||
|
||||
// Test just only minimal patterns.
|
||||
// Because others are tested well in Cloudflare Workers environment already.
|
||||
|
||||
Deno.test('Hello Middleware', async () => {
|
||||
Deno.test('Sentry Middleware', async () => {
|
||||
const app = new Hono()
|
||||
app.use('/hello/*', hello())
|
||||
app.get('/hello/foo', (c) => c.text('foo'))
|
||||
app.use(
|
||||
'/sentry/*',
|
||||
sentry(undefined, (sentry) => {
|
||||
sentry.setUser({ id: 'test' })
|
||||
})
|
||||
)
|
||||
app.get('/sentry/foo', (c) => c.text('foo'))
|
||||
app.get('/sentry/error', () => {
|
||||
throw new Error('a catastrophic error')
|
||||
})
|
||||
|
||||
let res = await app.request('http://localhost/hello/foo')
|
||||
let req = new Request('http://localhost/sentry/foo')
|
||||
let res = await app.fetch(req)
|
||||
assertNotEquals(res, null)
|
||||
assertEquals(res.status, 200)
|
||||
assertEquals(res.headers.get('X-Message'), 'Hello')
|
||||
|
||||
req = new Request('http://localhost/sentry/error')
|
||||
res = await app.fetch(req)
|
||||
assertNotEquals(res, null)
|
||||
assertEquals(res.status, 500)
|
||||
})
|
||||
|
|
22
package.json
22
package.json
|
@ -1,11 +1,12 @@
|
|||
{
|
||||
"name": "@honojs/hello",
|
||||
"version": "0.0.6",
|
||||
"description": "An example of third-party middleware for Hono",
|
||||
"name": "@honojs/sentry",
|
||||
"version": "0.0.1",
|
||||
"description": "Sentry Middleware for Hono",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"files": [
|
||||
"dist"
|
||||
"dist/index.js",
|
||||
"dist/index.d.ts"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "jest",
|
||||
|
@ -13,28 +14,27 @@
|
|||
"test:all": "yarn test && yarn test:deno",
|
||||
"denoify": "rimraf deno_dist && denoify",
|
||||
"build": "rimraf dist && tsc",
|
||||
"prerelease": "yarn denoify && yarn build && yarn test:all",
|
||||
"prerelease": "yarn build && yarn denoify && yarn test:all",
|
||||
"release": "yarn publish"
|
||||
},
|
||||
"denoify": {
|
||||
"port": {
|
||||
"hono": "honojs/hono"
|
||||
}
|
||||
"replacer": "dist/replacer.js"
|
||||
},
|
||||
"license": "MIT",
|
||||
"private": false,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/honojs/middleware-template.git"
|
||||
"url": "https://github.com/honojs/sentry.git"
|
||||
},
|
||||
"homepage": "https://github.com/honojs/middleware-template",
|
||||
"homepage": "https://github.com/honojs/sentry",
|
||||
"author": "Yusuke Wada <yusuke@kamawada.com> (https://github.com/yusukebe)",
|
||||
"publishConfig": {
|
||||
"registry": "https://registry.npmjs.org",
|
||||
"access": "public"
|
||||
},
|
||||
"dependencies": {
|
||||
"hono": "^2.0.6"
|
||||
"hono": "^2.0.6",
|
||||
"toucan-js": "^2.6.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^3.14.0",
|
||||
|
|
64
src/index.ts
64
src/index.ts
|
@ -1,8 +1,62 @@
|
|||
import type { Handler } from 'hono'
|
||||
import type { Context, Handler } from 'hono'
|
||||
import Toucan from 'toucan-js'
|
||||
|
||||
export const hello = (message: string = 'Hello'): Handler => {
|
||||
return async (c, next) => {
|
||||
await next()
|
||||
c.res.headers.append('X-Message', message)
|
||||
declare module 'hono' {
|
||||
interface ContextVariableMap {
|
||||
sentry: Toucan
|
||||
}
|
||||
}
|
||||
|
||||
class MockContext implements ExecutionContext {
|
||||
passThroughOnException(): void {
|
||||
throw new Error('Method not implemented.')
|
||||
}
|
||||
async waitUntil(promise: Promise<any>): Promise<void> {
|
||||
await promise
|
||||
}
|
||||
}
|
||||
|
||||
export type Options = {
|
||||
dsn?: string
|
||||
allowedCookies?: string[] | RegExp
|
||||
allowedHeaders?: string[] | RegExp
|
||||
allowedSearchParams?: string[] | RegExp
|
||||
attachStacktrace?: boolean
|
||||
debug?: boolean
|
||||
environment?: string
|
||||
maxBreadcrumbs?: number
|
||||
pkg?: Record<string, any>
|
||||
release?: string
|
||||
}
|
||||
|
||||
export const sentry = (options?: Options, callback?: (sentry: Toucan) => void): Handler => {
|
||||
return async (c, next) => {
|
||||
let hasExecutionContext = true
|
||||
try {
|
||||
c.executionCtx
|
||||
} catch {
|
||||
hasExecutionContext = false
|
||||
}
|
||||
const sentry = new Toucan({
|
||||
dsn: c.env.SENTRY_DSN || c.env.NEXT_PUBLIC_SENTRY_DSN,
|
||||
allowedHeaders: ['user-agent'],
|
||||
allowedSearchParams: /(.*)/,
|
||||
request: c.req,
|
||||
context: hasExecutionContext ? c.executionCtx : new MockContext(),
|
||||
...options,
|
||||
})
|
||||
|
||||
if (callback) callback(sentry)
|
||||
|
||||
try {
|
||||
await next()
|
||||
} catch (error) {
|
||||
sentry.captureException(error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const getSentry = (c: Context) => {
|
||||
return c.get('sentry')
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// @denoify-ignore
|
||||
import { makeThisModuleAnExecutableReplacer } from 'denoify'
|
||||
|
||||
makeThisModuleAnExecutableReplacer(async ({ parsedImportExportStatement, version }) => {
|
||||
if (parsedImportExportStatement.parsedArgument.nodeModuleName === 'toucan-js') {
|
||||
return `import Toucan from "https://cdn.skypack.dev/toucan-js@${version}"`
|
||||
}
|
||||
return undefined
|
||||
})
|
|
@ -1,26 +1,42 @@
|
|||
import { Hono } from 'hono'
|
||||
import { hello } from '../src'
|
||||
import { sentry } from '../src'
|
||||
|
||||
describe('Hello middleware', () => {
|
||||
// Mock
|
||||
class Context implements ExecutionContext {
|
||||
passThroughOnException(): void {
|
||||
throw new Error('Method not implemented.')
|
||||
}
|
||||
async waitUntil(promise: Promise<any>): Promise<void> {
|
||||
await promise
|
||||
}
|
||||
}
|
||||
|
||||
const captureException = jest.fn()
|
||||
jest.mock('toucan-js', () => jest.fn().mockImplementation(() => ({ captureException })))
|
||||
const callback = jest.fn()
|
||||
|
||||
describe('Sentry middleware', () => {
|
||||
const app = new Hono()
|
||||
|
||||
app.use('/hello/*', hello())
|
||||
app.get('/hello/foo', (c) => c.text('foo'))
|
||||
|
||||
app.use('/x/*', hello('X'))
|
||||
app.get('/x/foo', (c) => c.text('foo'))
|
||||
|
||||
it('Should be hello message', async () => {
|
||||
const res = await app.request('http://localhost/hello/foo')
|
||||
expect(res).not.toBeNull()
|
||||
expect(res.status).toBe(200)
|
||||
expect(res.headers.get('X-Message')).toBe('Hello')
|
||||
app.use('/sentry/*', sentry(undefined, callback))
|
||||
app.get('/sentry/foo', (c) => c.text('foo'))
|
||||
app.get('/sentry/error', () => {
|
||||
throw new Error('a catastrophic error')
|
||||
})
|
||||
|
||||
it('Should be X', async () => {
|
||||
const res = await app.request('http://localhost/x/foo')
|
||||
it('Should initialize Toucan', async () => {
|
||||
const req = new Request('http://localhost/sentry/foo')
|
||||
const res = await app.fetch(req, {}, new Context())
|
||||
expect(res).not.toBeNull()
|
||||
expect(res.status).toBe(200)
|
||||
expect(res.headers.get('X-Message')).toBe('X')
|
||||
expect(callback).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('Should report errors', async () => {
|
||||
const req = new Request('http://localhost/sentry/error')
|
||||
const res = await app.fetch(req, {}, new Context())
|
||||
expect(res).not.toBeNull()
|
||||
expect(res.status).toBe(500)
|
||||
expect(captureException).toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
|
|
181
yarn.lock
181
yarn.lock
|
@ -783,17 +783,17 @@
|
|||
"@octokit/types" "^6.0.3"
|
||||
universal-user-agent "^6.0.0"
|
||||
|
||||
"@octokit/openapi-types@^12.7.0":
|
||||
version "12.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.8.0.tgz#f4708cf948724d6e8f7d878cfd91584c1c5c0523"
|
||||
integrity sha512-ydcKLs2KKcxlhpdWLzJxEBDEk/U5MUeqtqkXlrtAUXXFPs6vLl1PEGghFC/BbpleosB7iXs0Z4P2DGe7ZT5ZNg==
|
||||
"@octokit/openapi-types@^12.11.0":
|
||||
version "12.11.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0"
|
||||
integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==
|
||||
|
||||
"@octokit/plugin-paginate-rest@^2.16.8":
|
||||
version "2.21.2"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.2.tgz#070be9bb18cb78e52b471ddc3551d28355e2d5e2"
|
||||
integrity sha512-S24H0a6bBVreJtoTaRHT/gnVASbOHVTRMOVIqd9zrJBP3JozsxJB56TDuTUmd1xLI4/rAE2HNmThvVKtIdLLEw==
|
||||
version "2.21.3"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e"
|
||||
integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==
|
||||
dependencies:
|
||||
"@octokit/types" "^6.39.0"
|
||||
"@octokit/types" "^6.40.0"
|
||||
|
||||
"@octokit/plugin-request-log@^1.0.4":
|
||||
version "1.0.4"
|
||||
|
@ -839,12 +839,12 @@
|
|||
"@octokit/plugin-request-log" "^1.0.4"
|
||||
"@octokit/plugin-rest-endpoint-methods" "^5.12.0"
|
||||
|
||||
"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0":
|
||||
version "6.39.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.39.0.tgz#46ce28ca59a3d4bac0e487015949008302e78eee"
|
||||
integrity sha512-Mq4N9sOAYCitTsBtDdRVrBE80lIrMBhL9Jbrw0d+j96BAzlq4V+GLHFJbHokEsVvO/9tQupQdoFdgVYhD2C8UQ==
|
||||
"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0":
|
||||
version "6.41.0"
|
||||
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04"
|
||||
integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==
|
||||
dependencies:
|
||||
"@octokit/openapi-types" "^12.7.0"
|
||||
"@octokit/openapi-types" "^12.11.0"
|
||||
|
||||
"@pkgr/utils@^2.3.0":
|
||||
version "2.3.0"
|
||||
|
@ -858,6 +858,48 @@
|
|||
tiny-glob "^0.2.9"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@sentry/core@6.19.6":
|
||||
version "6.19.6"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.6.tgz#7d4649d0148b5d0be1358ab02e2f869bf7363e9a"
|
||||
integrity sha512-biEotGRr44/vBCOegkTfC9rwqaqRKIpFljKGyYU6/NtzMRooktqOhjmjmItNCMRknArdeaQwA8lk2jcZDXX3Og==
|
||||
dependencies:
|
||||
"@sentry/hub" "6.19.6"
|
||||
"@sentry/minimal" "6.19.6"
|
||||
"@sentry/types" "6.19.6"
|
||||
"@sentry/utils" "6.19.6"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/hub@6.19.6":
|
||||
version "6.19.6"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.6.tgz#ada83ceca0827c49534edfaba018221bc1eb75e1"
|
||||
integrity sha512-PuEOBZxvx3bjxcXmWWZfWXG+orojQiWzv9LQXjIgroVMKM/GG4QtZbnWl1hOckUj7WtKNl4hEGO2g/6PyCV/vA==
|
||||
dependencies:
|
||||
"@sentry/types" "6.19.6"
|
||||
"@sentry/utils" "6.19.6"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/minimal@6.19.6":
|
||||
version "6.19.6"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.6.tgz#b6cced3708e25d322039e68ebdf8fadfa445bf7d"
|
||||
integrity sha512-T1NKcv+HTlmd8EbzUgnGPl4ySQGHWMCyZ8a8kXVMZOPDzphN3fVIzkYzWmSftCWp0rpabXPt9aRF2mfBKU+mAQ==
|
||||
dependencies:
|
||||
"@sentry/hub" "6.19.6"
|
||||
"@sentry/types" "6.19.6"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/types@6.19.6":
|
||||
version "6.19.6"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.6.tgz#70513f9dca05d23d7ab9c2a6cb08d4db6763ca67"
|
||||
integrity sha512-QH34LMJidEUPZK78l+Frt3AaVFJhEmIi05Zf8WHd9/iTt+OqvCHBgq49DDr1FWFqyYWm/QgW/3bIoikFpfsXyQ==
|
||||
|
||||
"@sentry/utils@6.19.6":
|
||||
version "6.19.6"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.6.tgz#2ddc9ef036c3847084c43d0e5a55e4646bdf9021"
|
||||
integrity sha512-fAMWcsguL0632eWrROp/vhPgI7sBj/JROWVPzpabwVkm9z3m1rQm6iLFn4qfkZL8Ozy6NVZPXOQ7EXmeU24byg==
|
||||
dependencies:
|
||||
"@sentry/types" "6.19.6"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sinclair/typebox@^0.23.3":
|
||||
version "0.23.5"
|
||||
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d"
|
||||
|
@ -915,6 +957,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/comment-json/-/comment-json-1.1.1.tgz#b4ae889912a93e64619f97989aecaff8ce889dca"
|
||||
integrity sha512-U70oEqvnkeSSp8BIJwJclERtT13rd9ejK7XkIzMCQQePZe3VW1b7iQggXyW4ZvfGtGeXD0pZw24q5iWNe++HqQ==
|
||||
|
||||
"@types/cookie@0.5.0":
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.0.tgz#14ebcd209f2555e341548c31128d4deb34dfb2b0"
|
||||
integrity sha512-CJWHVHHupxBYfIlMM+qzXx4dRKIV1VzOm0cP3Wpqten8MDx1tK+y92YDXUshN1ONAfwodvKxDNkw35/pNs+izg==
|
||||
|
||||
"@types/graceful-fs@^4.1.3":
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
|
||||
|
@ -1419,6 +1466,11 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
|
|||
dependencies:
|
||||
safe-buffer "~5.1.1"
|
||||
|
||||
cookie@0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
|
||||
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
||||
|
||||
cookie@^0.4.1:
|
||||
version "0.4.2"
|
||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
|
||||
|
@ -1493,22 +1545,22 @@ define-properties@^1.1.3, define-properties@^1.1.4:
|
|||
object-keys "^1.1.1"
|
||||
|
||||
denoify@^0.11.1:
|
||||
version "0.11.1"
|
||||
resolved "https://registry.yarnpkg.com/denoify/-/denoify-0.11.1.tgz#b3623719afdb38d8e678408f8a26bffb76d400a2"
|
||||
integrity sha512-HwRxpKpx4shhIruTXuZuPPCKD+aB1DT2dMDWqgTDpbZH9IV5SU95zVW/zVkX9m8VGozDe/N9DHIIrc/AYXgz8w==
|
||||
version "0.11.7"
|
||||
resolved "https://registry.yarnpkg.com/denoify/-/denoify-0.11.7.tgz#58d1fa69cb954d06ab98a2de07f1a08ab8a1a73c"
|
||||
integrity sha512-2JvQysrBci6Fq0abR+PZl1vGb5spXuXnU3INf/4sflkwk3yRdGi233hd0tBk9fDjNrA2iz8xVemyOv6Hdcvt+g==
|
||||
dependencies:
|
||||
"@octokit/rest" "^18.0.0"
|
||||
"@types/comment-json" "^1.1.1"
|
||||
commander "^4.1.1"
|
||||
comment-json "^3.0.2"
|
||||
evt beta
|
||||
evt "^2.3.1"
|
||||
get-github-default-branch-name "^0.0.4"
|
||||
gitignore-parser "0.0.2"
|
||||
glob "^7.1.6"
|
||||
node-fetch "^2.6.0"
|
||||
path-depth "^1.0.0"
|
||||
scripting-tools "^0.19.13"
|
||||
tsafe "^0.8.0"
|
||||
tsafe "^0.10.1"
|
||||
url-join "^4.0.1"
|
||||
|
||||
deprecation@^2.0.0, deprecation@^2.3.1:
|
||||
|
@ -1582,6 +1634,13 @@ error-ex@^1.3.1:
|
|||
dependencies:
|
||||
is-arrayish "^0.2.1"
|
||||
|
||||
error-stack-parser@^2.0.6:
|
||||
version "2.1.4"
|
||||
resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286"
|
||||
integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==
|
||||
dependencies:
|
||||
stackframe "^1.3.4"
|
||||
|
||||
es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5:
|
||||
version "1.20.1"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
|
||||
|
@ -1874,14 +1933,14 @@ esutils@^2.0.2:
|
|||
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
|
||||
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
|
||||
|
||||
evt@beta:
|
||||
version "2.0.0-beta.45"
|
||||
resolved "https://registry.yarnpkg.com/evt/-/evt-2.0.0-beta.45.tgz#8b1a81e1376f6eba254f4ec9865531b2ed118a3e"
|
||||
integrity sha512-Me2/YMCjxLgz4y0aWKIxykyJth2LHKqxc91XnsIN39IRksknObBR9Pjmxwpnhmd1lNCR6mPFv/vBt46iQWtI9g==
|
||||
evt@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/evt/-/evt-2.3.1.tgz#988fc6fc255db8999240e918afe63ba6c325db99"
|
||||
integrity sha512-+MU1aA0as6hOnGxzQOw9hV/xiKIB1vAY90S+WD6zMzvvhQHlY4aPHk2b8WpWsVs3XErDzlhGzCESVCAuH9kUiA==
|
||||
dependencies:
|
||||
minimal-polyfills "^2.2.1"
|
||||
run-exclusive "^2.2.14"
|
||||
tsafe "^0.4.1"
|
||||
run-exclusive "^2.2.16"
|
||||
tsafe "^0.10.1"
|
||||
|
||||
execa@^5.0.0:
|
||||
version "5.1.1"
|
||||
|
@ -3048,7 +3107,7 @@ miniflare@2.6.0:
|
|||
source-map-support "^0.5.20"
|
||||
undici "5.5.1"
|
||||
|
||||
minimal-polyfills@^2.1.5, minimal-polyfills@^2.2.1:
|
||||
minimal-polyfills@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/minimal-polyfills/-/minimal-polyfills-2.2.1.tgz#7249d7ece666d3b4e1ec1c1b8f949eb9d44e2308"
|
||||
integrity sha512-WLmHQrsZob4rVYf8yHapZPNJZ3sspGa/sN8abuSD59b0FifDEE7HMfLUi24z7mPZqTpBXy4Svp+iGvAmclCmXg==
|
||||
|
@ -3424,12 +3483,12 @@ rimraf@^3.0.0, rimraf@^3.0.2:
|
|||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
run-exclusive@^2.2.14:
|
||||
version "2.2.14"
|
||||
resolved "https://registry.yarnpkg.com/run-exclusive/-/run-exclusive-2.2.14.tgz#4f41dc7843e091f10991f8708fce87b09022a0ce"
|
||||
integrity sha512-NHaQfB3zPJFx7p4M06AcmoK8xz/h8YDMCdy3jxfyoC9VqIbl1U+DiVjUuAYZBRMwvj5qkQnOUGfsmyUC4k46dg==
|
||||
run-exclusive@^2.2.16:
|
||||
version "2.2.16"
|
||||
resolved "https://registry.yarnpkg.com/run-exclusive/-/run-exclusive-2.2.16.tgz#8fa30a23037760af296c47872a5f6b38f25accf0"
|
||||
integrity sha512-cdYv2LDvaBCRnrqXrwDFs1SgzGTx0EIsiEReTpsprEDR6hRUVlSyjoMYu+rez4S1gpz6YbOQxcmYFMXJQknVnQ==
|
||||
dependencies:
|
||||
minimal-polyfills "^2.1.5"
|
||||
minimal-polyfills "^2.2.1"
|
||||
|
||||
run-parallel@^1.1.9:
|
||||
version "1.2.0"
|
||||
|
@ -3534,6 +3593,11 @@ source-map-support@^0.5.20:
|
|||
buffer-from "^1.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
source-map@0.5.6:
|
||||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
|
||||
integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==
|
||||
|
||||
source-map@^0.6.0, source-map@^0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
|
@ -3544,6 +3608,13 @@ sprintf-js@~1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
|
||||
|
||||
stack-generator@^2.0.5:
|
||||
version "2.0.10"
|
||||
resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d"
|
||||
integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==
|
||||
dependencies:
|
||||
stackframe "^1.3.4"
|
||||
|
||||
stack-trace@0.0.10:
|
||||
version "0.0.10"
|
||||
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
|
||||
|
@ -3556,6 +3627,28 @@ stack-utils@^2.0.3:
|
|||
dependencies:
|
||||
escape-string-regexp "^2.0.0"
|
||||
|
||||
stackframe@^1.3.4:
|
||||
version "1.3.4"
|
||||
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
|
||||
integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
|
||||
|
||||
stacktrace-gps@^3.0.4:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0"
|
||||
integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==
|
||||
dependencies:
|
||||
source-map "0.5.6"
|
||||
stackframe "^1.3.4"
|
||||
|
||||
stacktrace-js@2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b"
|
||||
integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==
|
||||
dependencies:
|
||||
error-stack-parser "^2.0.6"
|
||||
stack-generator "^2.0.5"
|
||||
stacktrace-gps "^3.0.4"
|
||||
|
||||
streamsearch@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
|
||||
|
@ -3727,6 +3820,19 @@ to-regex-range@^5.0.1:
|
|||
dependencies:
|
||||
is-number "^7.0.0"
|
||||
|
||||
toucan-js@^2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/toucan-js/-/toucan-js-2.6.1.tgz#358ce4251da34b72e29d764c823f1407c37a03df"
|
||||
integrity sha512-G0D6lkfsQBWJhHgSagFCTc0QTWoAVfjouVZXGNv1L/N9YN2r41R0daqzpFHcAwbS4VrOTDgyiXzamfRDdub4sA==
|
||||
dependencies:
|
||||
"@sentry/core" "6.19.6"
|
||||
"@sentry/hub" "6.19.6"
|
||||
"@sentry/types" "6.19.6"
|
||||
"@sentry/utils" "6.19.6"
|
||||
"@types/cookie" "0.5.0"
|
||||
cookie "0.5.0"
|
||||
stacktrace-js "2.0.2"
|
||||
|
||||
tr46@~0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||
|
@ -3746,15 +3852,10 @@ ts-jest@^28.0.5:
|
|||
semver "7.x"
|
||||
yargs-parser "^21.0.1"
|
||||
|
||||
tsafe@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-0.4.1.tgz#00af1be2db82abb4be531209b90232d7954e1a03"
|
||||
integrity sha512-+OZ0gdgmwcru+MOSheCx+ymAvQz+1/ui+KFJRuaq0t2m8RNrlf7eSzEieptoPQXPY67Mdkqgkdjknn8azoD5sw==
|
||||
|
||||
tsafe@^0.8.0:
|
||||
version "0.8.1"
|
||||
resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-0.8.1.tgz#9af7e1540bc04313a82d60c98056a5017c8b086b"
|
||||
integrity sha512-EfPjxQHzndQAV/uh0SMGP26Wg3dCuaw8dRv2VPEuGHen5qzg2oqsMvZw2wkQFkiMisZq2fm95m5lheimW2Fpvg==
|
||||
tsafe@^0.10.1:
|
||||
version "0.10.1"
|
||||
resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-0.10.1.tgz#8f100b901e4467c43c0484f56a063f4276683ce0"
|
||||
integrity sha512-S+LrpSjoH5Pah201KS0MxtJn88HVtKf4ZxUoQuW/Hnl4IK6ALu9Qwjed7RbohDeHn+iMuug4c5Mk/z1Cq2G3nw==
|
||||
|
||||
tsconfig-paths@^3.14.1:
|
||||
version "3.14.1"
|
||||
|
@ -3766,7 +3867,7 @@ tsconfig-paths@^3.14.1:
|
|||
minimist "^1.2.6"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
tslib@^1.8.1:
|
||||
tslib@^1.8.1, tslib@^1.9.3:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||
|
|
Loading…
Reference in New Issue