mirror of
https://github.com/logto-io/logto.git
synced 2024-12-30 20:33:54 -05:00
feat(connector): add http email connector
This commit is contained in:
parent
43d83e8bb3
commit
c0219c33ae
9 changed files with 316 additions and 15 deletions
3
packages/connectors/connector-http-email/README.md
Normal file
3
packages/connectors/connector-http-email/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# HTTP email connector
|
||||
|
||||
TBD
|
10
packages/connectors/connector-http-email/logo.svg
Normal file
10
packages/connectors/connector-http-email/logo.svg
Normal file
|
@ -0,0 +1,10 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M-0.00012207 9.64954C-0.00012207 8.86639 0.381982 8.1325 1.02356 7.68338L11.3117 0.481598C11.7249 0.192363 12.2749 0.192363 12.688 0.481598L22.9762 7.68338C23.6178 8.1325 23.9999 8.86639 23.9999 9.64954V19.2001C23.9999 21.8511 21.8508 24.0001 19.1999 24.0001H4.7999C2.14892 24.0001 -0.00012207 21.8511 -0.00012207 19.2001V9.64954Z" fill="#F7F8F8"/>
|
||||
<path d="M-0.00012207 9.64954C-0.00012207 8.86639 0.381982 8.1325 1.02356 7.68338L11.3117 0.481598C11.7249 0.192363 12.2749 0.192363 12.688 0.481598L22.9762 7.68338C23.6178 8.1325 23.9999 8.86639 23.9999 9.64954V19.2001C23.9999 21.8511 21.8508 24.0001 19.1999 24.0001H4.7999C2.14892 24.0001 -0.00012207 21.8511 -0.00012207 19.2001V9.64954Z" fill="#78767F" fill-opacity="0.02"/>
|
||||
<path d="M-0.00012207 9.64954C-0.00012207 8.86639 0.381982 8.1325 1.02356 7.68338L11.3117 0.481598C11.7249 0.192363 12.2749 0.192363 12.688 0.481598L22.9762 7.68338C23.6178 8.1325 23.9999 8.86639 23.9999 9.64954V19.2001C23.9999 21.8511 21.8508 24.0001 19.1999 24.0001H4.7999C2.14892 24.0001 -0.00012207 21.8511 -0.00012207 19.2001V9.64954Z" fill="#5D34F2" fill-opacity="0.16"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.7998 5.39969C10.7998 5.06831 11.0684 4.79968 11.3998 4.79968H12.5998C12.9311 4.79968 13.1998 5.06831 13.1998 5.39969V8.39972H10.7998V5.39969ZM10.7998 16.1998C10.7998 16.5312 11.0684 16.7998 11.3998 16.7998H12.5998C12.9311 16.7998 13.1998 16.5312 13.1998 16.1998V13.1998H10.7998V16.1998ZM6.59976 11.9998C6.26839 11.9998 5.99976 11.7311 5.99976 11.3998V10.1997C5.99976 9.86837 6.26839 9.59974 6.59976 9.59974H9.59976V11.9998H6.59976ZM17.3998 11.9998C17.7311 11.9998 17.9998 11.7311 17.9998 11.3998V10.1997C17.9998 9.86837 17.7311 9.59974 17.3998 9.59974L14.3998 9.59974V11.9998H17.3998Z" fill="#E67EF7"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.33342 7.83014C7.09911 7.59582 7.09911 7.21592 7.33342 6.9816L8.18195 6.13306C8.41626 5.89875 8.79616 5.89875 9.03048 6.13306L11.1518 8.25441L9.45474 9.95148L7.33342 7.83014ZM14.9692 15.4674C15.2035 15.7017 15.5834 15.7017 15.8177 15.4674L16.6662 14.6188C16.9005 14.3845 16.9005 14.0046 16.6662 13.7703L14.5449 11.6489L12.8479 13.346L14.9692 15.4674ZM9.03003 15.4671C8.79572 15.7014 8.41582 15.7014 8.18151 15.4671L7.33298 14.6185C7.09866 14.3842 7.09866 14.0043 7.33298 13.77L9.4543 11.6487L11.1514 13.3457L9.03003 15.4671ZM16.6663 7.83034C16.9006 7.59602 16.9006 7.21612 16.6663 6.9818L15.8177 6.13327C15.5834 5.89895 15.2035 5.89895 14.9692 6.13327L12.8479 8.25461L14.5449 9.95169L16.6663 7.83034Z" fill="#E67EF7"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.9997 15.5999C14.6507 15.5999 16.7997 13.4508 16.7997 10.7998C16.7997 8.14881 14.6507 5.99976 11.9997 5.99976C9.34874 5.99976 7.19971 8.14881 7.19971 10.7998C7.19971 13.4508 9.34874 15.5999 11.9997 15.5999ZM11.9997 13.1998C13.3252 13.1998 14.3997 12.1253 14.3997 10.7998C14.3997 9.47431 13.3252 8.39978 11.9997 8.39978C10.6742 8.39978 9.59971 9.47431 9.59971 10.7998C9.59971 12.1253 10.6742 13.1998 11.9997 13.1998Z" fill="#F099FE"/>
|
||||
<path d="M-0.000244141 9.50452C-0.000244141 8.53368 1.09259 7.9647 1.88793 8.52144L11.3116 15.1181C11.7248 15.4073 12.2747 15.4073 12.6879 15.1181L22.1116 8.52144C22.9069 7.9647 23.9998 8.53369 23.9998 9.50452V21.5999C23.9998 22.9254 22.9252 23.9999 21.5997 23.9999H2.39977C1.07428 23.9999 -0.000244141 22.9254 -0.000244141 21.5999V9.50452Z" fill="#7958FF"/>
|
||||
<path d="M1.90371 23.9999C0.806869 23.9999 0.284907 22.6498 1.0965 21.9119L11.1926 12.7336C11.6503 12.3175 12.3493 12.3175 12.807 12.7336L22.9031 21.9119C23.7147 22.6498 23.1927 23.9999 22.0959 23.9999H1.90371Z" fill="#957BFF"/>
|
||||
</svg>
|
After Width: | Height: | Size: 3.6 KiB |
68
packages/connectors/connector-http-email/package.json
Normal file
68
packages/connectors/connector-http-email/package.json
Normal file
|
@ -0,0 +1,68 @@
|
|||
{
|
||||
"name": "@logto/connector-http-email",
|
||||
"version": "0.1.0",
|
||||
"description": "Email connector to send email via HTTP call.",
|
||||
"author": "Silverhand Inc. <contact@silverhand.io>",
|
||||
"dependencies": {
|
||||
"@logto/connector-kit": "workspace:^4.0.0",
|
||||
"@silverhand/essentials": "^2.9.1",
|
||||
"got": "^14.0.0",
|
||||
"zod": "^3.23.8"
|
||||
},
|
||||
"main": "./lib/index.js",
|
||||
"module": "./lib/index.js",
|
||||
"exports": "./lib/index.js",
|
||||
"license": "MPL-2.0",
|
||||
"type": "module",
|
||||
"files": [
|
||||
"lib",
|
||||
"docs",
|
||||
"logo.svg",
|
||||
"logo-dark.svg"
|
||||
],
|
||||
"scripts": {
|
||||
"precommit": "lint-staged",
|
||||
"check": "tsc --noEmit",
|
||||
"build": "tsup",
|
||||
"dev": "tsup --watch",
|
||||
"lint": "eslint --ext .ts src",
|
||||
"lint:report": "pnpm lint --format json --output-file report.json",
|
||||
"test": "vitest src",
|
||||
"test:ci": "pnpm run test --silent --coverage",
|
||||
"prepublishOnly": "pnpm build"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.9.0"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": "@silverhand",
|
||||
"settings": {
|
||||
"import/core-modules": [
|
||||
"@silverhand/essentials",
|
||||
"got",
|
||||
"nock",
|
||||
"snakecase-keys",
|
||||
"zod"
|
||||
]
|
||||
}
|
||||
},
|
||||
"prettier": "@silverhand/eslint-config/.prettierrc",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@silverhand/eslint-config": "6.0.1",
|
||||
"@silverhand/ts-config": "6.0.0",
|
||||
"@types/node": "^20.11.20",
|
||||
"@types/supertest": "^6.0.2",
|
||||
"@vitest/coverage-v8": "^2.0.0",
|
||||
"eslint": "^8.56.0",
|
||||
"lint-staged": "^15.0.2",
|
||||
"nock": "^13.3.1",
|
||||
"prettier": "^3.0.0",
|
||||
"supertest": "^7.0.0",
|
||||
"tsup": "^8.1.0",
|
||||
"typescript": "^5.5.3",
|
||||
"vitest": "^2.0.0"
|
||||
}
|
||||
}
|
33
packages/connectors/connector-http-email/src/constant.ts
Normal file
33
packages/connectors/connector-http-email/src/constant.ts
Normal file
|
@ -0,0 +1,33 @@
|
|||
import type { ConnectorMetadata } from '@logto/connector-kit';
|
||||
import { ConnectorConfigFormItemType } from '@logto/connector-kit';
|
||||
|
||||
export const defaultMetadata: ConnectorMetadata = {
|
||||
id: 'http-email-service',
|
||||
target: 'http-mail',
|
||||
platform: null,
|
||||
name: {
|
||||
en: 'HTTP Email',
|
||||
},
|
||||
logo: './logo.svg',
|
||||
logoDark: null,
|
||||
description: {
|
||||
en: 'Send email via HTTP call.',
|
||||
},
|
||||
readme: './README.md',
|
||||
formItems: [
|
||||
{
|
||||
key: 'endpoint',
|
||||
label: 'Endpoint',
|
||||
type: ConnectorConfigFormItemType.Text,
|
||||
required: true,
|
||||
placeholder: '<https://example.com/your-http-endpoint>',
|
||||
},
|
||||
{
|
||||
key: 'authorization',
|
||||
label: 'Authorization Header',
|
||||
type: ConnectorConfigFormItemType.Text,
|
||||
required: false,
|
||||
placeholder: '<Bearer your-token>',
|
||||
},
|
||||
],
|
||||
};
|
47
packages/connectors/connector-http-email/src/index.test.ts
Normal file
47
packages/connectors/connector-http-email/src/index.test.ts
Normal file
|
@ -0,0 +1,47 @@
|
|||
import nock from 'nock';
|
||||
|
||||
import { TemplateType } from '@logto/connector-kit';
|
||||
|
||||
import createConnector from './index.js';
|
||||
import { mockedConfig } from './mock.js';
|
||||
|
||||
const getConfig = vi.fn().mockResolvedValue(mockedConfig);
|
||||
|
||||
describe('HTTP email connector', () => {
|
||||
afterEach(() => {
|
||||
nock.cleanAll();
|
||||
});
|
||||
|
||||
it('should init without throwing errors', async () => {
|
||||
await expect(createConnector({ getConfig })).resolves.not.toThrow();
|
||||
});
|
||||
|
||||
it('should call endpoint with correct parameters', async () => {
|
||||
const url = new URL(mockedConfig.endpoint);
|
||||
const mockPost = nock(url.origin)
|
||||
.post(url.pathname, (body) => {
|
||||
expect(body).toMatchObject({
|
||||
to: 'foo@logto.io',
|
||||
type: TemplateType.SignIn,
|
||||
payload: {
|
||||
code: '123456',
|
||||
},
|
||||
});
|
||||
return true;
|
||||
})
|
||||
.reply(200, {
|
||||
message: 'Email sent successfully',
|
||||
});
|
||||
|
||||
const connector = await createConnector({ getConfig });
|
||||
await connector.sendMessage({
|
||||
to: 'foo@logto.io',
|
||||
type: TemplateType.SignIn,
|
||||
payload: {
|
||||
code: '123456',
|
||||
},
|
||||
});
|
||||
|
||||
expect(mockPost.isDone()).toBe(true);
|
||||
});
|
||||
});
|
70
packages/connectors/connector-http-email/src/index.ts
Normal file
70
packages/connectors/connector-http-email/src/index.ts
Normal file
|
@ -0,0 +1,70 @@
|
|||
import { assert } from '@silverhand/essentials';
|
||||
import { got, HTTPError } from 'got';
|
||||
|
||||
import type {
|
||||
GetConnectorConfig,
|
||||
SendMessageFunction,
|
||||
CreateConnector,
|
||||
EmailConnector,
|
||||
} from '@logto/connector-kit';
|
||||
import {
|
||||
ConnectorError,
|
||||
ConnectorErrorCodes,
|
||||
validateConfig,
|
||||
ConnectorType,
|
||||
} from '@logto/connector-kit';
|
||||
|
||||
import { defaultMetadata } from './constant.js';
|
||||
import { httpMailConfigGuard } from './types.js';
|
||||
|
||||
const sendMessage =
|
||||
(getConfig: GetConnectorConfig): SendMessageFunction =>
|
||||
async (data, inputConfig) => {
|
||||
const { to, type, payload } = data;
|
||||
const config = inputConfig ?? (await getConfig(defaultMetadata.id));
|
||||
validateConfig(config, httpMailConfigGuard);
|
||||
const { endpoint, authorization } = config;
|
||||
|
||||
try {
|
||||
return await got.post(endpoint, {
|
||||
headers: {
|
||||
Authorization: authorization,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
json: {
|
||||
to,
|
||||
type,
|
||||
payload,
|
||||
},
|
||||
});
|
||||
} catch (error: unknown) {
|
||||
if (error instanceof HTTPError) {
|
||||
const {
|
||||
response: { body: rawBody },
|
||||
} = error;
|
||||
|
||||
assert(
|
||||
typeof rawBody === 'string',
|
||||
new ConnectorError(
|
||||
ConnectorErrorCodes.InvalidResponse,
|
||||
`Invalid response raw body type: ${typeof rawBody}`
|
||||
)
|
||||
);
|
||||
|
||||
throw new ConnectorError(ConnectorErrorCodes.General, rawBody);
|
||||
}
|
||||
|
||||
throw new ConnectorError(ConnectorErrorCodes.General, error);
|
||||
}
|
||||
};
|
||||
|
||||
const createHttpMailConnector: CreateConnector<EmailConnector> = async ({ getConfig }) => {
|
||||
return {
|
||||
metadata: defaultMetadata,
|
||||
type: ConnectorType.Email,
|
||||
configGuard: httpMailConfigGuard,
|
||||
sendMessage: sendMessage(getConfig),
|
||||
};
|
||||
};
|
||||
|
||||
export default createHttpMailConnector;
|
6
packages/connectors/connector-http-email/src/mock.ts
Normal file
6
packages/connectors/connector-http-email/src/mock.ts
Normal file
|
@ -0,0 +1,6 @@
|
|||
import type { HttpMailConfig } from './types.js';
|
||||
|
||||
export const mockedConfig: HttpMailConfig = {
|
||||
endpoint: 'https://example.com/your-http-endpoint',
|
||||
authorization: 'SampleToken',
|
||||
};
|
8
packages/connectors/connector-http-email/src/types.ts
Normal file
8
packages/connectors/connector-http-email/src/types.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
import { z } from 'zod';
|
||||
|
||||
export const httpMailConfigGuard = z.object({
|
||||
endpoint: z.string(),
|
||||
authorization: z.string().optional(),
|
||||
});
|
||||
|
||||
export type HttpMailConfig = z.infer<typeof httpMailConfigGuard>;
|
|
@ -1076,6 +1076,61 @@ importers:
|
|||
specifier: ^2.0.0
|
||||
version: 2.0.0(@types/node@20.11.20)(happy-dom@14.12.3)(jsdom@20.0.2)(lightningcss@1.25.1)(sass@1.77.8)
|
||||
|
||||
packages/connectors/connector-http-email:
|
||||
dependencies:
|
||||
'@logto/connector-kit':
|
||||
specifier: workspace:^4.0.0
|
||||
version: link:../../toolkit/connector-kit
|
||||
'@silverhand/essentials':
|
||||
specifier: ^2.9.1
|
||||
version: 2.9.1
|
||||
got:
|
||||
specifier: ^14.0.0
|
||||
version: 14.0.0
|
||||
zod:
|
||||
specifier: ^3.23.8
|
||||
version: 3.23.8
|
||||
devDependencies:
|
||||
'@silverhand/eslint-config':
|
||||
specifier: 6.0.1
|
||||
version: 6.0.1(eslint@8.57.0)(prettier@3.0.0)(typescript@5.5.3)
|
||||
'@silverhand/ts-config':
|
||||
specifier: 6.0.0
|
||||
version: 6.0.0(typescript@5.5.3)
|
||||
'@types/node':
|
||||
specifier: ^20.11.20
|
||||
version: 20.12.7
|
||||
'@types/supertest':
|
||||
specifier: ^6.0.2
|
||||
version: 6.0.2
|
||||
'@vitest/coverage-v8':
|
||||
specifier: ^2.0.0
|
||||
version: 2.0.0(vitest@2.0.0(@types/node@20.12.7)(happy-dom@14.12.3)(jsdom@20.0.2)(lightningcss@1.25.1)(sass@1.77.8))
|
||||
eslint:
|
||||
specifier: ^8.56.0
|
||||
version: 8.57.0
|
||||
lint-staged:
|
||||
specifier: ^15.0.2
|
||||
version: 15.0.2
|
||||
nock:
|
||||
specifier: ^13.3.1
|
||||
version: 13.3.1
|
||||
prettier:
|
||||
specifier: ^3.0.0
|
||||
version: 3.0.0
|
||||
supertest:
|
||||
specifier: ^7.0.0
|
||||
version: 7.0.0
|
||||
tsup:
|
||||
specifier: ^8.1.0
|
||||
version: 8.1.0(@swc/core@1.3.52(@swc/helpers@0.5.1))(postcss@8.4.39)(ts-node@10.9.2(@swc/core@1.3.52(@swc/helpers@0.5.1))(@types/node@20.12.7)(typescript@5.5.3))(typescript@5.5.3)
|
||||
typescript:
|
||||
specifier: ^5.5.3
|
||||
version: 5.5.3
|
||||
vitest:
|
||||
specifier: ^2.0.0
|
||||
version: 2.0.0(@types/node@20.12.7)(happy-dom@14.12.3)(jsdom@20.0.2)(lightningcss@1.25.1)(sass@1.77.8)
|
||||
|
||||
packages/connectors/connector-huggingface:
|
||||
dependencies:
|
||||
'@logto/connector-kit':
|
||||
|
@ -5536,6 +5591,7 @@ packages:
|
|||
'@koa/router@12.0.1':
|
||||
resolution: {integrity: sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==}
|
||||
engines: {node: '>= 12'}
|
||||
deprecated: Use v12.0.2 or higher to fix the vulnerability issue
|
||||
|
||||
'@levischuck/tiny-cbor@0.2.2':
|
||||
resolution: {integrity: sha512-f5CnPw997Y2GQ8FAvtuVVC19FX8mwNNC+1XJcIi16n/LTJifKO6QBgGLgN3YEmqtGMk17SKSuoWES3imJVxAVw==}
|
||||
|
@ -7579,7 +7635,7 @@ packages:
|
|||
engines: {node: '>= 0.6'}
|
||||
|
||||
concat-map@0.0.1:
|
||||
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
|
||||
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
||||
|
||||
confusing-browser-globals@1.0.11:
|
||||
resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==}
|
||||
|
@ -8178,7 +8234,7 @@ packages:
|
|||
resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
|
||||
|
||||
ee-first@1.1.1:
|
||||
resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
|
||||
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
|
||||
|
||||
electron-to-chromium@1.5.0:
|
||||
resolution: {integrity: sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==}
|
||||
|
@ -9199,7 +9255,7 @@ packages:
|
|||
engines: {node: '>=16.17.0'}
|
||||
|
||||
humanize-number@0.0.2:
|
||||
resolution: {integrity: sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=}
|
||||
resolution: {integrity: sha512-un3ZAcNQGI7RzaWGZzQDH47HETM4Wrj6z6E4TId8Yeq9w5ZKUVB1nrT2jwFheTUjEmqcgTjXDc959jum+ai1kQ==}
|
||||
|
||||
husky@9.0.7:
|
||||
resolution: {integrity: sha512-vWdusw+y12DUEeoZqW1kplOFqk3tedGV8qlga8/SF6a3lOiWLqGZZQvfWvY0fQYdfiRi/u1DFNpudTSV9l1aCg==}
|
||||
|
@ -10419,7 +10475,7 @@ packages:
|
|||
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
|
||||
|
||||
media-typer@0.3.0:
|
||||
resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
|
||||
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
||||
meow@10.1.5:
|
||||
|
@ -12415,7 +12471,7 @@ packages:
|
|||
resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
|
||||
|
||||
stubs@3.0.0:
|
||||
resolution: {integrity: sha1-6NK6H6nJBXAwPAMLaQD31fiavls=}
|
||||
resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==}
|
||||
|
||||
style-search@0.1.0:
|
||||
resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
|
||||
|
@ -13018,7 +13074,7 @@ packages:
|
|||
optional: true
|
||||
|
||||
void-elements@3.1.0:
|
||||
resolution: {integrity: sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=}
|
||||
resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
w3c-xmlserializer@3.0.0:
|
||||
|
@ -15695,10 +15751,10 @@ snapshots:
|
|||
eslint-config-prettier: 9.1.0(eslint@8.57.0)
|
||||
eslint-config-xo: 0.44.0(eslint@8.57.0)
|
||||
eslint-config-xo-typescript: 4.0.0(@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3)
|
||||
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint@8.57.0)
|
||||
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
|
||||
eslint-plugin-consistent-default-export-name: 0.0.15
|
||||
eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0)
|
||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
|
||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
|
||||
eslint-plugin-n: 17.2.1(eslint@8.57.0)
|
||||
eslint-plugin-no-use-extend-native: 0.5.0
|
||||
eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.0.0)
|
||||
|
@ -18662,13 +18718,13 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint@8.57.0):
|
||||
eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0):
|
||||
dependencies:
|
||||
debug: 4.3.5
|
||||
enhanced-resolve: 5.16.0
|
||||
eslint: 8.57.0
|
||||
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
|
||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
|
||||
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
|
||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
|
||||
fast-glob: 3.3.2
|
||||
get-tsconfig: 4.7.3
|
||||
is-core-module: 2.13.1
|
||||
|
@ -18679,14 +18735,14 @@ snapshots:
|
|||
- eslint-import-resolver-webpack
|
||||
- supports-color
|
||||
|
||||
eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0):
|
||||
eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0):
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.5.3)
|
||||
eslint: 8.57.0
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint@8.57.0)
|
||||
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
|
@ -18708,7 +18764,7 @@ snapshots:
|
|||
eslint: 8.57.0
|
||||
ignore: 5.3.1
|
||||
|
||||
eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0):
|
||||
eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
|
||||
dependencies:
|
||||
array-includes: 3.1.8
|
||||
array.prototype.findlastindex: 1.2.5
|
||||
|
@ -18718,7 +18774,7 @@ snapshots:
|
|||
doctrine: 2.1.0
|
||||
eslint: 8.57.0
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0)
|
||||
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
|
||||
hasown: 2.0.2
|
||||
is-core-module: 2.13.1
|
||||
is-glob: 4.0.3
|
||||
|
|
Loading…
Reference in a new issue