fix: bump up Hono and make it `peerDependencies` to fix type mismatch (#21)
* fix: bump up Hono and make it 'peerDependencies' to fix type mismatch * fix for lintpull/29/head
parent
4489964e28
commit
ae6ed501c9
|
@ -1,3 +1,4 @@
|
|||
import { describe, expect, it } from 'bun:test'
|
||||
import {
|
||||
buildSchema,
|
||||
GraphQLSchema,
|
||||
|
@ -6,8 +7,7 @@ import {
|
|||
GraphQLNonNull,
|
||||
} from 'graphql'
|
||||
import { Hono } from 'hono'
|
||||
import { errorMessages, graphqlServer } from '../src/index'
|
||||
import { describe, expect, it } from 'bun:test'
|
||||
import { graphqlServer } from '../src/index'
|
||||
|
||||
// Test just only minimal patterns.
|
||||
// Because others are tested well in Cloudflare Workers environment already.
|
||||
|
@ -31,7 +31,7 @@ describe('graphql-server', () => {
|
|||
'/graphql',
|
||||
graphqlServer({
|
||||
schema,
|
||||
rootValue,
|
||||
rootResolver: () => rootValue,
|
||||
})
|
||||
)
|
||||
|
||||
|
|
|
@ -4,14 +4,14 @@
|
|||
|
||||
This middleware depends on [GraphQL.js](https://www.npmjs.com/package/graphql).
|
||||
|
||||
```plain
|
||||
npm i graphql
|
||||
```sh
|
||||
npm i @honojs/graphql-server
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```plain
|
||||
yarn add graphql
|
||||
yarn add @honojs/graphql-server
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
@ -20,7 +20,7 @@ index.js:
|
|||
|
||||
```js
|
||||
import { Hono } from 'hono'
|
||||
import { graphqlServer } from 'hono/graphql-server'
|
||||
import { graphqlServer } from '@honojs/graphql-server'
|
||||
import { buildSchema } from 'graphql'
|
||||
|
||||
export const app = new Hono()
|
||||
|
@ -31,15 +31,17 @@ type Query {
|
|||
}
|
||||
`)
|
||||
|
||||
const rootValue = {
|
||||
hello: () => 'Hello Hono!',
|
||||
const rootResolver = (ctx) => {
|
||||
return {
|
||||
hello: () => 'Hello Hono!',
|
||||
}
|
||||
}
|
||||
|
||||
app.use(
|
||||
'/graphql',
|
||||
graphqlServer({
|
||||
schema,
|
||||
rootValue,
|
||||
rootResolver,
|
||||
})
|
||||
)
|
||||
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
// Based on the code in the `express-graphql` package.
|
||||
// https://github.com/graphql/express-graphql/blob/main/src/index.ts
|
||||
|
||||
import {
|
||||
Source,
|
||||
parse,
|
||||
|
@ -10,7 +7,7 @@ import {
|
|||
specifiedRules,
|
||||
getOperationAST,
|
||||
GraphQLError,
|
||||
} from "https://cdn.skypack.dev/graphql@16.5.0?dts";
|
||||
} from 'https://cdn.skypack.dev/graphql@16.5.0?dts'
|
||||
|
||||
import type {
|
||||
GraphQLSchema,
|
||||
|
@ -18,101 +15,88 @@ import type {
|
|||
ValidationRule,
|
||||
FormattedExecutionResult,
|
||||
GraphQLFormattedError,
|
||||
} from "https://cdn.skypack.dev/graphql@16.5.0?dts";
|
||||
} from 'https://cdn.skypack.dev/graphql@16.5.0?dts'
|
||||
|
||||
import type { Context } from "https://raw.githubusercontent.com/honojs/hono/v2.0.2/deno_dist/mod.ts";
|
||||
import type { Next } from "https://raw.githubusercontent.com/honojs/hono/v2.0.2/deno_dist/mod.ts";
|
||||
import { parseBody } from "./parse-body.ts";
|
||||
import type { Context } from 'https://deno.land/x/hono/mod.ts'
|
||||
import { parseBody } from './parse-body.ts'
|
||||
|
||||
export type RootResolver = (ctx?: Context) => Promise<unknown> | unknown
|
||||
|
||||
type Options = {
|
||||
schema: GraphQLSchema;
|
||||
rootValue?: unknown;
|
||||
pretty?: boolean;
|
||||
validationRules?: ReadonlyArray<ValidationRule>;
|
||||
schema: GraphQLSchema
|
||||
rootResolver?: RootResolver,
|
||||
pretty?: boolean
|
||||
validationRules?: ReadonlyArray<ValidationRule>
|
||||
// graphiql?: boolean
|
||||
};
|
||||
}
|
||||
|
||||
export const graphqlServer = (options: Options) => {
|
||||
const schema = options.schema;
|
||||
const rootValue = options.rootValue;
|
||||
const pretty = options.pretty ?? false;
|
||||
const validationRules = options.validationRules ?? [];
|
||||
const schema = options.schema
|
||||
const pretty = options.pretty ?? false
|
||||
const validationRules = options.validationRules ?? []
|
||||
// const showGraphiQL = options.graphiql ?? false
|
||||
|
||||
return async (c: Context, next: Next) => {
|
||||
return async (c: Context) => {
|
||||
// GraphQL HTTP only supports GET and POST methods.
|
||||
if (c.req.method !== "GET" && c.req.method !== "POST") {
|
||||
return c.json(
|
||||
errorMessages(["GraphQL only supports GET and POST requests."]),
|
||||
405,
|
||||
{
|
||||
Allow: "GET, POST",
|
||||
}
|
||||
);
|
||||
if (c.req.method !== 'GET' && c.req.method !== 'POST') {
|
||||
return c.json(errorMessages(['GraphQL only supports GET and POST requests.']), 405, {
|
||||
Allow: 'GET, POST',
|
||||
})
|
||||
}
|
||||
|
||||
let params: GraphQLParams;
|
||||
let params: GraphQLParams
|
||||
try {
|
||||
params = await getGraphQLParams(c.req);
|
||||
params = await getGraphQLParams(c.req)
|
||||
} catch (e) {
|
||||
if (e instanceof Error) {
|
||||
console.error(`${e.stack || e.message}`);
|
||||
return c.json(errorMessages([e.message], [e]), 400);
|
||||
console.error(`${e.stack || e.message}`)
|
||||
return c.json(errorMessages([e.message], [e]), 400)
|
||||
}
|
||||
throw e;
|
||||
throw e
|
||||
}
|
||||
|
||||
const { query, variables, operationName } = params;
|
||||
const { query, variables, operationName } = params
|
||||
|
||||
if (query == null) {
|
||||
return c.json(errorMessages(["Must provide query string."]), 400);
|
||||
return c.json(errorMessages(['Must provide query string.']), 400)
|
||||
}
|
||||
|
||||
const schemaValidationErrors = validateSchema(schema);
|
||||
const schemaValidationErrors = validateSchema(schema)
|
||||
if (schemaValidationErrors.length > 0) {
|
||||
// Return 500: Internal Server Error if invalid schema.
|
||||
return c.json(
|
||||
errorMessages(
|
||||
["GraphQL schema validation error."],
|
||||
schemaValidationErrors
|
||||
),
|
||||
errorMessages(['GraphQL schema validation error.'], schemaValidationErrors),
|
||||
500
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
let documentAST: DocumentNode;
|
||||
let documentAST: DocumentNode
|
||||
try {
|
||||
documentAST = parse(new Source(query, "GraphQL request"));
|
||||
documentAST = parse(new Source(query, 'GraphQL request'))
|
||||
} catch (syntaxError: unknown) {
|
||||
// Return 400: Bad Request if any syntax errors errors exist.
|
||||
if (syntaxError instanceof Error) {
|
||||
console.error(`${syntaxError.stack || syntaxError.message}`);
|
||||
console.error(`${syntaxError.stack || syntaxError.message}`)
|
||||
const e = new GraphQLError(syntaxError.message, {
|
||||
originalError: syntaxError,
|
||||
});
|
||||
return c.json(errorMessages(["GraphQL syntax error."], [e]), 400);
|
||||
})
|
||||
return c.json(errorMessages(['GraphQL syntax error.'], [e]), 400)
|
||||
}
|
||||
throw syntaxError;
|
||||
throw syntaxError
|
||||
}
|
||||
|
||||
// Validate AST, reporting any errors.
|
||||
const validationErrors = validate(schema, documentAST, [
|
||||
...specifiedRules,
|
||||
...validationRules,
|
||||
]);
|
||||
const validationErrors = validate(schema, documentAST, [...specifiedRules, ...validationRules])
|
||||
|
||||
if (validationErrors.length > 0) {
|
||||
// Return 400: Bad Request if any validation errors exist.
|
||||
return c.json(
|
||||
errorMessages(["GraphQL validation error."], validationErrors),
|
||||
400
|
||||
);
|
||||
return c.json(errorMessages(['GraphQL validation error.'], validationErrors), 400)
|
||||
}
|
||||
|
||||
if (c.req.method === "GET") {
|
||||
if (c.req.method === 'GET') {
|
||||
// Determine if this GET request will perform a non-query.
|
||||
const operationAST = getOperationAST(documentAST, operationName);
|
||||
if (operationAST && operationAST.operation !== "query") {
|
||||
const operationAST = getOperationAST(documentAST, operationName)
|
||||
if (operationAST && operationAST.operation !== 'query') {
|
||||
/*
|
||||
Now , does not support GraphiQL
|
||||
if (showGraphiQL) {
|
||||
|
@ -126,43 +110,38 @@ export const graphqlServer = (options: Options) => {
|
|||
`Can only perform a ${operationAST.operation} operation from a POST request.`,
|
||||
]),
|
||||
405,
|
||||
{ Allow: "POST" }
|
||||
);
|
||||
{ Allow: 'POST' }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
let result: FormattedExecutionResult;
|
||||
let result: FormattedExecutionResult
|
||||
const { rootResolver } = options
|
||||
|
||||
try {
|
||||
result = await execute({
|
||||
schema,
|
||||
document: documentAST,
|
||||
rootValue,
|
||||
rootValue: rootResolver ? await rootResolver(c) : null,
|
||||
variableValues: variables,
|
||||
operationName: operationName,
|
||||
});
|
||||
})
|
||||
} catch (contextError: unknown) {
|
||||
if (contextError instanceof Error) {
|
||||
console.error(`${contextError.stack || contextError.message}`);
|
||||
console.error(`${contextError.stack || contextError.message}`)
|
||||
const e = new GraphQLError(contextError.message, {
|
||||
originalError: contextError,
|
||||
nodes: documentAST,
|
||||
});
|
||||
})
|
||||
// Return 400: Bad Request if any execution context errors exist.
|
||||
return c.json(
|
||||
errorMessages(["GraphQL execution context error."], [e]),
|
||||
400
|
||||
);
|
||||
return c.json(errorMessages(['GraphQL execution context error.'], [e]), 400)
|
||||
}
|
||||
throw contextError;
|
||||
throw contextError
|
||||
}
|
||||
|
||||
if (!result.data) {
|
||||
if (result.errors) {
|
||||
return c.json(
|
||||
errorMessages([result.errors.toString()], result.errors),
|
||||
500
|
||||
);
|
||||
return c.json(errorMessages([result.errors.toString()], result.errors), 500)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -173,70 +152,65 @@ export const graphqlServer = (options: Options) => {
|
|||
*/
|
||||
|
||||
if (pretty) {
|
||||
const payload = JSON.stringify(result, null, pretty ? 2 : 0);
|
||||
const payload = JSON.stringify(result, null, pretty ? 2 : 0)
|
||||
return c.text(payload, 200, {
|
||||
"Content-Type": "application/json",
|
||||
});
|
||||
'Content-Type': 'application/json',
|
||||
})
|
||||
} else {
|
||||
return c.json(result);
|
||||
return c.json(result)
|
||||
}
|
||||
|
||||
await next(); // XXX
|
||||
};
|
||||
};
|
||||
|
||||
export interface GraphQLParams {
|
||||
query: string | null;
|
||||
variables: { readonly [name: string]: unknown } | null;
|
||||
operationName: string | null;
|
||||
raw: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
export const getGraphQLParams = async (
|
||||
request: Request
|
||||
): Promise<GraphQLParams> => {
|
||||
const urlData = new URLSearchParams(request.url.split("?")[1]);
|
||||
const bodyData = await parseBody(request);
|
||||
export interface GraphQLParams {
|
||||
query: string | null
|
||||
variables: { readonly [name: string]: unknown } | null
|
||||
operationName: string | null
|
||||
raw: boolean
|
||||
}
|
||||
|
||||
export const getGraphQLParams = async (request: Request): Promise<GraphQLParams> => {
|
||||
const urlData = new URLSearchParams(request.url.split('?')[1])
|
||||
const bodyData = await parseBody(request)
|
||||
|
||||
// GraphQL Query string.
|
||||
let query = urlData.get("query") ?? (bodyData.query as string | null);
|
||||
let query = urlData.get('query') ?? (bodyData.query as string | null)
|
||||
|
||||
if (typeof query !== "string") {
|
||||
query = null;
|
||||
if (typeof query !== 'string') {
|
||||
query = null
|
||||
}
|
||||
|
||||
// Parse the variables if needed.
|
||||
let variables = (urlData.get("variables") ?? bodyData.variables) as {
|
||||
readonly [name: string]: unknown;
|
||||
} | null;
|
||||
if (typeof variables === "string") {
|
||||
let variables = (urlData.get('variables') ?? bodyData.variables) as {
|
||||
readonly [name: string]: unknown
|
||||
} | null
|
||||
if (typeof variables === 'string') {
|
||||
try {
|
||||
variables = JSON.parse(variables);
|
||||
variables = JSON.parse(variables)
|
||||
} catch {
|
||||
throw Error("Variables are invalid JSON.");
|
||||
throw Error('Variables are invalid JSON.')
|
||||
}
|
||||
} else if (typeof variables !== "object") {
|
||||
variables = null;
|
||||
} else if (typeof variables !== 'object') {
|
||||
variables = null
|
||||
}
|
||||
|
||||
// Name of GraphQL operation to execute.
|
||||
let operationName =
|
||||
urlData.get("operationName") ?? (bodyData.operationName as string | null);
|
||||
if (typeof operationName !== "string") {
|
||||
operationName = null;
|
||||
let operationName = urlData.get('operationName') ?? (bodyData.operationName as string | null)
|
||||
if (typeof operationName !== 'string') {
|
||||
operationName = null
|
||||
}
|
||||
|
||||
const raw = urlData.get("raw") != null || bodyData.raw !== undefined;
|
||||
const raw = urlData.get('raw') != null || bodyData.raw !== undefined
|
||||
|
||||
const params: GraphQLParams = {
|
||||
query: query,
|
||||
variables: variables,
|
||||
operationName: operationName,
|
||||
raw: raw,
|
||||
};
|
||||
}
|
||||
|
||||
return params;
|
||||
};
|
||||
return params
|
||||
}
|
||||
|
||||
export const errorMessages = (
|
||||
messages: string[],
|
||||
|
@ -245,16 +219,16 @@ export const errorMessages = (
|
|||
if (graphqlErrors) {
|
||||
return {
|
||||
errors: graphqlErrors,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
errors: messages.map((message) => {
|
||||
return {
|
||||
message: message,
|
||||
};
|
||||
}
|
||||
}),
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// export const graphiQLResponse = () => {}
|
||||
|
|
|
@ -1,49 +1,48 @@
|
|||
import { buildSchema } from "https://cdn.skypack.dev/graphql@16.5.0?dts";
|
||||
import { Hono } from "https://deno.land/x/hono@v2.0.3/mod.ts";
|
||||
import { errorMessages, graphqlServer } from "../deno_dist/index.ts";
|
||||
import { assertEquals } from "https://deno.land/std@0.149.0/testing/asserts.ts";
|
||||
import { buildSchema } from 'https://cdn.skypack.dev/graphql@16.5.0?dts'
|
||||
import { Hono } from 'https://deno.land/x/hono@v2.6.1/mod.ts'
|
||||
import { graphqlServer } from '../deno_dist/index.ts'
|
||||
import { assertEquals } from 'https://deno.land/std@0.149.0/testing/asserts.ts'
|
||||
|
||||
|
||||
Deno.test("graphql-server", async (t) => {
|
||||
Deno.test('graphql-server', async (t) => {
|
||||
// Construct a schema, using GraphQL schema language
|
||||
const schema = buildSchema(`
|
||||
type Query {
|
||||
hello: String
|
||||
}
|
||||
`);
|
||||
`)
|
||||
|
||||
// The root provides a resolver function for each API endpoint
|
||||
const rootValue = {
|
||||
hello: () => "Hello world!",
|
||||
};
|
||||
hello: () => 'Hello world!',
|
||||
}
|
||||
|
||||
const app = new Hono();
|
||||
const app = new Hono()
|
||||
|
||||
app.use(
|
||||
"/graphql",
|
||||
'/graphql',
|
||||
graphqlServer({
|
||||
schema,
|
||||
rootValue,
|
||||
rootResolver: () => rootValue,
|
||||
})
|
||||
);
|
||||
)
|
||||
|
||||
app.all("*", (c) => {
|
||||
c.header("foo", "bar");
|
||||
return c.text("fallback");
|
||||
});
|
||||
app.all('*', (c) => {
|
||||
c.header('foo', 'bar')
|
||||
return c.text('fallback')
|
||||
})
|
||||
|
||||
const query = "query { hello }";
|
||||
const body = {
|
||||
query: query,
|
||||
};
|
||||
const query = 'query { hello }'
|
||||
const body = {
|
||||
query: query,
|
||||
}
|
||||
|
||||
const res = await app.request("http://localhost/graphql", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
assertEquals(res.status, 200)
|
||||
assertEquals(await res.text(), '{"data":{"hello":"Hello world!"}}')
|
||||
});
|
||||
const res = await app.request('http://localhost/graphql', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(body),
|
||||
})
|
||||
assertEquals(res.status, 200)
|
||||
assertEquals(await res.text(), '{"data":{"hello":"Hello world!"}}')
|
||||
})
|
||||
|
|
22
package.json
22
package.json
|
@ -19,25 +19,27 @@
|
|||
"test:deno": "deno test deno_test",
|
||||
"test:bun": "bun wiptest bun_test/index.test.ts",
|
||||
"test:all": "yarn test && yarn test:deno && yarn test:bun",
|
||||
"denoify": "rimraf deno_dist && denoify && rimraf 'deno_dist/**/*.test.ts'",
|
||||
"denoify": "yarn build && rimraf deno_dist && denoify && rimraf 'deno_dist/**/*.test.ts'",
|
||||
"build": "rimraf dist && tsc --project tsconfig.build.json",
|
||||
"lint": "eslint --ext js,ts src .eslintrc.js",
|
||||
"lint:fix": "eslint --ext js,ts src .eslintrc.js --fix",
|
||||
"release": "npm publish"
|
||||
},
|
||||
"denoify": {
|
||||
"replacer": "dist/replacer.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"hono": "^2.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"graphql": "^16.5.0",
|
||||
"hono": "^2.0.2"
|
||||
"graphql": "^16.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^3.14.0",
|
||||
"@types/jest": "^28.1.4",
|
||||
"denoify": "^0.11.1",
|
||||
"jest": "^28.1.2",
|
||||
"jest-environment-miniflare": "^2.6.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.21.0",
|
||||
"@typescript-eslint/parser": "^5.21.0",
|
||||
"prettier": "^2.7.1",
|
||||
"denoify": "^1.4.5",
|
||||
"eslint": "^8.14.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-define-config": "^1.4.0",
|
||||
|
@ -46,6 +48,10 @@
|
|||
"eslint-plugin-flowtype": "^8.0.3",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"hono": "^2.6.1",
|
||||
"jest": "^28.1.2",
|
||||
"jest-environment-miniflare": "^2.6.0",
|
||||
"prettier": "^2.7.1",
|
||||
"rimraf": "^3.0.2",
|
||||
"ts-jest": "^28.0.5",
|
||||
"typescript": "^4.7.4"
|
||||
|
@ -53,4 +59,4 @@
|
|||
"engines": {
|
||||
"node": ">=11.0.0"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
// @denoify-ignore
|
||||
import { makeThisModuleAnExecutableReplacer, ParsedImportExportStatement } from 'denoify'
|
||||
|
||||
makeThisModuleAnExecutableReplacer(async ({ parsedImportExportStatement }) => {
|
||||
if (parsedImportExportStatement.parsedArgument.nodeModuleName === 'hono') {
|
||||
return ParsedImportExportStatement.stringify({
|
||||
...parsedImportExportStatement,
|
||||
parsedArgument: {
|
||||
type: 'URL',
|
||||
url: 'https://deno.land/x/hono/mod.ts',
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
return undefined
|
||||
})
|
103
yarn.lock
103
yarn.lock
|
@ -947,6 +947,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7"
|
||||
integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==
|
||||
|
||||
"@types/parse-json@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
|
||||
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
|
||||
|
||||
"@types/prettier@^2.1.5":
|
||||
version "2.6.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a"
|
||||
|
@ -1412,6 +1417,17 @@ core-util-is@^1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
|
||||
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
|
||||
|
||||
cosmiconfig@^7.0.1:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
|
||||
integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
|
||||
dependencies:
|
||||
"@types/parse-json" "^4.0.0"
|
||||
import-fresh "^3.2.1"
|
||||
parse-json "^5.0.0"
|
||||
path-type "^4.0.0"
|
||||
yaml "^1.10.0"
|
||||
|
||||
cron-schedule@^3.0.4:
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/cron-schedule/-/cron-schedule-3.0.6.tgz#7d0a3ad9154112fc3720fe43238a43d50e8465e7"
|
||||
|
@ -1470,23 +1486,26 @@ define-properties@^1.1.3, define-properties@^1.1.4:
|
|||
has-property-descriptors "^1.0.0"
|
||||
object-keys "^1.1.1"
|
||||
|
||||
denoify@^0.11.1:
|
||||
version "0.11.3"
|
||||
resolved "https://registry.yarnpkg.com/denoify/-/denoify-0.11.3.tgz#cf4378d9d8067d01d379122a2ef1f5ab7a296d15"
|
||||
integrity sha512-jdpeENTKWa/40CDeUuP+5oSjMoUNk+rF9AWhgjB1Rl5lBTGJw0nbT07/n2bXJ1Mn4piFTMYqXpDVYKap4jXMmg==
|
||||
denoify@^1.4.5:
|
||||
version "1.4.5"
|
||||
resolved "https://registry.yarnpkg.com/denoify/-/denoify-1.4.5.tgz#6c4a0682b051b2d3dc8cca1d7e29611139ca4bd9"
|
||||
integrity sha512-hk75EoJgI8kCizSAQ8wT7Vmopg67k9+rsos/ScYSFmEk/wMSSgi8xlQMkf99dvNDFck07BgnlywIBLpbs8oU5w==
|
||||
dependencies:
|
||||
"@octokit/rest" "^18.0.0"
|
||||
"@types/comment-json" "^1.1.1"
|
||||
commander "^4.1.1"
|
||||
comment-json "^3.0.2"
|
||||
evt "^2.2.1"
|
||||
cosmiconfig "^7.0.1"
|
||||
evt "^2.4.13"
|
||||
get-github-default-branch-name "^0.0.4"
|
||||
gitignore-parser "0.0.2"
|
||||
glob "^7.1.6"
|
||||
node-fetch "^2.6.0"
|
||||
minimal-polyfills "^2.2.2"
|
||||
node-fetch "^2.6.7"
|
||||
parse-dont-validate "^4.0.1"
|
||||
path-depth "^1.0.0"
|
||||
scripting-tools "^0.19.13"
|
||||
tsafe "^0.10.0"
|
||||
scripting-tools "^0.19.14"
|
||||
tsafe "^1.4.1"
|
||||
url-join "^4.0.1"
|
||||
|
||||
deprecation@^2.0.0, deprecation@^2.3.1:
|
||||
|
@ -1838,14 +1857,14 @@ esutils@^2.0.2:
|
|||
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
|
||||
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
|
||||
|
||||
evt@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/evt/-/evt-2.2.1.tgz#a3d6b19e92a5fae2801d98e764294c08b8079d78"
|
||||
integrity sha512-MbzwSxMaZrmg09Q0HeK/W0/xwH3u9jFxb78MAXhhFczjog8gqoaO1IQGCAIOlI7FHW7NzuoCKpjcIyJUva7H3w==
|
||||
evt@^2.4.13:
|
||||
version "2.4.13"
|
||||
resolved "https://registry.yarnpkg.com/evt/-/evt-2.4.13.tgz#5ef873159ce62e099d58801a3e4b8e0f5b648017"
|
||||
integrity sha512-haTVOsmjzk+28zpzvVwan9Zw2rLQF2izgi7BKjAPRzZAfcv+8scL0TpM8MzvGNKFYHiy+Bq3r6FYIIUPl9kt3A==
|
||||
dependencies:
|
||||
minimal-polyfills "^2.2.1"
|
||||
run-exclusive "^2.2.14"
|
||||
tsafe "^0.10.0"
|
||||
minimal-polyfills "^2.2.2"
|
||||
run-exclusive "^2.2.18"
|
||||
tsafe "^1.4.1"
|
||||
|
||||
execa@^5.0.0:
|
||||
version "5.1.1"
|
||||
|
@ -2151,10 +2170,10 @@ has@^1.0.3:
|
|||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
hono@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/hono/-/hono-2.0.2.tgz#5bf8b5be27523245364f8438c9a7151ac4b4d945"
|
||||
integrity sha512-ge85omRQyDfOHe3EAJEG+leRsoFcwUkWeMD5UX5TMmPxd4mRbiu+yBLCUS/Dn9mUF550i0io1OUI9/6Mz2Xqkg==
|
||||
hono@^2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/hono/-/hono-2.6.1.tgz#9e85b69cff97586eb53db329c52961e8eade943b"
|
||||
integrity sha512-DsJSOkwV2M7TkuRsp8VJrD02ISMsT7BXGUWjPBJS3n1fIx7NQEhat395lo7024w2ibrbmo+5FivUG0vqij9YYg==
|
||||
|
||||
html-escaper@^2.0.0:
|
||||
version "2.0.2"
|
||||
|
@ -2959,11 +2978,16 @@ 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==
|
||||
|
||||
minimal-polyfills@^2.2.2:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/minimal-polyfills/-/minimal-polyfills-2.2.2.tgz#6b06a004acce420eb91cf94698f5e6e7f2518378"
|
||||
integrity sha512-eEOUq/LH/DbLWihrxUP050Wi7H/N/I2dQT98Ep6SqOpmIbk4sXOI4wqalve66QoZa+6oljbZWU6I6T4dehQGmw==
|
||||
|
||||
minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
|
@ -3001,7 +3025,7 @@ natural-compare@^1.4.0:
|
|||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
|
||||
|
||||
node-fetch@^2.6.0, node-fetch@^2.6.7:
|
||||
node-fetch@^2.6.7:
|
||||
version "2.6.7"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||
|
@ -3142,7 +3166,12 @@ parent-module@^1.0.0:
|
|||
dependencies:
|
||||
callsites "^3.0.0"
|
||||
|
||||
parse-json@^5.2.0:
|
||||
parse-dont-validate@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/parse-dont-validate/-/parse-dont-validate-4.0.2.tgz#4611b40f1e41814f74e71ce49d278a9893d2f7e3"
|
||||
integrity sha512-e8KvTcCGfIuE7do7m/3DgFbOQ1ddU5y6CioUfD3CLMSHGm0reBAqpl1kfTxT676eaFrWij/k9hhLDJb6XH7J4A==
|
||||
|
||||
parse-json@^5.0.0, parse-json@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
|
||||
integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
|
||||
|
@ -3319,12 +3348,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.18:
|
||||
version "2.2.18"
|
||||
resolved "https://registry.yarnpkg.com/run-exclusive/-/run-exclusive-2.2.18.tgz#ec930edc3a7044750dc827df9372bde8f610f586"
|
||||
integrity sha512-TXr1Gkl1iEAOCCpBTRm/2m0+1KGjORcWpZZ+VGGTe7dYX8E4y8/fMvrHk0zf+kclec2R//tpvdBxgG0bDgaJfw==
|
||||
dependencies:
|
||||
minimal-polyfills "^2.1.5"
|
||||
minimal-polyfills "^2.2.1"
|
||||
|
||||
run-parallel@^1.1.9:
|
||||
version "1.2.0"
|
||||
|
@ -3338,11 +3367,16 @@ safe-buffer@~5.1.1:
|
|||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
|
||||
scripting-tools@^0.19.12, scripting-tools@^0.19.13:
|
||||
scripting-tools@^0.19.12:
|
||||
version "0.19.13"
|
||||
resolved "https://registry.yarnpkg.com/scripting-tools/-/scripting-tools-0.19.13.tgz#836df7d9c2ec99aea91984d1d5b2bd110670afec"
|
||||
integrity sha512-d09H8vzSVa8p4XUTJqHZDbjKDyl5TG3SyPfNPUUkfyOwjwykStmfK8AXyWq7VRWjcgzTpkTiJ9uMk1NytMQY7w==
|
||||
|
||||
scripting-tools@^0.19.14:
|
||||
version "0.19.14"
|
||||
resolved "https://registry.yarnpkg.com/scripting-tools/-/scripting-tools-0.19.14.tgz#d46cdea3dcf042b103b1712103b007e72c4901d5"
|
||||
integrity sha512-KGRES70dEmcaCdpx3R88bLWmfA4mQ/EGikCQy0FGTZwx3y9F5yYkzEhwp02+ZTgpvF25JcNOhDBbOqL6z92kwg==
|
||||
|
||||
selfsigned@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56"
|
||||
|
@ -3610,10 +3644,10 @@ ts-jest@^28.0.5:
|
|||
semver "7.x"
|
||||
yargs-parser "^21.0.1"
|
||||
|
||||
tsafe@^0.10.0:
|
||||
version "0.10.0"
|
||||
resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-0.10.0.tgz#c4fba365a49467ea6167e8c9482ddb94ee51b795"
|
||||
integrity sha512-CFfa1uJKfU0DDRbuB8bf2mfXjkOqiTsrltexzMMLxq5gjd1LttFECNGsO8dYUALJDbShb6+f3CwAppW/wf9BrA==
|
||||
tsafe@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-1.4.1.tgz#59cdad8ac41babf88e56dcd1a683ae2fb145d059"
|
||||
integrity sha512-3IDBalvf6SyvHFS14UiwCWzqdSdo+Q0k2J7DZyJYaHW/iraW9DJpaBKDJpry3yQs3o/t/A+oGaRW3iVt2lKxzA==
|
||||
|
||||
tsconfig-paths@^3.14.1:
|
||||
version "3.14.1"
|
||||
|
@ -3803,6 +3837,11 @@ yallist@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||
|
||||
yaml@^1.10.0:
|
||||
version "1.10.2"
|
||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
||||
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
||||
|
||||
yargs-parser@^21.0.0, yargs-parser@^21.0.1:
|
||||
version "21.0.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35"
|
||||
|
|
Loading…
Reference in New Issue