From 1eeadc61148df503bcd9fc944f8032ecae7438be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= <netroy@users.noreply.github.com> Date: Mon, 24 Apr 2023 09:45:31 +0000 Subject: [PATCH 1/5] refactor(core): Setup decorator based RBAC (no-changelog) (#5787) --- .../UserManagement/UserManagementHelper.ts | 24 ------- .../cli/src/controllers/auth.controller.ts | 6 +- .../cli/src/controllers/ldap.controller.ts | 3 +- packages/cli/src/controllers/me.controller.ts | 3 +- .../src/controllers/nodeTypes.controller.ts | 3 +- .../cli/src/controllers/nodes.controller.ts | 12 +--- .../cli/src/controllers/owner.controller.ts | 3 +- .../controllers/passwordReset.controller.ts | 3 - .../cli/src/controllers/tags.controller.ts | 13 ++-- .../src/controllers/translation.controller.ts | 3 +- .../cli/src/controllers/users.controller.ts | 5 +- packages/cli/src/decorators/Authorized.ts | 16 +++++ packages/cli/src/decorators/constants.ts | 1 + packages/cli/src/decorators/index.ts | 1 + .../cli/src/decorators/registerController.ts | 41 ++++++++++-- packages/cli/src/decorators/types.ts | 4 ++ .../cli/src/eventbus/eventBus.controller.ts | 30 ++++----- packages/cli/src/middlewares/auth.ts | 65 ++++--------------- packages/cli/src/middlewares/isOwner.ts | 12 ---- .../saml/middleware/samlEnabledMiddleware.ts | 17 +---- .../src/sso/saml/routes/saml.controller.ee.ts | 15 +++-- .../cli/test/integration/shared/constants.ts | 2 +- .../cli/test/integration/users.api.test.ts | 14 +++- 23 files changed, 132 insertions(+), 164 deletions(-) create mode 100644 packages/cli/src/decorators/Authorized.ts delete mode 100644 packages/cli/src/middlewares/isOwner.ts diff --git a/packages/cli/src/UserManagement/UserManagementHelper.ts b/packages/cli/src/UserManagement/UserManagementHelper.ts index 3e705efbd648c..88927f4c73acb 100644 --- a/packages/cli/src/UserManagement/UserManagementHelper.ts +++ b/packages/cli/src/UserManagement/UserManagementHelper.ts @@ -196,30 +196,6 @@ export async function getUserById(userId: string): Promise<User> { return user; } -/** - * Check if a URL contains an auth-excluded endpoint. - */ -export function isAuthExcluded(url: string, ignoredEndpoints: Readonly<string[]>): boolean { - return !!ignoredEndpoints - .filter(Boolean) // skip empty paths - .find((ignoredEndpoint) => url.startsWith(`/${ignoredEndpoint}`)); -} - -/** - * Check if the endpoint is `POST /users/:id`. - */ -export function isPostUsersId(req: express.Request, restEndpoint: string): boolean { - return ( - req.method === 'POST' && - new RegExp(`/${restEndpoint}/users/[\\w\\d-]*`).test(req.url) && - !req.url.includes('reinvite') - ); -} - -export function isAuthenticatedRequest(request: express.Request): request is AuthenticatedRequest { - return request.user !== undefined; -} - // ---------------------------------- // hashing // ---------------------------------- diff --git a/packages/cli/src/controllers/auth.controller.ts b/packages/cli/src/controllers/auth.controller.ts index 068522ce8700d..7aeb7e1cfe0cb 100644 --- a/packages/cli/src/controllers/auth.controller.ts +++ b/packages/cli/src/controllers/auth.controller.ts @@ -1,5 +1,5 @@ import validator from 'validator'; -import { Get, Post, RestController } from '@/decorators'; +import { Authorized, Get, Post, RestController } from '@/decorators'; import { AuthError, BadRequestError, InternalServerError } from '@/ResponseHelper'; import { sanitizeUser, withFeatureFlags } from '@/UserManagement/UserManagementHelper'; import { issueCookie, resolveJwt } from '@/auth/jwt'; @@ -58,7 +58,6 @@ export class AuthController { /** * Log in a user. - * Authless endpoint. */ @Post('/login') async login(req: LoginRequest, res: Response): Promise<PublicUser | undefined> { @@ -135,7 +134,6 @@ export class AuthController { /** * Validate invite token to enable invitee to set up their account. - * Authless endpoint. */ @Get('/resolve-signup-token') async resolveSignupToken(req: UserRequest.ResolveSignUp) { @@ -196,8 +194,8 @@ export class AuthController { /** * Log out a user. - * Authless endpoint. */ + @Authorized() @Post('/logout') logout(req: Request, res: Response) { res.clearCookie(AUTH_COOKIE_NAME); diff --git a/packages/cli/src/controllers/ldap.controller.ts b/packages/cli/src/controllers/ldap.controller.ts index 619a70db286b2..b354ef660021c 100644 --- a/packages/cli/src/controllers/ldap.controller.ts +++ b/packages/cli/src/controllers/ldap.controller.ts @@ -1,5 +1,5 @@ import pick from 'lodash.pick'; -import { Get, Post, Put, RestController } from '@/decorators'; +import { Authorized, Get, Post, Put, RestController } from '@/decorators'; import { getLdapConfig, getLdapSynchronizations, updateLdapConfig } from '@/Ldap/helpers'; import { LdapService } from '@/Ldap/LdapService.ee'; import { LdapSync } from '@/Ldap/LdapSync.ee'; @@ -8,6 +8,7 @@ import { BadRequestError } from '@/ResponseHelper'; import { NON_SENSIBLE_LDAP_CONFIG_PROPERTIES } from '@/Ldap/constants'; import { InternalHooks } from '@/InternalHooks'; +@Authorized(['global', 'owner']) @RestController('/ldap') export class LdapController { constructor( diff --git a/packages/cli/src/controllers/me.controller.ts b/packages/cli/src/controllers/me.controller.ts index 3cf1ba409b262..0ff4cd78f0a5c 100644 --- a/packages/cli/src/controllers/me.controller.ts +++ b/packages/cli/src/controllers/me.controller.ts @@ -1,6 +1,6 @@ import validator from 'validator'; import { plainToInstance } from 'class-transformer'; -import { Delete, Get, Patch, Post, RestController } from '@/decorators'; +import { Authorized, Delete, Get, Patch, Post, RestController } from '@/decorators'; import { compareHash, hashPassword, @@ -30,6 +30,7 @@ import { randomBytes } from 'crypto'; import { isSamlLicensedAndEnabled } from '../sso/saml/samlHelpers'; import { UserService } from '@/user/user.service'; +@Authorized() @RestController('/me') export class MeController { private readonly logger: ILogger; diff --git a/packages/cli/src/controllers/nodeTypes.controller.ts b/packages/cli/src/controllers/nodeTypes.controller.ts index 5f8af5a909f22..63002c7c122a9 100644 --- a/packages/cli/src/controllers/nodeTypes.controller.ts +++ b/packages/cli/src/controllers/nodeTypes.controller.ts @@ -2,11 +2,12 @@ import { readFile } from 'fs/promises'; import get from 'lodash.get'; import { Request } from 'express'; import type { INodeTypeDescription, INodeTypeNameVersion } from 'n8n-workflow'; -import { Post, RestController } from '@/decorators'; +import { Authorized, Post, RestController } from '@/decorators'; import { getNodeTranslationPath } from '@/TranslationHelpers'; import type { Config } from '@/config'; import type { NodeTypes } from '@/NodeTypes'; +@Authorized() @RestController('/node-types') export class NodeTypesController { private readonly config: Config; diff --git a/packages/cli/src/controllers/nodes.controller.ts b/packages/cli/src/controllers/nodes.controller.ts index e82bd3e5895b8..9d872c8693d56 100644 --- a/packages/cli/src/controllers/nodes.controller.ts +++ b/packages/cli/src/controllers/nodes.controller.ts @@ -4,7 +4,7 @@ import { STARTER_TEMPLATE_NAME, UNKNOWN_FAILURE_REASON, } from '@/constants'; -import { Delete, Get, Middleware, Patch, Post, RestController } from '@/decorators'; +import { Authorized, Delete, Get, Middleware, Patch, Post, RestController } from '@/decorators'; import { NodeRequest } from '@/requests'; import { BadRequestError, InternalServerError } from '@/ResponseHelper'; import { @@ -30,10 +30,10 @@ import { LoadNodesAndCredentials } from '@/LoadNodesAndCredentials'; import { InternalHooks } from '@/InternalHooks'; import { Push } from '@/push'; import { Config } from '@/config'; -import { isAuthenticatedRequest } from '@/UserManagement/UserManagementHelper'; const { PACKAGE_NOT_INSTALLED, PACKAGE_NAME_NOT_PROVIDED } = RESPONSE_ERROR_MESSAGES; +@Authorized(['global', 'owner']) @RestController('/nodes') export class NodesController { constructor( @@ -43,14 +43,6 @@ export class NodesController { private internalHooks: InternalHooks, ) {} - // TODO: move this into a new decorator `@Authorized` - @Middleware() - checkIfOwner(req: Request, res: Response, next: NextFunction) { - if (!isAuthenticatedRequest(req) || req.user.globalRole.name !== 'owner') - res.status(403).json({ status: 'error', message: 'Unauthorized' }); - else next(); - } - // TODO: move this into a new decorator `@IfConfig('executions.mode', 'queue')` @Middleware() checkIfCommunityNodesEnabled(req: Request, res: Response, next: NextFunction) { diff --git a/packages/cli/src/controllers/owner.controller.ts b/packages/cli/src/controllers/owner.controller.ts index d83a1fecee17d..ae8745a9afab7 100644 --- a/packages/cli/src/controllers/owner.controller.ts +++ b/packages/cli/src/controllers/owner.controller.ts @@ -1,6 +1,6 @@ import validator from 'validator'; import { validateEntity } from '@/GenericHelpers'; -import { Get, Post, RestController } from '@/decorators'; +import { Authorized, Get, Post, RestController } from '@/decorators'; import { BadRequestError } from '@/ResponseHelper'; import { hashPassword, @@ -20,6 +20,7 @@ import type { WorkflowRepository, } from '@db/repositories'; +@Authorized(['global', 'owner']) @RestController('/owner') export class OwnerController { private readonly config: Config; diff --git a/packages/cli/src/controllers/passwordReset.controller.ts b/packages/cli/src/controllers/passwordReset.controller.ts index d78424f6d7303..64e46582066bd 100644 --- a/packages/cli/src/controllers/passwordReset.controller.ts +++ b/packages/cli/src/controllers/passwordReset.controller.ts @@ -65,7 +65,6 @@ export class PasswordResetController { /** * Send a password reset email. - * Authless endpoint. */ @Post('/forgot-password') async forgotPassword(req: PasswordResetRequest.Email) { @@ -171,7 +170,6 @@ export class PasswordResetController { /** * Verify password reset token and user ID. - * Authless endpoint. */ @Get('/resolve-password-token') async resolvePasswordToken(req: PasswordResetRequest.Credentials) { @@ -213,7 +211,6 @@ export class PasswordResetController { /** * Verify password reset token and user ID and update password. - * Authless endpoint. */ @Post('/change-password') async changePassword(req: PasswordResetRequest.NewPassword, res: Response) { diff --git a/packages/cli/src/controllers/tags.controller.ts b/packages/cli/src/controllers/tags.controller.ts index d8ccb4a28ca9c..7b68d95aafb06 100644 --- a/packages/cli/src/controllers/tags.controller.ts +++ b/packages/cli/src/controllers/tags.controller.ts @@ -1,13 +1,14 @@ import { Request, Response, NextFunction } from 'express'; import type { Config } from '@/config'; -import { Delete, Get, Middleware, Patch, Post, RestController } from '@/decorators'; +import { Authorized, Delete, Get, Middleware, Patch, Post, RestController } from '@/decorators'; import type { IDatabaseCollections, IExternalHooksClass, ITagWithCountDb } from '@/Interfaces'; import { TagEntity } from '@db/entities/TagEntity'; import type { TagRepository } from '@db/repositories'; import { validateEntity } from '@/GenericHelpers'; -import { BadRequestError, UnauthorizedError } from '@/ResponseHelper'; +import { BadRequestError } from '@/ResponseHelper'; import { TagsRequest } from '@/requests'; +@Authorized() @RestController('/tags') export class TagsController { private config: Config; @@ -91,15 +92,9 @@ export class TagsController { return tag; } + @Authorized(['global', 'owner']) @Delete('/:id(\\d+)') async deleteTag(req: TagsRequest.Delete) { - const isInstanceOwnerSetUp = this.config.getEnv('userManagement.isInstanceOwnerSetUp'); - if (isInstanceOwnerSetUp && req.user.globalRole.name !== 'owner') { - throw new UnauthorizedError( - 'You are not allowed to perform this action', - 'Only owners can remove tags', - ); - } const { id } = req.params; await this.externalHooks.run('tag.beforeDelete', [id]); diff --git a/packages/cli/src/controllers/translation.controller.ts b/packages/cli/src/controllers/translation.controller.ts index 8240a376a7e64..6d36d650d2e2c 100644 --- a/packages/cli/src/controllers/translation.controller.ts +++ b/packages/cli/src/controllers/translation.controller.ts @@ -2,7 +2,7 @@ import type { Request } from 'express'; import { ICredentialTypes } from 'n8n-workflow'; import { join } from 'path'; import { access } from 'fs/promises'; -import { Get, RestController } from '@/decorators'; +import { Authorized, Get, RestController } from '@/decorators'; import { BadRequestError, InternalServerError } from '@/ResponseHelper'; import { Config } from '@/config'; import { NODES_BASE_DIR } from '@/constants'; @@ -14,6 +14,7 @@ export declare namespace TranslationRequest { export type Credential = Request<{}, {}, {}, { credentialType: string }>; } +@Authorized() @RestController('/') export class TranslationController { constructor(private config: Config, private credentialTypes: ICredentialTypes) {} diff --git a/packages/cli/src/controllers/users.controller.ts b/packages/cli/src/controllers/users.controller.ts index fc9faf06fd9e3..c2ae07d344d1d 100644 --- a/packages/cli/src/controllers/users.controller.ts +++ b/packages/cli/src/controllers/users.controller.ts @@ -5,7 +5,7 @@ import { ErrorReporterProxy as ErrorReporter } from 'n8n-workflow'; import { User } from '@db/entities/User'; import { SharedCredentials } from '@db/entities/SharedCredentials'; import { SharedWorkflow } from '@db/entities/SharedWorkflow'; -import { Delete, Get, Post, RestController } from '@/decorators'; +import { Authorized, NoAuthRequired, Delete, Get, Post, RestController } from '@/decorators'; import { addInviteLinkToUser, generateUserInviteUrl, @@ -41,6 +41,7 @@ import type { UserRepository, } from '@db/repositories'; +@Authorized(['global', 'owner']) @RestController('/users') export class UsersController { private config: Config; @@ -282,6 +283,7 @@ export class UsersController { /** * Fill out user shell with first name, last name, and password. */ + @NoAuthRequired() @Post('/:id') async updateUser(req: UserRequest.Update, res: Response) { const { id: inviteeId } = req.params; @@ -343,6 +345,7 @@ export class UsersController { return withFeatureFlags(this.postHog, sanitizeUser(updatedUser)); } + @Authorized('any') @Get('/') async listUsers(req: UserRequest.List) { const users = await this.userRepository.find({ relations: ['globalRole', 'authIdentities'] }); diff --git a/packages/cli/src/decorators/Authorized.ts b/packages/cli/src/decorators/Authorized.ts new file mode 100644 index 0000000000000..880938ae5ce72 --- /dev/null +++ b/packages/cli/src/decorators/Authorized.ts @@ -0,0 +1,16 @@ +/* eslint-disable @typescript-eslint/ban-types */ +/* eslint-disable @typescript-eslint/naming-convention */ +import { CONTROLLER_AUTH_ROLES } from './constants'; +import type { AuthRoleMetadata } from './types'; + +export function Authorized(authRole: AuthRoleMetadata[string] = 'any'): Function { + return function (target: Function | Object, handlerName?: string) { + const controllerClass = handlerName ? target.constructor : target; + const authRoles = (Reflect.getMetadata(CONTROLLER_AUTH_ROLES, controllerClass) ?? + {}) as AuthRoleMetadata; + authRoles[handlerName ?? '*'] = authRole; + Reflect.defineMetadata(CONTROLLER_AUTH_ROLES, authRoles, controllerClass); + }; +} + +export const NoAuthRequired = () => Authorized('none'); diff --git a/packages/cli/src/decorators/constants.ts b/packages/cli/src/decorators/constants.ts index 6bff0e4a6cb90..5a5efc938db6c 100644 --- a/packages/cli/src/decorators/constants.ts +++ b/packages/cli/src/decorators/constants.ts @@ -1,3 +1,4 @@ export const CONTROLLER_ROUTES = 'CONTROLLER_ROUTES'; export const CONTROLLER_BASE_PATH = 'CONTROLLER_BASE_PATH'; export const CONTROLLER_MIDDLEWARES = 'CONTROLLER_MIDDLEWARES'; +export const CONTROLLER_AUTH_ROLES = 'CONTROLLER_AUTH_ROLES'; diff --git a/packages/cli/src/decorators/index.ts b/packages/cli/src/decorators/index.ts index 71b82b5b69c30..0e683d410cbc9 100644 --- a/packages/cli/src/decorators/index.ts +++ b/packages/cli/src/decorators/index.ts @@ -1,3 +1,4 @@ +export { Authorized, NoAuthRequired } from './Authorized'; export { RestController } from './RestController'; export { Get, Post, Put, Patch, Delete } from './Route'; export { Middleware } from './Middleware'; diff --git a/packages/cli/src/decorators/registerController.ts b/packages/cli/src/decorators/registerController.ts index e20293ae21c71..fe792040b6067 100644 --- a/packages/cli/src/decorators/registerController.ts +++ b/packages/cli/src/decorators/registerController.ts @@ -1,10 +1,36 @@ /* eslint-disable @typescript-eslint/naming-convention */ import { Router } from 'express'; +import type { Application, Request, Response, RequestHandler } from 'express'; import type { Config } from '@/config'; -import { CONTROLLER_BASE_PATH, CONTROLLER_MIDDLEWARES, CONTROLLER_ROUTES } from './constants'; +import type { AuthenticatedRequest } from '@/requests'; import { send } from '@/ResponseHelper'; // TODO: move `ResponseHelper.send` to this file -import type { Application, Request, Response, RequestHandler } from 'express'; -import type { Controller, MiddlewareMetadata, RouteMetadata } from './types'; +import { + CONTROLLER_AUTH_ROLES, + CONTROLLER_BASE_PATH, + CONTROLLER_MIDDLEWARES, + CONTROLLER_ROUTES, +} from './constants'; +import type { + AuthRole, + AuthRoleMetadata, + Controller, + MiddlewareMetadata, + RouteMetadata, +} from './types'; + +export const createAuthMiddleware = + (authRole: AuthRole): RequestHandler => + ({ user }: AuthenticatedRequest, res, next) => { + if (authRole === 'none') return next(); + + if (!user) return res.status(401).json({ status: 'error', message: 'Unauthorized' }); + + const { globalRole } = user; + if (authRole === 'any' || (globalRole.scope === authRole[0] && globalRole.name === authRole[1])) + return next(); + + res.status(403).json({ status: 'error', message: 'Unauthorized' }); + }; export const registerController = (app: Application, config: Config, controller: object) => { const controllerClass = controller.constructor; @@ -14,11 +40,16 @@ export const registerController = (app: Application, config: Config, controller: if (!controllerBasePath) throw new Error(`${controllerClass.name} is missing the RestController decorator`); + const authRoles = Reflect.getMetadata(CONTROLLER_AUTH_ROLES, controllerClass) as + | AuthRoleMetadata + | undefined; const routes = Reflect.getMetadata(CONTROLLER_ROUTES, controllerClass) as RouteMetadata[]; if (routes.length > 0) { const router = Router({ mergeParams: true }); const restBasePath = config.getEnv('endpoints.rest'); - const prefix = `/${[restBasePath, controllerBasePath].join('/')}`.replace(/\/+/g, '/'); + const prefix = `/${[restBasePath, controllerBasePath].join('/')}` + .replace(/\/+/g, '/') + .replace(/\/$/, ''); const controllerMiddlewares = ( (Reflect.getMetadata(CONTROLLER_MIDDLEWARES, controllerClass) ?? []) as MiddlewareMetadata[] @@ -28,8 +59,10 @@ export const registerController = (app: Application, config: Config, controller: ); routes.forEach(({ method, path, middlewares: routeMiddlewares, handlerName }) => { + const authRole = authRoles && (authRoles[handlerName] ?? authRoles['*']); router[method]( path, + ...(authRole ? [createAuthMiddleware(authRole)] : []), ...controllerMiddlewares, ...routeMiddlewares, send(async (req: Request, res: Response) => diff --git a/packages/cli/src/decorators/types.ts b/packages/cli/src/decorators/types.ts index 250abf0d27c95..d118e6e6c9cbd 100644 --- a/packages/cli/src/decorators/types.ts +++ b/packages/cli/src/decorators/types.ts @@ -1,7 +1,11 @@ import type { Request, Response, RequestHandler } from 'express'; +import type { RoleNames, RoleScopes } from '@db/entities/Role'; export type Method = 'get' | 'post' | 'put' | 'patch' | 'delete'; +export type AuthRole = [RoleScopes, RoleNames] | 'any' | 'none'; +export type AuthRoleMetadata = Record<string, AuthRole>; + export interface MiddlewareMetadata { handlerName: string; } diff --git a/packages/cli/src/eventbus/eventBus.controller.ts b/packages/cli/src/eventbus/eventBus.controller.ts index bc18472d4c910..7c9ce21ccc5ee 100644 --- a/packages/cli/src/eventbus/eventBus.controller.ts +++ b/packages/cli/src/eventbus/eventBus.controller.ts @@ -28,15 +28,13 @@ import type { IRunExecutionData, } from 'n8n-workflow'; import { MessageEventBusDestinationTypeNames, EventMessageTypeNames } from 'n8n-workflow'; -import type { User } from '@db/entities/User'; -import * as ResponseHelper from '@/ResponseHelper'; import type { EventMessageNodeOptions } from './EventMessageClasses/EventMessageNode'; import { EventMessageNode } from './EventMessageClasses/EventMessageNode'; import { recoverExecutionDataFromEventLogMessages } from './MessageEventBus/recoverEvents'; -import { RestController, Get, Post, Delete } from '@/decorators'; +import { RestController, Get, Post, Delete, Authorized } from '@/decorators'; import type { MessageEventBusDestination } from './MessageEventBusDestination/MessageEventBusDestination.ee'; -import { isOwnerMiddleware } from '../middlewares/isOwner'; import type { DeleteResult } from 'typeorm'; +import { AuthenticatedRequest } from '@/requests'; // ---------------------------------------- // TypeGuards @@ -74,12 +72,14 @@ const isMessageEventBusDestinationOptions = ( // Controller // ---------------------------------------- +@Authorized() @RestController('/eventbus') export class EventBusController { // ---------------------------------------- // Events // ---------------------------------------- - @Get('/event', { middlewares: [isOwnerMiddleware] }) + @Authorized(['global', 'owner']) + @Get('/event') async getEvents( req: express.Request, ): Promise<EventMessageTypes[] | Record<string, EventMessageTypes[]>> { @@ -132,7 +132,8 @@ export class EventBusController { return; } - @Post('/event', { middlewares: [isOwnerMiddleware] }) + @Authorized(['global', 'owner']) + @Post('/event') async postEvent(req: express.Request): Promise<EventMessageTypes | undefined> { let msg: EventMessageTypes | undefined; if (isEventMessageOptions(req.body)) { @@ -172,12 +173,9 @@ export class EventBusController { } } - @Post('/destination', { middlewares: [isOwnerMiddleware] }) - async postDestination(req: express.Request): Promise<any> { - if (!req.user || (req.user as User).globalRole.name !== 'owner') { - throw new ResponseHelper.UnauthorizedError('Invalid request'); - } - + @Authorized(['global', 'owner']) + @Post('/destination') + async postDestination(req: AuthenticatedRequest): Promise<any> { let result: MessageEventBusDestination | undefined; if (isMessageEventBusDestinationOptions(req.body)) { switch (req.body.__type) { @@ -228,11 +226,9 @@ export class EventBusController { return false; } - @Delete('/destination', { middlewares: [isOwnerMiddleware] }) - async deleteDestination(req: express.Request): Promise<DeleteResult | undefined> { - if (!req.user || (req.user as User).globalRole.name !== 'owner') { - throw new ResponseHelper.UnauthorizedError('Invalid request'); - } + @Authorized(['global', 'owner']) + @Delete('/destination') + async deleteDestination(req: AuthenticatedRequest): Promise<DeleteResult | undefined> { if (isWithIdString(req.query)) { return eventBus.removeDestination(req.query.id); } else { diff --git a/packages/cli/src/middlewares/auth.ts b/packages/cli/src/middlewares/auth.ts index bd0f580c8a73c..231b48beddf91 100644 --- a/packages/cli/src/middlewares/auth.ts +++ b/packages/cli/src/middlewares/auth.ts @@ -10,13 +10,7 @@ import type { AuthenticatedRequest } from '@/requests'; import config from '@/config'; import { AUTH_COOKIE_NAME, EDITOR_UI_DIST_DIR } from '@/constants'; import { issueCookie, resolveJwtContent } from '@/auth/jwt'; -import { - isAuthenticatedRequest, - isAuthExcluded, - isPostUsersId, - isUserManagementEnabled, -} from '@/UserManagement/UserManagementHelper'; -import { SamlUrls } from '@/sso/saml/constants'; +import { isUserManagementEnabled } from '@/UserManagement/UserManagementHelper'; import type { UserRepository } from '@db/repositories'; const jwtFromRequest = (req: Request) => { @@ -66,6 +60,17 @@ const staticAssets = globSync(['**/*.html', '**/*.svg', '**/*.png', '**/*.ico'], cwd: EDITOR_UI_DIST_DIR, }); +// TODO: delete this +const isPostUsersId = (req: Request, restEndpoint: string): boolean => + req.method === 'POST' && + new RegExp(`/${restEndpoint}/users/[\\w\\d-]*`).test(req.url) && + !req.url.includes('reinvite'); + +const isAuthExcluded = (url: string, ignoredEndpoints: Readonly<string[]>): boolean => + !!ignoredEndpoints + .filter(Boolean) // skip empty paths + .find((ignoredEndpoint) => url.startsWith(`/${ignoredEndpoint}`)); + /** * This sets up the auth middlewares in the correct order */ @@ -85,20 +90,16 @@ export const setupAuthMiddlewares = ( // skip authentication for preflight requests req.method === 'OPTIONS' || staticAssets.includes(req.url.slice(1)) || + isAuthExcluded(req.url, ignoredEndpoints) || req.url.startsWith(`/${restEndpoint}/settings`) || req.url.startsWith(`/${restEndpoint}/login`) || - req.url.startsWith(`/${restEndpoint}/logout`) || req.url.startsWith(`/${restEndpoint}/resolve-signup-token`) || isPostUsersId(req, restEndpoint) || req.url.startsWith(`/${restEndpoint}/forgot-password`) || req.url.startsWith(`/${restEndpoint}/resolve-password-token`) || req.url.startsWith(`/${restEndpoint}/change-password`) || req.url.startsWith(`/${restEndpoint}/oauth2-credential/callback`) || - req.url.startsWith(`/${restEndpoint}/oauth1-credential/callback`) || - req.url.startsWith(`/${restEndpoint}/sso/saml${SamlUrls.metadata}`) || - req.url.startsWith(`/${restEndpoint}/sso/saml${SamlUrls.initSSO}`) || - req.url.startsWith(`/${restEndpoint}/sso/saml${SamlUrls.acs}`) || - isAuthExcluded(req.url, ignoredEndpoints) + req.url.startsWith(`/${restEndpoint}/oauth1-credential/callback`) ) { return next(); } @@ -115,43 +116,5 @@ export const setupAuthMiddlewares = ( return passportMiddleware(req, res, next); }); - app.use((req: Request | AuthenticatedRequest, res: Response, next: NextFunction) => { - // req.user is empty for public routes, so just proceed - // owner can do anything, so proceed as well - if (!req.user || (isAuthenticatedRequest(req) && req.user.globalRole.name === 'owner')) { - next(); - return; - } - // Not owner and user exists. We now protect restricted urls. - const postRestrictedUrls = [ - `/${restEndpoint}/users`, - `/${restEndpoint}/owner`, - `/${restEndpoint}/ldap/sync`, - `/${restEndpoint}/ldap/test-connection`, - ]; - const getRestrictedUrls = [`/${restEndpoint}/ldap/sync`, `/${restEndpoint}/ldap/config`]; - const putRestrictedUrls = [`/${restEndpoint}/ldap/config`]; - const trimmedUrl = req.url.endsWith('/') ? req.url.slice(0, -1) : req.url; - if ( - (req.method === 'POST' && postRestrictedUrls.includes(trimmedUrl)) || - (req.method === 'GET' && getRestrictedUrls.includes(trimmedUrl)) || - (req.method === 'PUT' && putRestrictedUrls.includes(trimmedUrl)) || - (req.method === 'DELETE' && - new RegExp(`/${restEndpoint}/users/[^/]+`, 'gm').test(trimmedUrl)) || - (req.method === 'POST' && - new RegExp(`/${restEndpoint}/users/[^/]+/reinvite`, 'gm').test(trimmedUrl)) || - new RegExp(`/${restEndpoint}/owner/[^/]+`, 'gm').test(trimmedUrl) - ) { - Logger.verbose('User attempted to access endpoint without authorization', { - endpoint: `${req.method} ${trimmedUrl}`, - userId: isAuthenticatedRequest(req) ? req.user.id : 'unknown', - }); - res.status(403).json({ status: 'error', message: 'Unauthorized' }); - return; - } - - next(); - }); - app.use(refreshExpiringCookie); }; diff --git a/packages/cli/src/middlewares/isOwner.ts b/packages/cli/src/middlewares/isOwner.ts deleted file mode 100644 index d3e3c70a0fb46..0000000000000 --- a/packages/cli/src/middlewares/isOwner.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { RequestHandler } from 'express'; -import { LoggerProxy } from 'n8n-workflow'; -import type { AuthenticatedRequest } from '@/requests'; - -export const isOwnerMiddleware: RequestHandler = (req: AuthenticatedRequest, res, next) => { - if (req.user.globalRole.name === 'owner') { - next(); - } else { - LoggerProxy.debug('Request failed because user is not owner'); - res.status(401).send('Unauthorized'); - } -}; diff --git a/packages/cli/src/sso/saml/middleware/samlEnabledMiddleware.ts b/packages/cli/src/sso/saml/middleware/samlEnabledMiddleware.ts index 6e4600b895f06..69015838d7f69 100644 --- a/packages/cli/src/sso/saml/middleware/samlEnabledMiddleware.ts +++ b/packages/cli/src/sso/saml/middleware/samlEnabledMiddleware.ts @@ -1,24 +1,11 @@ import type { RequestHandler } from 'express'; -import type { AuthenticatedRequest } from '@/requests'; import { isSamlLicensed, isSamlLicensedAndEnabled } from '../samlHelpers'; -export const samlLicensedOwnerMiddleware: RequestHandler = ( - req: AuthenticatedRequest, - res, - next, -) => { - if (isSamlLicensed() && req.user?.globalRole.name === 'owner') { - next(); - } else { - res.status(401).json({ status: 'error', message: 'Unauthorized' }); - } -}; - export const samlLicensedAndEnabledMiddleware: RequestHandler = (req, res, next) => { if (isSamlLicensedAndEnabled()) { next(); } else { - res.status(401).json({ status: 'error', message: 'Unauthorized' }); + res.status(403).json({ status: 'error', message: 'Unauthorized' }); } }; @@ -26,6 +13,6 @@ export const samlLicensedMiddleware: RequestHandler = (req, res, next) => { if (isSamlLicensed()) { next(); } else { - res.status(401).json({ status: 'error', message: 'Unauthorized' }); + res.status(403).json({ status: 'error', message: 'Unauthorized' }); } }; diff --git a/packages/cli/src/sso/saml/routes/saml.controller.ee.ts b/packages/cli/src/sso/saml/routes/saml.controller.ee.ts index 86e7b75cfa8c4..232020b5945f9 100644 --- a/packages/cli/src/sso/saml/routes/saml.controller.ee.ts +++ b/packages/cli/src/sso/saml/routes/saml.controller.ee.ts @@ -1,10 +1,9 @@ import express from 'express'; -import { Get, Post, RestController } from '@/decorators'; +import { Authorized, Get, Post, RestController } from '@/decorators'; import { SamlUrls } from '../constants'; import { samlLicensedAndEnabledMiddleware, samlLicensedMiddleware, - samlLicensedOwnerMiddleware, } from '../middleware/samlEnabledMiddleware'; import { SamlService } from '../saml.service.ee'; import { SamlConfiguration } from '../types/requests'; @@ -39,7 +38,8 @@ export class SamlController { * GET /sso/saml/config * Return SAML config */ - @Get(SamlUrls.config, { middlewares: [samlLicensedOwnerMiddleware] }) + @Authorized(['global', 'owner']) + @Get(SamlUrls.config, { middlewares: [samlLicensedMiddleware] }) async configGet() { const prefs = this.samlService.samlPreferences; return { @@ -53,7 +53,8 @@ export class SamlController { * POST /sso/saml/config * Set SAML config */ - @Post(SamlUrls.config, { middlewares: [samlLicensedOwnerMiddleware] }) + @Authorized(['global', 'owner']) + @Post(SamlUrls.config, { middlewares: [samlLicensedMiddleware] }) async configPost(req: SamlConfiguration.Update) { const validationResult = await validate(req.body); if (validationResult.length === 0) { @@ -71,7 +72,8 @@ export class SamlController { * POST /sso/saml/config/toggle * Set SAML config */ - @Post(SamlUrls.configToggleEnabled, { middlewares: [samlLicensedOwnerMiddleware] }) + @Authorized(['global', 'owner']) + @Post(SamlUrls.configToggleEnabled, { middlewares: [samlLicensedMiddleware] }) async toggleEnabledPost(req: SamlConfiguration.Toggle, res: express.Response) { if (req.body.loginEnabled === undefined) { throw new BadRequestError('Body should contain a boolean "loginEnabled" property'); @@ -155,7 +157,8 @@ export class SamlController { * Test SAML config * This endpoint is available if SAML is licensed and the requestor is an instance owner */ - @Get(SamlUrls.configTest, { middlewares: [samlLicensedOwnerMiddleware] }) + @Authorized(['global', 'owner']) + @Get(SamlUrls.configTest, { middlewares: [samlLicensedMiddleware] }) async configTestGet(req: AuthenticatedRequest, res: express.Response) { return this.handleInitSSO(res, getServiceProviderConfigTestReturnUrl()); } diff --git a/packages/cli/test/integration/shared/constants.ts b/packages/cli/test/integration/shared/constants.ts index 3608225eaa1e1..37798aa4d0f83 100644 --- a/packages/cli/test/integration/shared/constants.ts +++ b/packages/cli/test/integration/shared/constants.ts @@ -42,7 +42,7 @@ export const ROUTES_REQUIRING_AUTHORIZATION: Readonly<string[]> = [ 'POST /users', 'DELETE /users/123', 'POST /users/123/reinvite', - 'POST /owner/pre-setup', + 'GET /owner/pre-setup', 'POST /owner/setup', 'POST /owner/skip-setup', ]; diff --git a/packages/cli/test/integration/users.api.test.ts b/packages/cli/test/integration/users.api.test.ts index 759d12b8cb42a..966bb6d1694a7 100644 --- a/packages/cli/test/integration/users.api.test.ts +++ b/packages/cli/test/integration/users.api.test.ts @@ -31,6 +31,7 @@ let credentialOwnerRole: Role; let owner: User; let authlessAgent: SuperAgentTest; let authOwnerAgent: SuperAgentTest; +let authAgentFor: (user: User) => SuperAgentTest; beforeAll(async () => { const app = await utils.initTestServer({ endpointGroups: ['users'] }); @@ -49,7 +50,8 @@ beforeAll(async () => { owner = await testDb.createUser({ globalRole: globalOwnerRole }); authlessAgent = utils.createAgent(app); - authOwnerAgent = utils.createAuthAgent(app)(owner); + authAgentFor = utils.createAuthAgent(app); + authOwnerAgent = authAgentFor(owner); }); beforeEach(async () => { @@ -69,7 +71,7 @@ afterAll(async () => { }); describe('GET /users', () => { - test('should return all users', async () => { + test('should return all users (for owner)', async () => { await testDb.createUser({ globalRole: globalMemberRole }); const response = await authOwnerAgent.get('/users'); @@ -103,6 +105,14 @@ describe('GET /users', () => { expect(apiKey).not.toBeDefined(); }); }); + + test('should return all users (for member)', async () => { + const member = await testDb.createUser({ globalRole: globalMemberRole }); + const response = await authAgentFor(member).get('/users'); + + expect(response.statusCode).toBe(200); + expect(response.body.data.length).toBe(2); + }); }); describe('DELETE /users/:id', () => { From eaf70909197ed511efe9add956eb5e4f78b27e20 Mon Sep 17 00:00:00 2001 From: Cornelius Suermann <cornelius@n8n.io> Date: Mon, 24 Apr 2023 11:46:04 +0200 Subject: [PATCH 2/5] fix(core): Skip license activation when instance was already activated (#6064) --- packages/cli/src/commands/start.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/cli/src/commands/start.ts b/packages/cli/src/commands/start.ts index 359c79d584d54..358d8091eb692 100644 --- a/packages/cli/src/commands/start.ts +++ b/packages/cli/src/commands/start.ts @@ -189,8 +189,16 @@ export class Start extends BaseCommand { await license.init(this.instanceId); const activationKey = config.getEnv('license.activationKey'); + if (activationKey) { + const hasCert = (await license.loadCertStr()).length > 0; + + if (hasCert) { + return LoggerProxy.debug('Skipping license activation'); + } + try { + LoggerProxy.debug('Attempting license activation'); await license.activate(activationKey); } catch (e) { LoggerProxy.error('Could not activate license', e as Error); From 57aab63c1049cf3d0c4730fe6bf01d252e8746d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= <ivov.src@gmail.com> Date: Mon, 24 Apr 2023 12:18:24 +0200 Subject: [PATCH 3/5] refactor: Integrate `consistent-type-imports` in FE packages (no-changelog) (#6060) * :shirt: Move `consistent-type-imports` to top level * :shirt: Apply lintfixes * :shirt: Apply more lintfixes * :shirt: More lintfixes * :shirt: More lintfixes --- packages/@n8n_io/eslint-config/base.js | 5 ++++ packages/cli/.eslintrc.js | 2 -- packages/core/.eslintrc.js | 2 -- .../N8nActionDropdown/ActionDropdown.vue | 3 ++- .../N8nActionToggle/ActionToggle.vue | 3 ++- .../src/components/N8nDatatable/Datatable.vue | 5 ++-- .../components/N8nDatatable/__tests__/data.ts | 5 ++-- .../src/components/N8nFormInput/FormInput.vue | 2 +- .../src/components/N8nFormInput/validators.ts | 2 +- .../components/N8nFormInputs/FormInputs.vue | 6 +++-- .../N8nInfoAccordion/InfoAccordion.vue | 3 ++- .../src/components/N8nMarkdown/Markdown.vue | 6 +++-- .../src/components/N8nMenu/Menu.vue | 3 ++- .../src/components/N8nMenuItem/MenuItem.vue | 3 ++- .../NodeCreatorNode.stories.ts | 2 +- .../components/N8nPagination/Pagination.vue | 3 ++- .../N8nRadioButtons/RadioButtons.vue | 3 ++- .../RecycleScroller.stories.ts | 2 +- .../N8nRecycleScroller/RecycleScroller.vue | 13 ++-------- .../N8nResizeWrapper/ResizeWrapper.vue | 3 ++- .../src/components/N8nTabs/Tabs.vue | 3 ++- .../src/components/N8nTags/Tags.vue | 3 ++- .../src/components/N8nTooltip/Tooltip.vue | 3 ++- .../src/components/N8nTree/Tree.vue | 3 ++- .../components/N8nUserSelect/UserSelect.vue | 5 ++-- .../N8nUsersList/UsersList.stories.ts | 2 +- .../src/components/N8nUsersList/UsersList.vue | 3 ++- .../src/styleguide/ColorCircles.vue | 3 ++- .../design-system/src/styleguide/Sizes.vue | 3 ++- .../src/styleguide/VariableTable.vue | 3 ++- packages/design-system/src/types/datatable.ts | 2 +- packages/editor-ui/src/Interface.ts | 14 +++++------ .../src/__tests__/permissions.spec.ts | 2 +- .../__tests__/server/endpoints/credential.ts | 5 ++-- .../server/endpoints/credentialType.ts | 5 ++-- .../src/__tests__/server/endpoints/index.ts | 2 +- .../__tests__/server/endpoints/settings.ts | 7 +++--- .../src/__tests__/server/endpoints/user.ts | 5 ++-- .../__tests__/server/endpoints/variable.ts | 7 +++--- .../src/__tests__/server/models/credential.ts | 2 +- .../src/__tests__/server/models/user.ts | 2 +- .../src/__tests__/server/models/variable.ts | 2 +- .../editor-ui/src/__tests__/server/types.ts | 8 +++---- packages/editor-ui/src/__tests__/utils.ts | 3 ++- packages/editor-ui/src/api/api-keys.ts | 2 +- packages/editor-ui/src/api/communityNodes.ts | 4 ++-- packages/editor-ui/src/api/credentials.ee.ts | 4 ++-- packages/editor-ui/src/api/credentials.ts | 8 +++++-- packages/editor-ui/src/api/curlHelper.ts | 2 +- packages/editor-ui/src/api/environments.ee.ts | 4 ++-- packages/editor-ui/src/api/eventbus.ee.ts | 4 ++-- packages/editor-ui/src/api/ldap.ts | 4 ++-- packages/editor-ui/src/api/settings.ts | 4 ++-- packages/editor-ui/src/api/sso.ts | 2 +- packages/editor-ui/src/api/tags.ts | 2 +- packages/editor-ui/src/api/templates.ts | 4 ++-- packages/editor-ui/src/api/usage.ts | 2 +- packages/editor-ui/src/api/users.ts | 4 ++-- packages/editor-ui/src/api/versions.ts | 2 +- .../editor-ui/src/api/workflow-webhooks.ts | 3 ++- packages/editor-ui/src/api/workflows.ee.ts | 4 ++-- packages/editor-ui/src/api/workflows.ts | 11 +++------ .../src/components/BinaryDataDisplayEmbed.vue | 3 ++- .../src/components/ChangePasswordModal.vue | 2 +- .../editor-ui/src/components/CodeEdit.vue | 7 +++--- .../CodeNodeEditor/CodeNodeEditor.vue | 3 ++- .../src/components/CodeNodeEditor/linter.ts | 3 ++- .../src/components/CodeNodeEditor/utils.ts | 2 +- .../src/components/CollectionParameter.vue | 7 +++--- .../src/components/CollectionsCarousel.vue | 4 ++-- .../src/components/CommunityPackageCard.vue | 2 +- .../src/components/ContactPromptModal.vue | 2 +- .../src/components/CredentialCard.vue | 7 +++--- .../CredentialEdit/AuthTypeSelector.vue | 4 ++-- .../CredentialEdit/CredentialConfig.vue | 6 ++--- .../CredentialEdit/CredentialEdit.vue | 12 ++++++---- .../CredentialEdit/CredentialInfo.vue | 2 +- .../CredentialEdit/CredentialInputs.vue | 4 ++-- .../CredentialEdit/CredentialSharing.ee.vue | 3 ++- .../src/components/CredentialIcon.vue | 2 +- .../src/components/CredentialsSelect.vue | 4 ++-- .../src/components/DeleteUserModal.vue | 2 +- .../editor-ui/src/components/Draggable.vue | 2 +- .../components/DuplicateWorkflowDialog.vue | 5 ++-- .../src/components/EnterpriseEdition.ee.vue | 2 +- .../src/components/Error/NodeErrorView.vue | 2 +- .../src/components/ExecutionsList.vue | 2 +- .../ExecutionsView/ExecutionCard.vue | 5 ++-- .../ExecutionsView/ExecutionPreview.vue | 3 ++- .../ExecutionsInfoAccordion.vue | 3 ++- .../ExecutionsView/ExecutionsList.vue | 8 +++---- .../ExecutionsView/ExecutionsSidebar.vue | 6 ++--- .../src/components/ExpressionEdit.vue | 2 +- .../src/components/FeatureComingSoon.vue | 2 +- .../components/FixedCollectionParameter.vue | 2 +- .../src/components/HoverableNodeIcon.vue | 4 ++-- .../src/components/HtmlEditor/HtmlEditor.vue | 5 ++-- .../src/components/ImportCurlModal.vue | 2 +- .../editor-ui/src/components/InputPanel.vue | 4 ++-- .../src/components/InviteUsersModal.vue | 2 +- .../src/components/MainHeader/MainHeader.vue | 4 ++-- .../components/MainHeader/WorkflowDetails.vue | 5 ++-- .../editor-ui/src/components/MainSidebar.vue | 2 +- .../src/components/MultipleParameter.vue | 3 ++- .../src/components/NDVDraggablePanels.vue | 5 ++-- packages/editor-ui/src/components/Node.vue | 11 ++++----- .../Node/NodeCreator/ActionItem.vue | 4 ++-- .../Node/NodeCreator/CategorizedItems.vue | 6 ++--- .../Node/NodeCreator/CategoryItem.vue | 2 +- .../Node/NodeCreator/ItemIterator.vue | 2 +- .../components/Node/NodeCreator/MainPanel.vue | 11 ++++----- .../components/Node/NodeCreator/NodeItem.vue | 2 +- .../components/Node/NodeCreator/SearchBar.vue | 2 +- .../Node/NodeCreator/SubcategoryItem.vue | 2 +- .../components/Node/NodeCreator/ViewItem.vue | 2 +- .../src/components/NodeCredentials.vue | 6 ++--- .../src/components/NodeDetailsView.vue | 6 ++--- .../src/components/NodeExecuteButton.vue | 4 ++-- .../editor-ui/src/components/NodeIcon.vue | 4 ++-- .../editor-ui/src/components/NodeList.vue | 2 +- .../editor-ui/src/components/NodeSettings.vue | 15 ++++++------ .../src/components/NodeSettingsTabs.vue | 4 ++-- .../editor-ui/src/components/NodeWebhooks.vue | 2 +- .../editor-ui/src/components/OutputPanel.vue | 6 ++--- .../src/components/ParameterInput.vue | 9 ++++--- .../src/components/ParameterInputExpanded.vue | 4 ++-- .../src/components/ParameterInputFull.vue | 14 +++++++---- .../src/components/ParameterInputList.vue | 7 +++--- .../src/components/ParameterInputWrapper.vue | 10 ++++---- .../src/components/PersonalizationModal.vue | 4 ++-- .../ResourceLocator/ResourceLocator.vue | 10 ++++---- .../ResourceLocatorDropdown.vue | 2 +- packages/editor-ui/src/components/RunData.vue | 6 ++--- .../editor-ui/src/components/RunDataJson.vue | 6 ++--- .../src/components/RunDataJsonActions.vue | 6 ++--- .../src/components/RunDataSchema.vue | 4 ++-- .../src/components/RunDataSchemaItem.vue | 2 +- .../editor-ui/src/components/RunDataTable.vue | 7 +++--- .../EventDestinationCard.ee.vue | 14 +++++------ .../EventDestinationSettingsModal.ee.vue | 20 +++++++++------- .../EventSelection.ee.vue | 2 +- .../SettingsLogStreaming/Helpers.ee.ts | 8 +++++-- .../SettingsLogStreaming/descriptions.ee.ts | 2 +- .../src/components/SettingsSidebar.vue | 6 ++--- packages/editor-ui/src/components/Sticky.vue | 5 ++-- .../src/components/TagsContainer.vue | 2 +- .../editor-ui/src/components/TagsDropdown.vue | 8 +++---- .../components/TagsManager/TagsManager.vue | 2 +- .../TagsManager/TagsView/TagsTable.vue | 6 ++--- .../editor-ui/src/components/Telemetry.vue | 2 +- .../src/components/TemplateDetails.vue | 2 +- .../src/components/TemplateFilters.vue | 2 +- packages/editor-ui/src/components/TimeAgo.vue | 3 ++- .../editor-ui/src/components/TriggerPanel.vue | 8 +++---- .../editor-ui/src/components/UpdatesPanel.vue | 2 +- .../editor-ui/src/components/ValueSurvey.vue | 2 +- .../src/components/VariableSelector.vue | 12 ++++------ .../src/components/VariableSelectorItem.vue | 2 +- .../editor-ui/src/components/VariablesRow.vue | 6 +++-- .../editor-ui/src/components/VersionCard.vue | 2 +- .../editor-ui/src/components/WorkflowCard.vue | 7 +++--- .../src/components/WorkflowPreview.vue | 2 +- .../src/components/WorkflowSettings.vue | 7 +++--- .../src/components/WorkflowShareModal.ee.vue | 10 ++++---- .../__tests__/ExecutionFilter.test.ts | 3 ++- .../components/__tests__/VariablesRow.spec.ts | 2 +- .../forms/ResourceOwnershipSelect.ee.vue | 2 +- .../layouts/ResourcesListLayout.vue | 7 +++--- .../__tests__/useHistoryHelper.test.ts | 2 +- .../src/composables/useCanvasMouseSelect.ts | 2 +- .../src/composables/useHistoryHelper.ts | 5 ++-- .../editor-ui/src/composables/useTelemetry.ts | 3 ++- .../src/composables/useTitleChange.ts | 2 +- .../src/composables/useUpgradeLink.ts | 2 +- packages/editor-ui/src/constants.ts | 2 +- .../editor-ui/src/mixins/completionManager.ts | 2 +- .../editor-ui/src/mixins/executionsHelpers.ts | 2 +- packages/editor-ui/src/mixins/nodeBase.ts | 10 ++++---- packages/editor-ui/src/mixins/nodeHelpers.ts | 6 ++--- packages/editor-ui/src/mixins/pinData.ts | 4 ++-- .../editor-ui/src/mixins/pushConnection.ts | 6 ++--- packages/editor-ui/src/mixins/restApi.ts | 9 ++++--- packages/editor-ui/src/mixins/showMessage.ts | 4 ++-- .../editor-ui/src/mixins/workflowHelpers.ts | 16 ++++++------- packages/editor-ui/src/mixins/workflowRun.ts | 13 ++++------ packages/editor-ui/src/models/history.ts | 6 ++--- packages/editor-ui/src/permissions.ts | 9 ++----- .../completions/__tests__/completions.test.ts | 3 ++- .../codemirror/completions/__tests__/mock.ts | 6 ++--- .../completions/datatype.completions.ts | 5 ++-- .../luxon.instance.docs.ts | 2 +- .../luxon.static.docs.ts | 2 +- .../codemirror/completions/typeGuards.ts | 2 +- .../plugins/codemirror/completions/types.ts | 2 +- .../inputHandlers/code.inputHandler.ts | 3 ++- .../inputHandlers/expression.inputHandler.ts | 3 ++- .../codemirror/resolvableHighlighter.ts | 3 ++- .../plugins/connectors/N8nCustomConnector.ts | 11 ++++----- .../plugins/endpoints/N8nPlusEndpointType.ts | 5 ++-- packages/editor-ui/src/plugins/i18n/index.ts | 5 ++-- .../editor-ui/src/plugins/telemetry/index.ts | 6 ++--- packages/editor-ui/src/router.ts | 7 +++--- .../src/stores/__tests__/environments.spec.ts | 2 +- .../src/stores/__tests__/posthog.test.ts | 2 +- .../src/stores/__tests__/sso.test.ts | 2 +- packages/editor-ui/src/stores/canvas.ts | 7 +++--- .../editor-ui/src/stores/communityNodes.ts | 4 ++-- packages/editor-ui/src/stores/credentials.ts | 6 ++--- .../editor-ui/src/stores/environments.ee.ts | 2 +- packages/editor-ui/src/stores/history.ts | 5 ++-- .../editor-ui/src/stores/logStreamingStore.ts | 3 ++- packages/editor-ui/src/stores/n8nRootStore.ts | 4 ++-- packages/editor-ui/src/stores/ndv.ts | 10 ++++++-- packages/editor-ui/src/stores/nodeCreator.ts | 8 +++---- packages/editor-ui/src/stores/nodeTypes.ts | 4 ++-- packages/editor-ui/src/stores/posthog.ts | 5 ++-- packages/editor-ui/src/stores/segment.ts | 4 ++-- packages/editor-ui/src/stores/settings.ts | 14 ++++------- packages/editor-ui/src/stores/sso.ts | 2 +- packages/editor-ui/src/stores/tags.ts | 2 +- packages/editor-ui/src/stores/telemetry.ts | 5 ++-- packages/editor-ui/src/stores/templates.ts | 2 +- packages/editor-ui/src/stores/ui.ts | 5 ++-- packages/editor-ui/src/stores/usage.ts | 2 +- packages/editor-ui/src/stores/versions.ts | 2 +- packages/editor-ui/src/stores/webhooks.ts | 6 ++--- packages/editor-ui/src/stores/workflows.ee.ts | 2 +- packages/editor-ui/src/stores/workflows.ts | 10 ++++---- .../src/utils/__tests__/mappingUtils.test.ts | 2 +- .../src/utils/__tests__/typesUtils.test.ts | 2 +- .../src/utils/__tests__/userUtils.test.ts | 4 ++-- packages/editor-ui/src/utils/apiUtils.ts | 5 ++-- packages/editor-ui/src/utils/canvasUtils.ts | 8 +++---- .../editor-ui/src/utils/executionUtils.ts | 4 ++-- packages/editor-ui/src/utils/forceParse.ts | 2 +- packages/editor-ui/src/utils/mappingUtils.ts | 3 ++- .../editor-ui/src/utils/nodeTypesUtils.ts | 6 ++--- packages/editor-ui/src/utils/nodeViewUtils.ts | 9 +++---- .../editor-ui/src/utils/pairedItemUtils.ts | 4 ++-- packages/editor-ui/src/utils/typeGuards.ts | 6 ++--- packages/editor-ui/src/utils/typesUtils.ts | 5 ++-- packages/editor-ui/src/utils/userUtils.ts | 4 ++-- .../editor-ui/src/views/CanvasAddButton.vue | 2 +- .../src/views/ChangePasswordView.vue | 2 +- .../editor-ui/src/views/CredentialsView.vue | 7 +++--- .../src/views/ForgotMyPasswordView.vue | 2 +- packages/editor-ui/src/views/NodeView.vue | 24 +++++++++---------- .../editor-ui/src/views/SamlOnboarding.vue | 2 +- .../editor-ui/src/views/SettingsApiView.vue | 2 +- .../src/views/SettingsCommunityNodesView.vue | 2 +- .../src/views/SettingsFakeDoorView.vue | 2 +- .../editor-ui/src/views/SettingsLdapView.vue | 4 ++-- .../src/views/SettingsLogStreamingView.vue | 7 ++---- .../src/views/SettingsPersonalView.vue | 2 +- .../src/views/SettingsUsageAndPlan.vue | 3 ++- .../editor-ui/src/views/SettingsUsersView.vue | 2 +- packages/editor-ui/src/views/SettingsView.vue | 2 +- packages/editor-ui/src/views/SetupView.vue | 2 +- packages/editor-ui/src/views/SigninView.vue | 2 +- packages/editor-ui/src/views/SignupView.vue | 2 +- .../src/views/TemplatesCollectionView.vue | 2 +- .../src/views/TemplatesSearchView.vue | 4 ++-- .../src/views/TemplatesWorkflowView.vue | 2 +- .../editor-ui/src/views/VariablesView.vue | 6 ++++- .../editor-ui/src/views/WorkflowsView.vue | 4 ++-- .../src/views/__tests__/SettingsSso.test.ts | 2 +- packages/node-dev/.eslintrc.js | 1 - packages/nodes-base/.eslintrc.js | 2 -- packages/workflow/.eslintrc.js | 1 - 269 files changed, 625 insertions(+), 570 deletions(-) diff --git a/packages/@n8n_io/eslint-config/base.js b/packages/@n8n_io/eslint-config/base.js index 4242429369be4..ffb4f73540f0e 100644 --- a/packages/@n8n_io/eslint-config/base.js +++ b/packages/@n8n_io/eslint-config/base.js @@ -194,6 +194,11 @@ const config = (module.exports = { */ '@typescript-eslint/consistent-type-assertions': 'error', + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/consistent-type-imports.md + */ + '@typescript-eslint/consistent-type-imports': 'error', + /** * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/member-delimiter-style.md */ diff --git a/packages/cli/.eslintrc.js b/packages/cli/.eslintrc.js index 3da2d993a3ca1..2a24787f80e76 100644 --- a/packages/cli/.eslintrc.js +++ b/packages/cli/.eslintrc.js @@ -16,8 +16,6 @@ module.exports = { ], rules: { - '@typescript-eslint/consistent-type-imports': 'error', - // TODO: Remove this 'import/no-cycle': 'warn', 'import/order': 'off', diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js index a1a1b8155d206..4d68086144d56 100644 --- a/packages/core/.eslintrc.js +++ b/packages/core/.eslintrc.js @@ -11,8 +11,6 @@ module.exports = { ignorePatterns: ['bin/*.js'], rules: { - '@typescript-eslint/consistent-type-imports': 'error', - // TODO: Remove this 'import/order': 'off', '@typescript-eslint/ban-ts-comment': ['error', { 'ts-ignore': true }], diff --git a/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue b/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue index 08f0147a20575..75a785a590289 100644 --- a/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue +++ b/packages/design-system/src/components/N8nActionDropdown/ActionDropdown.vue @@ -34,7 +34,8 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; import { Dropdown as ElDropdown, DropdownMenu as ElDropdownMenu, diff --git a/packages/design-system/src/components/N8nActionToggle/ActionToggle.vue b/packages/design-system/src/components/N8nActionToggle/ActionToggle.vue index 087770050cc78..c617ace7626d3 100644 --- a/packages/design-system/src/components/N8nActionToggle/ActionToggle.vue +++ b/packages/design-system/src/components/N8nActionToggle/ActionToggle.vue @@ -37,7 +37,8 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; import { Dropdown as ElDropdown, DropdownMenu as ElDropdownMenu, diff --git a/packages/design-system/src/components/N8nDatatable/Datatable.vue b/packages/design-system/src/components/N8nDatatable/Datatable.vue index 87c8ddcd33759..990ea94a1d3c5 100644 --- a/packages/design-system/src/components/N8nDatatable/Datatable.vue +++ b/packages/design-system/src/components/N8nDatatable/Datatable.vue @@ -1,6 +1,7 @@ <script lang="ts"> -import { computed, defineComponent, PropType, ref, useCssModule } from 'vue'; -import { DatatableColumn, DatatableRow, DatatableRowDataType } from '../../types'; +import type { PropType } from 'vue'; +import { computed, defineComponent, ref, useCssModule } from 'vue'; +import type { DatatableColumn, DatatableRow, DatatableRowDataType } from '../../types'; import { getValueByPath } from '../../utils'; import { useI18n } from '../../composables'; import N8nSelect from '../N8nSelect'; diff --git a/packages/design-system/src/components/N8nDatatable/__tests__/data.ts b/packages/design-system/src/components/N8nDatatable/__tests__/data.ts index 03471152a2951..a9b2c5aa7e9a6 100644 --- a/packages/design-system/src/components/N8nDatatable/__tests__/data.ts +++ b/packages/design-system/src/components/N8nDatatable/__tests__/data.ts @@ -1,5 +1,6 @@ -import { defineComponent, h, PropType } from 'vue'; -import { DatatableRow } from '../../../types'; +import type { PropType } from 'vue'; +import { defineComponent, h } from 'vue'; +import type { DatatableRow } from '../../../types'; import N8nButton from '../../N8nButton'; // eslint-disable-next-line @typescript-eslint/naming-convention diff --git a/packages/design-system/src/components/N8nFormInput/FormInput.vue b/packages/design-system/src/components/N8nFormInput/FormInput.vue index 7030af847acbd..30622d9f6fdaf 100644 --- a/packages/design-system/src/components/N8nFormInput/FormInput.vue +++ b/packages/design-system/src/components/N8nFormInput/FormInput.vue @@ -95,7 +95,7 @@ import N8nCheckbox from '../N8nCheckbox'; import { Switch as ElSwitch } from 'element-ui'; import { getValidationError, VALIDATORS } from './validators'; -import { Rule, RuleGroup, IValidator, Validatable, FormState } from '../../types'; +import type { Rule, RuleGroup, IValidator, Validatable, FormState } from '../../types'; import { t } from '../../locale'; diff --git a/packages/design-system/src/components/N8nFormInput/validators.ts b/packages/design-system/src/components/N8nFormInput/validators.ts index 7577c139b42a2..855c3ba6a2050 100644 --- a/packages/design-system/src/components/N8nFormInput/validators.ts +++ b/packages/design-system/src/components/N8nFormInput/validators.ts @@ -1,4 +1,4 @@ -import { IValidator, RuleGroup, Validatable } from '../../types'; +import type { IValidator, RuleGroup, Validatable } from '../../types'; export const emailRegex = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; diff --git a/packages/design-system/src/components/N8nFormInputs/FormInputs.vue b/packages/design-system/src/components/N8nFormInputs/FormInputs.vue index 569051122f19c..e0809c1d39526 100644 --- a/packages/design-system/src/components/N8nFormInputs/FormInputs.vue +++ b/packages/design-system/src/components/N8nFormInputs/FormInputs.vue @@ -37,11 +37,13 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; import N8nFormInput from '../N8nFormInput'; import type { IFormInput } from '../../types'; import ResizeObserver from '../ResizeObserver'; -import { createEventBus, EventBus } from '../../utils'; +import type { EventBus } from '../../utils'; +import { createEventBus } from '../../utils'; export default defineComponent({ name: 'n8n-form-inputs', diff --git a/packages/design-system/src/components/N8nInfoAccordion/InfoAccordion.vue b/packages/design-system/src/components/N8nInfoAccordion/InfoAccordion.vue index ccf718e81f0ec..7cf5d10d9d233 100644 --- a/packages/design-system/src/components/N8nInfoAccordion/InfoAccordion.vue +++ b/packages/design-system/src/components/N8nInfoAccordion/InfoAccordion.vue @@ -41,7 +41,8 @@ <script lang="ts"> import N8nText from '../N8nText'; import N8nIcon from '../N8nIcon'; -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; export interface IAccordionItem { id: string; diff --git a/packages/design-system/src/components/N8nMarkdown/Markdown.vue b/packages/design-system/src/components/N8nMarkdown/Markdown.vue index 2f157d6185fe6..d35f1ee575784 100644 --- a/packages/design-system/src/components/N8nMarkdown/Markdown.vue +++ b/packages/design-system/src/components/N8nMarkdown/Markdown.vue @@ -19,13 +19,15 @@ <script lang="ts"> import N8nLoading from '../N8nLoading'; -import Markdown, { PluginSimple } from 'markdown-it'; +import type { PluginSimple } from 'markdown-it'; +import Markdown from 'markdown-it'; import markdownLink from 'markdown-it-link-attributes'; import markdownEmoji from 'markdown-it-emoji'; import markdownTasklists from 'markdown-it-task-lists'; -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; import xss, { friendlyAttrValue } from 'xss'; import { escapeMarkdown } from '../../utils/markdown'; diff --git a/packages/design-system/src/components/N8nMenu/Menu.vue b/packages/design-system/src/components/N8nMenu/Menu.vue index 868a3c050d32f..66e9d61bb46bd 100644 --- a/packages/design-system/src/components/N8nMenu/Menu.vue +++ b/packages/design-system/src/components/N8nMenu/Menu.vue @@ -54,7 +54,8 @@ <script lang="ts"> import { Menu as ElMenu } from 'element-ui'; import N8nMenuItem from '../N8nMenuItem'; -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; import type { IMenuItem, RouteObject } from '../../types'; export default defineComponent({ diff --git a/packages/design-system/src/components/N8nMenuItem/MenuItem.vue b/packages/design-system/src/components/N8nMenuItem/MenuItem.vue index 4094404c10193..3dbb7b327e0af 100644 --- a/packages/design-system/src/components/N8nMenuItem/MenuItem.vue +++ b/packages/design-system/src/components/N8nMenuItem/MenuItem.vue @@ -74,7 +74,8 @@ import { Submenu as ElSubmenu, MenuItem as ElMenuItem } from 'element-ui'; import N8nTooltip from '../N8nTooltip'; import N8nIcon from '../N8nIcon'; -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; import type { IMenuItem, RouteObject } from '../../types'; export default defineComponent({ diff --git a/packages/design-system/src/components/N8nNodeCreatorNode/NodeCreatorNode.stories.ts b/packages/design-system/src/components/N8nNodeCreatorNode/NodeCreatorNode.stories.ts index 77156838bcf42..bcd38ce4510ad 100644 --- a/packages/design-system/src/components/N8nNodeCreatorNode/NodeCreatorNode.stories.ts +++ b/packages/design-system/src/components/N8nNodeCreatorNode/NodeCreatorNode.stories.ts @@ -1,5 +1,5 @@ import N8nNodeCreatorNode from './NodeCreatorNode.vue'; -import { StoryFn } from '@storybook/vue'; +import type { StoryFn } from '@storybook/vue'; export default { title: 'Modules/Node Creator Node', diff --git a/packages/design-system/src/components/N8nPagination/Pagination.vue b/packages/design-system/src/components/N8nPagination/Pagination.vue index e6968b5c21a0b..5b0f106370005 100644 --- a/packages/design-system/src/components/N8nPagination/Pagination.vue +++ b/packages/design-system/src/components/N8nPagination/Pagination.vue @@ -1,5 +1,6 @@ <script lang="ts"> -import { DefineComponent, defineComponent } from 'vue'; +import type { DefineComponent } from 'vue'; +import { defineComponent } from 'vue'; import { Pagination as ElPagination } from 'element-ui'; export default defineComponent({ diff --git a/packages/design-system/src/components/N8nRadioButtons/RadioButtons.vue b/packages/design-system/src/components/N8nRadioButtons/RadioButtons.vue index 9fc3bfc92e9a1..1972d4fd600ea 100644 --- a/packages/design-system/src/components/N8nRadioButtons/RadioButtons.vue +++ b/packages/design-system/src/components/N8nRadioButtons/RadioButtons.vue @@ -18,7 +18,8 @@ <script lang="ts"> import RadioButton from './RadioButton.vue'; -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; export interface RadioOption { label: string; diff --git a/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.stories.ts b/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.stories.ts index d1b1ed0e0bef2..7e75a5d51a60f 100644 --- a/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.stories.ts +++ b/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.stories.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment */ import type { StoryFn } from '@storybook/vue'; import N8nRecycleScroller from './RecycleScroller.vue'; -import { ComponentInstance } from 'vue'; +import type { ComponentInstance } from 'vue'; export default { title: 'Atoms/RecycleScroller', diff --git a/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.vue b/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.vue index 408f7db5e51b6..4c4a1073aee44 100644 --- a/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.vue +++ b/packages/design-system/src/components/N8nRecycleScroller/RecycleScroller.vue @@ -1,17 +1,8 @@ <script lang="ts"> /* eslint-disable @typescript-eslint/no-use-before-define */ -import { - computed, - defineComponent, - onMounted, - onBeforeMount, - ref, - PropType, - nextTick, - watch, - ComponentPublicInstance, -} from 'vue'; +import type { PropType, ComponentPublicInstance } from 'vue'; +import { computed, defineComponent, onMounted, onBeforeMount, ref, nextTick, watch } from 'vue'; export default defineComponent({ name: 'n8n-recycle-scroller', diff --git a/packages/design-system/src/components/N8nResizeWrapper/ResizeWrapper.vue b/packages/design-system/src/components/N8nResizeWrapper/ResizeWrapper.vue index fec202b33393c..930e4eb608d2f 100644 --- a/packages/design-system/src/components/N8nResizeWrapper/ResizeWrapper.vue +++ b/packages/design-system/src/components/N8nResizeWrapper/ResizeWrapper.vue @@ -13,7 +13,8 @@ <script lang="ts"> /* eslint-disable @typescript-eslint/unbound-method */ -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; function closestNumber(value: number, divisor: number): number { const q = value / divisor; diff --git a/packages/design-system/src/components/N8nTabs/Tabs.vue b/packages/design-system/src/components/N8nTabs/Tabs.vue index afbffc7dadbb2..8ce5387be8da8 100644 --- a/packages/design-system/src/components/N8nTabs/Tabs.vue +++ b/packages/design-system/src/components/N8nTabs/Tabs.vue @@ -47,7 +47,8 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; import N8nIcon from '../N8nIcon'; export interface N8nTabOptions { diff --git a/packages/design-system/src/components/N8nTags/Tags.vue b/packages/design-system/src/components/N8nTags/Tags.vue index 63c982106e75e..40e668f3aebba 100644 --- a/packages/design-system/src/components/N8nTags/Tags.vue +++ b/packages/design-system/src/components/N8nTags/Tags.vue @@ -22,7 +22,8 @@ import N8nTag from '../N8nTag'; import N8nLink from '../N8nLink'; import Locale from '../../mixins/locale'; -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; export interface ITag { id: string; diff --git a/packages/design-system/src/components/N8nTooltip/Tooltip.vue b/packages/design-system/src/components/N8nTooltip/Tooltip.vue index dbe2f8113d276..f9bb068ebdc1c 100644 --- a/packages/design-system/src/components/N8nTooltip/Tooltip.vue +++ b/packages/design-system/src/components/N8nTooltip/Tooltip.vue @@ -20,7 +20,8 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; import { Tooltip as ElTooltip } from 'element-ui'; import type { IN8nButton } from '@/types'; import N8nButton from '../N8nButton'; diff --git a/packages/design-system/src/components/N8nTree/Tree.vue b/packages/design-system/src/components/N8nTree/Tree.vue index 3b22eb55f2a89..80a11b6670865 100644 --- a/packages/design-system/src/components/N8nTree/Tree.vue +++ b/packages/design-system/src/components/N8nTree/Tree.vue @@ -37,7 +37,8 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; export default defineComponent({ name: 'n8n-tree', diff --git a/packages/design-system/src/components/N8nUserSelect/UserSelect.vue b/packages/design-system/src/components/N8nUserSelect/UserSelect.vue index 815d00721747b..d4c8eec96d34d 100644 --- a/packages/design-system/src/components/N8nUserSelect/UserSelect.vue +++ b/packages/design-system/src/components/N8nUserSelect/UserSelect.vue @@ -33,10 +33,11 @@ import N8nUserInfo from '../N8nUserInfo'; import N8nSelect from '../N8nSelect'; import N8nOption from '../N8nOption'; -import { IUser } from '../../types'; +import type { IUser } from '../../types'; import Locale from '../../mixins/locale'; import { t } from '../../locale'; -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; export default defineComponent({ name: 'n8n-user-select', diff --git a/packages/design-system/src/components/N8nUsersList/UsersList.stories.ts b/packages/design-system/src/components/N8nUsersList/UsersList.stories.ts index c83799055718a..fb3348e7288d6 100644 --- a/packages/design-system/src/components/N8nUsersList/UsersList.stories.ts +++ b/packages/design-system/src/components/N8nUsersList/UsersList.stories.ts @@ -1,7 +1,7 @@ import N8nUsersList from './UsersList.vue'; import { action } from '@storybook/addon-actions'; import type { StoryFn } from '@storybook/vue'; -import { IUser } from '@/types'; +import type { IUser } from '@/types'; export default { title: 'Modules/UsersList', diff --git a/packages/design-system/src/components/N8nUsersList/UsersList.vue b/packages/design-system/src/components/N8nUsersList/UsersList.vue index 52275e05f1205..9ea1075c894fd 100644 --- a/packages/design-system/src/components/N8nUsersList/UsersList.vue +++ b/packages/design-system/src/components/N8nUsersList/UsersList.vue @@ -37,7 +37,8 @@ import N8nActionToggle from '../N8nActionToggle'; import N8nBadge from '../N8nBadge'; import N8nUserInfo from '../N8nUserInfo'; import Locale from '../../mixins/locale'; -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; export default defineComponent({ name: 'n8n-users-list', diff --git a/packages/design-system/src/styleguide/ColorCircles.vue b/packages/design-system/src/styleguide/ColorCircles.vue index dd6ef8e17daee..763bc24b1d763 100644 --- a/packages/design-system/src/styleguide/ColorCircles.vue +++ b/packages/design-system/src/styleguide/ColorCircles.vue @@ -10,7 +10,8 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; function hslToHex(h: number, s: number, l: number): string { l /= 100; diff --git a/packages/design-system/src/styleguide/Sizes.vue b/packages/design-system/src/styleguide/Sizes.vue index f24f4346505a7..dd5316c6799de 100644 --- a/packages/design-system/src/styleguide/Sizes.vue +++ b/packages/design-system/src/styleguide/Sizes.vue @@ -18,7 +18,8 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; export default defineComponent({ name: 'sizes', diff --git a/packages/design-system/src/styleguide/VariableTable.vue b/packages/design-system/src/styleguide/VariableTable.vue index fb02a3b0f09a2..9d26337900f68 100644 --- a/packages/design-system/src/styleguide/VariableTable.vue +++ b/packages/design-system/src/styleguide/VariableTable.vue @@ -16,7 +16,8 @@ </template> <script lang="ts"> -import { defineComponent, PropType } from 'vue'; +import type { PropType } from 'vue'; +import { defineComponent } from 'vue'; export default defineComponent({ name: 'variable-table', diff --git a/packages/design-system/src/types/datatable.ts b/packages/design-system/src/types/datatable.ts index aa568483424cd..8a31c2b1d7079 100644 --- a/packages/design-system/src/types/datatable.ts +++ b/packages/design-system/src/types/datatable.ts @@ -1,4 +1,4 @@ -import { VNode } from 'vue'; +import type { VNode } from 'vue'; export type DatatableRowDataType = string | number | boolean | null | undefined; diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts index 5bc452c578afa..d058b37f7e0a2 100644 --- a/packages/editor-ui/src/Interface.ts +++ b/packages/editor-ui/src/Interface.ts @@ -1,7 +1,7 @@ -import { CREDENTIAL_EDIT_MODAL_KEY } from './constants'; +import type { CREDENTIAL_EDIT_MODAL_KEY } from './constants'; /* eslint-disable @typescript-eslint/no-explicit-any */ -import { IMenuItem } from 'n8n-design-system'; -import { +import type { IMenuItem } from 'n8n-design-system'; +import type { GenericValue, IConnections, ICredentialsDecrypted, @@ -36,10 +36,10 @@ import { IUserManagementSettings, WorkflowSettings, } from 'n8n-workflow'; -import { SignInType } from './constants'; -import { FAKE_DOOR_FEATURES, TRIGGER_NODE_FILTER, REGULAR_NODE_FILTER } from './constants'; -import { BulkCommand, Undoable } from '@/models/history'; -import { PartialBy } from '@/utils/typeHelpers'; +import type { SignInType } from './constants'; +import type { FAKE_DOOR_FEATURES, TRIGGER_NODE_FILTER, REGULAR_NODE_FILTER } from './constants'; +import type { BulkCommand, Undoable } from '@/models/history'; +import type { PartialBy } from '@/utils/typeHelpers'; export * from 'n8n-design-system/types'; diff --git a/packages/editor-ui/src/__tests__/permissions.spec.ts b/packages/editor-ui/src/__tests__/permissions.spec.ts index 770cffa228770..8ee7edde431a5 100644 --- a/packages/editor-ui/src/__tests__/permissions.spec.ts +++ b/packages/editor-ui/src/__tests__/permissions.spec.ts @@ -1,5 +1,5 @@ import { parsePermissionsTable } from '@/permissions'; -import { IUser } from '@/Interface'; +import type { IUser } from '@/Interface'; describe('parsePermissionsTable()', () => { const user: IUser = { diff --git a/packages/editor-ui/src/__tests__/server/endpoints/credential.ts b/packages/editor-ui/src/__tests__/server/endpoints/credential.ts index 949004b487f27..7aba2d99d40c6 100644 --- a/packages/editor-ui/src/__tests__/server/endpoints/credential.ts +++ b/packages/editor-ui/src/__tests__/server/endpoints/credential.ts @@ -1,5 +1,6 @@ -import { Response, Server } from 'miragejs'; -import { AppSchema } from '../types'; +import type { Server } from 'miragejs'; +import { Response } from 'miragejs'; +import type { AppSchema } from '../types'; export function routesForCredentials(server: Server) { server.get('/rest/credentials', (schema: AppSchema) => { diff --git a/packages/editor-ui/src/__tests__/server/endpoints/credentialType.ts b/packages/editor-ui/src/__tests__/server/endpoints/credentialType.ts index 3f9ee6eaafec3..b50d6270e2ce7 100644 --- a/packages/editor-ui/src/__tests__/server/endpoints/credentialType.ts +++ b/packages/editor-ui/src/__tests__/server/endpoints/credentialType.ts @@ -1,5 +1,6 @@ -import { Response, Server } from 'miragejs'; -import { AppSchema } from '../types'; +import type { Server } from 'miragejs'; +import { Response } from 'miragejs'; +import type { AppSchema } from '../types'; export function routesForCredentialTypes(server: Server) { server.get('/types/credentials.json', (schema: AppSchema) => { diff --git a/packages/editor-ui/src/__tests__/server/endpoints/index.ts b/packages/editor-ui/src/__tests__/server/endpoints/index.ts index f98c9c3823292..4ba3315e425fb 100644 --- a/packages/editor-ui/src/__tests__/server/endpoints/index.ts +++ b/packages/editor-ui/src/__tests__/server/endpoints/index.ts @@ -1,4 +1,4 @@ -import { Server } from 'miragejs'; +import type { Server } from 'miragejs'; import { routesForUsers } from './user'; import { routesForCredentials } from './credential'; import { routesForCredentialTypes } from './credentialType'; diff --git a/packages/editor-ui/src/__tests__/server/endpoints/settings.ts b/packages/editor-ui/src/__tests__/server/endpoints/settings.ts index e2b5b4e0eb7e7..0ffed3e14a6b1 100644 --- a/packages/editor-ui/src/__tests__/server/endpoints/settings.ts +++ b/packages/editor-ui/src/__tests__/server/endpoints/settings.ts @@ -1,6 +1,7 @@ -import { Response, Server } from 'miragejs'; -import { AppSchema } from '../types'; -import { IN8nUISettings } from 'n8n-workflow'; +import type { Server } from 'miragejs'; +import { Response } from 'miragejs'; +import type { AppSchema } from '../types'; +import type { IN8nUISettings } from 'n8n-workflow'; const defaultSettings: IN8nUISettings = { allowedModules: {}, diff --git a/packages/editor-ui/src/__tests__/server/endpoints/user.ts b/packages/editor-ui/src/__tests__/server/endpoints/user.ts index 0400b47b96ba7..57bfdc8e1faa1 100644 --- a/packages/editor-ui/src/__tests__/server/endpoints/user.ts +++ b/packages/editor-ui/src/__tests__/server/endpoints/user.ts @@ -1,5 +1,6 @@ -import { Response, Server } from 'miragejs'; -import { AppSchema } from '../types'; +import type { Server } from 'miragejs'; +import { Response } from 'miragejs'; +import type { AppSchema } from '../types'; export function routesForUsers(server: Server) { server.get('/rest/users', (schema: AppSchema) => { diff --git a/packages/editor-ui/src/__tests__/server/endpoints/variable.ts b/packages/editor-ui/src/__tests__/server/endpoints/variable.ts index bbe3b87eb1eb9..c2e017c2a9392 100644 --- a/packages/editor-ui/src/__tests__/server/endpoints/variable.ts +++ b/packages/editor-ui/src/__tests__/server/endpoints/variable.ts @@ -1,7 +1,8 @@ -import { Request, Response, Server } from 'miragejs'; -import { AppSchema } from '../types'; +import type { Request, Server } from 'miragejs'; +import { Response } from 'miragejs'; +import type { AppSchema } from '../types'; import { jsonParse } from 'n8n-workflow'; -import { EnvironmentVariable } from '@/Interface'; +import type { EnvironmentVariable } from '@/Interface'; export function routesForVariables(server: Server) { server.get('/rest/variables', (schema: AppSchema) => { diff --git a/packages/editor-ui/src/__tests__/server/models/credential.ts b/packages/editor-ui/src/__tests__/server/models/credential.ts index 17d4f45dcf984..8020afc06d0d8 100644 --- a/packages/editor-ui/src/__tests__/server/models/credential.ts +++ b/packages/editor-ui/src/__tests__/server/models/credential.ts @@ -1,4 +1,4 @@ -import { ICredentialsResponse } from '@/Interface'; +import type { ICredentialsResponse } from '@/Interface'; import { Model } from 'miragejs'; import type { ModelDefinition } from 'miragejs/-types'; diff --git a/packages/editor-ui/src/__tests__/server/models/user.ts b/packages/editor-ui/src/__tests__/server/models/user.ts index cef64c360cf9d..2c4d22e3dbd16 100644 --- a/packages/editor-ui/src/__tests__/server/models/user.ts +++ b/packages/editor-ui/src/__tests__/server/models/user.ts @@ -1,4 +1,4 @@ -import { IUser } from '@/Interface'; +import type { IUser } from '@/Interface'; import { Model } from 'miragejs'; import type { ModelDefinition } from 'miragejs/-types'; diff --git a/packages/editor-ui/src/__tests__/server/models/variable.ts b/packages/editor-ui/src/__tests__/server/models/variable.ts index 5677a4db9b980..27a2a9b238e49 100644 --- a/packages/editor-ui/src/__tests__/server/models/variable.ts +++ b/packages/editor-ui/src/__tests__/server/models/variable.ts @@ -1,4 +1,4 @@ -import { EnvironmentVariable } from '@/Interface'; +import type { EnvironmentVariable } from '@/Interface'; import { Model } from 'miragejs'; import type { ModelDefinition } from 'miragejs/-types'; diff --git a/packages/editor-ui/src/__tests__/server/types.ts b/packages/editor-ui/src/__tests__/server/types.ts index bc3e75e4f3bad..ec32f7c97cede 100644 --- a/packages/editor-ui/src/__tests__/server/types.ts +++ b/packages/editor-ui/src/__tests__/server/types.ts @@ -1,10 +1,10 @@ -import { Registry } from 'miragejs'; +import type { Registry } from 'miragejs'; // eslint-disable-next-line import/no-unresolved -import Schema from 'miragejs/orm/schema'; +import type Schema from 'miragejs/orm/schema'; -import { models } from './models'; -import { factories } from './factories'; +import type { models } from './models'; +import type { factories } from './factories'; type AppRegistry = Registry<typeof models, typeof factories>; export type AppSchema = Schema<AppRegistry>; diff --git a/packages/editor-ui/src/__tests__/utils.ts b/packages/editor-ui/src/__tests__/utils.ts index 9f9a7afb53059..c6d167f06c3ee 100644 --- a/packages/editor-ui/src/__tests__/utils.ts +++ b/packages/editor-ui/src/__tests__/utils.ts @@ -1,4 +1,5 @@ -import { ISettingsState, UserManagementAuthenticationMethod } from '@/Interface'; +import type { ISettingsState } from '@/Interface'; +import { UserManagementAuthenticationMethod } from '@/Interface'; import { render } from '@testing-library/vue'; import { PiniaVuePlugin } from 'pinia'; diff --git a/packages/editor-ui/src/api/api-keys.ts b/packages/editor-ui/src/api/api-keys.ts index 20a72895f60b8..f864ffbe17364 100644 --- a/packages/editor-ui/src/api/api-keys.ts +++ b/packages/editor-ui/src/api/api-keys.ts @@ -1,4 +1,4 @@ -import { IRestApiContext } from '@/Interface'; +import type { IRestApiContext } from '@/Interface'; import { makeRestApiRequest } from '@/utils'; export function getApiKey(context: IRestApiContext): Promise<{ apiKey: string | null }> { diff --git a/packages/editor-ui/src/api/communityNodes.ts b/packages/editor-ui/src/api/communityNodes.ts index 453217aa83074..ec8212bff36ba 100644 --- a/packages/editor-ui/src/api/communityNodes.ts +++ b/packages/editor-ui/src/api/communityNodes.ts @@ -1,5 +1,5 @@ -import { IRestApiContext } from '@/Interface'; -import { PublicInstalledPackage } from 'n8n-workflow'; +import type { IRestApiContext } from '@/Interface'; +import type { PublicInstalledPackage } from 'n8n-workflow'; import { get, post, makeRestApiRequest } from '@/utils'; export async function getInstalledCommunityNodes( diff --git a/packages/editor-ui/src/api/credentials.ee.ts b/packages/editor-ui/src/api/credentials.ee.ts index 5a9b5b6196b8b..3067b906888d4 100644 --- a/packages/editor-ui/src/api/credentials.ee.ts +++ b/packages/editor-ui/src/api/credentials.ee.ts @@ -1,6 +1,6 @@ -import { ICredentialsResponse, IRestApiContext, IShareCredentialsPayload } from '@/Interface'; +import type { ICredentialsResponse, IRestApiContext, IShareCredentialsPayload } from '@/Interface'; import { makeRestApiRequest } from '@/utils'; -import { IDataObject } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; export async function setCredentialSharedWith( context: IRestApiContext, diff --git a/packages/editor-ui/src/api/credentials.ts b/packages/editor-ui/src/api/credentials.ts index cf9d13932b94a..3bef8e9e9fe41 100644 --- a/packages/editor-ui/src/api/credentials.ts +++ b/packages/editor-ui/src/api/credentials.ts @@ -1,6 +1,10 @@ -import { ICredentialsDecryptedResponse, ICredentialsResponse, IRestApiContext } from '@/Interface'; +import type { + ICredentialsDecryptedResponse, + ICredentialsResponse, + IRestApiContext, +} from '@/Interface'; import { makeRestApiRequest } from '@/utils'; -import { +import type { ICredentialsDecrypted, ICredentialType, IDataObject, diff --git a/packages/editor-ui/src/api/curlHelper.ts b/packages/editor-ui/src/api/curlHelper.ts index c1927b3b82f88..7089201eb2e70 100644 --- a/packages/editor-ui/src/api/curlHelper.ts +++ b/packages/editor-ui/src/api/curlHelper.ts @@ -1,4 +1,4 @@ -import { CurlToJSONResponse, IRestApiContext } from '@/Interface'; +import type { CurlToJSONResponse, IRestApiContext } from '@/Interface'; import { makeRestApiRequest } from '@/utils'; export function getCurlToJson( diff --git a/packages/editor-ui/src/api/environments.ee.ts b/packages/editor-ui/src/api/environments.ee.ts index baf4280459e94..f5a386a059319 100644 --- a/packages/editor-ui/src/api/environments.ee.ts +++ b/packages/editor-ui/src/api/environments.ee.ts @@ -1,6 +1,6 @@ -import { EnvironmentVariable, IRestApiContext } from '@/Interface'; +import type { EnvironmentVariable, IRestApiContext } from '@/Interface'; import { makeRestApiRequest } from '@/utils'; -import { IDataObject } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; export async function getVariables(context: IRestApiContext): Promise<EnvironmentVariable[]> { return await makeRestApiRequest(context, 'GET', '/variables'); diff --git a/packages/editor-ui/src/api/eventbus.ee.ts b/packages/editor-ui/src/api/eventbus.ee.ts index 1b00f84630064..a979a63fe92c2 100644 --- a/packages/editor-ui/src/api/eventbus.ee.ts +++ b/packages/editor-ui/src/api/eventbus.ee.ts @@ -1,6 +1,6 @@ -import { IRestApiContext } from '@/Interface'; +import type { IRestApiContext } from '@/Interface'; import { makeRestApiRequest } from '@/utils'; -import { IDataObject, MessageEventBusDestinationOptions } from 'n8n-workflow'; +import type { IDataObject, MessageEventBusDestinationOptions } from 'n8n-workflow'; export async function saveDestinationToDb( context: IRestApiContext, diff --git a/packages/editor-ui/src/api/ldap.ts b/packages/editor-ui/src/api/ldap.ts index 06bf040f7549e..2daa45905c782 100644 --- a/packages/editor-ui/src/api/ldap.ts +++ b/packages/editor-ui/src/api/ldap.ts @@ -1,6 +1,6 @@ -import { ILdapConfig, ILdapSyncData, IRestApiContext } from '@/Interface'; +import type { ILdapConfig, ILdapSyncData, IRestApiContext } from '@/Interface'; import { makeRestApiRequest } from '@/utils'; -import { IDataObject } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; export function getLdapConfig(context: IRestApiContext): Promise<ILdapConfig> { return makeRestApiRequest(context, 'GET', '/ldap/config'); diff --git a/packages/editor-ui/src/api/settings.ts b/packages/editor-ui/src/api/settings.ts index 2205994b7eace..cdd19d976a1f8 100644 --- a/packages/editor-ui/src/api/settings.ts +++ b/packages/editor-ui/src/api/settings.ts @@ -1,4 +1,4 @@ -import { +import type { IRestApiContext, IN8nPrompts, IN8nValueSurveyData, @@ -6,7 +6,7 @@ import { } from '../Interface'; import { makeRestApiRequest, get, post } from '@/utils'; import { N8N_IO_BASE_URL, NPM_COMMUNITY_NODE_SEARCH_API_URL } from '@/constants'; -import { IN8nUISettings } from 'n8n-workflow'; +import type { IN8nUISettings } from 'n8n-workflow'; export function getSettings(context: IRestApiContext): Promise<IN8nUISettings> { return makeRestApiRequest(context, 'GET', '/settings'); diff --git a/packages/editor-ui/src/api/sso.ts b/packages/editor-ui/src/api/sso.ts index 5fc90c8a2e4e9..867a7799f9a63 100644 --- a/packages/editor-ui/src/api/sso.ts +++ b/packages/editor-ui/src/api/sso.ts @@ -1,5 +1,5 @@ import { makeRestApiRequest } from '@/utils'; -import { +import type { IRestApiContext, SamlPreferencesLoginEnabled, SamlPreferences, diff --git a/packages/editor-ui/src/api/tags.ts b/packages/editor-ui/src/api/tags.ts index 45392781251bb..88937cf2e857a 100644 --- a/packages/editor-ui/src/api/tags.ts +++ b/packages/editor-ui/src/api/tags.ts @@ -1,4 +1,4 @@ -import { IRestApiContext, ITag } from '@/Interface'; +import type { IRestApiContext, ITag } from '@/Interface'; import { makeRestApiRequest } from '@/utils'; export async function getTags(context: IRestApiContext, withUsageCount = false): Promise<ITag[]> { diff --git a/packages/editor-ui/src/api/templates.ts b/packages/editor-ui/src/api/templates.ts index 870f962d48741..46b4bf2f3e9e5 100644 --- a/packages/editor-ui/src/api/templates.ts +++ b/packages/editor-ui/src/api/templates.ts @@ -1,4 +1,4 @@ -import { +import type { ITemplatesCategory, ITemplatesCollection, ITemplatesQuery, @@ -7,7 +7,7 @@ import { ITemplatesWorkflowResponse, IWorkflowTemplate, } from '@/Interface'; -import { IDataObject } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; import { get } from '@/utils'; function stringifyArray(arr: number[]) { diff --git a/packages/editor-ui/src/api/usage.ts b/packages/editor-ui/src/api/usage.ts index 5266e5a82b5b9..8d79f59e7761b 100644 --- a/packages/editor-ui/src/api/usage.ts +++ b/packages/editor-ui/src/api/usage.ts @@ -1,5 +1,5 @@ import { makeRestApiRequest } from '@/utils'; -import { IRestApiContext, UsageState } from '@/Interface'; +import type { IRestApiContext, UsageState } from '@/Interface'; export const getLicense = (context: IRestApiContext): Promise<UsageState['data']> => { return makeRestApiRequest(context, 'GET', '/license'); diff --git a/packages/editor-ui/src/api/users.ts b/packages/editor-ui/src/api/users.ts index 6457ec2c806ef..1b693f4fbd760 100644 --- a/packages/editor-ui/src/api/users.ts +++ b/packages/editor-ui/src/api/users.ts @@ -1,11 +1,11 @@ -import { +import type { CurrentUserResponse, IInviteResponse, IPersonalizationLatestVersion, IRestApiContext, IUserResponse, } from '@/Interface'; -import { IDataObject } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; import { makeRestApiRequest } from '@/utils/apiUtils'; export function loginCurrentUser(context: IRestApiContext): Promise<CurrentUserResponse | null> { diff --git a/packages/editor-ui/src/api/versions.ts b/packages/editor-ui/src/api/versions.ts index e6842342fd3bd..4896318bfa283 100644 --- a/packages/editor-ui/src/api/versions.ts +++ b/packages/editor-ui/src/api/versions.ts @@ -1,4 +1,4 @@ -import { IVersion } from '@/Interface'; +import type { IVersion } from '@/Interface'; import { INSTANCE_ID_HEADER } from '@/constants'; import { get } from '@/utils'; diff --git a/packages/editor-ui/src/api/workflow-webhooks.ts b/packages/editor-ui/src/api/workflow-webhooks.ts index b31192f5da1f2..a6f4e92a67e50 100644 --- a/packages/editor-ui/src/api/workflow-webhooks.ts +++ b/packages/editor-ui/src/api/workflow-webhooks.ts @@ -1,4 +1,5 @@ -import { IOnboardingCallPrompt, IOnboardingCallPromptResponse, IUser } from '@/Interface'; +import type { IOnboardingCallPrompt, IUser } from '@/Interface'; +import { IOnboardingCallPromptResponse } from '@/Interface'; import { get, post } from '@/utils'; const N8N_API_BASE_URL = 'https://api.n8n.io/api'; diff --git a/packages/editor-ui/src/api/workflows.ee.ts b/packages/editor-ui/src/api/workflows.ee.ts index 499fad502cb5f..1282a8ce86b56 100644 --- a/packages/editor-ui/src/api/workflows.ee.ts +++ b/packages/editor-ui/src/api/workflows.ee.ts @@ -1,6 +1,6 @@ -import { IRestApiContext, IShareWorkflowsPayload, IWorkflowsShareResponse } from '@/Interface'; +import type { IRestApiContext, IShareWorkflowsPayload, IWorkflowsShareResponse } from '@/Interface'; import { makeRestApiRequest } from '@/utils'; -import { IDataObject } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; export async function setWorkflowSharedWith( context: IRestApiContext, diff --git a/packages/editor-ui/src/api/workflows.ts b/packages/editor-ui/src/api/workflows.ts index c641b13006f23..508ed74e4a550 100644 --- a/packages/editor-ui/src/api/workflows.ts +++ b/packages/editor-ui/src/api/workflows.ts @@ -1,11 +1,6 @@ -import { IExecutionsCurrentSummaryExtended, IRestApiContext } from '@/Interface'; -import { - ExecutionFilters, - ExecutionOptions, - ExecutionStatus, - IDataObject, - WorkflowExecuteMode, -} from 'n8n-workflow'; +import type { IExecutionsCurrentSummaryExtended, IRestApiContext } from '@/Interface'; +import type { ExecutionFilters, ExecutionOptions, IDataObject } from 'n8n-workflow'; +import { ExecutionStatus, WorkflowExecuteMode } from 'n8n-workflow'; import { makeRestApiRequest } from '@/utils'; export async function getNewWorkflow(context: IRestApiContext, name?: string) { diff --git a/packages/editor-ui/src/components/BinaryDataDisplayEmbed.vue b/packages/editor-ui/src/components/BinaryDataDisplayEmbed.vue index 8bfc9889749fe..9b534b6f1f57b 100644 --- a/packages/editor-ui/src/components/BinaryDataDisplayEmbed.vue +++ b/packages/editor-ui/src/components/BinaryDataDisplayEmbed.vue @@ -19,7 +19,8 @@ </template> <script lang="ts"> -import { IBinaryData, jsonParse } from 'n8n-workflow'; +import type { IBinaryData } from 'n8n-workflow'; +import { jsonParse } from 'n8n-workflow'; import type { PropType } from 'vue'; import VueJsonPretty from 'vue-json-pretty'; import { mapStores } from 'pinia'; diff --git a/packages/editor-ui/src/components/ChangePasswordModal.vue b/packages/editor-ui/src/components/ChangePasswordModal.vue index 735336a9fbc0a..e87a5bfc7e04e 100644 --- a/packages/editor-ui/src/components/ChangePasswordModal.vue +++ b/packages/editor-ui/src/components/ChangePasswordModal.vue @@ -33,7 +33,7 @@ import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; import Modal from './Modal.vue'; -import { IFormInputs } from '@/Interface'; +import type { IFormInputs } from '@/Interface'; import { CHANGE_PASSWORD_MODAL_KEY } from '../constants'; import { mapStores } from 'pinia'; import { useUsersStore } from '@/stores/users'; diff --git a/packages/editor-ui/src/components/CodeEdit.vue b/packages/editor-ui/src/components/CodeEdit.vue index 8198196d48c4f..b798e5d9fb3f1 100644 --- a/packages/editor-ui/src/components/CodeEdit.vue +++ b/packages/editor-ui/src/components/CodeEdit.vue @@ -25,15 +25,16 @@ import { genericHelpers } from '@/mixins/genericHelpers'; import { workflowHelpers } from '@/mixins/workflowHelpers'; import mixins from 'vue-typed-mixins'; -import { IExecutionResponse, INodeUi } from '@/Interface'; -import { +import type { INodeUi } from '@/Interface'; +import { IExecutionResponse } from '@/Interface'; +import type { IBinaryKeyData, IDataObject, INodeExecutionData, IRunExecutionData, IWorkflowDataProxyAdditionalKeys, - WorkflowDataProxy, } from 'n8n-workflow'; +import { WorkflowDataProxy } from 'n8n-workflow'; import { PLACEHOLDER_FILLED_AT_EXECUTION_TIME } from '@/constants'; import { CodeEditor } from './forms'; diff --git a/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue b/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue index 3c95a9d01817d..8899ab74f6c7b 100644 --- a/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue +++ b/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue @@ -22,7 +22,8 @@ import mixins from 'vue-typed-mixins'; import { Compartment, EditorState } from '@codemirror/state'; -import { EditorView, ViewUpdate } from '@codemirror/view'; +import type { ViewUpdate } from '@codemirror/view'; +import { EditorView } from '@codemirror/view'; import { javascript } from '@codemirror/lang-javascript'; import { baseExtensions } from './baseExtensions'; diff --git a/packages/editor-ui/src/components/CodeNodeEditor/linter.ts b/packages/editor-ui/src/components/CodeNodeEditor/linter.ts index d33a5c89506de..2eba90c3d9a36 100644 --- a/packages/editor-ui/src/components/CodeNodeEditor/linter.ts +++ b/packages/editor-ui/src/components/CodeNodeEditor/linter.ts @@ -1,5 +1,6 @@ import Vue from 'vue'; -import { Diagnostic, linter as createLinter } from '@codemirror/lint'; +import type { Diagnostic } from '@codemirror/lint'; +import { linter as createLinter } from '@codemirror/lint'; import * as esprima from 'esprima-next'; import { diff --git a/packages/editor-ui/src/components/CodeNodeEditor/utils.ts b/packages/editor-ui/src/components/CodeNodeEditor/utils.ts index b6bd5b473038b..be8560a61e352 100644 --- a/packages/editor-ui/src/components/CodeNodeEditor/utils.ts +++ b/packages/editor-ui/src/components/CodeNodeEditor/utils.ts @@ -1,4 +1,4 @@ -import * as esprima from 'esprima-next'; +import type * as esprima from 'esprima-next'; import type { Completion } from '@codemirror/autocomplete'; import type { Node } from 'estree'; import type { RangeNode } from './types'; diff --git a/packages/editor-ui/src/components/CollectionParameter.vue b/packages/editor-ui/src/components/CollectionParameter.vue index edcadf6472933..919da56fd74e5 100644 --- a/packages/editor-ui/src/components/CollectionParameter.vue +++ b/packages/editor-ui/src/components/CollectionParameter.vue @@ -46,16 +46,17 @@ </template> <script lang="ts"> -import { INodeUi, IUpdateInformation } from '@/Interface'; +import type { INodeUi, IUpdateInformation } from '@/Interface'; -import { deepCopy, INodeProperties, INodePropertyOptions } from 'n8n-workflow'; +import type { INodeProperties, INodePropertyOptions } from 'n8n-workflow'; +import { deepCopy } from 'n8n-workflow'; import { nodeHelpers } from '@/mixins/nodeHelpers'; import { get } from 'lodash-es'; import mixins from 'vue-typed-mixins'; -import { Component } from 'vue'; +import type { Component } from 'vue'; import { mapStores } from 'pinia'; import { useNDVStore } from '@/stores/ndv'; diff --git a/packages/editor-ui/src/components/CollectionsCarousel.vue b/packages/editor-ui/src/components/CollectionsCarousel.vue index cc86203f2dfd1..1672ac976e0fc 100644 --- a/packages/editor-ui/src/components/CollectionsCarousel.vue +++ b/packages/editor-ui/src/components/CollectionsCarousel.vue @@ -26,8 +26,8 @@ </template> <script lang="ts"> -import { PropType } from 'vue'; -import { ITemplatesCollection } from '@/Interface'; +import type { PropType } from 'vue'; +import type { ITemplatesCollection } from '@/Interface'; import Card from '@/components/CollectionWorkflowCard.vue'; import CollectionCard from '@/components/CollectionCard.vue'; import VueAgile from 'vue-agile'; diff --git a/packages/editor-ui/src/components/CommunityPackageCard.vue b/packages/editor-ui/src/components/CommunityPackageCard.vue index eb11303650006..8fef13ae282ea 100644 --- a/packages/editor-ui/src/components/CommunityPackageCard.vue +++ b/packages/editor-ui/src/components/CommunityPackageCard.vue @@ -63,7 +63,7 @@ <script lang="ts"> import { useUIStore } from '@/stores/ui'; -import { PublicInstalledPackage } from 'n8n-workflow'; +import type { PublicInstalledPackage } from 'n8n-workflow'; import { mapStores } from 'pinia'; import mixins from 'vue-typed-mixins'; import { NPM_PACKAGE_DOCS_BASE_URL, COMMUNITY_PACKAGE_MANAGE_ACTIONS } from '../constants'; diff --git a/packages/editor-ui/src/components/ContactPromptModal.vue b/packages/editor-ui/src/components/ContactPromptModal.vue index 3978430ae61d1..20e5c91b92e9c 100644 --- a/packages/editor-ui/src/components/ContactPromptModal.vue +++ b/packages/editor-ui/src/components/ContactPromptModal.vue @@ -35,7 +35,7 @@ <script lang="ts"> import mixins from 'vue-typed-mixins'; -import { IN8nPromptResponse } from '@/Interface'; +import type { IN8nPromptResponse } from '@/Interface'; import { VALID_EMAIL_REGEX } from '@/constants'; import { workflowHelpers } from '@/mixins/workflowHelpers'; import Modal from './Modal.vue'; diff --git a/packages/editor-ui/src/components/CredentialCard.vue b/packages/editor-ui/src/components/CredentialCard.vue index 55d69ddd91fd1..c274a9c3e8a8c 100644 --- a/packages/editor-ui/src/components/CredentialCard.vue +++ b/packages/editor-ui/src/components/CredentialCard.vue @@ -32,12 +32,13 @@ <script lang="ts"> import mixins from 'vue-typed-mixins'; -import { ICredentialsResponse, IUser } from '@/Interface'; -import { ICredentialType } from 'n8n-workflow'; +import type { ICredentialsResponse, IUser } from '@/Interface'; +import type { ICredentialType } from 'n8n-workflow'; import { EnterpriseEditionFeature } from '@/constants'; import { showMessage } from '@/mixins/showMessage'; import CredentialIcon from '@/components/CredentialIcon.vue'; -import { getCredentialPermissions, IPermissions } from '@/permissions'; +import type { IPermissions } from '@/permissions'; +import { getCredentialPermissions } from '@/permissions'; import dateformat from 'dateformat'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/components/CredentialEdit/AuthTypeSelector.vue b/packages/editor-ui/src/components/CredentialEdit/AuthTypeSelector.vue index 1302e574966d4..a462bca0ba578 100644 --- a/packages/editor-ui/src/components/CredentialEdit/AuthTypeSelector.vue +++ b/packages/editor-ui/src/components/CredentialEdit/AuthTypeSelector.vue @@ -1,6 +1,6 @@ <script setup lang="ts"> import ParameterInputFull from '@/components/ParameterInputFull.vue'; -import { IUpdateInformation, NodeAuthenticationOption } from '@/Interface'; +import type { IUpdateInformation, NodeAuthenticationOption } from '@/Interface'; import { useNDVStore } from '@/stores/ndv'; import { useNodeTypesStore } from '@/stores/nodeTypes'; import { @@ -9,7 +9,7 @@ import { getNodeAuthOptions, isAuthRelatedParameter, } from '@/utils'; -import { INodeProperties, INodeTypeDescription, NodeParameterValue } from 'n8n-workflow'; +import type { INodeProperties, INodeTypeDescription, NodeParameterValue } from 'n8n-workflow'; import { computed, onMounted, ref } from 'vue'; import Vue from 'vue'; diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialConfig.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialConfig.vue index c94fcba3c114c..8d173f4506c0a 100644 --- a/packages/editor-ui/src/components/CredentialEdit/CredentialConfig.vue +++ b/packages/editor-ui/src/components/CredentialEdit/CredentialConfig.vue @@ -128,7 +128,7 @@ </template> <script lang="ts"> -import { ICredentialType, INodeTypeDescription } from 'n8n-workflow'; +import type { ICredentialType, INodeTypeDescription } from 'n8n-workflow'; import { getAppNameFromCredType, isCommunityPackageName } from '@/utils'; import Banner from '../Banner.vue'; @@ -137,7 +137,7 @@ import CredentialInputs from './CredentialInputs.vue'; import OauthButton from './OauthButton.vue'; import { addCredentialTranslation } from '@/plugins/i18n'; import { BUILTIN_CREDENTIALS_DOCS_URL, DOCS_DOMAIN, EnterpriseEditionFeature } from '@/constants'; -import { IPermissions } from '@/permissions'; +import type { IPermissions } from '@/permissions'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useWorkflowsStore } from '@/stores/workflows'; @@ -145,7 +145,7 @@ import { useRootStore } from '@/stores/n8nRootStore'; import { useNDVStore } from '@/stores/ndv'; import { useCredentialsStore } from '@/stores/credentials'; import { useNodeTypesStore } from '@/stores/nodeTypes'; -import { ICredentialsResponse } from '@/Interface'; +import type { ICredentialsResponse } from '@/Interface'; import AuthTypeSelector from '@/components/CredentialEdit/AuthTypeSelector.vue'; import GoogleAuthButton from './GoogleAuthButton.vue'; import Vue from 'vue'; diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue index 5f37e2b0bdc10..f7b6f816090d3 100644 --- a/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue +++ b/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue @@ -113,7 +113,7 @@ import Vue from 'vue'; import type { ICredentialsResponse, IUser, NewCredentialsModal } from '@/Interface'; -import { +import type { CredentialInformation, ICredentialDataDecryptedObject, ICredentialNodeAccess, @@ -125,8 +125,8 @@ import { INodeProperties, INodeTypeDescription, ITelemetryTrackProperties, - NodeHelpers, } from 'n8n-workflow'; +import { NodeHelpers } from 'n8n-workflow'; import CredentialIcon from '../CredentialIcon.vue'; import mixins from 'vue-typed-mixins'; @@ -140,10 +140,12 @@ import SaveButton from '../SaveButton.vue'; import Modal from '../Modal.vue'; import InlineNameEdit from '../InlineNameEdit.vue'; import { CREDENTIAL_EDIT_MODAL_KEY, EnterpriseEditionFeature } from '@/constants'; -import { IDataObject } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; import FeatureComingSoon from '../FeatureComingSoon.vue'; -import { getCredentialPermissions, IPermissions } from '@/permissions'; -import { createEventBus, IMenuItem } from 'n8n-design-system'; +import type { IPermissions } from '@/permissions'; +import { getCredentialPermissions } from '@/permissions'; +import type { IMenuItem } from 'n8n-design-system'; +import { createEventBus } from 'n8n-design-system'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useSettingsStore } from '@/stores/settings'; diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialInfo.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialInfo.vue index 0e086633e5d75..bb798284fc343 100644 --- a/packages/editor-ui/src/components/CredentialEdit/CredentialInfo.vue +++ b/packages/editor-ui/src/components/CredentialEdit/CredentialInfo.vue @@ -71,7 +71,7 @@ import { defineComponent } from 'vue'; import TimeAgo from '../TimeAgo.vue'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { INodeTypeDescription } from 'n8n-workflow'; export default defineComponent({ name: 'CredentialInfo', diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialInputs.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialInputs.vue index 9b7b01deca7f0..fd471e5f5735d 100644 --- a/packages/editor-ui/src/components/CredentialEdit/CredentialInputs.vue +++ b/packages/editor-ui/src/components/CredentialEdit/CredentialInputs.vue @@ -25,8 +25,8 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { IParameterLabel } from 'n8n-workflow'; -import { IUpdateInformation } from '@/Interface'; +import type { IParameterLabel } from 'n8n-workflow'; +import type { IUpdateInformation } from '@/Interface'; import ParameterInputExpanded from '../ParameterInputExpanded.vue'; export default defineComponent({ diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue index 5bea9fa37d62f..bf2bc27d46e9e 100644 --- a/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue +++ b/packages/editor-ui/src/components/CredentialEdit/CredentialSharing.ee.vue @@ -80,7 +80,8 @@ </template> <script lang="ts"> -import { IUser, IUserListAction, UIState } from '@/Interface'; +import type { IUser, IUserListAction } from '@/Interface'; +import { UIState } from '@/Interface'; import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; import { mapStores } from 'pinia'; diff --git a/packages/editor-ui/src/components/CredentialIcon.vue b/packages/editor-ui/src/components/CredentialIcon.vue index 593e9dcbecdc7..5041d365efff3 100644 --- a/packages/editor-ui/src/components/CredentialIcon.vue +++ b/packages/editor-ui/src/components/CredentialIcon.vue @@ -10,7 +10,7 @@ import { useCredentialsStore } from '@/stores/credentials'; import { useRootStore } from '@/stores/n8nRootStore'; import { useNodeTypesStore } from '@/stores/nodeTypes'; -import { ICredentialType, INodeTypeDescription } from 'n8n-workflow'; +import type { ICredentialType, INodeTypeDescription } from 'n8n-workflow'; import { mapStores } from 'pinia'; import { defineComponent } from 'vue'; diff --git a/packages/editor-ui/src/components/CredentialsSelect.vue b/packages/editor-ui/src/components/CredentialsSelect.vue index bd5663017ab4b..7820cfd47500c 100644 --- a/packages/editor-ui/src/components/CredentialsSelect.vue +++ b/packages/editor-ui/src/components/CredentialsSelect.vue @@ -55,13 +55,13 @@ </template> <script lang="ts"> -import { ICredentialType } from 'n8n-workflow'; +import type { ICredentialType } from 'n8n-workflow'; import Vue, { defineComponent } from 'vue'; import ScopesNotice from '@/components/ScopesNotice.vue'; import NodeCredentials from '@/components/NodeCredentials.vue'; import { mapStores } from 'pinia'; import { useCredentialsStore } from '@/stores/credentials'; -import { N8nSelect } from 'n8n-design-system'; +import type { N8nSelect } from 'n8n-design-system'; type N8nSelectRef = InstanceType<typeof N8nSelect>; diff --git a/packages/editor-ui/src/components/DeleteUserModal.vue b/packages/editor-ui/src/components/DeleteUserModal.vue index ba21d42ae6021..2b644b1d11512 100644 --- a/packages/editor-ui/src/components/DeleteUserModal.vue +++ b/packages/editor-ui/src/components/DeleteUserModal.vue @@ -74,7 +74,7 @@ import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; import Modal from './Modal.vue'; -import { IUser } from '../Interface'; +import type { IUser } from '../Interface'; import { mapStores } from 'pinia'; import { useUsersStore } from '@/stores/users'; import { createEventBus } from '@/event-bus'; diff --git a/packages/editor-ui/src/components/Draggable.vue b/packages/editor-ui/src/components/Draggable.vue index a92f3a2490229..ce5c9ea0c48ff 100644 --- a/packages/editor-ui/src/components/Draggable.vue +++ b/packages/editor-ui/src/components/Draggable.vue @@ -16,7 +16,7 @@ </template> <script lang="ts"> -import { XYPosition } from '@/Interface'; +import type { XYPosition } from '@/Interface'; import { useNDVStore } from '@/stores/ndv'; import { mapStores } from 'pinia'; import { defineComponent } from 'vue'; diff --git a/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue b/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue index 2c8e65d4309e3..653030aec09c3 100644 --- a/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue +++ b/packages/editor-ui/src/components/DuplicateWorkflowDialog.vue @@ -59,8 +59,9 @@ import Modal from './Modal.vue'; import { mapStores } from 'pinia'; import { useSettingsStore } from '@/stores/settings'; import { useWorkflowsStore } from '@/stores/workflows'; -import { IWorkflowDataUpdate } from '@/Interface'; -import { getWorkflowPermissions, IPermissions } from '@/permissions'; +import type { IWorkflowDataUpdate } from '@/Interface'; +import type { IPermissions } from '@/permissions'; +import { getWorkflowPermissions } from '@/permissions'; import { useUsersStore } from '@/stores/users'; import { createEventBus } from '@/event-bus'; import { useCredentialsStore } from '@/stores'; diff --git a/packages/editor-ui/src/components/EnterpriseEdition.ee.vue b/packages/editor-ui/src/components/EnterpriseEdition.ee.vue index 5336d02244fa5..5e73ce911a3d3 100644 --- a/packages/editor-ui/src/components/EnterpriseEdition.ee.vue +++ b/packages/editor-ui/src/components/EnterpriseEdition.ee.vue @@ -7,7 +7,7 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { EnterpriseEditionFeature } from '@/constants'; +import type { EnterpriseEditionFeature } from '@/constants'; import { mapStores } from 'pinia'; import { useSettingsStore } from '@/stores/settings'; diff --git a/packages/editor-ui/src/components/Error/NodeErrorView.vue b/packages/editor-ui/src/components/Error/NodeErrorView.vue index c04c6209f7a34..3386d4996923f 100644 --- a/packages/editor-ui/src/components/Error/NodeErrorView.vue +++ b/packages/editor-ui/src/components/Error/NodeErrorView.vue @@ -126,7 +126,7 @@ import mixins from 'vue-typed-mixins'; import { MAX_DISPLAY_DATA_SIZE } from '@/constants'; import { INodeUi } from '@/Interface'; -import { INodeProperties, INodePropertyCollection, INodePropertyOptions } from 'n8n-workflow'; +import type { INodeProperties, INodePropertyCollection, INodePropertyOptions } from 'n8n-workflow'; import { sanitizeHtml } from '@/utils'; import { mapStores } from 'pinia'; import { useNDVStore } from '@/stores/ndv'; diff --git a/packages/editor-ui/src/components/ExecutionsList.vue b/packages/editor-ui/src/components/ExecutionsList.vue index cb677762bcf6a..b5db196fb6b3f 100644 --- a/packages/editor-ui/src/components/ExecutionsList.vue +++ b/packages/editor-ui/src/components/ExecutionsList.vue @@ -274,7 +274,7 @@ import { VIEWS, WAIT_TIME_UNLIMITED } from '@/constants'; import { genericHelpers } from '@/mixins/genericHelpers'; import { executionHelpers } from '@/mixins/executionsHelpers'; import { showMessage } from '@/mixins/showMessage'; -import { +import type { IExecutionsCurrentSummaryExtended, IExecutionDeleteFilter, IExecutionsListResponse, diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionCard.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionCard.vue index 473df7d31a093..7778795f91c2e 100644 --- a/packages/editor-ui/src/components/ExecutionsView/ExecutionCard.vue +++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionCard.vue @@ -81,9 +81,10 @@ </template> <script lang="ts"> -import { IExecutionsSummary } from '@/Interface'; +import type { IExecutionsSummary } from '@/Interface'; import mixins from 'vue-typed-mixins'; -import { executionHelpers, IExecutionUIData } from '@/mixins/executionsHelpers'; +import type { IExecutionUIData } from '@/mixins/executionsHelpers'; +import { executionHelpers } from '@/mixins/executionsHelpers'; import { VIEWS } from '@/constants'; import { showMessage } from '@/mixins/showMessage'; import ExecutionTime from '@/components/ExecutionTime.vue'; diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionPreview.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionPreview.vue index 50c328b275b14..c4f8c7c11e049 100644 --- a/packages/editor-ui/src/components/ExecutionsView/ExecutionPreview.vue +++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionPreview.vue @@ -129,7 +129,8 @@ import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; import WorkflowPreview from '@/components/WorkflowPreview.vue'; -import { executionHelpers, IExecutionUIData } from '@/mixins/executionsHelpers'; +import type { IExecutionUIData } from '@/mixins/executionsHelpers'; +import { executionHelpers } from '@/mixins/executionsHelpers'; import { VIEWS } from '@/constants'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue index d899e89698c54..105daef49d918 100644 --- a/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue +++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionsInfoAccordion.vue @@ -42,7 +42,8 @@ import { useUIStore } from '@/stores/ui'; import { useWorkflowsStore } from '@/stores/workflows'; import { mapStores } from 'pinia'; import { PLACEHOLDER_EMPTY_WORKFLOW_ID, WORKFLOW_SETTINGS_MODAL_KEY } from '@/constants'; -import { deepCopy, IWorkflowSettings } from 'n8n-workflow'; +import type { IWorkflowSettings } from 'n8n-workflow'; +import { deepCopy } from 'n8n-workflow'; import mixins from 'vue-typed-mixins'; import { workflowHelpers } from '@/mixins/workflowHelpers'; diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue index 3069e844d87e1..45e4d333ef9c8 100644 --- a/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue +++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionsList.vue @@ -32,26 +32,26 @@ import { VIEWS, WEBHOOK_NODE_TYPE, } from '@/constants'; -import { +import type { ExecutionFilterType, IExecutionsListResponse, INodeUi, ITag, IWorkflowDb, } from '@/Interface'; -import { +import type { IExecutionsSummary, IConnection, IConnections, IDataObject, INodeTypeDescription, INodeTypeNameVersion, - NodeHelpers, } from 'n8n-workflow'; +import { NodeHelpers } from 'n8n-workflow'; import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; import { v4 as uuid } from 'uuid'; -import { Route } from 'vue-router'; +import type { Route } from 'vue-router'; import { executionHelpers } from '@/mixins/executionsHelpers'; import { range as _range } from 'lodash-es'; import { debounceHelper } from '@/mixins/debounce'; diff --git a/packages/editor-ui/src/components/ExecutionsView/ExecutionsSidebar.vue b/packages/editor-ui/src/components/ExecutionsView/ExecutionsSidebar.vue index ad0d7803dd514..df91780f8b888 100644 --- a/packages/editor-ui/src/components/ExecutionsView/ExecutionsSidebar.vue +++ b/packages/editor-ui/src/components/ExecutionsView/ExecutionsSidebar.vue @@ -69,13 +69,13 @@ import ExecutionsInfoAccordion from '@/components/ExecutionsView/ExecutionsInfoA import ExecutionFilter from '@/components/ExecutionFilter.vue'; import { VIEWS } from '@/constants'; import type { IExecutionsSummary } from 'n8n-workflow'; -import { Route } from 'vue-router'; +import type { Route } from 'vue-router'; import { defineComponent } from 'vue'; -import { PropType } from 'vue'; +import type { PropType } from 'vue'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useWorkflowsStore } from '@/stores/workflows'; -import { ExecutionFilterType } from '@/Interface'; +import type { ExecutionFilterType } from '@/Interface'; type ExecutionCardRef = InstanceType<typeof ExecutionCard>; diff --git a/packages/editor-ui/src/components/ExpressionEdit.vue b/packages/editor-ui/src/components/ExpressionEdit.vue index 32daae6fda8bb..a8d896cee968f 100644 --- a/packages/editor-ui/src/components/ExpressionEdit.vue +++ b/packages/editor-ui/src/components/ExpressionEdit.vue @@ -78,7 +78,7 @@ import ExpressionEditorModalInput from '@/components/ExpressionEditorModal/Expre import ExpressionEditorModalOutput from '@/components/ExpressionEditorModal/ExpressionEditorModalOutput.vue'; import VariableSelector from '@/components/VariableSelector.vue'; -import { IVariableItemSelected } from '@/Interface'; +import type { IVariableItemSelected } from '@/Interface'; import { externalHooks } from '@/mixins/externalHooks'; import { genericHelpers } from '@/mixins/genericHelpers'; diff --git a/packages/editor-ui/src/components/FeatureComingSoon.vue b/packages/editor-ui/src/components/FeatureComingSoon.vue index a34205cac75db..637f1028ecbae 100644 --- a/packages/editor-ui/src/components/FeatureComingSoon.vue +++ b/packages/editor-ui/src/components/FeatureComingSoon.vue @@ -29,7 +29,7 @@ </template> <script lang="ts"> -import { IFakeDoor } from '@/Interface'; +import type { IFakeDoor } from '@/Interface'; import { useRootStore } from '@/stores/n8nRootStore'; import { useSettingsStore } from '@/stores/settings'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/components/FixedCollectionParameter.vue b/packages/editor-ui/src/components/FixedCollectionParameter.vue index 4d47f6c5cdcd3..b817034551054 100644 --- a/packages/editor-ui/src/components/FixedCollectionParameter.vue +++ b/packages/editor-ui/src/components/FixedCollectionParameter.vue @@ -116,13 +116,13 @@ import { defineComponent } from 'vue'; import type { Component, PropType } from 'vue'; import type { IUpdateInformation } from '@/Interface'; -import { deepCopy, isINodePropertyCollectionList } from 'n8n-workflow'; import type { INodeParameters, INodeProperties, INodePropertyCollection, NodeParameterValue, } from 'n8n-workflow'; +import { deepCopy, isINodePropertyCollectionList } from 'n8n-workflow'; import { get } from 'lodash-es'; diff --git a/packages/editor-ui/src/components/HoverableNodeIcon.vue b/packages/editor-ui/src/components/HoverableNodeIcon.vue index 3507547aab365..5b6e5a634cc9c 100644 --- a/packages/editor-ui/src/components/HoverableNodeIcon.vue +++ b/packages/editor-ui/src/components/HoverableNodeIcon.vue @@ -42,8 +42,8 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { ITemplatesNode } from '@/Interface'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { ITemplatesNode } from '@/Interface'; +import type { INodeTypeDescription } from 'n8n-workflow'; import { mapStores } from 'pinia'; import { useRootStore } from '@/stores/n8nRootStore'; diff --git a/packages/editor-ui/src/components/HtmlEditor/HtmlEditor.vue b/packages/editor-ui/src/components/HtmlEditor/HtmlEditor.vue index 133c9be7514e0..0d6488d9b8ad2 100644 --- a/packages/editor-ui/src/components/HtmlEditor/HtmlEditor.vue +++ b/packages/editor-ui/src/components/HtmlEditor/HtmlEditor.vue @@ -18,7 +18,9 @@ import { indentOnInput, LanguageSupport, } from '@codemirror/language'; -import { EditorState, Extension } from '@codemirror/state'; +import type { Extension } from '@codemirror/state'; +import { EditorState } from '@codemirror/state'; +import type { ViewUpdate } from '@codemirror/view'; import { dropCursor, EditorView, @@ -26,7 +28,6 @@ import { highlightActiveLineGutter, keymap, lineNumbers, - ViewUpdate, } from '@codemirror/view'; import { n8nCompletionSources } from '@/plugins/codemirror/completions/addCompletions'; diff --git a/packages/editor-ui/src/components/ImportCurlModal.vue b/packages/editor-ui/src/components/ImportCurlModal.vue index 4baa06600ebdb..03b30cbd258d6 100644 --- a/packages/editor-ui/src/components/ImportCurlModal.vue +++ b/packages/editor-ui/src/components/ImportCurlModal.vue @@ -48,7 +48,7 @@ import { } from '../constants'; import { showMessage } from '@/mixins/showMessage'; import mixins from 'vue-typed-mixins'; -import { INodeUi } from '@/Interface'; +import type { INodeUi } from '@/Interface'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useNDVStore } from '@/stores/ndv'; diff --git a/packages/editor-ui/src/components/InputPanel.vue b/packages/editor-ui/src/components/InputPanel.vue index c52d2a1e666cf..67622724a4686 100644 --- a/packages/editor-ui/src/components/InputPanel.vue +++ b/packages/editor-ui/src/components/InputPanel.vue @@ -131,8 +131,8 @@ </template> <script lang="ts"> -import { INodeUi } from '@/Interface'; -import { IConnectedNode, INodeTypeDescription, Workflow } from 'n8n-workflow'; +import type { INodeUi } from '@/Interface'; +import type { IConnectedNode, INodeTypeDescription, Workflow } from 'n8n-workflow'; import RunData from './RunData.vue'; import { workflowHelpers } from '@/mixins/workflowHelpers'; import mixins from 'vue-typed-mixins'; diff --git a/packages/editor-ui/src/components/InviteUsersModal.vue b/packages/editor-ui/src/components/InviteUsersModal.vue index 7e4422826c322..a6fca050e841d 100644 --- a/packages/editor-ui/src/components/InviteUsersModal.vue +++ b/packages/editor-ui/src/components/InviteUsersModal.vue @@ -69,7 +69,7 @@ import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; import { copyPaste } from '@/mixins/copyPaste'; import Modal from './Modal.vue'; -import { IFormInputs, IInviteResponse, IUser } from '@/Interface'; +import type { IFormInputs, IInviteResponse, IUser } from '@/Interface'; import { VALID_EMAIL_REGEX, INVITE_USER_MODAL_KEY } from '@/constants'; import { ROLE } from '@/utils'; import { mapStores } from 'pinia'; diff --git a/packages/editor-ui/src/components/MainHeader/MainHeader.vue b/packages/editor-ui/src/components/MainHeader/MainHeader.vue index d4ab9e107fffe..66a7bb111522c 100644 --- a/packages/editor-ui/src/components/MainHeader/MainHeader.vue +++ b/packages/editor-ui/src/components/MainHeader/MainHeader.vue @@ -25,9 +25,9 @@ import { STICKY_NODE_TYPE, VIEWS, } from '@/constants'; -import { IExecutionsSummary, INodeUi, ITabBarItem } from '@/Interface'; +import type { IExecutionsSummary, INodeUi, ITabBarItem } from '@/Interface'; import { workflowHelpers } from '@/mixins/workflowHelpers'; -import { Route } from 'vue-router'; +import type { Route } from 'vue-router'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useNDVStore } from '@/stores/ndv'; diff --git a/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue b/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue index a3980e16372ba..17f07f54cfd75 100644 --- a/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue +++ b/packages/editor-ui/src/components/MainHeader/WorkflowDetails.vue @@ -145,7 +145,7 @@ import SaveButton from '@/components/SaveButton.vue'; import TagsDropdown from '@/components/TagsDropdown.vue'; import InlineTextEdit from '@/components/InlineTextEdit.vue'; import BreakpointsObserver from '@/components/BreakpointsObserver.vue'; -import { IUser, IWorkflowDataUpdate, IWorkflowDb, IWorkflowToShare } from '@/Interface'; +import type { IUser, IWorkflowDataUpdate, IWorkflowDb, IWorkflowToShare } from '@/Interface'; import { saveAs } from 'file-saver'; import { useTitleChange } from '@/composables/useTitleChange'; @@ -156,7 +156,8 @@ import { useSettingsStore } from '@/stores/settings'; import { useWorkflowsStore } from '@/stores/workflows'; import { useRootStore } from '@/stores/n8nRootStore'; import { useTagsStore } from '@/stores/tags'; -import { getWorkflowPermissions, IPermissions } from '@/permissions'; +import type { IPermissions } from '@/permissions'; +import { getWorkflowPermissions } from '@/permissions'; import { useUsersStore } from '@/stores/users'; import { useUsageStore } from '@/stores/usage'; import { createEventBus } from '@/event-bus'; diff --git a/packages/editor-ui/src/components/MainSidebar.vue b/packages/editor-ui/src/components/MainSidebar.vue index dc412e48efefd..d3c3cff70179e 100644 --- a/packages/editor-ui/src/components/MainSidebar.vue +++ b/packages/editor-ui/src/components/MainSidebar.vue @@ -91,7 +91,7 @@ </template> <script lang="ts"> -import { IExecutionResponse, IMenuItem, IVersion } from '../Interface'; +import type { IExecutionResponse, IMenuItem, IVersion } from '../Interface'; import GiftNotificationIcon from './GiftNotificationIcon.vue'; import WorkflowSettings from '@/components/WorkflowSettings.vue'; diff --git a/packages/editor-ui/src/components/MultipleParameter.vue b/packages/editor-ui/src/components/MultipleParameter.vue index 7934cb2ddc2f1..2202d49e66559 100644 --- a/packages/editor-ui/src/components/MultipleParameter.vue +++ b/packages/editor-ui/src/components/MultipleParameter.vue @@ -87,7 +87,8 @@ import { defineComponent } from 'vue'; import type { PropType } from 'vue'; import type { IUpdateInformation } from '@/Interface'; -import { deepCopy, INodeParameters, INodeProperties } from 'n8n-workflow'; +import type { INodeParameters, INodeProperties } from 'n8n-workflow'; +import { deepCopy } from 'n8n-workflow'; import CollectionParameter from '@/components/CollectionParameter.vue'; import ParameterInputFull from '@/components/ParameterInputFull.vue'; diff --git a/packages/editor-ui/src/components/NDVDraggablePanels.vue b/packages/editor-ui/src/components/NDVDraggablePanels.vue index 25fd9662404ca..5334ee9ea37db 100644 --- a/packages/editor-ui/src/components/NDVDraggablePanels.vue +++ b/packages/editor-ui/src/components/NDVDraggablePanels.vue @@ -37,10 +37,11 @@ </template> <script lang="ts"> -import Vue, { PropType } from 'vue'; +import type { PropType } from 'vue'; +import Vue from 'vue'; import { get } from 'lodash-es'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { INodeTypeDescription } from 'n8n-workflow'; import PanelDragButton from './PanelDragButton.vue'; import { LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH, MAIN_NODE_PANEL_WIDTH } from '@/constants'; diff --git a/packages/editor-ui/src/components/Node.vue b/packages/editor-ui/src/components/Node.vue index 337dac50fe6c7..f4998a070b9b3 100644 --- a/packages/editor-ui/src/components/Node.vue +++ b/packages/editor-ui/src/components/Node.vue @@ -182,7 +182,8 @@ import { nodeHelpers } from '@/mixins/nodeHelpers'; import { workflowHelpers } from '@/mixins/workflowHelpers'; import { pinData } from '@/mixins/pinData'; -import { IDataObject, INodeTypeDescription, ITaskData, NodeHelpers } from 'n8n-workflow'; +import type { INodeTypeDescription, ITaskData } from 'n8n-workflow'; +import { IDataObject, NodeHelpers } from 'n8n-workflow'; import NodeIcon from '@/components/NodeIcon.vue'; import TitledList from '@/components/TitledList.vue'; @@ -191,12 +192,8 @@ import mixins from 'vue-typed-mixins'; import { get } from 'lodash-es'; import { getStyleTokenValue, getTriggerNodeServiceName } from '@/utils'; -import { - IExecutionsSummary, - INodeUi, - INodeUpdatePropertiesInformation, - XYPosition, -} from '@/Interface'; +import type { IExecutionsSummary, INodeUi, XYPosition } from '@/Interface'; +import { INodeUpdatePropertiesInformation } from '@/Interface'; import { debounceHelper } from '@/mixins/debounce'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/components/Node/NodeCreator/ActionItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/ActionItem.vue index 15c18a2e1c4df..6d059d9387e61 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/ActionItem.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/ActionItem.vue @@ -23,9 +23,9 @@ <script setup lang="ts"> import { reactive, computed, toRefs, getCurrentInstance } from 'vue'; -import { INodeTypeDescription, INodeActionTypeDescription } from 'n8n-workflow'; +import type { INodeTypeDescription, INodeActionTypeDescription } from 'n8n-workflow'; import { getNewNodePosition, NODE_SIZE } from '@/utils/nodeViewUtils'; -import { IUpdateInformation } from '@/Interface'; +import type { IUpdateInformation } from '@/Interface'; import NodeIcon from '@/components/NodeIcon.vue'; import { useNodeCreatorStore } from '@/stores/nodeCreator'; diff --git a/packages/editor-ui/src/components/Node/NodeCreator/CategorizedItems.vue b/packages/editor-ui/src/components/Node/NodeCreator/CategorizedItems.vue index 489834064ab7e..31cc8bd698c45 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/CategorizedItems.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/CategorizedItems.vue @@ -96,10 +96,10 @@ import { nextTick, } from 'vue'; import { camelCase } from 'lodash-es'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { INodeTypeDescription } from 'n8n-workflow'; import ItemIterator from './ItemIterator.vue'; import SearchBar from './SearchBar.vue'; -import { +import type { INodeCreateElement, ISubcategoryItemProps, ICategoryItemProps, @@ -108,7 +108,7 @@ import { CategoryCreateElement, INodeItemProps, } from '@/Interface'; -import { BaseTextKey } from '@/plugins/i18n'; +import type { BaseTextKey } from '@/plugins/i18n'; import { sublimeSearch, matchesNodeType, matchesSelectType } from '@/utils'; import { useWorkflowsStore } from '@/stores/workflows'; import { useRootStore } from '@/stores/n8nRootStore'; diff --git a/packages/editor-ui/src/components/Node/NodeCreator/CategoryItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/CategoryItem.vue index 9dc5eba3fb0d1..d2167b6c0b80c 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/CategoryItem.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/CategoryItem.vue @@ -7,7 +7,7 @@ </template> <script lang="ts" setup> -import { ICategoryItemProps } from '@/Interface'; +import type { ICategoryItemProps } from '@/Interface'; export interface Props { item: ICategoryItemProps; diff --git a/packages/editor-ui/src/components/Node/NodeCreator/ItemIterator.vue b/packages/editor-ui/src/components/Node/NodeCreator/ItemIterator.vue index 8889fb88b40bb..7228fb48136e1 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/ItemIterator.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/ItemIterator.vue @@ -57,7 +57,7 @@ </template> <script setup lang="ts"> -import { INodeCreateElement, NodeCreateElement } from '@/Interface'; +import type { INodeCreateElement, NodeCreateElement } from '@/Interface'; import NodeItem from './NodeItem.vue'; import SubcategoryItem from './SubcategoryItem.vue'; import CategoryItem from './CategoryItem.vue'; diff --git a/packages/editor-ui/src/components/Node/NodeCreator/MainPanel.vue b/packages/editor-ui/src/components/Node/NodeCreator/MainPanel.vue index 1837528ba94e9..4933d8909f8b0 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/MainPanel.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/MainPanel.vue @@ -79,12 +79,9 @@ <script setup lang="ts"> import { reactive, toRefs, getCurrentInstance, computed, onUnmounted, ref } from 'vue'; -import { - INodeTypeDescription, - INodeActionTypeDescription, - INodeTypeNameVersion, -} from 'n8n-workflow'; -import { +import type { INodeTypeDescription, INodeActionTypeDescription } from 'n8n-workflow'; +import { INodeTypeNameVersion } from 'n8n-workflow'; +import type { INodeCreateElement, NodeCreateElement, IActionItemProps, @@ -106,7 +103,7 @@ import CategorizedItems from './CategorizedItems.vue'; import { useNodeCreatorStore } from '@/stores/nodeCreator'; import { getCategoriesWithNodes, getCategorizedList } from '@/utils'; import { useNodeTypesStore } from '@/stores/nodeTypes'; -import { BaseTextKey } from '@/plugins/i18n'; +import type { BaseTextKey } from '@/plugins/i18n'; import NoResults from './NoResults.vue'; import { useRootStore } from '@/stores/n8nRootStore'; import useMainPanelView from './useMainPanelView'; diff --git a/packages/editor-ui/src/components/Node/NodeCreator/NodeItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/NodeItem.vue index 62dd517abc4fb..bb4acccec7c41 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/NodeItem.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/NodeItem.vue @@ -40,7 +40,7 @@ <script setup lang="ts"> import { reactive, computed, toRefs, getCurrentInstance } from 'vue'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { INodeTypeDescription } from 'n8n-workflow'; import { getNewNodePosition, NODE_SIZE } from '@/utils/nodeViewUtils'; import { isCommunityPackageName } from '@/utils'; diff --git a/packages/editor-ui/src/components/Node/NodeCreator/SearchBar.vue b/packages/editor-ui/src/components/Node/NodeCreator/SearchBar.vue index 97f19c9d13a14..5e1c5ecea1b0d 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/SearchBar.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/SearchBar.vue @@ -25,7 +25,7 @@ <script setup lang="ts"> import { onMounted, reactive, toRefs, onBeforeUnmount } from 'vue'; -import { EventBus } from '@/event-bus'; +import type { EventBus } from '@/event-bus'; import { useExternalHooks } from '@/composables'; export interface Props { diff --git a/packages/editor-ui/src/components/Node/NodeCreator/SubcategoryItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/SubcategoryItem.vue index 903b45cb3e38c..cd1dc00f58c8d 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/SubcategoryItem.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/SubcategoryItem.vue @@ -13,7 +13,7 @@ </template> <script setup lang="ts"> -import { ISubcategoryItemProps } from '@/Interface'; +import type { ISubcategoryItemProps } from '@/Interface'; import { camelCase } from 'lodash-es'; import { computed } from 'vue'; export interface Props { diff --git a/packages/editor-ui/src/components/Node/NodeCreator/ViewItem.vue b/packages/editor-ui/src/components/Node/NodeCreator/ViewItem.vue index b331301137922..66b24bc14eb24 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/ViewItem.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/ViewItem.vue @@ -21,7 +21,7 @@ </template> <script setup lang="ts"> -import { ViewItemProps } from '@/Interface'; +import type { ViewItemProps } from '@/Interface'; export interface Props { view: ViewItemProps; diff --git a/packages/editor-ui/src/components/NodeCredentials.vue b/packages/editor-ui/src/components/NodeCredentials.vue index 796a83cda43f4..134a1d64d36d4 100644 --- a/packages/editor-ui/src/components/NodeCredentials.vue +++ b/packages/editor-ui/src/components/NodeCredentials.vue @@ -97,14 +97,14 @@ </template> <script lang="ts"> -import { PropType } from 'vue'; -import { +import type { PropType } from 'vue'; +import type { ICredentialsResponse, INodeUi, INodeUpdatePropertiesInformation, IUser, } from '@/Interface'; -import { +import type { ICredentialType, INodeCredentialDescription, INodeCredentialsDetails, diff --git a/packages/editor-ui/src/components/NodeDetailsView.vue b/packages/editor-ui/src/components/NodeDetailsView.vue index 5dd3ed32fd800..3b1f61035c60f 100644 --- a/packages/editor-ui/src/components/NodeDetailsView.vue +++ b/packages/editor-ui/src/components/NodeDetailsView.vue @@ -124,15 +124,15 @@ </template> <script lang="ts"> -import { +import type { INodeConnections, INodeTypeDescription, IRunData, IRunExecutionData, Workflow, - jsonParse, } from 'n8n-workflow'; -import { IExecutionResponse, INodeUi, IUpdateInformation, TargetItem } from '@/Interface'; +import { jsonParse } from 'n8n-workflow'; +import type { IExecutionResponse, INodeUi, IUpdateInformation, TargetItem } from '@/Interface'; import { externalHooks } from '@/mixins/externalHooks'; import { nodeHelpers } from '@/mixins/nodeHelpers'; diff --git a/packages/editor-ui/src/components/NodeExecuteButton.vue b/packages/editor-ui/src/components/NodeExecuteButton.vue index 490ddb21c1180..bd43cc2bc889a 100644 --- a/packages/editor-ui/src/components/NodeExecuteButton.vue +++ b/packages/editor-ui/src/components/NodeExecuteButton.vue @@ -19,8 +19,8 @@ <script lang="ts"> import { WEBHOOK_NODE_TYPE, MANUAL_TRIGGER_NODE_TYPE } from '@/constants'; -import { INodeUi } from '@/Interface'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { INodeUi } from '@/Interface'; +import type { INodeTypeDescription } from 'n8n-workflow'; import mixins from 'vue-typed-mixins'; import { workflowRun } from '@/mixins/workflowRun'; import { pinData } from '@/mixins/pinData'; diff --git a/packages/editor-ui/src/components/NodeIcon.vue b/packages/editor-ui/src/components/NodeIcon.vue index 71ab7776390fb..17428e4430dca 100644 --- a/packages/editor-ui/src/components/NodeIcon.vue +++ b/packages/editor-ui/src/components/NodeIcon.vue @@ -14,9 +14,9 @@ </template> <script lang="ts"> -import { IVersionNode } from '@/Interface'; +import type { IVersionNode } from '@/Interface'; import { useRootStore } from '@/stores/n8nRootStore'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { INodeTypeDescription } from 'n8n-workflow'; import { mapStores } from 'pinia'; import { defineComponent } from 'vue'; diff --git a/packages/editor-ui/src/components/NodeList.vue b/packages/editor-ui/src/components/NodeList.vue index b041f21d525ce..39254c975e4cb 100644 --- a/packages/editor-ui/src/components/NodeList.vue +++ b/packages/editor-ui/src/components/NodeList.vue @@ -15,7 +15,7 @@ <script lang="ts"> import NodeIcon from '@/components/NodeIcon.vue'; import { genericHelpers } from '@/mixins/genericHelpers'; -import { ITemplatesNode } from '@/Interface'; +import type { ITemplatesNode } from '@/Interface'; import mixins from 'vue-typed-mixins'; import { filterTemplateNodes } from '@/utils'; export default mixins(genericHelpers).extend({ diff --git a/packages/editor-ui/src/components/NodeSettings.vue b/packages/editor-ui/src/components/NodeSettings.vue index 65e678568aef9..4653b6c446a8a 100644 --- a/packages/editor-ui/src/components/NodeSettings.vue +++ b/packages/editor-ui/src/components/NodeSettings.vue @@ -157,23 +157,22 @@ </template> <script lang="ts"> -import Vue, { PropType } from 'vue'; -import { +import type { PropType } from 'vue'; +import Vue from 'vue'; +import type { INodeTypeDescription, INodeParameters, INodeProperties, - NodeHelpers, NodeParameterValue, - deepCopy, } from 'n8n-workflow'; -import { - ICredentialsResponse, +import { NodeHelpers, deepCopy } from 'n8n-workflow'; +import type { INodeUi, INodeUpdatePropertiesInformation, IUpdateInformation, IUsedCredential, - IUser, } from '@/Interface'; +import { ICredentialsResponse, IUser } from '@/Interface'; import { COMMUNITY_NODES_INSTALLATION_DOCS_URL, @@ -205,7 +204,7 @@ import { useHistoryStore } from '@/stores/history'; import { RenameNodeCommand } from '@/models/history'; import useWorkflowsEEStore from '@/stores/workflows.ee'; import { useCredentialsStore } from '@/stores/credentials'; -import { EventBus } from '@/event-bus'; +import type { EventBus } from '@/event-bus'; export default mixins(externalHooks, nodeHelpers).extend({ name: 'NodeSettings', diff --git a/packages/editor-ui/src/components/NodeSettingsTabs.vue b/packages/editor-ui/src/components/NodeSettingsTabs.vue index 977c9b98e5450..737a4527f0414 100644 --- a/packages/editor-ui/src/components/NodeSettingsTabs.vue +++ b/packages/editor-ui/src/components/NodeSettingsTabs.vue @@ -9,10 +9,10 @@ import { COMMUNITY_NODES_INSTALLATION_DOCS_URL, NPM_PACKAGE_DOCS_BASE_URL, } from '@/constants'; -import { INodeUi, ITab } from '@/Interface'; +import type { INodeUi, ITab } from '@/Interface'; import { useNDVStore } from '@/stores/ndv'; import { useWorkflowsStore } from '@/stores/workflows'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { INodeTypeDescription } from 'n8n-workflow'; import { mapStores } from 'pinia'; import mixins from 'vue-typed-mixins'; diff --git a/packages/editor-ui/src/components/NodeWebhooks.vue b/packages/editor-ui/src/components/NodeWebhooks.vue index f6d8d34592cdd..9e50397f45529 100644 --- a/packages/editor-ui/src/components/NodeWebhooks.vue +++ b/packages/editor-ui/src/components/NodeWebhooks.vue @@ -58,7 +58,7 @@ </template> <script lang="ts"> -import { INodeTypeDescription, IWebhookDescription } from 'n8n-workflow'; +import type { INodeTypeDescription, IWebhookDescription } from 'n8n-workflow'; import { WEBHOOK_NODE_TYPE } from '@/constants'; import { copyPaste } from '@/mixins/copyPaste'; diff --git a/packages/editor-ui/src/components/OutputPanel.vue b/packages/editor-ui/src/components/OutputPanel.vue index 5c764637c0ddd..ae84c84a53ce9 100644 --- a/packages/editor-ui/src/components/OutputPanel.vue +++ b/packages/editor-ui/src/components/OutputPanel.vue @@ -98,9 +98,9 @@ </template> <script lang="ts"> -import { IExecutionResponse, INodeUi } from '@/Interface'; -import { INodeTypeDescription, IRunData, IRunExecutionData, ITaskData } from 'n8n-workflow'; -import Vue from 'vue'; +import type { IExecutionResponse, INodeUi } from '@/Interface'; +import type { INodeTypeDescription, IRunData, IRunExecutionData, ITaskData } from 'n8n-workflow'; +import type Vue from 'vue'; import RunData, { EnterEditModeArgs } from './RunData.vue'; import RunInfo from './RunInfo.vue'; import { pinData } from '@/mixins/pinData'; diff --git a/packages/editor-ui/src/components/ParameterInput.vue b/packages/editor-ui/src/components/ParameterInput.vue index 5936310e3178b..840c56599304f 100644 --- a/packages/editor-ui/src/components/ParameterInput.vue +++ b/packages/editor-ui/src/components/ParameterInput.vue @@ -329,10 +329,8 @@ import { get } from 'lodash-es'; -import { INodeUi, INodeUpdatePropertiesInformation } from '@/Interface'; -import { - NodeHelpers, - NodeParameterValue, +import type { INodeUi, INodeUpdatePropertiesInformation } from '@/Interface'; +import type { ILoadOptions, INodeParameters, INodePropertyOptions, @@ -341,6 +339,7 @@ import { INodePropertyCollection, NodeParameterValueType, } from 'n8n-workflow'; +import { NodeHelpers, NodeParameterValue } from 'n8n-workflow'; import CodeEdit from '@/components/CodeEdit.vue'; import CredentialsSelect from '@/components/CredentialsSelect.vue'; @@ -366,7 +365,7 @@ import { hasExpressionMapping, isValueExpression, isResourceLocatorValue } from import mixins from 'vue-typed-mixins'; import { CUSTOM_API_CALL_KEY, HTML_NODE_TYPE } from '@/constants'; import { CODE_NODE_TYPE } from '@/constants'; -import { PropType } from 'vue'; +import type { PropType } from 'vue'; import { debounceHelper } from '@/mixins/debounce'; import { mapStores } from 'pinia'; import { useWorkflowsStore } from '@/stores/workflows'; diff --git a/packages/editor-ui/src/components/ParameterInputExpanded.vue b/packages/editor-ui/src/components/ParameterInputExpanded.vue index ea88d0d013b27..8f427d8c56af4 100644 --- a/packages/editor-ui/src/components/ParameterInputExpanded.vue +++ b/packages/editor-ui/src/components/ParameterInputExpanded.vue @@ -56,13 +56,13 @@ </template> <script lang="ts"> -import { IUpdateInformation } from '@/Interface'; +import type { IUpdateInformation } from '@/Interface'; import ParameterOptions from './ParameterOptions.vue'; import { defineComponent } from 'vue'; import type { PropType } from 'vue'; import ParameterInputWrapper from './ParameterInputWrapper.vue'; import { isValueExpression } from '@/utils'; -import { INodeParameterResourceLocator, INodeProperties, IParameterLabel } from 'n8n-workflow'; +import type { INodeParameterResourceLocator, INodeProperties, IParameterLabel } from 'n8n-workflow'; import { mapStores } from 'pinia'; import { useWorkflowsStore } from '@/stores/workflows'; diff --git a/packages/editor-ui/src/components/ParameterInputFull.vue b/packages/editor-ui/src/components/ParameterInputFull.vue index 35a15f7d2c866..90e0690bc67bd 100644 --- a/packages/editor-ui/src/components/ParameterInputFull.vue +++ b/packages/editor-ui/src/components/ParameterInputFull.vue @@ -69,9 +69,10 @@ </template> <script lang="ts"> -import Vue, { PropType } from 'vue'; +import type { PropType } from 'vue'; +import type Vue from 'vue'; -import { IN8nButton, INodeUi, IRunDataDisplayMode, IUpdateInformation } from '@/Interface'; +import type { IN8nButton, INodeUi, IRunDataDisplayMode, IUpdateInformation } from '@/Interface'; import ParameterOptions from '@/components/ParameterOptions.vue'; import DraggableTarget from '@/components/DraggableTarget.vue'; @@ -84,8 +85,13 @@ import { isValueExpression, } from '@/utils'; import ParameterInputWrapper from '@/components/ParameterInputWrapper.vue'; -import { INodeParameters, INodeProperties, INodePropertyMode, IParameterLabel } from 'n8n-workflow'; -import { BaseTextKey } from '@/plugins/i18n'; +import type { + INodeParameters, + INodeProperties, + INodePropertyMode, + IParameterLabel, +} from 'n8n-workflow'; +import type { BaseTextKey } from '@/plugins/i18n'; import { mapStores } from 'pinia'; import { useNDVStore } from '@/stores/ndv'; import { useSegment } from '@/stores/segment'; diff --git a/packages/editor-ui/src/components/ParameterInputList.vue b/packages/editor-ui/src/components/ParameterInputList.vue index 668ed3588a209..ec0f005191828 100644 --- a/packages/editor-ui/src/components/ParameterInputList.vue +++ b/packages/editor-ui/src/components/ParameterInputList.vue @@ -115,9 +115,10 @@ </template> <script lang="ts"> -import { deepCopy, INodeParameters, INodeProperties, NodeParameterValue } from 'n8n-workflow'; +import type { INodeParameters, INodeProperties, NodeParameterValue } from 'n8n-workflow'; +import { deepCopy } from 'n8n-workflow'; -import { INodeUi, IUpdateInformation } from '@/Interface'; +import type { INodeUi, IUpdateInformation } from '@/Interface'; import MultipleParameter from '@/components/MultipleParameter.vue'; import { workflowHelpers } from '@/mixins/workflowHelpers'; @@ -127,7 +128,7 @@ import ImportParameter from '@/components/ImportParameter.vue'; import { get, set } from 'lodash-es'; import mixins from 'vue-typed-mixins'; -import { Component, PropType } from 'vue'; +import type { Component, PropType } from 'vue'; import { mapStores } from 'pinia'; import { useNDVStore } from '@/stores/ndv'; import { useNodeTypesStore } from '@/stores/nodeTypes'; diff --git a/packages/editor-ui/src/components/ParameterInputWrapper.vue b/packages/editor-ui/src/components/ParameterInputWrapper.vue index 34bfb4d3ead4e..8e29c162cc47f 100644 --- a/packages/editor-ui/src/components/ParameterInputWrapper.vue +++ b/packages/editor-ui/src/components/ParameterInputWrapper.vue @@ -42,21 +42,21 @@ </template> <script lang="ts"> -import Vue, { PropType } from 'vue'; +import type { PropType } from 'vue'; +import type Vue from 'vue'; import ParameterInput from '@/components/ParameterInput.vue'; import InputHint from './ParameterInputHint.vue'; import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; -import { +import type { INodeProperties, INodePropertyMode, - IRunData, - isResourceLocatorValue, NodeParameterValue, NodeParameterValueType, } from 'n8n-workflow'; -import { INodeUi, IUpdateInformation, TargetItem } from '@/Interface'; +import { IRunData, isResourceLocatorValue } from 'n8n-workflow'; +import type { INodeUi, IUpdateInformation, TargetItem } from '@/Interface'; import { workflowHelpers } from '@/mixins/workflowHelpers'; import { isValueExpression } from '@/utils'; import { mapStores } from 'pinia'; diff --git a/packages/editor-ui/src/components/PersonalizationModal.vue b/packages/editor-ui/src/components/PersonalizationModal.vue index 7d38d9de97793..1046bdc2cac0b 100644 --- a/packages/editor-ui/src/components/PersonalizationModal.vue +++ b/packages/editor-ui/src/components/PersonalizationModal.vue @@ -127,9 +127,9 @@ import { import { workflowHelpers } from '@/mixins/workflowHelpers'; import { showMessage } from '@/mixins/showMessage'; import Modal from './Modal.vue'; -import { IFormInputs, IPersonalizationLatestVersion, IUser } from '@/Interface'; +import type { IFormInputs, IPersonalizationLatestVersion, IUser } from '@/Interface'; import { getAccountAge } from '@/utils'; -import { GenericValue } from 'n8n-workflow'; +import type { GenericValue } from 'n8n-workflow'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useSettingsStore } from '@/stores/settings'; diff --git a/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue b/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue index 7ce47af422489..cdb56afbc98e1 100644 --- a/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue +++ b/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue @@ -135,25 +135,27 @@ <script lang="ts"> import mixins from 'vue-typed-mixins'; -import { +import type { ILoadOptions, INode, INodeCredentials, INodeListSearchItems, - INodeListSearchResult, INodeParameterResourceLocator, INodeParameters, INodeProperties, INodePropertyMode, NodeParameterValue, } from 'n8n-workflow'; +import { INodeListSearchResult } from 'n8n-workflow'; import ExpressionParameterInput from '@/components/ExpressionParameterInput.vue'; import DraggableTarget from '@/components/DraggableTarget.vue'; import ExpressionEdit from '@/components/ExpressionEdit.vue'; import ParameterIssues from '@/components/ParameterIssues.vue'; import ResourceLocatorDropdown from './ResourceLocatorDropdown.vue'; -import Vue, { PropType } from 'vue'; -import { INodeUi, IResourceLocatorReqParams, IResourceLocatorResultExpanded } from '@/Interface'; +import type { PropType } from 'vue'; +import type Vue from 'vue'; +import type { IResourceLocatorReqParams, IResourceLocatorResultExpanded } from '@/Interface'; +import { INodeUi } from '@/Interface'; import { debounceHelper } from '@/mixins/debounce'; import stringify from 'fast-json-stable-stringify'; import { workflowHelpers } from '@/mixins/workflowHelpers'; diff --git a/packages/editor-ui/src/components/ResourceLocator/ResourceLocatorDropdown.vue b/packages/editor-ui/src/components/ResourceLocator/ResourceLocatorDropdown.vue index 41755d4d0f6ad..f2702d6a0d767 100644 --- a/packages/editor-ui/src/components/ResourceLocator/ResourceLocatorDropdown.vue +++ b/packages/editor-ui/src/components/ResourceLocator/ResourceLocatorDropdown.vue @@ -78,7 +78,7 @@ </template> <script lang="ts"> -import { IResourceLocatorResultExpanded } from '@/Interface'; +import type { IResourceLocatorResultExpanded } from '@/Interface'; import { defineComponent } from 'vue'; import type { PropType } from 'vue'; diff --git a/packages/editor-ui/src/components/RunData.vue b/packages/editor-ui/src/components/RunData.vue index 2476dbad9a3bc..ef2851a2e8943 100644 --- a/packages/editor-ui/src/components/RunData.vue +++ b/packages/editor-ui/src/components/RunData.vue @@ -459,10 +459,10 @@ </template> <script lang="ts"> -import { PropType } from 'vue'; +import type { PropType } from 'vue'; import mixins from 'vue-typed-mixins'; import { saveAs } from 'file-saver'; -import { +import type { IBinaryData, IBinaryKeyData, IDataObject, @@ -472,7 +472,7 @@ import { IRunExecutionData, } from 'n8n-workflow'; -import { +import type { IExecutionResponse, INodeUi, INodeUpdatePropertiesInformation, diff --git a/packages/editor-ui/src/components/RunDataJson.vue b/packages/editor-ui/src/components/RunDataJson.vue index ea6718d2b526f..83866246a9fcd 100644 --- a/packages/editor-ui/src/components/RunDataJson.vue +++ b/packages/editor-ui/src/components/RunDataJson.vue @@ -70,13 +70,13 @@ </template> <script lang="ts"> -import { PropType } from 'vue'; +import type { PropType } from 'vue'; import mixins from 'vue-typed-mixins'; import VueJsonPretty from 'vue-json-pretty'; -import { IDataObject, INodeExecutionData } from 'n8n-workflow'; +import type { IDataObject, INodeExecutionData } from 'n8n-workflow'; import Draggable from '@/components/Draggable.vue'; import { executionDataToJson, isString, shorten } from '@/utils'; -import { INodeUi } from '@/Interface'; +import type { INodeUi } from '@/Interface'; import { externalHooks } from '@/mixins/externalHooks'; import { mapStores } from 'pinia'; import { useNDVStore } from '@/stores/ndv'; diff --git a/packages/editor-ui/src/components/RunDataJsonActions.vue b/packages/editor-ui/src/components/RunDataJsonActions.vue index d682349948403..ae8776a3de031 100644 --- a/packages/editor-ui/src/components/RunDataJsonActions.vue +++ b/packages/editor-ui/src/components/RunDataJsonActions.vue @@ -27,11 +27,11 @@ </template> <script lang="ts"> -import { PropType } from 'vue'; +import type { PropType } from 'vue'; import mixins from 'vue-typed-mixins'; import jp from 'jsonpath'; -import { INodeUi } from '@/Interface'; -import { IDataObject } from 'n8n-workflow'; +import type { INodeUi } from '@/Interface'; +import type { IDataObject } from 'n8n-workflow'; import { copyPaste } from '@/mixins/copyPaste'; import { pinData } from '@/mixins/pinData'; import { nodeHelpers } from '@/mixins/nodeHelpers'; diff --git a/packages/editor-ui/src/components/RunDataSchema.vue b/packages/editor-ui/src/components/RunDataSchema.vue index fd8afc8d96587..329e9151e5e9a 100644 --- a/packages/editor-ui/src/components/RunDataSchema.vue +++ b/packages/editor-ui/src/components/RunDataSchema.vue @@ -1,13 +1,13 @@ <script lang="ts" setup> import { computed, ref } from 'vue'; import { merge } from 'lodash-es'; -import { INodeUi, Schema } from '@/Interface'; +import type { INodeUi, Schema } from '@/Interface'; import RunDataSchemaItem from '@/components/RunDataSchemaItem.vue'; import Draggable from '@/components/Draggable.vue'; import { useNDVStore } from '@/stores/ndv'; import { useWebhooksStore } from '@/stores/webhooks'; import { telemetry } from '@/plugins/telemetry'; -import { IDataObject } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; import { getSchema, isEmpty, runExternalHook } from '@/utils'; import { i18n } from '@/plugins/i18n'; import MappingPill from './MappingPill.vue'; diff --git a/packages/editor-ui/src/components/RunDataSchemaItem.vue b/packages/editor-ui/src/components/RunDataSchemaItem.vue index 3af9a04e4ef0b..b9d0ae7d39182 100644 --- a/packages/editor-ui/src/components/RunDataSchemaItem.vue +++ b/packages/editor-ui/src/components/RunDataSchemaItem.vue @@ -1,6 +1,6 @@ <script lang="ts" setup> import { computed } from 'vue'; -import { INodeUi, Schema } from '@/Interface'; +import type { INodeUi, Schema } from '@/Interface'; import { checkExhaustive, shorten } from '@/utils'; import { getMappedExpression } from '@/utils/mappingUtils'; diff --git a/packages/editor-ui/src/components/RunDataTable.vue b/packages/editor-ui/src/components/RunDataTable.vue index a295ec913dc6a..20ba934a014a2 100644 --- a/packages/editor-ui/src/components/RunDataTable.vue +++ b/packages/editor-ui/src/components/RunDataTable.vue @@ -162,11 +162,12 @@ <script lang="ts"> /* eslint-disable prefer-spread */ -import { INodeUi, ITableData, NDVState } from '@/Interface'; +import type { INodeUi, ITableData, NDVState } from '@/Interface'; import { getPairedItemId } from '@/utils'; -import Vue, { PropType } from 'vue'; +import type { PropType } from 'vue'; +import type Vue from 'vue'; import mixins from 'vue-typed-mixins'; -import { GenericValue, IDataObject, INodeExecutionData } from 'n8n-workflow'; +import type { GenericValue, IDataObject, INodeExecutionData } from 'n8n-workflow'; import Draggable from './Draggable.vue'; import { shorten } from '@/utils'; import { externalHooks } from '@/mixins/externalHooks'; diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue index a66f1dcf3bd1a..4edc63d535a8c 100644 --- a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue +++ b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationCard.ee.vue @@ -51,15 +51,13 @@ import mixins from 'vue-typed-mixins'; import { EnterpriseEditionFeature } from '@/constants'; import { showMessage } from '@/mixins/showMessage'; import { useLogStreamingStore } from '../../stores/logStreamingStore'; -import Vue, { PropType } from 'vue'; +import type { PropType } from 'vue'; +import Vue from 'vue'; import { mapStores } from 'pinia'; -import { - deepCopy, - defaultMessageEventBusDestinationOptions, - MessageEventBusDestinationOptions, -} from 'n8n-workflow'; -import { BaseTextKey } from '../../plugins/i18n'; -import { EventBus } from '@/event-bus'; +import type { MessageEventBusDestinationOptions } from 'n8n-workflow'; +import { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow'; +import type { BaseTextKey } from '../../plugins/i18n'; +import type { EventBus } from '@/event-bus'; export const DESTINATION_LIST_ITEM_ACTIONS = { OPEN: 'open', diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue index 8a1fc3f125aa1..78e00e080a899 100644 --- a/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue +++ b/packages/editor-ui/src/components/SettingsLogStreaming/EventDestinationSettingsModal.ee.vue @@ -180,20 +180,23 @@ import { useNDVStore } from '../../stores/ndv'; import { useWorkflowsStore } from '../../stores/workflows'; import ParameterInputList from '@/components/ParameterInputList.vue'; import NodeCredentials from '@/components/NodeCredentials.vue'; -import { IMenuItem, INodeUi, ITab, IUpdateInformation } from '../../Interface'; +import type { IMenuItem, INodeUi, ITab, IUpdateInformation } from '../../Interface'; +import type { + IDataObject, + INodeCredentials, + NodeParameterValue, + MessageEventBusDestinationOptions, +} from 'n8n-workflow'; import { deepCopy, defaultMessageEventBusDestinationOptions, defaultMessageEventBusDestinationWebhookOptions, - IDataObject, - INodeCredentials, - NodeParameterValue, MessageEventBusDestinationTypeNames, - MessageEventBusDestinationOptions, defaultMessageEventBusDestinationSyslogOptions, defaultMessageEventBusDestinationSentryOptions, } from 'n8n-workflow'; -import Vue, { PropType } from 'vue'; +import type { PropType } from 'vue'; +import Vue from 'vue'; import { LOG_STREAM_MODAL_KEY } from '../../constants'; import Modal from '@/components/Modal.vue'; import { showMessage } from '@/mixins/showMessage'; @@ -205,12 +208,13 @@ import { sentryModalDescription, syslogModalDescription, } from './descriptions.ee'; -import { BaseTextKey } from '../../plugins/i18n'; +import type { BaseTextKey } from '../../plugins/i18n'; import InlineNameEdit from '../InlineNameEdit.vue'; import SaveButton from '../SaveButton.vue'; import EventSelection from '@/components/SettingsLogStreaming/EventSelection.ee.vue'; import { Checkbox } from 'element-ui'; -import { createEventBus, EventBus } from '@/event-bus'; +import type { EventBus } from '@/event-bus'; +import { createEventBus } from '@/event-bus'; export default mixins(showMessage).extend({ name: 'event-destination-settings-modal', diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue b/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue index a7d0f13b41ed4..0ed8883ef3bae 100644 --- a/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue +++ b/packages/editor-ui/src/components/SettingsLogStreaming/EventSelection.ee.vue @@ -71,7 +71,7 @@ <script lang="ts"> import { Checkbox } from 'element-ui'; import { mapStores } from 'pinia'; -import { BaseTextKey } from '../../plugins/i18n'; +import type { BaseTextKey } from '../../plugins/i18n'; import { useLogStreamingStore } from '../../stores/logStreamingStore'; export default { diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/Helpers.ee.ts b/packages/editor-ui/src/components/SettingsLogStreaming/Helpers.ee.ts index 1f367ed9c1971..23984bc8cf4a2 100644 --- a/packages/editor-ui/src/components/SettingsLogStreaming/Helpers.ee.ts +++ b/packages/editor-ui/src/components/SettingsLogStreaming/Helpers.ee.ts @@ -1,5 +1,9 @@ -import { INodeCredentials, INodeParameters, MessageEventBusDestinationOptions } from 'n8n-workflow'; -import { INodeUi } from '../../Interface'; +import type { + INodeCredentials, + INodeParameters, + MessageEventBusDestinationOptions, +} from 'n8n-workflow'; +import type { INodeUi } from '../../Interface'; export function destinationToFakeINodeUi( destination: MessageEventBusDestinationOptions, diff --git a/packages/editor-ui/src/components/SettingsLogStreaming/descriptions.ee.ts b/packages/editor-ui/src/components/SettingsLogStreaming/descriptions.ee.ts index 1cfa03d2d2cf7..421d9f1451a38 100644 --- a/packages/editor-ui/src/components/SettingsLogStreaming/descriptions.ee.ts +++ b/packages/editor-ui/src/components/SettingsLogStreaming/descriptions.ee.ts @@ -1,4 +1,4 @@ -import { INodeProperties } from 'n8n-workflow'; +import type { INodeProperties } from 'n8n-workflow'; export const webhookModalDescription = [ { diff --git a/packages/editor-ui/src/components/SettingsSidebar.vue b/packages/editor-ui/src/components/SettingsSidebar.vue index eb3c3628fb927..e024bd96be2a4 100644 --- a/packages/editor-ui/src/components/SettingsSidebar.vue +++ b/packages/editor-ui/src/components/SettingsSidebar.vue @@ -24,9 +24,9 @@ import mixins from 'vue-typed-mixins'; import { ABOUT_MODAL_KEY, VERSIONS_MODAL_KEY, VIEWS } from '@/constants'; import { userHelpers } from '@/mixins/userHelpers'; -import { IFakeDoor } from '@/Interface'; -import { IMenuItem } from 'n8n-design-system'; -import { BaseTextKey } from '@/plugins/i18n'; +import type { IFakeDoor } from '@/Interface'; +import type { IMenuItem } from 'n8n-design-system'; +import type { BaseTextKey } from '@/plugins/i18n'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useSettingsStore } from '@/stores/settings'; diff --git a/packages/editor-ui/src/components/Sticky.vue b/packages/editor-ui/src/components/Sticky.vue index 9150637600047..c01c09514f556 100644 --- a/packages/editor-ui/src/components/Sticky.vue +++ b/packages/editor-ui/src/components/Sticky.vue @@ -64,14 +64,15 @@ import { nodeBase } from '@/mixins/nodeBase'; import { nodeHelpers } from '@/mixins/nodeHelpers'; import { workflowHelpers } from '@/mixins/workflowHelpers'; import { getStyleTokenValue, isNumber, isString } from '@/utils'; -import { +import type { INodeUi, INodeUpdatePropertiesInformation, IUpdateInformation, XYPosition, } from '@/Interface'; -import { IDataObject, INodeTypeDescription } from 'n8n-workflow'; +import type { INodeTypeDescription } from 'n8n-workflow'; +import { IDataObject } from 'n8n-workflow'; import { QUICKSTART_NOTE_NAME } from '@/constants'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/components/TagsContainer.vue b/packages/editor-ui/src/components/TagsContainer.vue index 364042820e28a..d46ac3f89801e 100644 --- a/packages/editor-ui/src/components/TagsContainer.vue +++ b/packages/editor-ui/src/components/TagsContainer.vue @@ -41,7 +41,7 @@ <script lang="ts"> import Vue, { defineComponent } from 'vue'; -import { ITag } from '@/Interface'; +import type { ITag } from '@/Interface'; import IntersectionObserver from './IntersectionObserver.vue'; import IntersectionObserved from './IntersectionObserved.vue'; import { mapStores } from 'pinia'; diff --git a/packages/editor-ui/src/components/TagsDropdown.vue b/packages/editor-ui/src/components/TagsDropdown.vue index 48a8c001c2aec..a028d81722e05 100644 --- a/packages/editor-ui/src/components/TagsDropdown.vue +++ b/packages/editor-ui/src/components/TagsDropdown.vue @@ -57,16 +57,16 @@ <script lang="ts"> import mixins from 'vue-typed-mixins'; -import { ITag } from '@/Interface'; +import type { ITag } from '@/Interface'; import { MAX_TAG_NAME_LENGTH, TAGS_MANAGER_MODAL_KEY } from '@/constants'; import { showMessage } from '@/mixins/showMessage'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useTagsStore } from '@/stores/tags'; -import { EventBus } from '@/event-bus'; -import { PropType } from 'vue'; -import { N8nOption, N8nSelect } from 'n8n-design-system'; +import type { EventBus } from '@/event-bus'; +import type { PropType } from 'vue'; +import type { N8nOption, N8nSelect } from 'n8n-design-system'; type SelectRef = InstanceType<typeof N8nSelect>; type TagRef = InstanceType<typeof N8nOption>; diff --git a/packages/editor-ui/src/components/TagsManager/TagsManager.vue b/packages/editor-ui/src/components/TagsManager/TagsManager.vue index da54eb6f3b544..fc2bbc56f86c6 100644 --- a/packages/editor-ui/src/components/TagsManager/TagsManager.vue +++ b/packages/editor-ui/src/components/TagsManager/TagsManager.vue @@ -31,7 +31,7 @@ import Vue from 'vue'; import mixins from 'vue-typed-mixins'; -import { ITag } from '@/Interface'; +import type { ITag } from '@/Interface'; import { showMessage } from '@/mixins/showMessage'; import TagsView from '@/components/TagsManager/TagsView/TagsView.vue'; diff --git a/packages/editor-ui/src/components/TagsManager/TagsView/TagsTable.vue b/packages/editor-ui/src/components/TagsManager/TagsView/TagsTable.vue index a93e25d9859d2..8b2d43c465c3c 100644 --- a/packages/editor-ui/src/components/TagsManager/TagsView/TagsTable.vue +++ b/packages/editor-ui/src/components/TagsManager/TagsView/TagsTable.vue @@ -107,11 +107,11 @@ </template> <script lang="ts"> -import { Table as ElTable } from 'element-ui'; +import type { Table as ElTable } from 'element-ui'; import { MAX_TAG_NAME_LENGTH } from '@/constants'; -import { ITagRow } from '@/Interface'; +import type { ITagRow } from '@/Interface'; import { defineComponent } from 'vue'; -import { N8nInput } from 'n8n-design-system'; +import type { N8nInput } from 'n8n-design-system'; type TableRef = InstanceType<typeof ElTable>; type N8nInputRef = InstanceType<typeof N8nInput>; diff --git a/packages/editor-ui/src/components/Telemetry.vue b/packages/editor-ui/src/components/Telemetry.vue index 26b5279832020..f9c40b0d6c2c8 100644 --- a/packages/editor-ui/src/components/Telemetry.vue +++ b/packages/editor-ui/src/components/Telemetry.vue @@ -6,7 +6,7 @@ import { useRootStore } from '@/stores/n8nRootStore'; import { useSettingsStore } from '@/stores/settings'; import { useUsersStore } from '@/stores/users'; -import { ITelemetrySettings } from 'n8n-workflow'; +import type { ITelemetrySettings } from 'n8n-workflow'; import { mapStores } from 'pinia'; import mixins from 'vue-typed-mixins'; import { externalHooks } from '@/mixins/externalHooks'; diff --git a/packages/editor-ui/src/components/TemplateDetails.vue b/packages/editor-ui/src/components/TemplateDetails.vue index f0a430e36330c..816dd61ff00cc 100644 --- a/packages/editor-ui/src/components/TemplateDetails.vue +++ b/packages/editor-ui/src/components/TemplateDetails.vue @@ -52,7 +52,7 @@ import type { PropType } from 'vue'; import TemplateDetailsBlock from '@/components/TemplateDetailsBlock.vue'; import NodeIcon from '@/components/NodeIcon.vue'; import { abbreviateNumber, filterTemplateNodes } from '@/utils'; -import { ITemplatesNode, ITemplatesWorkflow, ITemplatesWorkflowFull } from '@/Interface'; +import type { ITemplatesNode, ITemplatesWorkflow, ITemplatesWorkflowFull } from '@/Interface'; import { mapStores } from 'pinia'; import { useTemplatesStore } from '@/stores/templates'; diff --git a/packages/editor-ui/src/components/TemplateFilters.vue b/packages/editor-ui/src/components/TemplateFilters.vue index 3c8debd1e66c1..14a5d13b68f16 100644 --- a/packages/editor-ui/src/components/TemplateFilters.vue +++ b/packages/editor-ui/src/components/TemplateFilters.vue @@ -38,7 +38,7 @@ <script lang="ts"> import { genericHelpers } from '@/mixins/genericHelpers'; -import { ITemplatesCategory } from '@/Interface'; +import type { ITemplatesCategory } from '@/Interface'; import mixins from 'vue-typed-mixins'; export default mixins(genericHelpers).extend({ diff --git a/packages/editor-ui/src/components/TimeAgo.vue b/packages/editor-ui/src/components/TimeAgo.vue index d49b6e06e9cee..85e4969bca8a0 100644 --- a/packages/editor-ui/src/components/TimeAgo.vue +++ b/packages/editor-ui/src/components/TimeAgo.vue @@ -5,7 +5,8 @@ </template> <script lang="ts"> -import { format, LocaleFunc, register } from 'timeago.js'; +import type { LocaleFunc } from 'timeago.js'; +import { format, register } from 'timeago.js'; import { convertToHumanReadableDate } from '@/utils'; import { defineComponent } from 'vue'; import { mapStores } from 'pinia'; diff --git a/packages/editor-ui/src/components/TriggerPanel.vue b/packages/editor-ui/src/components/TriggerPanel.vue index 8c3e2fc50f0e8..bdba1c976fffe 100644 --- a/packages/editor-ui/src/components/TriggerPanel.vue +++ b/packages/editor-ui/src/components/TriggerPanel.vue @@ -97,8 +97,8 @@ <script lang="ts"> import { EXECUTIONS_MODAL_KEY, WEBHOOK_NODE_TYPE, WORKFLOW_SETTINGS_MODAL_KEY } from '@/constants'; -import { INodeUi } from '@/Interface'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { INodeUi } from '@/Interface'; +import type { INodeTypeDescription } from 'n8n-workflow'; import { getTriggerNodeServiceName } from '@/utils'; import NodeExecuteButton from './NodeExecuteButton.vue'; import { workflowHelpers } from '@/mixins/workflowHelpers'; @@ -107,13 +107,13 @@ import CopyInput from './CopyInput.vue'; import NodeIcon from './NodeIcon.vue'; import { copyPaste } from '@/mixins/copyPaste'; import { showMessage } from '@/mixins/showMessage'; -import Vue from 'vue'; +import type Vue from 'vue'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useWorkflowsStore } from '@/stores/workflows'; import { useNDVStore } from '@/stores/ndv'; import { useNodeTypesStore } from '@/stores/nodeTypes'; -import { N8nInfoAccordion } from 'n8n-design-system'; +import type { N8nInfoAccordion } from 'n8n-design-system'; type HelpRef = InstanceType<typeof N8nInfoAccordion>; diff --git a/packages/editor-ui/src/components/UpdatesPanel.vue b/packages/editor-ui/src/components/UpdatesPanel.vue index f145b9352ccd6..76db9ab412976 100644 --- a/packages/editor-ui/src/components/UpdatesPanel.vue +++ b/packages/editor-ui/src/components/UpdatesPanel.vue @@ -51,7 +51,7 @@ import VersionCard from './VersionCard.vue'; import { VERSIONS_MODAL_KEY } from '../constants'; import { mapStores } from 'pinia'; import { useVersionsStore } from '@/stores/versions'; -import { IVersion } from '@/Interface'; +import type { IVersion } from '@/Interface'; export default defineComponent({ name: 'UpdatesPanel', diff --git a/packages/editor-ui/src/components/ValueSurvey.vue b/packages/editor-ui/src/components/ValueSurvey.vue index cbc3d22f017c2..39274dd2fb84e 100644 --- a/packages/editor-ui/src/components/ValueSurvey.vue +++ b/packages/editor-ui/src/components/ValueSurvey.vue @@ -57,7 +57,7 @@ <script lang="ts"> import { VALID_EMAIL_REGEX, VALUE_SURVEY_MODAL_KEY } from '@/constants'; -import { IN8nPromptResponse } from '@/Interface'; +import type { IN8nPromptResponse } from '@/Interface'; import ModalDrawer from './ModalDrawer.vue'; diff --git a/packages/editor-ui/src/components/VariableSelector.vue b/packages/editor-ui/src/components/VariableSelector.vue index f6b979e6f128a..0afe604c5201b 100644 --- a/packages/editor-ui/src/components/VariableSelector.vue +++ b/packages/editor-ui/src/components/VariableSelector.vue @@ -26,7 +26,7 @@ /* eslint-disable prefer-spread */ import { PLACEHOLDER_FILLED_AT_EXECUTION_TIME, STICKY_NODE_TYPE } from '@/constants'; -import { +import type { GenericValue, IContextObject, IDataObject, @@ -36,16 +36,12 @@ import { IRunExecutionData, IWorkflowDataProxyAdditionalKeys, Workflow, - WorkflowDataProxy, } from 'n8n-workflow'; +import { WorkflowDataProxy } from 'n8n-workflow'; import VariableSelectorItem from '@/components/VariableSelectorItem.vue'; -import { - IExecutionResponse, - INodeUi, - IVariableItemSelected, - IVariableSelectorOption, -} from '@/Interface'; +import type { INodeUi, IVariableItemSelected, IVariableSelectorOption } from '@/Interface'; +import { IExecutionResponse } from '@/Interface'; import { workflowHelpers } from '@/mixins/workflowHelpers'; diff --git a/packages/editor-ui/src/components/VariableSelectorItem.vue b/packages/editor-ui/src/components/VariableSelectorItem.vue index aeb595824d813..138ab476fcd67 100644 --- a/packages/editor-ui/src/components/VariableSelectorItem.vue +++ b/packages/editor-ui/src/components/VariableSelectorItem.vue @@ -59,7 +59,7 @@ </template> <script lang="ts"> -import { IVariableSelectorOption, IVariableItemSelected } from '@/Interface'; +import type { IVariableSelectorOption, IVariableItemSelected } from '@/Interface'; import { externalHooks } from '@/mixins/externalHooks'; import mixins from 'vue-typed-mixins'; diff --git a/packages/editor-ui/src/components/VariablesRow.vue b/packages/editor-ui/src/components/VariablesRow.vue index 7b0861a2d9279..2c1f16260690e 100644 --- a/packages/editor-ui/src/components/VariablesRow.vue +++ b/packages/editor-ui/src/components/VariablesRow.vue @@ -1,6 +1,8 @@ <script lang="ts" setup> -import { ComponentPublicInstance, computed, nextTick, onMounted, PropType, ref, watch } from 'vue'; -import { EnvironmentVariable, IValidator, Rule, RuleGroup, Validatable } from '@/Interface'; +import type { ComponentPublicInstance, PropType } from 'vue'; +import { computed, nextTick, onMounted, ref, watch } from 'vue'; +import type { EnvironmentVariable, Rule, RuleGroup } from '@/Interface'; +import { IValidator, Validatable } from '@/Interface'; import { useI18n, useToast, useCopyToClipboard } from '@/composables'; import { EnterpriseEditionFeature } from '@/constants'; import { useSettingsStore, useUsersStore } from '@/stores'; diff --git a/packages/editor-ui/src/components/VersionCard.vue b/packages/editor-ui/src/components/VersionCard.vue index c145be50db2ed..a444786e3bb3b 100644 --- a/packages/editor-ui/src/components/VersionCard.vue +++ b/packages/editor-ui/src/components/VersionCard.vue @@ -60,7 +60,7 @@ import NodeIcon from './NodeIcon.vue'; import TimeAgo from './TimeAgo.vue'; import Badge from './Badge.vue'; import WarningTooltip from './WarningTooltip.vue'; -import { IVersionNode } from '@/Interface'; +import type { IVersionNode } from '@/Interface'; Vue.component('NodeIcon', NodeIcon); Vue.component('TimeAgo', TimeAgo); diff --git a/packages/editor-ui/src/components/WorkflowCard.vue b/packages/editor-ui/src/components/WorkflowCard.vue index a62ced3c33a18..06561c155f101 100644 --- a/packages/editor-ui/src/components/WorkflowCard.vue +++ b/packages/editor-ui/src/components/WorkflowCard.vue @@ -63,7 +63,7 @@ <script lang="ts"> import mixins from 'vue-typed-mixins'; -import { IWorkflowDb, IUser, ITag } from '@/Interface'; +import type { IWorkflowDb, IUser, ITag } from '@/Interface'; import { DUPLICATE_MODAL_KEY, EnterpriseEditionFeature, @@ -71,10 +71,11 @@ import { WORKFLOW_SHARE_MODAL_KEY, } from '@/constants'; import { showMessage } from '@/mixins/showMessage'; -import { getWorkflowPermissions, IPermissions } from '@/permissions'; +import type { IPermissions } from '@/permissions'; +import { getWorkflowPermissions } from '@/permissions'; import dateformat from 'dateformat'; import WorkflowActivator from '@/components/WorkflowActivator.vue'; -import Vue from 'vue'; +import type Vue from 'vue'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useSettingsStore } from '@/stores/settings'; diff --git a/packages/editor-ui/src/components/WorkflowPreview.vue b/packages/editor-ui/src/components/WorkflowPreview.vue index 09cc2f9465e84..5ea1a06342e45 100644 --- a/packages/editor-ui/src/components/WorkflowPreview.vue +++ b/packages/editor-ui/src/components/WorkflowPreview.vue @@ -24,7 +24,7 @@ <script lang="ts"> import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; -import { IWorkflowDb } from '../Interface'; +import type { IWorkflowDb } from '../Interface'; import { mapStores } from 'pinia'; import { useRootStore } from '@/stores/n8nRootStore'; diff --git a/packages/editor-ui/src/components/WorkflowSettings.vue b/packages/editor-ui/src/components/WorkflowSettings.vue index ace78db66c33c..a3c062213ddca 100644 --- a/packages/editor-ui/src/components/WorkflowSettings.vue +++ b/packages/editor-ui/src/components/WorkflowSettings.vue @@ -329,15 +329,15 @@ import Vue from 'vue'; import { externalHooks } from '@/mixins/externalHooks'; import { genericHelpers } from '@/mixins/genericHelpers'; import { showMessage } from '@/mixins/showMessage'; -import { +import type { ITimeoutHMS, IUser, IWorkflowDataUpdate, IWorkflowDb, IWorkflowSettings, IWorkflowShortResponse, - WorkflowCallerPolicyDefaultOption, } from '@/Interface'; +import { WorkflowCallerPolicyDefaultOption } from '@/Interface'; import Modal from './Modal.vue'; import { EnterpriseEditionFeature, @@ -347,7 +347,8 @@ import { import mixins from 'vue-typed-mixins'; -import { WorkflowSettings, deepCopy } from 'n8n-workflow'; +import type { WorkflowSettings } from 'n8n-workflow'; +import { deepCopy } from 'n8n-workflow'; import { mapStores } from 'pinia'; import { useWorkflowsStore } from '@/stores/workflows'; import { useSettingsStore } from '@/stores/settings'; diff --git a/packages/editor-ui/src/components/WorkflowShareModal.ee.vue b/packages/editor-ui/src/components/WorkflowShareModal.ee.vue index fc3597cd80704..9bb1fd90a48e1 100644 --- a/packages/editor-ui/src/components/WorkflowShareModal.ee.vue +++ b/packages/editor-ui/src/components/WorkflowShareModal.ee.vue @@ -130,8 +130,10 @@ import { VIEWS, WORKFLOW_SHARE_MODAL_KEY, } from '../constants'; -import { IUser, IWorkflowDb, UIState } from '@/Interface'; -import { getWorkflowPermissions, IPermissions } from '@/permissions'; +import type { IUser, IWorkflowDb } from '@/Interface'; +import { UIState } from '@/Interface'; +import type { IPermissions } from '@/permissions'; +import { getWorkflowPermissions } from '@/permissions'; import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; import { createEventBus, nodeViewEventBus } from '@/event-bus'; @@ -141,9 +143,9 @@ import { useUIStore } from '@/stores/ui'; import { useUsersStore } from '@/stores/users'; import { useWorkflowsStore } from '@/stores/workflows'; import { useWorkflowsEEStore } from '@/stores/workflows.ee'; -import { ITelemetryTrackProperties } from 'n8n-workflow'; +import type { ITelemetryTrackProperties } from 'n8n-workflow'; import { useUsageStore } from '@/stores/usage'; -import { BaseTextKey } from '@/plugins/i18n'; +import type { BaseTextKey } from '@/plugins/i18n'; import { isNavigationFailure } from 'vue-router'; export default mixins(showMessage).extend({ diff --git a/packages/editor-ui/src/components/__tests__/ExecutionFilter.test.ts b/packages/editor-ui/src/components/__tests__/ExecutionFilter.test.ts index b209b0e6198b3..80a3cace0bd42 100644 --- a/packages/editor-ui/src/components/__tests__/ExecutionFilter.test.ts +++ b/packages/editor-ui/src/components/__tests__/ExecutionFilter.test.ts @@ -2,7 +2,8 @@ import { describe, test, expect } from 'vitest'; import Vue from 'vue'; import { PiniaVuePlugin } from 'pinia'; import { createTestingPinia } from '@pinia/testing'; -import { render, RenderOptions } from '@testing-library/vue'; +import type { RenderOptions } from '@testing-library/vue'; +import { render } from '@testing-library/vue'; import userEvent from '@testing-library/user-event'; import { faker } from '@faker-js/faker'; import ExecutionFilter from '@/components/ExecutionFilter.vue'; diff --git a/packages/editor-ui/src/components/__tests__/VariablesRow.spec.ts b/packages/editor-ui/src/components/__tests__/VariablesRow.spec.ts index c368370915db8..2a68e87a2a0a9 100644 --- a/packages/editor-ui/src/components/__tests__/VariablesRow.spec.ts +++ b/packages/editor-ui/src/components/__tests__/VariablesRow.spec.ts @@ -1,5 +1,5 @@ import VariablesRow from '../VariablesRow.vue'; -import { EnvironmentVariable } from '@/Interface'; +import type { EnvironmentVariable } from '@/Interface'; import { fireEvent } from '@testing-library/vue'; import { createPinia, setActivePinia } from 'pinia'; import { setupServer } from '@/__tests__/server'; diff --git a/packages/editor-ui/src/components/forms/ResourceOwnershipSelect.ee.vue b/packages/editor-ui/src/components/forms/ResourceOwnershipSelect.ee.vue index c23117f6fd894..1c5ccc865782d 100644 --- a/packages/editor-ui/src/components/forms/ResourceOwnershipSelect.ee.vue +++ b/packages/editor-ui/src/components/forms/ResourceOwnershipSelect.ee.vue @@ -9,7 +9,7 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { IMenuItem } from 'n8n-design-system'; +import type { IMenuItem } from 'n8n-design-system'; export default defineComponent({ props: { diff --git a/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue b/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue index efdeb285beb8d..8cc4512b4cbcd 100644 --- a/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue +++ b/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue @@ -182,21 +182,22 @@ <script lang="ts"> import { showMessage } from '@/mixins/showMessage'; -import { IUser } from '@/Interface'; +import type { IUser } from '@/Interface'; import mixins from 'vue-typed-mixins'; import PageViewLayout from '@/components/layouts/PageViewLayout.vue'; import PageViewLayoutList from '@/components/layouts/PageViewLayoutList.vue'; import { EnterpriseEditionFeature } from '@/constants'; import TemplateCard from '@/components/TemplateCard.vue'; -import Vue, { PropType } from 'vue'; +import type { PropType } from 'vue'; +import type Vue from 'vue'; import { debounceHelper } from '@/mixins/debounce'; import ResourceOwnershipSelect from '@/components/forms/ResourceOwnershipSelect.ee.vue'; import ResourceFiltersDropdown from '@/components/forms/ResourceFiltersDropdown.vue'; import { mapStores } from 'pinia'; import { useSettingsStore } from '@/stores/settings'; import { useUsersStore } from '@/stores/users'; -import { N8nInput } from 'n8n-design-system'; +import type { N8nInput } from 'n8n-design-system'; import type { DatatableColumn } from 'n8n-design-system'; export interface IResource { diff --git a/packages/editor-ui/src/composables/__tests__/useHistoryHelper.test.ts b/packages/editor-ui/src/composables/__tests__/useHistoryHelper.test.ts index e31753736886c..069b2f30b7196 100644 --- a/packages/editor-ui/src/composables/__tests__/useHistoryHelper.test.ts +++ b/packages/editor-ui/src/composables/__tests__/useHistoryHelper.test.ts @@ -4,7 +4,7 @@ import { render } from '@testing-library/vue'; import userEvent from '@testing-library/user-event'; import { useHistoryHelper } from '../useHistoryHelper'; import { defineComponent } from 'vue'; -import { Route } from 'vue-router'; +import type { Route } from 'vue-router'; const undoMock = vi.fn(); const redoMock = vi.fn(); diff --git a/packages/editor-ui/src/composables/useCanvasMouseSelect.ts b/packages/editor-ui/src/composables/useCanvasMouseSelect.ts index 51b1eac9d8c06..a00d57cb064cd 100644 --- a/packages/editor-ui/src/composables/useCanvasMouseSelect.ts +++ b/packages/editor-ui/src/composables/useCanvasMouseSelect.ts @@ -1,4 +1,4 @@ -import { INodeUi, XYPosition } from '@/Interface'; +import type { INodeUi, XYPosition } from '@/Interface'; import useDeviceSupport from './useDeviceSupport'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/composables/useHistoryHelper.ts b/packages/editor-ui/src/composables/useHistoryHelper.ts index 79fc5f6d72049..c4c0241adb4fe 100644 --- a/packages/editor-ui/src/composables/useHistoryHelper.ts +++ b/packages/editor-ui/src/composables/useHistoryHelper.ts @@ -1,6 +1,7 @@ import { MAIN_HEADER_TABS } from '@/constants'; import { useNDVStore } from '@/stores/ndv'; -import { BulkCommand, Undoable } from '@/models/history'; +import type { Undoable } from '@/models/history'; +import { BulkCommand } from '@/models/history'; import { useHistoryStore } from '@/stores/history'; import { useUIStore } from '@/stores/ui'; @@ -9,7 +10,7 @@ import { Command } from '@/models/history'; import { useDebounceHelper } from './useDebounce'; import useDeviceSupportHelpers from './useDeviceSupport'; import { getNodeViewTab } from '@/utils'; -import { Route } from 'vue-router'; +import type { Route } from 'vue-router'; const UNDO_REDO_DEBOUNCE_INTERVAL = 100; diff --git a/packages/editor-ui/src/composables/useTelemetry.ts b/packages/editor-ui/src/composables/useTelemetry.ts index 856b15477b84e..9c88b3e57d729 100644 --- a/packages/editor-ui/src/composables/useTelemetry.ts +++ b/packages/editor-ui/src/composables/useTelemetry.ts @@ -1,4 +1,5 @@ -import { Telemetry, telemetry } from '@/plugins/telemetry'; +import type { Telemetry } from '@/plugins/telemetry'; +import { telemetry } from '@/plugins/telemetry'; export function useTelemetry(): Telemetry { return telemetry; diff --git a/packages/editor-ui/src/composables/useTitleChange.ts b/packages/editor-ui/src/composables/useTitleChange.ts index 45ed1ab0139ee..55cd41988fbae 100644 --- a/packages/editor-ui/src/composables/useTitleChange.ts +++ b/packages/editor-ui/src/composables/useTitleChange.ts @@ -1,4 +1,4 @@ -import { WorkflowTitleStatus } from '@/Interface'; +import type { WorkflowTitleStatus } from '@/Interface'; export function useTitleChange() { return { diff --git a/packages/editor-ui/src/composables/useUpgradeLink.ts b/packages/editor-ui/src/composables/useUpgradeLink.ts index 89cbaeeb4aca5..0b9dd7889d0a3 100644 --- a/packages/editor-ui/src/composables/useUpgradeLink.ts +++ b/packages/editor-ui/src/composables/useUpgradeLink.ts @@ -1,4 +1,4 @@ -import { BaseTextKey } from '@/plugins/i18n'; +import type { BaseTextKey } from '@/plugins/i18n'; import { useUIStore, useUsageStore } from '@/stores'; import { useI18n } from '@/composables'; import { computed } from 'vue'; diff --git a/packages/editor-ui/src/constants.ts b/packages/editor-ui/src/constants.ts index c4b0914103a5d..9fbf469b31d0a 100644 --- a/packages/editor-ui/src/constants.ts +++ b/packages/editor-ui/src/constants.ts @@ -1,4 +1,4 @@ -import { NodeCreatorOpenSource } from './Interface'; +import type { NodeCreatorOpenSource } from './Interface'; export const MAX_WORKFLOW_SIZE = 16777216; // Workflow size limit in bytes export const MAX_WORKFLOW_PINNED_DATA_SIZE = 12582912; // Workflow pinned data size limit in bytes diff --git a/packages/editor-ui/src/mixins/completionManager.ts b/packages/editor-ui/src/mixins/completionManager.ts index ba4c39dbfd4b8..6b73ea645b296 100644 --- a/packages/editor-ui/src/mixins/completionManager.ts +++ b/packages/editor-ui/src/mixins/completionManager.ts @@ -1,6 +1,6 @@ import mixins from 'vue-typed-mixins'; import { ExpressionExtensions } from 'n8n-workflow'; -import { EditorView, ViewUpdate } from '@codemirror/view'; +import type { EditorView, ViewUpdate } from '@codemirror/view'; import { expressionManager } from './expressionManager'; diff --git a/packages/editor-ui/src/mixins/executionsHelpers.ts b/packages/editor-ui/src/mixins/executionsHelpers.ts index 2887fe7da77fc..d3bcb7555bff4 100644 --- a/packages/editor-ui/src/mixins/executionsHelpers.ts +++ b/packages/editor-ui/src/mixins/executionsHelpers.ts @@ -3,7 +3,7 @@ import { i18n as locale } from '@/plugins/i18n'; import { mapStores } from 'pinia'; import mixins from 'vue-typed-mixins'; import { genericHelpers } from './genericHelpers'; -import { IExecutionsSummary } from 'n8n-workflow'; +import type { IExecutionsSummary } from 'n8n-workflow'; export interface IExecutionUIData { name: string; diff --git a/packages/editor-ui/src/mixins/nodeBase.ts b/packages/editor-ui/src/mixins/nodeBase.ts index 10e9f3b0d8c34..79f95814ff426 100644 --- a/packages/editor-ui/src/mixins/nodeBase.ts +++ b/packages/editor-ui/src/mixins/nodeBase.ts @@ -1,16 +1,16 @@ -import { PropType } from 'vue'; +import type { PropType } from 'vue'; import mixins from 'vue-typed-mixins'; -import { INodeUi } from '@/Interface'; +import type { INodeUi } from '@/Interface'; import { deviceSupportHelpers } from '@/mixins/deviceSupportHelpers'; import { NO_OP_NODE_TYPE } from '@/constants'; -import { INodeTypeDescription } from 'n8n-workflow'; +import type { INodeTypeDescription } from 'n8n-workflow'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useWorkflowsStore } from '@/stores/workflows'; import { useNodeTypesStore } from '@/stores/nodeTypes'; -import { BrowserJsPlumbInstance } from '@jsplumb/browser-ui'; -import { Endpoint, EndpointOptions } from '@jsplumb/core'; +import type { BrowserJsPlumbInstance } from '@jsplumb/browser-ui'; +import type { Endpoint, EndpointOptions } from '@jsplumb/core'; import * as NodeViewUtils from '@/utils/nodeViewUtils'; import { useHistoryStore } from '@/stores/history'; import { useCanvasStore } from '@/stores/canvas'; diff --git a/packages/editor-ui/src/mixins/nodeHelpers.ts b/packages/editor-ui/src/mixins/nodeHelpers.ts index eb4cea7e5c820..2a959684b9546 100644 --- a/packages/editor-ui/src/mixins/nodeHelpers.ts +++ b/packages/editor-ui/src/mixins/nodeHelpers.ts @@ -6,11 +6,10 @@ import { EnterpriseEditionFeature, } from '@/constants'; -import { +import type { IBinaryKeyData, ICredentialType, INodeCredentialDescription, - NodeHelpers, INodeCredentialsDetails, INodeExecutionData, INodeIssues, @@ -24,8 +23,9 @@ import { INodePropertyOptions, IDataObject, } from 'n8n-workflow'; +import { NodeHelpers } from 'n8n-workflow'; -import { +import type { ICredentialsResponse, INodeUi, INodeUpdatePropertiesInformation, diff --git a/packages/editor-ui/src/mixins/pinData.ts b/packages/editor-ui/src/mixins/pinData.ts index dbaa4e79361bb..990d8a2b903bf 100644 --- a/packages/editor-ui/src/mixins/pinData.ts +++ b/packages/editor-ui/src/mixins/pinData.ts @@ -1,6 +1,6 @@ import Vue from 'vue'; -import { INodeUi } from '@/Interface'; -import { INodeTypeDescription, IPinData } from 'n8n-workflow'; +import type { INodeUi } from '@/Interface'; +import type { INodeTypeDescription, IPinData } from 'n8n-workflow'; import { stringSizeInBytes } from '@/utils'; import { MAX_WORKFLOW_PINNED_DATA_SIZE, PIN_DATA_NODE_TYPES_DENYLIST } from '@/constants'; import { mapStores } from 'pinia'; diff --git a/packages/editor-ui/src/mixins/pushConnection.ts b/packages/editor-ui/src/mixins/pushConnection.ts index 01b40ceaa99e9..6759174e398f9 100644 --- a/packages/editor-ui/src/mixins/pushConnection.ts +++ b/packages/editor-ui/src/mixins/pushConnection.ts @@ -1,4 +1,4 @@ -import { +import type { IExecutionResponse, IExecutionsCurrentSummaryExtended, IPushData, @@ -11,7 +11,7 @@ import { showMessage } from '@/mixins/showMessage'; import { useTitleChange } from '@/composables/useTitleChange'; import { workflowHelpers } from '@/mixins/workflowHelpers'; -import { +import type { ExpressionError, IDataObject, INodeTypeNameVersion, @@ -19,8 +19,8 @@ import { IRunExecutionData, IWorkflowBase, SubworkflowOperationError, - TelemetryHelpers, } from 'n8n-workflow'; +import { TelemetryHelpers } from 'n8n-workflow'; import mixins from 'vue-typed-mixins'; import { WORKFLOW_SETTINGS_MODAL_KEY } from '@/constants'; diff --git a/packages/editor-ui/src/mixins/restApi.ts b/packages/editor-ui/src/mixins/restApi.ts index 7663eb1a7b204..5caab3ace4573 100644 --- a/packages/editor-ui/src/mixins/restApi.ts +++ b/packages/editor-ui/src/mixins/restApi.ts @@ -1,8 +1,8 @@ import { defineComponent } from 'vue'; import { parse } from 'flatted'; -import { Method } from 'axios'; -import { +import type { Method } from 'axios'; +import type { IActivationError, IExecutionsCurrentSummaryExtended, IExecutionDeleteFilter, @@ -16,11 +16,10 @@ import { IWorkflowShortResponse, IRestApi, IWorkflowDataUpdate, - INodeTranslationHeaders, } from '@/Interface'; +import { INodeTranslationHeaders } from '@/Interface'; +import type { IAbstractEventMessage, IDataObject } from 'n8n-workflow'; import { - IAbstractEventMessage, - IDataObject, ILoadOptions, INodeCredentials, INodeParameters, diff --git a/packages/editor-ui/src/mixins/showMessage.ts b/packages/editor-ui/src/mixins/showMessage.ts index 6edb2b99eb933..1158cc187f1a0 100644 --- a/packages/editor-ui/src/mixins/showMessage.ts +++ b/packages/editor-ui/src/mixins/showMessage.ts @@ -1,9 +1,9 @@ // @ts-ignore -import { ElNotificationComponent, ElNotificationOptions } from 'element-ui/types/notification'; +import type { ElNotificationComponent, ElNotificationOptions } from 'element-ui/types/notification'; import mixins from 'vue-typed-mixins'; import { externalHooks } from '@/mixins/externalHooks'; -import { IExecuteContextData, IRunExecutionData } from 'n8n-workflow'; +import type { IExecuteContextData, IRunExecutionData } from 'n8n-workflow'; import type { ElMessageBoxOptions } from 'element-ui/types/message-box'; import type { ElMessageComponent, ElMessageOptions, MessageType } from 'element-ui/types/message'; import { sanitizeHtml } from '@/utils'; diff --git a/packages/editor-ui/src/mixins/workflowHelpers.ts b/packages/editor-ui/src/mixins/workflowHelpers.ts index eeceac097c71d..7f9a00b6148cd 100644 --- a/packages/editor-ui/src/mixins/workflowHelpers.ts +++ b/packages/editor-ui/src/mixins/workflowHelpers.ts @@ -8,7 +8,7 @@ import { EnterpriseEditionFeature, } from '@/constants'; -import { +import type { IConnections, IDataObject, INode, @@ -19,20 +19,17 @@ import { INodeCredentials, INodeType, INodeTypes, - INodeTypeData, - IPinData, IRunExecutionData, IWorkflowIssues, IWorkflowDataProxyAdditionalKeys, Workflow, - NodeHelpers, IExecuteData, INodeConnection, IWebhookDescription, - deepCopy, } from 'n8n-workflow'; +import { INodeTypeData, IPinData, NodeHelpers, deepCopy } from 'n8n-workflow'; -import { +import type { INodeTypesMaxCount, INodeUi, IWorkflowData, @@ -56,14 +53,15 @@ import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useWorkflowsStore } from '@/stores/workflows'; import { useRootStore } from '@/stores/n8nRootStore'; -import { IWorkflowSettings } from 'n8n-workflow'; +import type { IWorkflowSettings } from 'n8n-workflow'; import { useNDVStore } from '@/stores/ndv'; import { useTemplatesStore } from '@/stores/templates'; import { useNodeTypesStore } from '@/stores/nodeTypes'; import { useWorkflowsEEStore } from '@/stores/workflows.ee'; import { useUsersStore } from '@/stores/users'; -import { getWorkflowPermissions, IPermissions } from '@/permissions'; -import { ICredentialsResponse } from '@/Interface'; +import type { IPermissions } from '@/permissions'; +import { getWorkflowPermissions } from '@/permissions'; +import type { ICredentialsResponse } from '@/Interface'; import { useEnvironmentsStore } from '@/stores'; export function resolveParameter( diff --git a/packages/editor-ui/src/mixins/workflowRun.ts b/packages/editor-ui/src/mixins/workflowRun.ts index 714d810ac8e66..f848ae670a1de 100644 --- a/packages/editor-ui/src/mixins/workflowRun.ts +++ b/packages/editor-ui/src/mixins/workflowRun.ts @@ -1,12 +1,7 @@ -import { IExecutionPushResponse, IExecutionResponse, IStartRunData } from '@/Interface'; - -import { - IRunData, - IRunExecutionData, - IWorkflowBase, - NodeHelpers, - TelemetryHelpers, -} from 'n8n-workflow'; +import type { IExecutionPushResponse, IExecutionResponse, IStartRunData } from '@/Interface'; + +import type { IRunData, IRunExecutionData, IWorkflowBase } from 'n8n-workflow'; +import { NodeHelpers, TelemetryHelpers } from 'n8n-workflow'; import { externalHooks } from '@/mixins/externalHooks'; import { workflowHelpers } from '@/mixins/workflowHelpers'; diff --git a/packages/editor-ui/src/models/history.ts b/packages/editor-ui/src/models/history.ts index 72733ab5ed155..f907af1a615c1 100644 --- a/packages/editor-ui/src/models/history.ts +++ b/packages/editor-ui/src/models/history.ts @@ -1,6 +1,6 @@ -import { INodeUi } from '@/Interface'; -import { IConnection } from 'n8n-workflow'; -import { XYPosition } from '../Interface'; +import type { INodeUi } from '@/Interface'; +import type { IConnection } from 'n8n-workflow'; +import type { XYPosition } from '../Interface'; import { createEventBus } from '@/event-bus'; // Command names don't serve any particular purpose in the app diff --git a/packages/editor-ui/src/permissions.ts b/packages/editor-ui/src/permissions.ts index 0635491cc9943..d2f0503c3fa95 100644 --- a/packages/editor-ui/src/permissions.ts +++ b/packages/editor-ui/src/permissions.ts @@ -4,13 +4,8 @@ * @usage getCredentialPermissions(user, credential).isOwner; */ -import { - IUser, - ICredentialsResponse, - IRootState, - IWorkflowDb, - EnvironmentVariable, -} from '@/Interface'; +import type { IUser, ICredentialsResponse, IWorkflowDb } from '@/Interface'; +import { IRootState, EnvironmentVariable } from '@/Interface'; import { EnterpriseEditionFeature, PLACEHOLDER_EMPTY_WORKFLOW_ID } from '@/constants'; import { useSettingsStore } from './stores/settings'; diff --git a/packages/editor-ui/src/plugins/codemirror/completions/__tests__/completions.test.ts b/packages/editor-ui/src/plugins/codemirror/completions/__tests__/completions.test.ts index 7d8d89c5064cc..d99e41eea06cf 100644 --- a/packages/editor-ui/src/plugins/codemirror/completions/__tests__/completions.test.ts +++ b/packages/editor-ui/src/plugins/codemirror/completions/__tests__/completions.test.ts @@ -13,7 +13,8 @@ import { } from '@/plugins/codemirror/completions/datatype.completions'; import { mockNodes, mockProxy } from './mock'; -import { CompletionContext, CompletionSource, CompletionResult } from '@codemirror/autocomplete'; +import type { CompletionSource, CompletionResult } from '@codemirror/autocomplete'; +import { CompletionContext } from '@codemirror/autocomplete'; import { EditorState } from '@codemirror/state'; import { n8nLang } from '@/plugins/codemirror/n8nLang'; diff --git a/packages/editor-ui/src/plugins/codemirror/completions/__tests__/mock.ts b/packages/editor-ui/src/plugins/codemirror/completions/__tests__/mock.ts index 811e4276af4ff..9616deb087b58 100644 --- a/packages/editor-ui/src/plugins/codemirror/completions/__tests__/mock.ts +++ b/packages/editor-ui/src/plugins/codemirror/completions/__tests__/mock.ts @@ -1,17 +1,15 @@ import { v4 as uuidv4 } from 'uuid'; -import { +import type { INode, IConnections, IRunExecutionData, - Workflow, IExecuteData, - WorkflowDataProxy, INodeType, INodeTypeData, INodeTypes, IVersionedNodeType, - NodeHelpers, } from 'n8n-workflow'; +import { Workflow, WorkflowDataProxy, NodeHelpers } from 'n8n-workflow'; class NodeTypesClass implements INodeTypes { nodeTypes: INodeTypeData = { diff --git a/packages/editor-ui/src/plugins/codemirror/completions/datatype.completions.ts b/packages/editor-ui/src/plugins/codemirror/completions/datatype.completions.ts index 060a9604fc584..b2ad69094a5d6 100644 --- a/packages/editor-ui/src/plugins/codemirror/completions/datatype.completions.ts +++ b/packages/editor-ui/src/plugins/codemirror/completions/datatype.completions.ts @@ -1,4 +1,5 @@ -import { ExpressionExtensions, NativeMethods, IDataObject, DocMetadata } from 'n8n-workflow'; +import type { IDataObject, DocMetadata } from 'n8n-workflow'; +import { ExpressionExtensions, NativeMethods } from 'n8n-workflow'; import { DateTime } from 'luxon'; import { i18n } from '@/plugins/i18n'; import { resolveParameter } from '@/mixins/workflowHelpers'; @@ -16,7 +17,7 @@ import { import type { Completion, CompletionContext, CompletionResult } from '@codemirror/autocomplete'; import type { AutocompleteOptionType, ExtensionTypeName, FnToDoc, Resolved } from './types'; import { sanitizeHtml } from '@/utils'; -import { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions'; +import type { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions'; import { isFunctionOption } from './typeGuards'; import { luxonInstanceDocs } from './nativesAutocompleteDocs/luxon.instance.docs'; import { luxonStaticDocs } from './nativesAutocompleteDocs/luxon.static.docs'; diff --git a/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.instance.docs.ts b/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.instance.docs.ts index 61e7f3e27cde6..9df1f5b6c86cb 100644 --- a/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.instance.docs.ts +++ b/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.instance.docs.ts @@ -1,4 +1,4 @@ -import { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions'; +import type { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions'; // Autocomplete documentation definition for DateTime instance props and methods // Descriptions are added dynamically so they can be localized diff --git a/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.static.docs.ts b/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.static.docs.ts index db5fa9f3019dd..8d1ed738c2964 100644 --- a/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.static.docs.ts +++ b/packages/editor-ui/src/plugins/codemirror/completions/nativesAutocompleteDocs/luxon.static.docs.ts @@ -1,4 +1,4 @@ -import { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions'; +import type { NativeDoc } from 'n8n-workflow/src/Extensions/Extensions'; // Autocomplete documentation definition for DateTime class static props and methods // Descriptions are added dynamically so they can be localized diff --git a/packages/editor-ui/src/plugins/codemirror/completions/typeGuards.ts b/packages/editor-ui/src/plugins/codemirror/completions/typeGuards.ts index a27b9970111e2..74cbe9ec47a6e 100644 --- a/packages/editor-ui/src/plugins/codemirror/completions/typeGuards.ts +++ b/packages/editor-ui/src/plugins/codemirror/completions/typeGuards.ts @@ -1,4 +1,4 @@ -import { AutocompleteOptionType, FunctionOptionType } from './types'; +import type { AutocompleteOptionType, FunctionOptionType } from './types'; export const isFunctionOption = (value: AutocompleteOptionType): value is FunctionOptionType => { return value === 'native-function' || value === 'extension-function'; diff --git a/packages/editor-ui/src/plugins/codemirror/completions/types.ts b/packages/editor-ui/src/plugins/codemirror/completions/types.ts index 4e12a5db6ff20..e85f05196e9bc 100644 --- a/packages/editor-ui/src/plugins/codemirror/completions/types.ts +++ b/packages/editor-ui/src/plugins/codemirror/completions/types.ts @@ -1,4 +1,4 @@ -import { resolveParameter } from '@/mixins/workflowHelpers'; +import type { resolveParameter } from '@/mixins/workflowHelpers'; import type { DocMetadata } from 'n8n-workflow'; export type Resolved = ReturnType<typeof resolveParameter>; diff --git a/packages/editor-ui/src/plugins/codemirror/inputHandlers/code.inputHandler.ts b/packages/editor-ui/src/plugins/codemirror/inputHandlers/code.inputHandler.ts index 74e026b321032..13bb282908652 100644 --- a/packages/editor-ui/src/plugins/codemirror/inputHandlers/code.inputHandler.ts +++ b/packages/editor-ui/src/plugins/codemirror/inputHandlers/code.inputHandler.ts @@ -1,5 +1,6 @@ import { closeBrackets, completionStatus, insertBracket } from '@codemirror/autocomplete'; -import { codePointAt, codePointSize, Extension } from '@codemirror/state'; +import type { Extension } from '@codemirror/state'; +import { codePointAt, codePointSize } from '@codemirror/state'; import { EditorView } from '@codemirror/view'; const handler = EditorView.inputHandler.of((view, from, to, insert) => { diff --git a/packages/editor-ui/src/plugins/codemirror/inputHandlers/expression.inputHandler.ts b/packages/editor-ui/src/plugins/codemirror/inputHandlers/expression.inputHandler.ts index 01f07b5bfec5d..5337e847c6e7b 100644 --- a/packages/editor-ui/src/plugins/codemirror/inputHandlers/expression.inputHandler.ts +++ b/packages/editor-ui/src/plugins/codemirror/inputHandlers/expression.inputHandler.ts @@ -4,7 +4,8 @@ import { insertBracket, startCompletion, } from '@codemirror/autocomplete'; -import { codePointAt, codePointSize, Extension } from '@codemirror/state'; +import type { Extension } from '@codemirror/state'; +import { codePointAt, codePointSize } from '@codemirror/state'; import { EditorView } from '@codemirror/view'; const handler = EditorView.inputHandler.of((view, from, to, insert) => { diff --git a/packages/editor-ui/src/plugins/codemirror/resolvableHighlighter.ts b/packages/editor-ui/src/plugins/codemirror/resolvableHighlighter.ts index 489d637453a2f..8b5baa51fa082 100644 --- a/packages/editor-ui/src/plugins/codemirror/resolvableHighlighter.ts +++ b/packages/editor-ui/src/plugins/codemirror/resolvableHighlighter.ts @@ -1,4 +1,5 @@ -import { EditorView, Decoration, DecorationSet } from '@codemirror/view'; +import type { DecorationSet } from '@codemirror/view'; +import { EditorView, Decoration } from '@codemirror/view'; import { StateField, StateEffect } from '@codemirror/state'; import { tags } from '@lezer/highlight'; import { syntaxHighlighting, HighlightStyle } from '@codemirror/language'; diff --git a/packages/editor-ui/src/plugins/connectors/N8nCustomConnector.ts b/packages/editor-ui/src/plugins/connectors/N8nCustomConnector.ts index 75ec0a6ec5831..ac790dcc4aa1f 100644 --- a/packages/editor-ui/src/plugins/connectors/N8nCustomConnector.ts +++ b/packages/editor-ui/src/plugins/connectors/N8nCustomConnector.ts @@ -1,16 +1,15 @@ -import { PointXY, log, extend, quadrant } from '@jsplumb/util'; +import type { PointXY } from '@jsplumb/util'; +import { log, extend, quadrant } from '@jsplumb/util'; -import { +import type { Connection, - ArcSegment, - AbstractConnector, ConnectorComputeParams, PaintGeometry, Endpoint, - StraightSegment, Orientation, } from '@jsplumb/core'; -import { AnchorPlacement, ConnectorOptions, Geometry, PaintAxis } from '@jsplumb/common'; +import { ArcSegment, AbstractConnector, StraightSegment } from '@jsplumb/core'; +import type { AnchorPlacement, ConnectorOptions, Geometry, PaintAxis } from '@jsplumb/common'; import { BezierSegment } from '@jsplumb/connector-bezier'; import { isArray } from 'lodash-es'; import { deepCopy } from 'n8n-workflow'; diff --git a/packages/editor-ui/src/plugins/endpoints/N8nPlusEndpointType.ts b/packages/editor-ui/src/plugins/endpoints/N8nPlusEndpointType.ts index 377bba677001f..8481a2e350faf 100644 --- a/packages/editor-ui/src/plugins/endpoints/N8nPlusEndpointType.ts +++ b/packages/editor-ui/src/plugins/endpoints/N8nPlusEndpointType.ts @@ -1,5 +1,6 @@ -import { EndpointHandler, Endpoint, EndpointRepresentation, Overlay } from '@jsplumb/core'; -import { AnchorPlacement, EndpointRepresentationParams } from '@jsplumb/common'; +import type { EndpointHandler, Endpoint, Overlay } from '@jsplumb/core'; +import { EndpointRepresentation } from '@jsplumb/core'; +import type { AnchorPlacement, EndpointRepresentationParams } from '@jsplumb/common'; import { createElement, EVENT_ENDPOINT_MOUSEOVER, diff --git a/packages/editor-ui/src/plugins/i18n/index.ts b/packages/editor-ui/src/plugins/i18n/index.ts index bb3daaf5f70fa..61e8c62be4586 100644 --- a/packages/editor-ui/src/plugins/i18n/index.ts +++ b/packages/editor-ui/src/plugins/i18n/index.ts @@ -1,7 +1,8 @@ import Vue from 'vue'; import axios from 'axios'; import VueI18n from 'vue-i18n'; -import { INodeTranslationHeaders, IRootState } from '@/Interface'; +import type { INodeTranslationHeaders } from '@/Interface'; +import { IRootState } from '@/Interface'; import { deriveMiddleKey, isNestedInCollectionLike, @@ -13,7 +14,7 @@ import { locale } from 'n8n-design-system'; import englishBaseText from './locales/en.json'; import { useUIStore } from '@/stores/ui'; import { useNDVStore } from '@/stores/ndv'; -import { INodeProperties, INodePropertyCollection, INodePropertyOptions } from 'n8n-workflow'; +import type { INodeProperties, INodePropertyCollection, INodePropertyOptions } from 'n8n-workflow'; Vue.use(VueI18n); locale.use('en'); diff --git a/packages/editor-ui/src/plugins/telemetry/index.ts b/packages/editor-ui/src/plugins/telemetry/index.ts index f4fcbdfb3c760..8d213483c649a 100644 --- a/packages/editor-ui/src/plugins/telemetry/index.ts +++ b/packages/editor-ui/src/plugins/telemetry/index.ts @@ -1,6 +1,6 @@ -import _Vue from 'vue'; -import { ITelemetrySettings, ITelemetryTrackProperties, IDataObject } from 'n8n-workflow'; -import { Route } from 'vue-router'; +import type _Vue from 'vue'; +import type { ITelemetrySettings, ITelemetryTrackProperties, IDataObject } from 'n8n-workflow'; +import type { Route } from 'vue-router'; import type { INodeCreateElement } from '@/Interface'; import type { IUserNodesPanelSession } from './telemetry.types'; diff --git a/packages/editor-ui/src/router.ts b/packages/editor-ui/src/router.ts index 1fb6f0059a650..2d7920a06b518 100644 --- a/packages/editor-ui/src/router.ts +++ b/packages/editor-ui/src/router.ts @@ -20,7 +20,8 @@ import SettingsFakeDoorView from './views/SettingsFakeDoorView.vue'; import SetupView from './views/SetupView.vue'; import SigninView from './views/SigninView.vue'; import SignupView from './views/SignupView.vue'; -import Router, { Route } from 'vue-router'; +import type { Route } from 'vue-router'; +import Router from 'vue-router'; import TemplatesCollectionView from '@/views/TemplatesCollectionView.vue'; import TemplatesWorkflowView from '@/views/TemplatesWorkflowView.vue'; @@ -29,9 +30,9 @@ import CredentialsView from '@/views/CredentialsView.vue'; import ExecutionsView from '@/views/ExecutionsView.vue'; import WorkflowsView from '@/views/WorkflowsView.vue'; import VariablesView from '@/views/VariablesView.vue'; -import { IPermissions } from './Interface'; +import type { IPermissions } from './Interface'; import { LOGIN_STATUS, ROLE } from '@/utils'; -import { RouteConfigSingleView } from 'vue-router/types/router'; +import type { RouteConfigSingleView } from 'vue-router/types/router'; import { TEMPLATE_EXPERIMENT, VIEWS } from './constants'; import { useSettingsStore } from './stores/settings'; import { useTemplatesStore } from './stores/templates'; diff --git a/packages/editor-ui/src/stores/__tests__/environments.spec.ts b/packages/editor-ui/src/stores/__tests__/environments.spec.ts index 3df3f6b28d165..c6fcd61b83a80 100644 --- a/packages/editor-ui/src/stores/__tests__/environments.spec.ts +++ b/packages/editor-ui/src/stores/__tests__/environments.spec.ts @@ -2,7 +2,7 @@ import { afterAll, beforeAll } from 'vitest'; import { setActivePinia, createPinia } from 'pinia'; import { setupServer } from '@/__tests__/server'; import { useEnvironmentsStore } from '@/stores/environments.ee'; -import { EnvironmentVariable } from '@/Interface'; +import type { EnvironmentVariable } from '@/Interface'; describe('store', () => { let server: ReturnType<typeof setupServer>; diff --git a/packages/editor-ui/src/stores/__tests__/posthog.test.ts b/packages/editor-ui/src/stores/__tests__/posthog.test.ts index dbc870fc09598..b7054b232fb3f 100644 --- a/packages/editor-ui/src/stores/__tests__/posthog.test.ts +++ b/packages/editor-ui/src/stores/__tests__/posthog.test.ts @@ -4,7 +4,7 @@ import { useUsersStore } from '@/stores/users'; import { useSettingsStore } from '@/stores/settings'; import { useRootStore } from '@/stores/n8nRootStore'; import { useTelemetryStore } from '@/stores/telemetry'; -import { IN8nUISettings } from 'n8n-workflow'; +import type { IN8nUISettings } from 'n8n-workflow'; const DEFAULT_POSTHOG_SETTINGS: IN8nUISettings['posthog'] = { enabled: true, diff --git a/packages/editor-ui/src/stores/__tests__/sso.test.ts b/packages/editor-ui/src/stores/__tests__/sso.test.ts index 1e2f0b437b2c2..d07cf3747ef8f 100644 --- a/packages/editor-ui/src/stores/__tests__/sso.test.ts +++ b/packages/editor-ui/src/stores/__tests__/sso.test.ts @@ -3,7 +3,7 @@ import { useSettingsStore } from '@/stores/settings'; import { useSSOStore } from '@/stores/sso'; import { merge } from 'lodash-es'; import { SETTINGS_STORE_DEFAULT_STATE } from '@/__tests__/utils'; -import { IN8nUISettings } from 'n8n-workflow'; +import type { IN8nUISettings } from 'n8n-workflow'; let ssoStore: ReturnType<typeof useSSOStore>; let settingsStore: ReturnType<typeof useSettingsStore>; diff --git a/packages/editor-ui/src/stores/canvas.ts b/packages/editor-ui/src/stores/canvas.ts index 7fa8329cb7500..8643c9261610b 100644 --- a/packages/editor-ui/src/stores/canvas.ts +++ b/packages/editor-ui/src/stores/canvas.ts @@ -6,7 +6,7 @@ import { useWorkflowsStore } from '@/stores/workflows'; import { useNodeTypesStore } from '@/stores/nodeTypes'; import { useUIStore } from '@/stores/ui'; import { useHistoryStore } from '@/stores/history'; -import { INodeUi, XYPosition } from '@/Interface'; +import type { INodeUi, XYPosition } from '@/Interface'; import { scaleBigger, scaleReset, scaleSmaller } from '@/utils'; import { START_NODE_TYPE } from '@/constants'; import type { @@ -18,7 +18,8 @@ import { newInstance } from '@jsplumb/browser-ui'; import { N8nPlusEndpointHandler } from '@/plugins/endpoints/N8nPlusEndpointType'; import * as N8nPlusEndpointRenderer from '@/plugins/endpoints/N8nPlusEndpointRenderer'; import { N8nConnector } from '@/plugins/connectors/N8nCustomConnector'; -import { EndpointFactory, Connectors, Connection } from '@jsplumb/core'; +import type { Connection } from '@jsplumb/core'; +import { EndpointFactory, Connectors } from '@jsplumb/core'; import { MoveNodeCommand } from '@/models/history'; import { DEFAULT_PLACEHOLDER_TRIGGER_BUTTON, @@ -32,7 +33,7 @@ import { CONNECTOR_PAINT_STYLE_PRIMARY, CONNECTOR_ARROW_OVERLAYS, } from '@/utils/nodeViewUtils'; -import { PointXY } from '@jsplumb/util'; +import type { PointXY } from '@jsplumb/util'; export const useCanvasStore = defineStore('canvas', () => { const workflowStore = useWorkflowsStore(); diff --git a/packages/editor-ui/src/stores/communityNodes.ts b/packages/editor-ui/src/stores/communityNodes.ts index 4caa452a8f141..e8702b3ad8714 100644 --- a/packages/editor-ui/src/stores/communityNodes.ts +++ b/packages/editor-ui/src/stores/communityNodes.ts @@ -7,9 +7,9 @@ import { import { getAvailableCommunityPackageCount } from '@/api/settings'; import { defineStore } from 'pinia'; import { useRootStore } from './n8nRootStore'; -import { PublicInstalledPackage } from 'n8n-workflow'; +import type { PublicInstalledPackage } from 'n8n-workflow'; import Vue from 'vue'; -import { CommunityNodesState, CommunityPackageMap } from '@/Interface'; +import type { CommunityNodesState, CommunityPackageMap } from '@/Interface'; import { STORES } from '@/constants'; const LOADER_DELAY = 300; diff --git a/packages/editor-ui/src/stores/credentials.ts b/packages/editor-ui/src/stores/credentials.ts index 0a622f8384930..d96fc2063ee87 100644 --- a/packages/editor-ui/src/stores/credentials.ts +++ b/packages/editor-ui/src/stores/credentials.ts @@ -1,4 +1,4 @@ -import { INodeUi, IUsedCredential } from './../Interface'; +import type { INodeUi, IUsedCredential } from './../Interface'; import { createNewCredential, deleteCredential, @@ -14,7 +14,7 @@ import { import { setCredentialSharedWith } from '@/api/credentials.ee'; import { getAppNameFromCredType, makeRestApiRequest } from '@/utils'; import { EnterpriseEditionFeature, STORES } from '@/constants'; -import { +import type { ICredentialMap, ICredentialsDecryptedResponse, ICredentialsResponse, @@ -22,7 +22,7 @@ import { ICredentialTypeMap, } from '@/Interface'; import { i18n } from '@/plugins/i18n'; -import { +import type { ICredentialsDecrypted, ICredentialType, INodeCredentialTestResult, diff --git a/packages/editor-ui/src/stores/environments.ee.ts b/packages/editor-ui/src/stores/environments.ee.ts index ac28effe9a737..d5c78e28212cf 100644 --- a/packages/editor-ui/src/stores/environments.ee.ts +++ b/packages/editor-ui/src/stores/environments.ee.ts @@ -1,7 +1,7 @@ import { defineStore } from 'pinia'; import { useSettingsStore } from '@/stores/settings'; import { computed, ref } from 'vue'; -import { EnvironmentVariable } from '@/Interface'; +import type { EnvironmentVariable } from '@/Interface'; import * as environmentsApi from '@/api/environments.ee'; import { useRootStore } from '@/stores/n8nRootStore'; import { createVariable } from '@/api/environments.ee'; diff --git a/packages/editor-ui/src/stores/history.ts b/packages/editor-ui/src/stores/history.ts index 5f79df10c9c79..db5095607d6eb 100644 --- a/packages/editor-ui/src/stores/history.ts +++ b/packages/editor-ui/src/stores/history.ts @@ -1,7 +1,8 @@ import { AddConnectionCommand, COMMANDS, RemoveConnectionCommand } from './../models/history'; -import { BulkCommand, Command, Undoable, MoveNodeCommand } from '@/models/history'; +import type { Command, Undoable } from '@/models/history'; +import { BulkCommand, MoveNodeCommand } from '@/models/history'; import { STORES } from '@/constants'; -import { HistoryState } from '@/Interface'; +import type { HistoryState } from '@/Interface'; import { defineStore } from 'pinia'; const STACK_LIMIT = 100; diff --git a/packages/editor-ui/src/stores/logStreamingStore.ts b/packages/editor-ui/src/stores/logStreamingStore.ts index 3c1794cbe53a2..e1b3a33661072 100644 --- a/packages/editor-ui/src/stores/logStreamingStore.ts +++ b/packages/editor-ui/src/stores/logStreamingStore.ts @@ -1,4 +1,5 @@ -import { deepCopy, MessageEventBusDestinationOptions } from 'n8n-workflow'; +import type { MessageEventBusDestinationOptions } from 'n8n-workflow'; +import { deepCopy } from 'n8n-workflow'; import { defineStore } from 'pinia'; import { deleteDestinationFromDb, diff --git a/packages/editor-ui/src/stores/n8nRootStore.ts b/packages/editor-ui/src/stores/n8nRootStore.ts index 8abd800004797..8f071afe6fdff 100644 --- a/packages/editor-ui/src/stores/n8nRootStore.ts +++ b/packages/editor-ui/src/stores/n8nRootStore.ts @@ -1,6 +1,6 @@ import { STORES } from '@/constants'; -import { IRestApiContext, RootState } from '@/Interface'; -import { IDataObject } from 'n8n-workflow'; +import type { IRestApiContext, RootState } from '@/Interface'; +import type { IDataObject } from 'n8n-workflow'; import { defineStore } from 'pinia'; import Vue from 'vue'; import { useNodeTypesStore } from './nodeTypes'; diff --git a/packages/editor-ui/src/stores/ndv.ts b/packages/editor-ui/src/stores/ndv.ts index caf76b11d9680..937c8b07b620f 100644 --- a/packages/editor-ui/src/stores/ndv.ts +++ b/packages/editor-ui/src/stores/ndv.ts @@ -1,6 +1,12 @@ import { LOCAL_STORAGE_MAPPING_IS_ONBOARDED, STORES } from '@/constants'; -import { INodeUi, IRunDataDisplayMode, NDVState, NodePanelType, XYPosition } from '@/Interface'; -import { IRunData } from 'n8n-workflow'; +import type { + INodeUi, + IRunDataDisplayMode, + NDVState, + NodePanelType, + XYPosition, +} from '@/Interface'; +import type { IRunData } from 'n8n-workflow'; import { defineStore } from 'pinia'; import Vue from 'vue'; import { useWorkflowsStore } from './workflows'; diff --git a/packages/editor-ui/src/stores/nodeCreator.ts b/packages/editor-ui/src/stores/nodeCreator.ts index f3709cd5e1d35..23ce3f4eef4b9 100644 --- a/packages/editor-ui/src/stores/nodeCreator.ts +++ b/packages/editor-ui/src/stores/nodeCreator.ts @@ -1,15 +1,15 @@ import { startCase } from 'lodash-es'; import { defineStore } from 'pinia'; -import { +import type { INodePropertyCollection, INodePropertyOptions, IDataObject, INodeProperties, INodeTypeDescription, - deepCopy, INodeParameters, INodeActionTypeDescription, } from 'n8n-workflow'; +import { deepCopy } from 'n8n-workflow'; import { STORES, MANUAL_TRIGGER_NODE_TYPE, @@ -21,9 +21,9 @@ import { import { useNodeTypesStore } from '@/stores/nodeTypes'; import { useWorkflowsStore } from './workflows'; import { CUSTOM_API_CALL_KEY } from '@/constants'; -import { INodeCreatorState, INodeFilterType, IUpdateInformation } from '@/Interface'; +import type { INodeCreatorState, INodeFilterType, IUpdateInformation } from '@/Interface'; import { i18n } from '@/plugins/i18n'; -import { Telemetry } from '@/plugins/telemetry'; +import type { Telemetry } from '@/plugins/telemetry'; import { runExternalHook } from '@/utils'; import { useWebhooksStore } from '@/stores/webhooks'; diff --git a/packages/editor-ui/src/stores/nodeTypes.ts b/packages/editor-ui/src/stores/nodeTypes.ts index d8d63e13d1c98..ff6259e79ae97 100644 --- a/packages/editor-ui/src/stores/nodeTypes.ts +++ b/packages/editor-ui/src/stores/nodeTypes.ts @@ -6,7 +6,7 @@ import { getResourceLocatorResults, } from '@/api/nodeTypes'; import { DEFAULT_NODETYPE_VERSION, STORES } from '@/constants'; -import { +import type { ICategoriesWithNodes, INodeCreateElement, INodeTypesState, @@ -14,7 +14,7 @@ import { } from '@/Interface'; import { addHeaders, addNodeTranslation } from '@/plugins/i18n'; import { omit, getCategoriesWithNodes, getCategorizedList } from '@/utils'; -import { +import type { ILoadOptions, INodeCredentials, INodeListSearchResult, diff --git a/packages/editor-ui/src/stores/posthog.ts b/packages/editor-ui/src/stores/posthog.ts index 8c9d088b465a6..1e627eb287b5b 100644 --- a/packages/editor-ui/src/stores/posthog.ts +++ b/packages/editor-ui/src/stores/posthog.ts @@ -1,9 +1,10 @@ -import { ref, Ref } from 'vue'; +import type { Ref } from 'vue'; +import { ref } from 'vue'; import { defineStore } from 'pinia'; import { useUsersStore } from '@/stores/users'; import { useRootStore } from '@/stores/n8nRootStore'; import { useSettingsStore } from '@/stores/settings'; -import { FeatureFlags } from 'n8n-workflow'; +import type { FeatureFlags } from 'n8n-workflow'; import { EXPERIMENTS_TO_TRACK, LOCAL_STORAGE_EXPERIMENT_OVERRIDES, diff --git a/packages/editor-ui/src/stores/segment.ts b/packages/editor-ui/src/stores/segment.ts index e51987c787eaf..d8b106add14e2 100644 --- a/packages/editor-ui/src/stores/segment.ts +++ b/packages/editor-ui/src/stores/segment.ts @@ -6,10 +6,10 @@ import { SET_NODE_TYPE, WEBHOOK_NODE_TYPE, } from '@/constants'; -import { ITelemetryTrackProperties } from 'n8n-workflow'; +import type { ITelemetryTrackProperties } from 'n8n-workflow'; import { defineStore } from 'pinia'; import { useSettingsStore } from '@/stores/settings'; -import { INodeTypeDescription, IRun } from 'n8n-workflow'; +import type { INodeTypeDescription, IRun } from 'n8n-workflow'; import { useWorkflowsStore } from '@/stores/workflows'; import { useNodeTypesStore } from '@/stores/nodeTypes'; diff --git a/packages/editor-ui/src/stores/settings.ts b/packages/editor-ui/src/stores/settings.ts index a468d4b447970..04769f8edcea0 100644 --- a/packages/editor-ui/src/stores/settings.ts +++ b/packages/editor-ui/src/stores/settings.ts @@ -8,21 +8,17 @@ import { } from '@/api/ldap'; import { getPromptsData, getSettings, submitContactInfo, submitValueSurvey } from '@/api/settings'; import { testHealthEndpoint } from '@/api/templates'; -import { - CONTACT_PROMPT_MODAL_KEY, - EnterpriseEditionFeature, - STORES, - VALUE_SURVEY_MODAL_KEY, -} from '@/constants'; -import { +import type { EnterpriseEditionFeature } from '@/constants'; +import { CONTACT_PROMPT_MODAL_KEY, STORES, VALUE_SURVEY_MODAL_KEY } from '@/constants'; +import type { ILdapConfig, IN8nPromptResponse, IN8nPrompts, IN8nValueSurveyData, ISettingsState, - UserManagementAuthenticationMethod, } from '@/Interface'; -import { +import { UserManagementAuthenticationMethod } from '@/Interface'; +import type { IDataObject, ILogLevel, IN8nUISettings, diff --git a/packages/editor-ui/src/stores/sso.ts b/packages/editor-ui/src/stores/sso.ts index 3de019a01a1ad..93fb389772d68 100644 --- a/packages/editor-ui/src/stores/sso.ts +++ b/packages/editor-ui/src/stores/sso.ts @@ -4,7 +4,7 @@ import { EnterpriseEditionFeature } from '@/constants'; import { useRootStore } from '@/stores/n8nRootStore'; import { useSettingsStore } from '@/stores/settings'; import * as ssoApi from '@/api/sso'; -import { SamlPreferences } from '@/Interface'; +import type { SamlPreferences } from '@/Interface'; import { updateCurrentUser } from '@/api/users'; import { useUsersStore } from '@/stores/users'; diff --git a/packages/editor-ui/src/stores/tags.ts b/packages/editor-ui/src/stores/tags.ts index 870b01a573189..70e37bc5f0a3d 100644 --- a/packages/editor-ui/src/stores/tags.ts +++ b/packages/editor-ui/src/stores/tags.ts @@ -1,6 +1,6 @@ import { createTag, deleteTag, getTags, updateTag } from '@/api/tags'; import { STORES } from '@/constants'; -import { ITag, ITagsState } from '@/Interface'; +import type { ITag, ITagsState } from '@/Interface'; import { defineStore } from 'pinia'; import Vue from 'vue'; import { useRootStore } from './n8nRootStore'; diff --git a/packages/editor-ui/src/stores/telemetry.ts b/packages/editor-ui/src/stores/telemetry.ts index 26338651a439e..ed3b68bbf01f4 100644 --- a/packages/editor-ui/src/stores/telemetry.ts +++ b/packages/editor-ui/src/stores/telemetry.ts @@ -1,7 +1,8 @@ import type { Telemetry } from '@/plugins/telemetry'; -import { ITelemetryTrackProperties } from 'n8n-workflow'; +import type { ITelemetryTrackProperties } from 'n8n-workflow'; import { defineStore } from 'pinia'; -import { ref, Ref } from 'vue'; +import type { Ref } from 'vue'; +import { ref } from 'vue'; export const useTelemetryStore = defineStore('telemetry', () => { const telemetry: Ref<Telemetry | undefined> = ref(); diff --git a/packages/editor-ui/src/stores/templates.ts b/packages/editor-ui/src/stores/templates.ts index 9b59e30cd6514..694a5ca284879 100644 --- a/packages/editor-ui/src/stores/templates.ts +++ b/packages/editor-ui/src/stores/templates.ts @@ -1,6 +1,6 @@ import { defineStore } from 'pinia'; import { STORES } from '@/constants'; -import { +import type { ITemplatesCategory, ITemplatesCollection, ITemplatesCollectionFull, diff --git a/packages/editor-ui/src/stores/ui.ts b/packages/editor-ui/src/stores/ui.ts index e9b18cef260ba..cc9ce72dccca3 100644 --- a/packages/editor-ui/src/stores/ui.ts +++ b/packages/editor-ui/src/stores/ui.ts @@ -32,7 +32,7 @@ import { WORKFLOW_SHARE_MODAL_KEY, USER_ACTIVATION_SURVEY_MODAL, } from '@/constants'; -import { +import type { CurlToJSONResponse, IFakeDoorLocation, IMenuItem, @@ -49,7 +49,8 @@ import { getCurlToJson } from '@/api/curlHelper'; import { useWorkflowsStore } from './workflows'; import { useSettingsStore } from './settings'; import { useUsageStore } from './usage'; -import { i18n as locale, BaseTextKey } from '@/plugins/i18n'; +import type { BaseTextKey } from '@/plugins/i18n'; +import { i18n as locale } from '@/plugins/i18n'; export const useUIStore = defineStore(STORES.UI, { state: (): UIState => ({ diff --git a/packages/editor-ui/src/stores/usage.ts b/packages/editor-ui/src/stores/usage.ts index e9e1b7dc77df2..49df9cb2f1bda 100644 --- a/packages/editor-ui/src/stores/usage.ts +++ b/packages/editor-ui/src/stores/usage.ts @@ -1,6 +1,6 @@ import { computed, reactive } from 'vue'; import { defineStore } from 'pinia'; -import { UsageState } from '@/Interface'; +import type { UsageState } from '@/Interface'; import { activateLicenseKey, getLicense, renewLicense } from '@/api/usage'; import { useRootStore } from '@/stores/n8nRootStore'; import { useSettingsStore } from '@/stores/settings'; diff --git a/packages/editor-ui/src/stores/versions.ts b/packages/editor-ui/src/stores/versions.ts index cc16d0c2da145..6642e71dad498 100644 --- a/packages/editor-ui/src/stores/versions.ts +++ b/packages/editor-ui/src/stores/versions.ts @@ -1,6 +1,6 @@ import { getNextVersions } from '@/api/versions'; import { STORES } from '@/constants'; -import { IVersion, IVersionNotificationSettings, IVersionsState } from '@/Interface'; +import type { IVersion, IVersionNotificationSettings, IVersionsState } from '@/Interface'; import { defineStore } from 'pinia'; import { useRootStore } from './n8nRootStore'; diff --git a/packages/editor-ui/src/stores/webhooks.ts b/packages/editor-ui/src/stores/webhooks.ts index a628b3d301fc8..1aee8ed27773a 100644 --- a/packages/editor-ui/src/stores/webhooks.ts +++ b/packages/editor-ui/src/stores/webhooks.ts @@ -1,7 +1,7 @@ import { STORES } from '@/constants'; -import { IFakeDoor, INodeUi, IRootState, NestedRecord } from '@/Interface'; -import { IMenuItem } from 'n8n-design-system'; -import { IWorkflowSettings } from 'n8n-workflow'; +import type { IFakeDoor, INodeUi, IRootState, NestedRecord } from '@/Interface'; +import type { IMenuItem } from 'n8n-design-system'; +import type { IWorkflowSettings } from 'n8n-workflow'; import { defineStore } from 'pinia'; import { useRootStore } from './n8nRootStore'; import { useNDVStore } from './ndv'; diff --git a/packages/editor-ui/src/stores/workflows.ee.ts b/packages/editor-ui/src/stores/workflows.ee.ts index 78f95173db9b9..0f9fcb83b971b 100644 --- a/packages/editor-ui/src/stores/workflows.ee.ts +++ b/packages/editor-ui/src/stores/workflows.ee.ts @@ -1,5 +1,5 @@ import Vue from 'vue'; -import { IUser } from '../Interface'; +import type { IUser } from '../Interface'; import { setWorkflowSharedWith } from '@/api/workflows.ee'; import { EnterpriseEditionFeature, STORES } from '@/constants'; import { useRootStore } from '@/stores/n8nRootStore'; diff --git a/packages/editor-ui/src/stores/workflows.ts b/packages/editor-ui/src/stores/workflows.ts index bbfad903d9c50..e784a3a804083 100644 --- a/packages/editor-ui/src/stores/workflows.ts +++ b/packages/editor-ui/src/stores/workflows.ts @@ -8,7 +8,7 @@ import { START_NODE_TYPE, STORES, } from '@/constants'; -import { +import type { ExecutionsQueryFilter, IActivationError, IExecutionDeleteFilter, @@ -32,12 +32,10 @@ import { WorkflowsState, } from '@/Interface'; import { defineStore } from 'pinia'; -import { - deepCopy, +import type { IAbstractEventMessage, IConnection, IConnections, - IDataObject, IExecutionsSummary, INode, INodeConnections, @@ -54,9 +52,9 @@ import { IRunExecutionData, ITaskData, IWorkflowSettings, - NodeHelpers, - Workflow, } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; +import { deepCopy, NodeHelpers, Workflow } from 'n8n-workflow'; import Vue from 'vue'; import { useRootStore } from './n8nRootStore'; diff --git a/packages/editor-ui/src/utils/__tests__/mappingUtils.test.ts b/packages/editor-ui/src/utils/__tests__/mappingUtils.test.ts index d8246a150fc04..51862efecab61 100644 --- a/packages/editor-ui/src/utils/__tests__/mappingUtils.test.ts +++ b/packages/editor-ui/src/utils/__tests__/mappingUtils.test.ts @@ -1,4 +1,4 @@ -import { INodeProperties } from 'n8n-workflow'; +import type { INodeProperties } from 'n8n-workflow'; import { getMappedResult, getMappedExpression } from '../mappingUtils'; const RLC_PARAM: INodeProperties = { diff --git a/packages/editor-ui/src/utils/__tests__/typesUtils.test.ts b/packages/editor-ui/src/utils/__tests__/typesUtils.test.ts index 5c87c1a5315d8..d914146b0d3cb 100644 --- a/packages/editor-ui/src/utils/__tests__/typesUtils.test.ts +++ b/packages/editor-ui/src/utils/__tests__/typesUtils.test.ts @@ -1,6 +1,6 @@ import jp from 'jsonpath'; import { isEmpty, intersection, getSchema, isValidDate } from '@/utils'; -import { Schema } from '@/Interface'; +import type { Schema } from '@/Interface'; describe('Types Utils', () => { describe('isEmpty', () => { diff --git a/packages/editor-ui/src/utils/__tests__/userUtils.test.ts b/packages/editor-ui/src/utils/__tests__/userUtils.test.ts index fbebefc4b45d5..b5ed96815724d 100644 --- a/packages/editor-ui/src/utils/__tests__/userUtils.test.ts +++ b/packages/editor-ui/src/utils/__tests__/userUtils.test.ts @@ -4,11 +4,11 @@ import { merge } from 'lodash-es'; import { isAuthorized } from '@/utils'; import { useSettingsStore } from '@/stores/settings'; import { useSSOStore } from '@/stores/sso'; -import { IUser } from '@/Interface'; +import type { IUser } from '@/Interface'; import { routes } from '@/router'; import { VIEWS } from '@/constants'; import { SETTINGS_STORE_DEFAULT_STATE } from '@/__tests__/utils'; -import { IN8nUISettings } from 'n8n-workflow'; +import type { IN8nUISettings } from 'n8n-workflow'; const DEFAULT_SETTINGS: IN8nUISettings = SETTINGS_STORE_DEFAULT_STATE.settings; diff --git a/packages/editor-ui/src/utils/apiUtils.ts b/packages/editor-ui/src/utils/apiUtils.ts index e6a8900920c3e..6d7b809036366 100644 --- a/packages/editor-ui/src/utils/apiUtils.ts +++ b/packages/editor-ui/src/utils/apiUtils.ts @@ -1,5 +1,6 @@ -import axios, { AxiosRequestConfig, Method } from 'axios'; -import { IDataObject } from 'n8n-workflow'; +import type { AxiosRequestConfig, Method } from 'axios'; +import axios from 'axios'; +import type { IDataObject } from 'n8n-workflow'; import type { IExecutionFlattedResponse, IExecutionResponse, diff --git a/packages/editor-ui/src/utils/canvasUtils.ts b/packages/editor-ui/src/utils/canvasUtils.ts index 258a0b3e9cdf4..5996802a8880c 100644 --- a/packages/editor-ui/src/utils/canvasUtils.ts +++ b/packages/editor-ui/src/utils/canvasUtils.ts @@ -1,9 +1,9 @@ import { MAIN_HEADER_TABS, VIEWS } from '@/constants'; -import { IZoomConfig } from '@/Interface'; +import type { IZoomConfig } from '@/Interface'; import { useWorkflowsStore } from '@/stores/workflows'; -import { ConnectionDetachedParams } from '@jsplumb/core'; -import { IConnection } from 'n8n-workflow'; -import { Route } from 'vue-router'; +import type { ConnectionDetachedParams } from '@jsplumb/core'; +import type { IConnection } from 'n8n-workflow'; +import type { Route } from 'vue-router'; /* Constants and utility functions mainly used by canvas store diff --git a/packages/editor-ui/src/utils/executionUtils.ts b/packages/editor-ui/src/utils/executionUtils.ts index 5c9babc306d4d..06a64b60d6a7a 100644 --- a/packages/editor-ui/src/utils/executionUtils.ts +++ b/packages/editor-ui/src/utils/executionUtils.ts @@ -1,5 +1,5 @@ -import { ExecutionStatus, IDataObject } from 'n8n-workflow'; -import { ExecutionFilterType, ExecutionsQueryFilter } from '@/Interface'; +import type { ExecutionStatus, IDataObject } from 'n8n-workflow'; +import type { ExecutionFilterType, ExecutionsQueryFilter } from '@/Interface'; import { isEmpty } from '@/utils/typesUtils'; export const executionFilterToQueryFilter = ( diff --git a/packages/editor-ui/src/utils/forceParse.ts b/packages/editor-ui/src/utils/forceParse.ts index 427babd4ce76b..1b0136f0a4ebd 100644 --- a/packages/editor-ui/src/utils/forceParse.ts +++ b/packages/editor-ui/src/utils/forceParse.ts @@ -1,4 +1,4 @@ -import { EditorView } from '@codemirror/view'; +import type { EditorView } from '@codemirror/view'; /** * Simulate user action to force parser to catch up during scroll. diff --git a/packages/editor-ui/src/utils/mappingUtils.ts b/packages/editor-ui/src/utils/mappingUtils.ts index bf07289b25141..47adeffdec228 100644 --- a/packages/editor-ui/src/utils/mappingUtils.ts +++ b/packages/editor-ui/src/utils/mappingUtils.ts @@ -1,4 +1,5 @@ -import { INodeProperties, isResourceLocatorValue, NodeParameterValueType } from 'n8n-workflow'; +import type { INodeProperties, NodeParameterValueType } from 'n8n-workflow'; +import { isResourceLocatorValue } from 'n8n-workflow'; export function generatePath(root: string, path: Array<string | number>): string { return path.reduce((accu: string, part: string | number) => { diff --git a/packages/editor-ui/src/utils/nodeTypesUtils.ts b/packages/editor-ui/src/utils/nodeTypesUtils.ts index 2d07bf93e95e4..0068601616a55 100644 --- a/packages/editor-ui/src/utils/nodeTypesUtils.ts +++ b/packages/editor-ui/src/utils/nodeTypesUtils.ts @@ -1,7 +1,7 @@ import { MAIN_AUTH_FIELD_NAME, NODE_RESOURCE_FIELD_NAME } from './../constants'; import { useWorkflowsStore } from '@/stores/workflows'; import { useNodeTypesStore } from './../stores/nodeTypes'; -import { INodeCredentialDescription } from './../../../workflow/src/Interfaces'; +import type { INodeCredentialDescription } from './../../../workflow/src/Interfaces'; import { CORE_NODES_CATEGORY, CUSTOM_NODES_CATEGORY, @@ -16,7 +16,7 @@ import { ALL_NODE_FILTER, MAPPING_PARAMS, } from '@/constants'; -import { +import type { INodeCreateElement, ICategoriesWithNodes, INodeUi, @@ -25,7 +25,7 @@ import { NodeAuthenticationOption, INodeUpdatePropertiesInformation, } from '@/Interface'; -import { +import type { IDataObject, INodeExecutionData, INodeProperties, diff --git a/packages/editor-ui/src/utils/nodeViewUtils.ts b/packages/editor-ui/src/utils/nodeViewUtils.ts index 6884924a38ac9..5398c8aade97e 100644 --- a/packages/editor-ui/src/utils/nodeViewUtils.ts +++ b/packages/editor-ui/src/utils/nodeViewUtils.ts @@ -1,12 +1,13 @@ import { getStyleTokenValue } from '@/utils/htmlUtils'; import { isNumber } from '@/utils'; import { NODE_OUTPUT_DEFAULT_KEY, STICKY_NODE_TYPE, QUICKSTART_NOTE_NAME } from '@/constants'; -import { EndpointStyle, IBounds, INodeUi, XYPosition } from '@/Interface'; -import { ArrayAnchorSpec, ConnectorSpec, OverlaySpec, PaintStyle } from '@jsplumb/common'; -import { Endpoint, Connection, ConnectionEstablishedParams } from '@jsplumb/core'; +import type { EndpointStyle, IBounds, INodeUi, XYPosition } from '@/Interface'; +import type { ArrayAnchorSpec, ConnectorSpec, OverlaySpec, PaintStyle } from '@jsplumb/common'; +import type { Endpoint, Connection } from '@jsplumb/core'; +import { ConnectionEstablishedParams } from '@jsplumb/core'; import { N8nConnector } from '@/plugins/connectors/N8nCustomConnector'; import { closestNumberDivisibleBy } from '@/utils'; -import { +import type { IConnection, INode, ITaskData, diff --git a/packages/editor-ui/src/utils/pairedItemUtils.ts b/packages/editor-ui/src/utils/pairedItemUtils.ts index 3f1d2efc41846..0f5c0fc95ad94 100644 --- a/packages/editor-ui/src/utils/pairedItemUtils.ts +++ b/packages/editor-ui/src/utils/pairedItemUtils.ts @@ -1,5 +1,5 @@ -import { IPairedItemData, IRunData, ITaskData } from 'n8n-workflow'; -import { IExecutionResponse, TargetItem } from '../Interface'; +import type { IPairedItemData, IRunData, ITaskData } from 'n8n-workflow'; +import type { IExecutionResponse, TargetItem } from '../Interface'; import { isNotNull } from '@/utils'; /* diff --git a/packages/editor-ui/src/utils/typeGuards.ts b/packages/editor-ui/src/utils/typeGuards.ts index 0ccfa9b4613df..595505aff183d 100644 --- a/packages/editor-ui/src/utils/typeGuards.ts +++ b/packages/editor-ui/src/utils/typeGuards.ts @@ -1,6 +1,6 @@ -import { NewCredentialsModal } from './../Interface'; -import { INodeParameterResourceLocator } from 'n8n-workflow'; -import { ICredentialsResponse } from '@/Interface'; +import type { NewCredentialsModal } from './../Interface'; +import type { INodeParameterResourceLocator } from 'n8n-workflow'; +import type { ICredentialsResponse } from '@/Interface'; /* Type guards used in editor-ui project diff --git a/packages/editor-ui/src/utils/typesUtils.ts b/packages/editor-ui/src/utils/typesUtils.ts index 4a4f5d28b48f4..f3d158977c392 100644 --- a/packages/editor-ui/src/utils/typesUtils.ts +++ b/packages/editor-ui/src/utils/typesUtils.ts @@ -1,6 +1,7 @@ import dateformat from 'dateformat'; -import { IDataObject, jsonParse } from 'n8n-workflow'; -import { Schema, Optional, Primitives } from '@/Interface'; +import type { IDataObject } from 'n8n-workflow'; +import { jsonParse } from 'n8n-workflow'; +import type { Schema, Optional, Primitives } from '@/Interface'; import { isObj } from '@/utils/typeGuards'; import { generatePath } from '@/utils/mappingUtils'; import { DateTime } from 'luxon'; diff --git a/packages/editor-ui/src/utils/userUtils.ts b/packages/editor-ui/src/utils/userUtils.ts index 2d7b1ce01b9e2..b745ea9c59184 100644 --- a/packages/editor-ui/src/utils/userUtils.ts +++ b/packages/editor-ui/src/utils/userUtils.ts @@ -60,7 +60,7 @@ import { GOOGLE_SHEETS_NODE_TYPE, CODE_NODE_TYPE, } from '@/constants'; -import { +import type { IPermissions, IPersonalizationSurveyAnswersV1, IPersonalizationSurveyAnswersV2, @@ -69,7 +69,7 @@ import { IPersonalizationSurveyVersions, IUser, } from '@/Interface'; -import { ILogInStatus, IRole, IUserPermissions } from '@/Interface'; +import type { ILogInStatus, IRole, IUserPermissions } from '@/Interface'; /* Utility functions used to handle users in n8n diff --git a/packages/editor-ui/src/views/CanvasAddButton.vue b/packages/editor-ui/src/views/CanvasAddButton.vue index 945f8151b457d..5fa33c79c41fb 100644 --- a/packages/editor-ui/src/views/CanvasAddButton.vue +++ b/packages/editor-ui/src/views/CanvasAddButton.vue @@ -26,7 +26,7 @@ <script setup lang="ts"> import { computed } from 'vue'; -import { XYPosition } from '@/Interface'; +import type { XYPosition } from '@/Interface'; import { useNodeCreatorStore } from '@/stores/nodeCreator'; export interface Props { diff --git a/packages/editor-ui/src/views/ChangePasswordView.vue b/packages/editor-ui/src/views/ChangePasswordView.vue index a40bfefbe27ac..e88df40ca4467 100644 --- a/packages/editor-ui/src/views/ChangePasswordView.vue +++ b/packages/editor-ui/src/views/ChangePasswordView.vue @@ -13,7 +13,7 @@ import AuthView from './AuthView.vue'; import { showMessage } from '@/mixins/showMessage'; import mixins from 'vue-typed-mixins'; -import { IFormBoxConfig } from '@/Interface'; +import type { IFormBoxConfig } from '@/Interface'; import { VIEWS } from '@/constants'; import { mapStores } from 'pinia'; import { useUsersStore } from '@/stores/users'; diff --git a/packages/editor-ui/src/views/CredentialsView.vue b/packages/editor-ui/src/views/CredentialsView.vue index 7c037bce62da4..f05c52942a689 100644 --- a/packages/editor-ui/src/views/CredentialsView.vue +++ b/packages/editor-ui/src/views/CredentialsView.vue @@ -45,7 +45,8 @@ <script lang="ts"> import { showMessage } from '@/mixins/showMessage'; -import { ICredentialsResponse, ICredentialTypeMap, IUser } from '@/Interface'; +import type { ICredentialsResponse, ICredentialTypeMap } from '@/Interface'; +import { IUser } from '@/Interface'; import mixins from 'vue-typed-mixins'; import SettingsView from './SettingsView.vue'; @@ -53,13 +54,13 @@ import ResourcesListLayout from '@/components/layouts/ResourcesListLayout.vue'; import PageViewLayout from '@/components/layouts/PageViewLayout.vue'; import PageViewLayoutList from '@/components/layouts/PageViewLayoutList.vue'; import CredentialCard from '@/components/CredentialCard.vue'; -import { ICredentialType } from 'n8n-workflow'; +import type { ICredentialType } from 'n8n-workflow'; import TemplateCard from '@/components/TemplateCard.vue'; import { debounceHelper } from '@/mixins/debounce'; import ResourceOwnershipSelect from '@/components/forms/ResourceOwnershipSelect.ee.vue'; import ResourceFiltersDropdown from '@/components/forms/ResourceFiltersDropdown.vue'; import { CREDENTIAL_SELECT_MODAL_KEY } from '@/constants'; -import Vue from 'vue'; +import type Vue from 'vue'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; import { useUsersStore } from '@/stores/users'; diff --git a/packages/editor-ui/src/views/ForgotMyPasswordView.vue b/packages/editor-ui/src/views/ForgotMyPasswordView.vue index e930f6285eb3d..4ae66a0200470 100644 --- a/packages/editor-ui/src/views/ForgotMyPasswordView.vue +++ b/packages/editor-ui/src/views/ForgotMyPasswordView.vue @@ -7,7 +7,7 @@ import AuthView from './AuthView.vue'; import { showMessage } from '@/mixins/showMessage'; import mixins from 'vue-typed-mixins'; -import { IFormBoxConfig } from '@/Interface'; +import type { IFormBoxConfig } from '@/Interface'; import { mapStores } from 'pinia'; import { useSettingsStore } from '@/stores/settings'; import { useUsersStore } from '@/stores/users'; diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue index d5eaae0ecd164..d838c5812ed66 100644 --- a/packages/editor-ui/src/views/NodeView.vue +++ b/packages/editor-ui/src/views/NodeView.vue @@ -165,18 +165,20 @@ import Vue from 'vue'; import { mapStores } from 'pinia'; -import { +import type { Endpoint, Connection, - EVENT_CONNECTION, ConnectionEstablishedParams, - EVENT_CONNECTION_DETACHED, - EVENT_CONNECTION_MOVED, - INTERCEPT_BEFORE_DROP, BeforeDropParams, ConnectionDetachedParams, ConnectionMovedParams, } from '@jsplumb/core'; +import { + EVENT_CONNECTION, + EVENT_CONNECTION_DETACHED, + EVENT_CONNECTION_MOVED, + INTERCEPT_BEFORE_DROP, +} from '@jsplumb/core'; import type { MessageBoxInputData } from 'element-ui/types/message-box'; import { @@ -220,8 +222,7 @@ import Sticky from '@/components/Sticky.vue'; import CanvasAddButton from './CanvasAddButton.vue'; import mixins from 'vue-typed-mixins'; import { v4 as uuid } from 'uuid'; -import { - deepCopy, +import type { IConnection, IConnections, IDataObject, @@ -237,10 +238,9 @@ import { ITaskData, ITelemetryTrackProperties, IWorkflowBase, - NodeHelpers, - TelemetryHelpers, Workflow, } from 'n8n-workflow'; +import { deepCopy, NodeHelpers, TelemetryHelpers } from 'n8n-workflow'; import type { ICredentialsResponse, IExecutionResponse, @@ -264,7 +264,7 @@ import { debounceHelper } from '@/mixins/debounce'; import { useUIStore } from '@/stores/ui'; import { useSettingsStore } from '@/stores/settings'; import { useUsersStore } from '@/stores/users'; -import { Route, RawLocation } from 'vue-router'; +import type { Route, RawLocation } from 'vue-router'; import { dataPinningEventBus, nodeViewEventBus } from '@/event-bus'; import { useWorkflowsStore } from '@/stores/workflows'; import { useRootStore } from '@/stores/n8nRootStore'; @@ -290,6 +290,7 @@ import { RenameNodeCommand, historyBus, } from '@/models/history'; +import type { BrowserJsPlumbInstance } from '@jsplumb/browser-ui'; import { EVENT_ENDPOINT_MOUSEOVER, EVENT_ENDPOINT_MOUSEOUT, @@ -298,11 +299,10 @@ import { EVENT_CONNECTION_ABORT, EVENT_CONNECTION_MOUSEOUT, EVENT_CONNECTION_MOUSEOVER, - BrowserJsPlumbInstance, ready, } from '@jsplumb/browser-ui'; +import type { N8nPlusEndpoint } from '@/plugins/endpoints/N8nPlusEndpointType'; import { - N8nPlusEndpoint, N8nPlusEndpointType, EVENT_PLUS_ENDPOINT_CLICK, } from '@/plugins/endpoints/N8nPlusEndpointType'; diff --git a/packages/editor-ui/src/views/SamlOnboarding.vue b/packages/editor-ui/src/views/SamlOnboarding.vue index 4a33f6a988678..a57fd8cbc0f22 100644 --- a/packages/editor-ui/src/views/SamlOnboarding.vue +++ b/packages/editor-ui/src/views/SamlOnboarding.vue @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue'; import { useRouter } from 'vue-router/composables'; import { Notification } from 'element-ui'; -import { IFormBoxConfig } from 'n8n-design-system'; +import type { IFormBoxConfig } from 'n8n-design-system'; import AuthView from '@/views/AuthView.vue'; import { i18n as locale } from '@/plugins/i18n'; import { useSSOStore } from '@/stores/sso'; diff --git a/packages/editor-ui/src/views/SettingsApiView.vue b/packages/editor-ui/src/views/SettingsApiView.vue index 21c7ce3abaf50..6321440d3b0c9 100644 --- a/packages/editor-ui/src/views/SettingsApiView.vue +++ b/packages/editor-ui/src/views/SettingsApiView.vue @@ -76,7 +76,7 @@ <script lang="ts"> import { showMessage } from '@/mixins/showMessage'; -import { IUser } from '@/Interface'; +import type { IUser } from '@/Interface'; import mixins from 'vue-typed-mixins'; import CopyInput from '@/components/CopyInput.vue'; diff --git a/packages/editor-ui/src/views/SettingsCommunityNodesView.vue b/packages/editor-ui/src/views/SettingsCommunityNodesView.vue index c6e4dbfd6d9c4..694b8cccc1c26 100644 --- a/packages/editor-ui/src/views/SettingsCommunityNodesView.vue +++ b/packages/editor-ui/src/views/SettingsCommunityNodesView.vue @@ -61,7 +61,7 @@ import CommunityPackageCard from '@/components/CommunityPackageCard.vue'; import { showMessage } from '@/mixins/showMessage'; import { pushConnection } from '@/mixins/pushConnection'; import mixins from 'vue-typed-mixins'; -import { PublicInstalledPackage } from 'n8n-workflow'; +import type { PublicInstalledPackage } from 'n8n-workflow'; import { useCommunityNodesStore } from '@/stores/communityNodes'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/views/SettingsFakeDoorView.vue b/packages/editor-ui/src/views/SettingsFakeDoorView.vue index b7da2f8c9db2e..2a15637b8a630 100644 --- a/packages/editor-ui/src/views/SettingsFakeDoorView.vue +++ b/packages/editor-ui/src/views/SettingsFakeDoorView.vue @@ -3,7 +3,7 @@ </template> <script lang="ts"> -import { IFakeDoor } from '@/Interface'; +import type { IFakeDoor } from '@/Interface'; import { defineComponent } from 'vue'; import FeatureComingSoon from '@/components/FeatureComingSoon.vue'; import { mapStores } from 'pinia'; diff --git a/packages/editor-ui/src/views/SettingsLdapView.vue b/packages/editor-ui/src/views/SettingsLdapView.vue index bf3b449b1ddc4..75f9884c6042c 100644 --- a/packages/editor-ui/src/views/SettingsLdapView.vue +++ b/packages/editor-ui/src/views/SettingsLdapView.vue @@ -149,7 +149,7 @@ <script lang="ts"> import { convertToDisplayDate } from '@/utils'; import { showMessage } from '@/mixins/showMessage'; -import { +import type { ILdapConfig, ILdapSyncData, ILdapSyncTable, @@ -170,7 +170,7 @@ import { useSettingsStore } from '@/stores/settings'; import { getLdapSynchronizations } from '@/api/ldap'; import { N8N_CONTACT_EMAIL, N8N_SALES_EMAIL } from '@/constants'; import { createEventBus } from '@/event-bus'; -import { N8nFormInputs } from 'n8n-design-system'; +import type { N8nFormInputs } from 'n8n-design-system'; type N8nFormInputsRef = InstanceType<typeof N8nFormInputs>; diff --git a/packages/editor-ui/src/views/SettingsLogStreamingView.vue b/packages/editor-ui/src/views/SettingsLogStreamingView.vue index 0508462ed786b..47d63c35e593d 100644 --- a/packages/editor-ui/src/views/SettingsLogStreamingView.vue +++ b/packages/editor-ui/src/views/SettingsLogStreamingView.vue @@ -89,11 +89,8 @@ import { useLogStreamingStore } from '../stores/logStreamingStore'; import { useSettingsStore } from '../stores/settings'; import { useUIStore } from '../stores/ui'; import { LOG_STREAM_MODAL_KEY, EnterpriseEditionFeature } from '../constants'; -import { - deepCopy, - defaultMessageEventBusDestinationOptions, - MessageEventBusDestinationOptions, -} from 'n8n-workflow'; +import type { MessageEventBusDestinationOptions } from 'n8n-workflow'; +import { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow'; import PageViewLayout from '@/components/layouts/PageViewLayout.vue'; import EventDestinationCard from '@/components/SettingsLogStreaming/EventDestinationCard.ee.vue'; import { createEventBus } from '@/event-bus'; diff --git a/packages/editor-ui/src/views/SettingsPersonalView.vue b/packages/editor-ui/src/views/SettingsPersonalView.vue index 91263038cc675..edc5671d0cced 100644 --- a/packages/editor-ui/src/views/SettingsPersonalView.vue +++ b/packages/editor-ui/src/views/SettingsPersonalView.vue @@ -60,7 +60,7 @@ <script lang="ts"> import { showMessage } from '@/mixins/showMessage'; import { CHANGE_PASSWORD_MODAL_KEY, SignInType } from '@/constants'; -import { IFormInputs, IUser } from '@/Interface'; +import type { IFormInputs, IUser } from '@/Interface'; import { useUIStore } from '@/stores/ui'; import { useUsersStore } from '@/stores/users'; import { useSettingsStore } from '@/stores/settings'; diff --git a/packages/editor-ui/src/views/SettingsUsageAndPlan.vue b/packages/editor-ui/src/views/SettingsUsageAndPlan.vue index e9e8803768200..5623e48fa4c4f 100644 --- a/packages/editor-ui/src/views/SettingsUsageAndPlan.vue +++ b/packages/editor-ui/src/views/SettingsUsageAndPlan.vue @@ -2,7 +2,8 @@ import { computed, onMounted, ref } from 'vue'; import { useRoute, useRouter } from 'vue-router/composables'; import { Notification } from 'element-ui'; -import { UsageTelemetry, useUsageStore } from '@/stores/usage'; +import type { UsageTelemetry } from '@/stores/usage'; +import { useUsageStore } from '@/stores/usage'; import { telemetry } from '@/plugins/telemetry'; import { i18n as locale } from '@/plugins/i18n'; import { N8N_PRICING_PAGE_URL } from '@/constants'; diff --git a/packages/editor-ui/src/views/SettingsUsersView.vue b/packages/editor-ui/src/views/SettingsUsersView.vue index 56d724a2c3475..1a0f995328230 100644 --- a/packages/editor-ui/src/views/SettingsUsersView.vue +++ b/packages/editor-ui/src/views/SettingsUsersView.vue @@ -62,7 +62,7 @@ import { EnterpriseEditionFeature, INVITE_USER_MODAL_KEY, VIEWS } from '@/constants'; import PageAlert from '../components/PageAlert.vue'; -import { IUser, IUserListAction } from '@/Interface'; +import type { IUser, IUserListAction } from '@/Interface'; import mixins from 'vue-typed-mixins'; import { showMessage } from '@/mixins/showMessage'; import { copyPaste } from '@/mixins/copyPaste'; diff --git a/packages/editor-ui/src/views/SettingsView.vue b/packages/editor-ui/src/views/SettingsView.vue index a5016ce6a9cd8..37adbe9c609fc 100644 --- a/packages/editor-ui/src/views/SettingsView.vue +++ b/packages/editor-ui/src/views/SettingsView.vue @@ -15,7 +15,7 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { Route } from 'vue-router'; +import type { Route } from 'vue-router'; import { VIEWS } from '@/constants'; import SettingsSidebar from '@/components/SettingsSidebar.vue'; diff --git a/packages/editor-ui/src/views/SetupView.vue b/packages/editor-ui/src/views/SetupView.vue index 15a290a905c6b..264c9c22ee76d 100644 --- a/packages/editor-ui/src/views/SetupView.vue +++ b/packages/editor-ui/src/views/SetupView.vue @@ -13,7 +13,7 @@ import AuthView from './AuthView.vue'; import { showMessage } from '@/mixins/showMessage'; import mixins from 'vue-typed-mixins'; -import { IFormBoxConfig } from '@/Interface'; +import type { IFormBoxConfig } from '@/Interface'; import { VIEWS } from '@/constants'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/views/SigninView.vue b/packages/editor-ui/src/views/SigninView.vue index 33eed26eec0bf..e758f79218c75 100644 --- a/packages/editor-ui/src/views/SigninView.vue +++ b/packages/editor-ui/src/views/SigninView.vue @@ -13,7 +13,7 @@ import AuthView from './AuthView.vue'; import { showMessage } from '@/mixins/showMessage'; import mixins from 'vue-typed-mixins'; -import { IFormBoxConfig } from '@/Interface'; +import type { IFormBoxConfig } from '@/Interface'; import { VIEWS } from '@/constants'; import { mapStores } from 'pinia'; import { useUsersStore } from '@/stores/users'; diff --git a/packages/editor-ui/src/views/SignupView.vue b/packages/editor-ui/src/views/SignupView.vue index f46e26a5b191d..012f0920182d9 100644 --- a/packages/editor-ui/src/views/SignupView.vue +++ b/packages/editor-ui/src/views/SignupView.vue @@ -12,7 +12,7 @@ import AuthView from './AuthView.vue'; import { showMessage } from '@/mixins/showMessage'; import mixins from 'vue-typed-mixins'; -import { IFormBoxConfig } from '@/Interface'; +import type { IFormBoxConfig } from '@/Interface'; import { VIEWS } from '@/constants'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/views/TemplatesCollectionView.vue b/packages/editor-ui/src/views/TemplatesCollectionView.vue index 08e5dc90bebca..720a7929b4ff6 100644 --- a/packages/editor-ui/src/views/TemplatesCollectionView.vue +++ b/packages/editor-ui/src/views/TemplatesCollectionView.vue @@ -55,7 +55,7 @@ import TemplateList from '@/components/TemplateList.vue'; import TemplatesView from './TemplatesView.vue'; import { workflowHelpers } from '@/mixins/workflowHelpers'; -import { +import type { ITemplatesCollection, ITemplatesCollectionFull, ITemplatesWorkflow, diff --git a/packages/editor-ui/src/views/TemplatesSearchView.vue b/packages/editor-ui/src/views/TemplatesSearchView.vue index 4fb65f08215e2..6a4670af49d4f 100644 --- a/packages/editor-ui/src/views/TemplatesSearchView.vue +++ b/packages/editor-ui/src/views/TemplatesSearchView.vue @@ -81,14 +81,14 @@ import TemplateList from '@/components/TemplateList.vue'; import TemplatesView from './TemplatesView.vue'; import { genericHelpers } from '@/mixins/genericHelpers'; -import { +import type { ITemplatesCollection, ITemplatesWorkflow, ITemplatesQuery, ITemplatesCategory, } from '@/Interface'; import mixins from 'vue-typed-mixins'; -import { IDataObject } from 'n8n-workflow'; +import type { IDataObject } from 'n8n-workflow'; import { setPageTitle } from '@/utils'; import { VIEWS } from '@/constants'; import { debounceHelper } from '@/mixins/debounce'; diff --git a/packages/editor-ui/src/views/TemplatesWorkflowView.vue b/packages/editor-ui/src/views/TemplatesWorkflowView.vue index 8d1812203f62c..47139550d23c9 100644 --- a/packages/editor-ui/src/views/TemplatesWorkflowView.vue +++ b/packages/editor-ui/src/views/TemplatesWorkflowView.vue @@ -59,7 +59,7 @@ import TemplateDetails from '@/components/TemplateDetails.vue'; import TemplatesView from './TemplatesView.vue'; import WorkflowPreview from '@/components/WorkflowPreview.vue'; -import { ITemplatesWorkflow, ITemplatesWorkflowFull } from '@/Interface'; +import type { ITemplatesWorkflow, ITemplatesWorkflowFull } from '@/Interface'; import { workflowHelpers } from '@/mixins/workflowHelpers'; import mixins from 'vue-typed-mixins'; import { setPageTitle } from '@/utils'; diff --git a/packages/editor-ui/src/views/VariablesView.vue b/packages/editor-ui/src/views/VariablesView.vue index 8f4b0a242a91c..d3dd983858c76 100644 --- a/packages/editor-ui/src/views/VariablesView.vue +++ b/packages/editor-ui/src/views/VariablesView.vue @@ -7,7 +7,11 @@ import ResourcesListLayout from '@/components/layouts/ResourcesListLayout.vue'; import VariablesRow from '@/components/VariablesRow.vue'; import { EnterpriseEditionFeature } from '@/constants'; -import { DatatableColumn, EnvironmentVariable, TemporaryEnvironmentVariable } from '@/Interface'; +import type { + DatatableColumn, + EnvironmentVariable, + TemporaryEnvironmentVariable, +} from '@/Interface'; import { uid } from 'n8n-design-system/utils'; import { getVariablesPermissions } from '@/permissions'; diff --git a/packages/editor-ui/src/views/WorkflowsView.vue b/packages/editor-ui/src/views/WorkflowsView.vue index dec78a5880d96..34716ed45958c 100644 --- a/packages/editor-ui/src/views/WorkflowsView.vue +++ b/packages/editor-ui/src/views/WorkflowsView.vue @@ -100,8 +100,8 @@ import WorkflowCard from '@/components/WorkflowCard.vue'; import TemplateCard from '@/components/TemplateCard.vue'; import { EnterpriseEditionFeature, ASSUMPTION_EXPERIMENT, VIEWS } from '@/constants'; import { debounceHelper } from '@/mixins/debounce'; -import Vue from 'vue'; -import { ITag, IUser, IWorkflowDb } from '@/Interface'; +import type Vue from 'vue'; +import type { ITag, IUser, IWorkflowDb } from '@/Interface'; import TagsDropdown from '@/components/TagsDropdown.vue'; import { mapStores } from 'pinia'; import { useUIStore } from '@/stores/ui'; diff --git a/packages/editor-ui/src/views/__tests__/SettingsSso.test.ts b/packages/editor-ui/src/views/__tests__/SettingsSso.test.ts index a5675017186aa..20c64a8f7fefc 100644 --- a/packages/editor-ui/src/views/__tests__/SettingsSso.test.ts +++ b/packages/editor-ui/src/views/__tests__/SettingsSso.test.ts @@ -9,7 +9,7 @@ import { useSSOStore } from '@/stores/sso'; import { STORES } from '@/constants'; import { SETTINGS_STORE_DEFAULT_STATE, waitAllPromises } from '@/__tests__/utils'; import { i18nInstance } from '@/plugins/i18n'; -import { SamlPreferences, SamlPreferencesExtractedData } from '@/Interface'; +import type { SamlPreferences, SamlPreferencesExtractedData } from '@/Interface'; let pinia: ReturnType<typeof createTestingPinia>; let ssoStore: ReturnType<typeof useSSOStore>; diff --git a/packages/node-dev/.eslintrc.js b/packages/node-dev/.eslintrc.js index 8efac7bc90e71..228cb3e921520 100644 --- a/packages/node-dev/.eslintrc.js +++ b/packages/node-dev/.eslintrc.js @@ -10,7 +10,6 @@ module.exports = { 'templates/**', // TODO: remove this ], rules: { - '@typescript-eslint/consistent-type-imports': 'error', 'import/order': 'off', // TODO: remove this '@typescript-eslint/ban-ts-comment': ['warn', { 'ts-ignore': true }], }, diff --git a/packages/nodes-base/.eslintrc.js b/packages/nodes-base/.eslintrc.js index a06183204c694..a3cf1ef0fc6f5 100644 --- a/packages/nodes-base/.eslintrc.js +++ b/packages/nodes-base/.eslintrc.js @@ -11,8 +11,6 @@ module.exports = { ignorePatterns: ['index.js'], rules: { - '@typescript-eslint/consistent-type-imports': 'error', - // TODO: remove all the following rules eqeqeq: 'off', 'id-denylist': 'off', diff --git a/packages/workflow/.eslintrc.js b/packages/workflow/.eslintrc.js index 52e41e2d2d03a..51b395f058b56 100644 --- a/packages/workflow/.eslintrc.js +++ b/packages/workflow/.eslintrc.js @@ -9,7 +9,6 @@ module.exports = { ...sharedOptions(__dirname), rules: { - '@typescript-eslint/consistent-type-imports': 'error', 'import/order': 'off', // TODO: remove this }, }; From 03be725cef3ea533ec032a9554df5da15f725b78 Mon Sep 17 00:00:00 2001 From: Jimw383 <47244243+Jimw383@users.noreply.github.com> Date: Mon, 24 Apr 2023 12:36:50 +0200 Subject: [PATCH 4/5] SSO/SAML : add Base URL to redirects in acsHandler (#5923) add Base URL to redirects in acsHandler I modified the redirections to include the base URL of the instance so that the redirects remain correct even if the instance is accessed from a subdirectory. Co-authored-by: Michael Auerswald <michael.auerswald@gmail.com> --- packages/cli/src/sso/saml/routes/saml.controller.ee.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/sso/saml/routes/saml.controller.ee.ts b/packages/cli/src/sso/saml/routes/saml.controller.ee.ts index 232020b5945f9..c6b04cae460ef 100644 --- a/packages/cli/src/sso/saml/routes/saml.controller.ee.ts +++ b/packages/cli/src/sso/saml/routes/saml.controller.ee.ts @@ -1,4 +1,5 @@ import express from 'express'; +import { getInstanceBaseUrl } from '@/UserManagement/UserManagementHelper'; import { Authorized, Get, Post, RestController } from '@/decorators'; import { SamlUrls } from '../constants'; import { @@ -125,9 +126,9 @@ export class SamlController { if (isSamlLicensedAndEnabled()) { await issueCookie(res, loginResult.authenticatedUser); if (loginResult.onboardingRequired) { - return res.redirect(SamlUrls.samlOnboarding); + return res.redirect(getInstanceBaseUrl() + SamlUrls.samlOnboarding); } else { - return res.redirect(SamlUrls.defaultRedirect); + return res.redirect(getInstanceBaseUrl() + SamlUrls.defaultRedirect); } } else { return res.status(202).send(loginResult.attributes); From 308a94311fe6e20617dde62e9ac87e9e547c7c9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= <netroy@users.noreply.github.com> Date: Mon, 24 Apr 2023 11:17:08 +0000 Subject: [PATCH 5/5] refactor: Async functions don't need to explicitly return promises (no-changelog) (#6041) --- packages/cli/src/CredentialsHelper.ts | 4 +- packages/cli/src/InternalHooks.ts | 6 +- packages/cli/src/Ldap/LdapService.ee.ts | 2 +- packages/cli/src/posthog/index.ts | 2 +- packages/cli/src/sso/saml/saml.service.ee.ts | 3 +- packages/cli/src/telemetry/index.ts | 2 +- .../test/integration/ldap/ldap.api.test.ts | 28 ++---- packages/cli/test/integration/shared/utils.ts | 4 +- .../cli/test/unit/ActiveExecutions.test.ts | 2 +- .../test/unit/ActiveWorkflowRunner.test.ts | 9 +- .../WorkflowExecuteAdditionalData.test.ts | 2 +- .../core/src/BinaryDataManager/FileSystem.ts | 98 +++++++++---------- packages/core/src/BinaryDataManager/index.ts | 20 ++-- packages/core/src/WorkflowExecute.ts | 12 +-- .../src/components/ExecutionsList.vue | 15 ++- .../layouts/ResourcesListLayout.vue | 2 +- .../editor-ui/src/mixins/workflowHelpers.ts | 12 +-- packages/editor-ui/src/plugins/i18n/index.ts | 8 +- packages/editor-ui/src/stores/settings.ts | 30 +++--- packages/editor-ui/src/views/NodeView.vue | 21 ++-- packages/nodes-base/nodes/Code/Code.node.ts | 4 +- .../nodes/Function/Function.node.ts | 2 +- .../nodes/FunctionItem/FunctionItem.node.ts | 4 +- .../nodes/Google/Ads/CampaignDescription.ts | 18 ++-- .../test/v2/node/executeQuery.test.ts | 9 +- .../test/v2/node/insert.autoMapMode.test.ts | 9 +- .../test/v2/node/insert.manualMode.test.ts | 11 +-- .../nodes/MySql/test/v2/operations.test.ts | 6 +- .../nodes/MySql/test/v2/runQueries.test.ts | 4 +- .../nodes/Postgres/test/v2/operations.test.ts | 2 +- packages/workflow/src/Workflow.ts | 8 +- 31 files changed, 149 insertions(+), 210 deletions(-) diff --git a/packages/cli/src/CredentialsHelper.ts b/packages/cli/src/CredentialsHelper.ts index 2851638360576..cfc86bfd263af 100644 --- a/packages/cli/src/CredentialsHelper.ts +++ b/packages/cli/src/CredentialsHelper.ts @@ -542,10 +542,10 @@ export class CredentialsHelper extends ICredentialsHelper { ): Promise<INodeCredentialTestResult> { const credentialTestFunction = this.getCredentialTestFunction(credentialType); if (credentialTestFunction === undefined) { - return Promise.resolve({ + return { status: 'Error', message: 'No testing function found for this credential.', - }); + }; } if (credentialsDecrypted.data) { diff --git a/packages/cli/src/InternalHooks.ts b/packages/cli/src/InternalHooks.ts index 6a1ab61b64715..965f84642b6fa 100644 --- a/packages/cli/src/InternalHooks.ts +++ b/packages/cli/src/InternalHooks.ts @@ -271,12 +271,12 @@ export class InternalHooks implements IInternalHooksClass { runData?: IRun, userId?: string, ): Promise<void> { - const promises = [Promise.resolve()]; - if (!workflow.id) { - return Promise.resolve(); + return; } + const promises = []; + const properties: IExecutionTrackProperties = { workflow_id: workflow.id, is_manual: false, diff --git a/packages/cli/src/Ldap/LdapService.ee.ts b/packages/cli/src/Ldap/LdapService.ee.ts index bc5432cbea6ef..63394a4145fe4 100644 --- a/packages/cli/src/Ldap/LdapService.ee.ts +++ b/packages/cli/src/Ldap/LdapService.ee.ts @@ -82,7 +82,7 @@ export class LdapService { await this.client.unbind(); return searchEntries; } - return Promise.resolve([]); + return []; } /** diff --git a/packages/cli/src/posthog/index.ts b/packages/cli/src/posthog/index.ts index e513e366366cf..df390c53b39a8 100644 --- a/packages/cli/src/posthog/index.ts +++ b/packages/cli/src/posthog/index.ts @@ -44,7 +44,7 @@ export class PostHogClient { } async getFeatureFlags(user: Pick<PublicUser, 'id' | 'createdAt'>): Promise<FeatureFlags> { - if (!this.postHog) return Promise.resolve({}); + if (!this.postHog) return {}; const fullId = [this.instanceId, user.id].join('#'); diff --git a/packages/cli/src/sso/saml/saml.service.ee.ts b/packages/cli/src/sso/saml/saml.service.ee.ts index b1a764c724094..b16d14600e1d8 100644 --- a/packages/cli/src/sso/saml/saml.service.ee.ts +++ b/packages/cli/src/sso/saml/saml.service.ee.ts @@ -73,9 +73,8 @@ export class SamlService { validate: async (response: string) => { const valid = await validateResponse(response); if (!valid) { - return Promise.reject(new Error('Invalid SAML response')); + throw new Error('Invalid SAML response'); } - return Promise.resolve(); }, }); } diff --git a/packages/cli/src/telemetry/index.ts b/packages/cli/src/telemetry/index.ts index cdc7b96f8be74..7edb6f6172f41 100644 --- a/packages/cli/src/telemetry/index.ts +++ b/packages/cli/src/telemetry/index.ts @@ -76,7 +76,7 @@ export class Telemetry { private async pulse(): Promise<unknown> { if (!this.rudderStack) { - return Promise.resolve(); + return; } const allPromises = Object.keys(this.executionCountsBuffer).map(async (workflowId) => { diff --git a/packages/cli/test/integration/ldap/ldap.api.test.ts b/packages/cli/test/integration/ldap/ldap.api.test.ts index 2bb766be937b9..eaffa15494f23 100644 --- a/packages/cli/test/integration/ldap/ldap.api.test.ts +++ b/packages/cli/test/integration/ldap/ldap.api.test.ts @@ -205,9 +205,7 @@ test('GET /ldap/config route should retrieve current configuration', async () => describe('POST /ldap/test-connection', () => { test('route should success', async () => { - jest - .spyOn(LdapService.prototype, 'testConnection') - .mockImplementation(async () => Promise.resolve()); + jest.spyOn(LdapService.prototype, 'testConnection').mockResolvedValue(); const response = await authAgent(owner).post('/ldap/test-connection'); expect(response.statusCode).toBe(200); @@ -216,9 +214,7 @@ describe('POST /ldap/test-connection', () => { test('route should fail', async () => { const errorMessage = 'Invalid connection'; - jest - .spyOn(LdapService.prototype, 'testConnection') - .mockImplementation(async () => Promise.reject(new Error(errorMessage))); + jest.spyOn(LdapService.prototype, 'testConnection').mockRejectedValue(new Error(errorMessage)); const response = await authAgent(owner).post('/ldap/test-connection'); expect(response.statusCode).toBe(400); @@ -240,9 +236,7 @@ describe('POST /ldap/sync', () => { describe('dry mode', () => { const runTest = async (ldapUsers: LdapUser[]) => { - jest - .spyOn(LdapService.prototype, 'searchWithAdminBinding') - .mockImplementation(async () => Promise.resolve(ldapUsers)); + jest.spyOn(LdapService.prototype, 'searchWithAdminBinding').mockResolvedValue(ldapUsers); const response = await authAgent(owner).post('/ldap/sync').send({ type: 'dry' }); @@ -337,9 +331,7 @@ describe('POST /ldap/sync', () => { describe('live mode', () => { const runTest = async (ldapUsers: LdapUser[]) => { - jest - .spyOn(LdapService.prototype, 'searchWithAdminBinding') - .mockImplementation(async () => Promise.resolve(ldapUsers)); + jest.spyOn(LdapService.prototype, 'searchWithAdminBinding').mockResolvedValue(ldapUsers); const response = await authAgent(owner).post('/ldap/sync').send({ type: 'live' }); @@ -467,9 +459,7 @@ describe('POST /ldap/sync', () => { test('should remove user instance access once the user is disabled during synchronization', async () => { const member = await testDb.createLdapUser({ globalRole: globalMemberRole }, uniqueId()); - jest - .spyOn(LdapService.prototype, 'searchWithAdminBinding') - .mockImplementation(async () => Promise.resolve([])); + jest.spyOn(LdapService.prototype, 'searchWithAdminBinding').mockResolvedValue([]); await authAgent(owner).post('/ldap/sync').send({ type: 'live' }); @@ -508,13 +498,9 @@ describe('POST /login', () => { const authlessAgent = utils.createAgent(app); - jest - .spyOn(LdapService.prototype, 'searchWithAdminBinding') - .mockImplementation(async () => Promise.resolve([ldapUser])); + jest.spyOn(LdapService.prototype, 'searchWithAdminBinding').mockResolvedValue([ldapUser]); - jest - .spyOn(LdapService.prototype, 'validUser') - .mockImplementation(async () => Promise.resolve()); + jest.spyOn(LdapService.prototype, 'validUser').mockResolvedValue(); const response = await authlessAgent .post('/login') diff --git a/packages/cli/test/integration/shared/utils.ts b/packages/cli/test/integration/shared/utils.ts index 3625caf661a84..9e8e4aa2b1ab8 100644 --- a/packages/cli/test/integration/shared/utils.ts +++ b/packages/cli/test/integration/shared/utils.ts @@ -799,11 +799,11 @@ export function installedNodePayload(packageName: string): InstalledNodePayload }; } -export const emptyPackage = () => { +export const emptyPackage = async () => { const installedPackage = new InstalledPackages(); installedPackage.installedNodes = []; - return Promise.resolve(installedPackage); + return installedPackage; }; // ---------------------------------- diff --git a/packages/cli/test/unit/ActiveExecutions.test.ts b/packages/cli/test/unit/ActiveExecutions.test.ts index 19c1d316e6a5b..3f27677052db8 100644 --- a/packages/cli/test/unit/ActiveExecutions.test.ts +++ b/packages/cli/test/unit/ActiveExecutions.test.ts @@ -18,7 +18,7 @@ jest.mock('@/Db', () => { return { collections: { Execution: { - save: jest.fn(async () => Promise.resolve({ id: FAKE_EXECUTION_ID })), + save: jest.fn(async () => ({ id: FAKE_EXECUTION_ID })), update: jest.fn(), }, }, diff --git a/packages/cli/test/unit/ActiveWorkflowRunner.test.ts b/packages/cli/test/unit/ActiveWorkflowRunner.test.ts index efe6fe22960c8..ab1232cde6e62 100644 --- a/packages/cli/test/unit/ActiveWorkflowRunner.test.ts +++ b/packages/cli/test/unit/ActiveWorkflowRunner.test.ts @@ -99,12 +99,11 @@ jest.mock('@/Db', () => { return { collections: { Workflow: { - find: jest.fn(async () => Promise.resolve(generateWorkflows(databaseActiveWorkflowsCount))), + find: jest.fn(async () => generateWorkflows(databaseActiveWorkflowsCount)), findOne: jest.fn(async (searchParams) => { - const foundWorkflow = databaseActiveWorkflowsList.find( + return databaseActiveWorkflowsList.find( (workflow) => workflow.id.toString() === searchParams.where.id.toString(), ); - return Promise.resolve(foundWorkflow); }), update: jest.fn(), createQueryBuilder: jest.fn(() => { @@ -112,7 +111,7 @@ jest.mock('@/Db', () => { update: () => fakeQueryBuilder, set: () => fakeQueryBuilder, where: () => fakeQueryBuilder, - execute: () => Promise.resolve(), + execute: async () => {}, }; return fakeQueryBuilder; }), @@ -246,7 +245,7 @@ describe('ActiveWorkflowRunner', () => { const workflow = generateWorkflows(1); const additionalData = await WorkflowExecuteAdditionalData.getBase('fake-user-id'); - workflowRunnerRun.mockImplementationOnce(() => Promise.resolve('invalid-execution-id')); + workflowRunnerRun.mockResolvedValueOnce('invalid-execution-id'); await activeWorkflowRunner.runWorkflow( workflow[0], diff --git a/packages/cli/test/unit/WorkflowExecuteAdditionalData.test.ts b/packages/cli/test/unit/WorkflowExecuteAdditionalData.test.ts index 9d364bd788939..6007c0dd74b81 100644 --- a/packages/cli/test/unit/WorkflowExecuteAdditionalData.test.ts +++ b/packages/cli/test/unit/WorkflowExecuteAdditionalData.test.ts @@ -6,7 +6,7 @@ jest.mock('@/Db', () => { return { collections: { ExecutionMetadata: { - save: jest.fn(async () => Promise.resolve([])), + save: jest.fn(async () => []), }, }, }; diff --git a/packages/core/src/BinaryDataManager/FileSystem.ts b/packages/core/src/BinaryDataManager/FileSystem.ts index df033569752f1..011a5cd5eedae 100644 --- a/packages/core/src/BinaryDataManager/FileSystem.ts +++ b/packages/core/src/BinaryDataManager/FileSystem.ts @@ -134,63 +134,58 @@ export class BinaryDataFileSystem implements IBinaryDataManager { const execsAdded: { [key: string]: number } = {}; - const proms = metaFileNames.reduce( - (prev, curr) => { - const [prefix, executionId, ts] = curr.split('_'); + const promises = metaFileNames.reduce<Array<Promise<void>>>((prev, curr) => { + const [prefix, executionId, ts] = curr.split('_'); - if (prefix !== filePrefix) { + if (prefix !== filePrefix) { + return prev; + } + + const execTimestamp = parseInt(ts, 10); + + if (execTimestamp < currentTimeValue) { + if (execsAdded[executionId]) { + // do not delete data, only meta file + prev.push(this.deleteMetaFileByPath(path.join(metaPath, curr))); return prev; } - const execTimestamp = parseInt(ts, 10); - - if (execTimestamp < currentTimeValue) { - if (execsAdded[executionId]) { - // do not delete data, only meta file - prev.push(this.deleteMetaFileByPath(path.join(metaPath, curr))); - return prev; - } - - execsAdded[executionId] = 1; - prev.push( - this.deleteBinaryDataByExecutionId(executionId).then(async () => - this.deleteMetaFileByPath(path.join(metaPath, curr)), - ), - ); - } + execsAdded[executionId] = 1; + prev.push( + this.deleteBinaryDataByExecutionId(executionId).then(async () => + this.deleteMetaFileByPath(path.join(metaPath, curr)), + ), + ); + } - return prev; - }, - [Promise.resolve()], - ); + return prev; + }, []); - return Promise.all(proms).then(() => {}); + await Promise.all(promises); } async duplicateBinaryDataByIdentifier(binaryDataId: string, prefix: string): Promise<string> { const newBinaryDataId = this.generateFileName(prefix); - return fs - .copyFile(this.resolveStoragePath(binaryDataId), this.resolveStoragePath(newBinaryDataId)) - .then(() => newBinaryDataId); + await fs.copyFile( + this.resolveStoragePath(binaryDataId), + this.resolveStoragePath(newBinaryDataId), + ); + return newBinaryDataId; } async deleteBinaryDataByExecutionId(executionId: string): Promise<void> { const regex = new RegExp(`${executionId}_*`); const filenames = await fs.readdir(this.storagePath); - const proms = filenames.reduce( - (allProms, filename) => { - if (regex.test(filename)) { - allProms.push(fs.rm(this.resolveStoragePath(filename))); - } - - return allProms; - }, - [Promise.resolve()], - ); + const promises = filenames.reduce<Array<Promise<void>>>((allProms, filename) => { + if (regex.test(filename)) { + allProms.push(fs.rm(this.resolveStoragePath(filename))); + } + return allProms; + }, []); - return Promise.all(proms).then(async () => Promise.resolve()); + await Promise.all(promises); } async deleteBinaryDataByIdentifier(identifier: string): Promise<void> { @@ -198,20 +193,17 @@ export class BinaryDataFileSystem implements IBinaryDataManager { } async persistBinaryDataForExecutionId(executionId: string): Promise<void> { - return fs.readdir(this.getBinaryDataPersistMetaPath()).then(async (metafiles) => { - const proms = metafiles.reduce( - (prev, curr) => { - if (curr.startsWith(`${PREFIX_PERSISTED_METAFILE}_${executionId}_`)) { - prev.push(fs.rm(path.join(this.getBinaryDataPersistMetaPath(), curr))); - return prev; - } - + return fs.readdir(this.getBinaryDataPersistMetaPath()).then(async (metaFiles) => { + const promises = metaFiles.reduce<Array<Promise<void>>>((prev, curr) => { + if (curr.startsWith(`${PREFIX_PERSISTED_METAFILE}_${executionId}_`)) { + prev.push(fs.rm(path.join(this.getBinaryDataPersistMetaPath(), curr))); return prev; - }, - [Promise.resolve()], - ); + } + + return prev; + }, []); - return Promise.all(proms).then(() => {}); + await Promise.all(promises); }); } @@ -227,8 +219,8 @@ export class BinaryDataFileSystem implements IBinaryDataManager { return path.join(this.storagePath, 'persistMeta'); } - private async deleteMetaFileByPath(metafilePath: string): Promise<void> { - return fs.rm(metafilePath); + private async deleteMetaFileByPath(metaFilePath: string): Promise<void> { + return fs.rm(metaFilePath); } private async deleteFromLocalStorage(identifier: string) { diff --git a/packages/core/src/BinaryDataManager/index.ts b/packages/core/src/BinaryDataManager/index.ts index b3ddb8738d6c6..d1c85f5b797ed 100644 --- a/packages/core/src/BinaryDataManager/index.ts +++ b/packages/core/src/BinaryDataManager/index.ts @@ -158,38 +158,30 @@ export class BinaryDataManager { async markDataForDeletionByExecutionId(executionId: string): Promise<void> { if (this.managers[this.binaryDataMode]) { - return this.managers[this.binaryDataMode].markDataForDeletionByExecutionId(executionId); + await this.managers[this.binaryDataMode].markDataForDeletionByExecutionId(executionId); } - - return Promise.resolve(); } async markDataForDeletionByExecutionIds(executionIds: string[]): Promise<void> { if (this.managers[this.binaryDataMode]) { - return Promise.all( + await Promise.all( executionIds.map(async (id) => this.managers[this.binaryDataMode].markDataForDeletionByExecutionId(id), ), - ).then(() => {}); + ); } - - return Promise.resolve(); } async persistBinaryDataForExecutionId(executionId: string): Promise<void> { if (this.managers[this.binaryDataMode]) { - return this.managers[this.binaryDataMode].persistBinaryDataForExecutionId(executionId); + await this.managers[this.binaryDataMode].persistBinaryDataForExecutionId(executionId); } - - return Promise.resolve(); } async deleteBinaryDataByExecutionId(executionId: string): Promise<void> { if (this.managers[this.binaryDataMode]) { - return this.managers[this.binaryDataMode].deleteBinaryDataByExecutionId(executionId); + await this.managers[this.binaryDataMode].deleteBinaryDataByExecutionId(executionId); } - - return Promise.resolve(); } async duplicateBinaryData( @@ -218,7 +210,7 @@ export class BinaryDataManager { return Promise.all(returnInputData); } - return Promise.resolve(inputData as INodeExecutionData[][]); + return inputData as INodeExecutionData[][]; } private generateBinaryId(filename: string) { diff --git a/packages/core/src/WorkflowExecute.ts b/packages/core/src/WorkflowExecute.ts index 480a2b2f80e0c..00e7a3f84f01c 100644 --- a/packages/core/src/WorkflowExecute.ts +++ b/packages/core/src/WorkflowExecute.ts @@ -792,7 +792,7 @@ export class WorkflowExecute { } if (gotCancel) { - return Promise.resolve(); + return; } nodeSuccessData = null; @@ -919,7 +919,7 @@ export class WorkflowExecute { for (let tryIndex = 0; tryIndex < maxTries; tryIndex++) { if (gotCancel) { - return Promise.resolve(); + return; } try { if (tryIndex !== 0) { @@ -1175,10 +1175,8 @@ export class WorkflowExecute { outputIndex ]) { if (!workflow.nodes.hasOwnProperty(connectionData.node)) { - return Promise.reject( - new Error( - `The node "${executionNode.name}" connects to not found node "${connectionData.node}"`, - ), + throw new Error( + `The node "${executionNode.name}" connects to not found node "${connectionData.node}"`, ); } @@ -1212,7 +1210,7 @@ export class WorkflowExecute { ]); } - return Promise.resolve(); + return; })() .then(async () => { if (gotCancel && executionError === undefined) { diff --git a/packages/editor-ui/src/components/ExecutionsList.vue b/packages/editor-ui/src/components/ExecutionsList.vue index b5db196fb6b3f..a26d349a40cb8 100644 --- a/packages/editor-ui/src/components/ExecutionsList.vue +++ b/packages/editor-ui/src/components/ExecutionsList.vue @@ -527,15 +527,12 @@ export default mixins(externalHooks, genericHelpers, executionHelpers, showMessa // Suppose 504 finishes before 500, 501, 502 and 503. // iF you use firstId, filtering id >= 504 you won't // ever get ids 500, 501, 502 and 503 when they finish - const pastExecutionsPromise: Promise<IExecutionsListResponse> = - this.workflowsStore.getPastExecutions(filter, this.requestItemsPerRequest); - const currentExecutionsPromise: Promise<IExecutionsCurrentSummaryExtended[]> = isEmpty( - filter.metadata, - ) - ? this.workflowsStore.getCurrentExecutions({}) - : Promise.resolve([]); - - const results = await Promise.all([pastExecutionsPromise, currentExecutionsPromise]); + const promises = [this.workflowsStore.getPastExecutions(filter, this.requestItemsPerRequest)]; + if (isEmpty(filter.metadata)) { + promises.push(this.workflowsStore.getCurrentExecutions({})); + } + + const results = await Promise.all(promises); for (const activeExecution of results[1]) { if ( diff --git a/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue b/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue index 8cc4512b4cbcd..9ac79df859a43 100644 --- a/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue +++ b/packages/editor-ui/src/components/layouts/ResourcesListLayout.vue @@ -250,7 +250,7 @@ export default mixins(showMessage, debounceHelper).extend({ }, initialize: { type: Function as PropType<() => Promise<void>>, - default: () => () => Promise.resolve(), + default: () => async () => {}, }, filters: { type: Object, diff --git a/packages/editor-ui/src/mixins/workflowHelpers.ts b/packages/editor-ui/src/mixins/workflowHelpers.ts index 7f9a00b6148cd..6550a39a384f5 100644 --- a/packages/editor-ui/src/mixins/workflowHelpers.ts +++ b/packages/editor-ui/src/mixins/workflowHelpers.ts @@ -460,7 +460,7 @@ export const workflowHelpers = mixins(externalHooks, nodeHelpers, showMessage).e }, // Returns the currently loaded workflow as JSON. - getWorkflowDataToSave(): Promise<IWorkflowData> { + async getWorkflowDataToSave(): Promise<IWorkflowData> { const workflowNodes = this.workflowsStore.allNodes; const workflowConnections = this.workflowsStore.allConnections; @@ -468,12 +468,8 @@ export const workflowHelpers = mixins(externalHooks, nodeHelpers, showMessage).e const nodes = []; for (let nodeIndex = 0; nodeIndex < workflowNodes.length; nodeIndex++) { - try { - // @ts-ignore - nodeData = this.getNodeDataToSave(workflowNodes[nodeIndex]); - } catch (e) { - return Promise.reject(e); - } + // @ts-ignore + nodeData = this.getNodeDataToSave(workflowNodes[nodeIndex]); nodes.push(nodeData); } @@ -494,7 +490,7 @@ export const workflowHelpers = mixins(externalHooks, nodeHelpers, showMessage).e data.id = workflowId; } - return Promise.resolve(data); + return data; }, // Returns all node-types diff --git a/packages/editor-ui/src/plugins/i18n/index.ts b/packages/editor-ui/src/plugins/i18n/index.ts index 61e8c62be4586..579f66d91837e 100644 --- a/packages/editor-ui/src/plugins/i18n/index.ts +++ b/packages/editor-ui/src/plugins/i18n/index.ts @@ -535,14 +535,16 @@ function setLanguage(language: string) { } export async function loadLanguage(language?: string) { - if (!language) return Promise.resolve(); + if (!language) return; if (i18nInstance.locale === language) { - return Promise.resolve(setLanguage(language)); + setLanguage(language); + return; } if (loadedLanguages.includes(language)) { - return Promise.resolve(setLanguage(language)); + setLanguage(language); + return; } const { numberFormats, ...rest } = (await import(`./locales/${language}.json`)).default; diff --git a/packages/editor-ui/src/stores/settings.ts b/packages/editor-ui/src/stores/settings.ts index 04769f8edcea0..12e7edcc901a2 100644 --- a/packages/editor-ui/src/stores/settings.ts +++ b/packages/editor-ui/src/stores/settings.ts @@ -243,27 +243,23 @@ export const useSettingsStore = defineStore(STORES.SETTINGS, { }, async fetchPromptsData(): Promise<void> { if (!this.isTelemetryEnabled) { - Promise.resolve(); + return; } - try { - const uiStore = useUIStore(); - const usersStore = useUsersStore(); - const promptsData: IN8nPrompts = await getPromptsData( - this.settings.instanceId, - usersStore.currentUserId || '', - ); - if (promptsData && promptsData.showContactPrompt) { - uiStore.openModal(CONTACT_PROMPT_MODAL_KEY); - } else if (promptsData && promptsData.showValueSurvey) { - uiStore.openModal(VALUE_SURVEY_MODAL_KEY); - } + const uiStore = useUIStore(); + const usersStore = useUsersStore(); + const promptsData: IN8nPrompts = await getPromptsData( + this.settings.instanceId, + usersStore.currentUserId || '', + ); - this.setPromptsData(promptsData); - Promise.resolve(); - } catch (error) { - Promise.reject(error); + if (promptsData && promptsData.showContactPrompt) { + uiStore.openModal(CONTACT_PROMPT_MODAL_KEY); + } else if (promptsData && promptsData.showValueSurvey) { + uiStore.openModal(VALUE_SURVEY_MODAL_KEY); } + + this.setPromptsData(promptsData); }, async submitContactInfo(email: string): Promise<IN8nPromptResponse | undefined> { try { diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue index d838c5812ed66..323b1e922ad8f 100644 --- a/packages/editor-ui/src/views/NodeView.vue +++ b/packages/editor-ui/src/views/NodeView.vue @@ -445,7 +445,7 @@ export default mixins( } } else if (confirmModal === MODAL_CANCEL) { this.workflowsStore.setWorkflowId(PLACEHOLDER_EMPTY_WORKFLOW_ID); - await this.resetWorkspace(); + this.resetWorkspace(); this.uiStore.stateIsDirty = false; next(); } @@ -2529,7 +2529,7 @@ export default mixins( }, async newWorkflow(): Promise<void> { this.startLoading(); - await this.resetWorkspace(); + this.resetWorkspace(); this.workflowData = await this.workflowsStore.getNewWorkflowData(); this.workflowsStore.currentWorkflowExecutions = []; this.workflowsStore.activeWorkflowExecution = null; @@ -2551,7 +2551,7 @@ export default mixins( // In case the workflow got saved we do not have to run init // as only the route changed but all the needed data is already loaded this.uiStore.stateIsDirty = false; - return Promise.resolve(); + return; } if (this.blankRedirect) { this.blankRedirect = false; @@ -2573,7 +2573,7 @@ export default mixins( const saved = await this.saveCurrentWorkflow(); if (saved) await this.settingsStore.fetchPromptsData(); } else if (confirmModal === MODAL_CLOSE) { - return Promise.resolve(); + return; } } // Load a workflow @@ -3473,7 +3473,7 @@ export default mixins( connections: tempWorkflow.connectionsBySourceNode, }; }, - getSelectedNodesToSave(): Promise<IWorkflowData> { + async getSelectedNodesToSave(): Promise<IWorkflowData> { const data: IWorkflowData = { nodes: [], connections: {}, @@ -3484,12 +3484,8 @@ export default mixins( const exportNodeNames: string[] = []; for (const node of this.uiStore.getSelectedNodes) { - try { - nodeData = this.getNodeDataToSave(node); - exportNodeNames.push(node.name); - } catch (e) { - return Promise.reject(e); - } + nodeData = this.getNodeDataToSave(node); + exportNodeNames.push(node.name); data.nodes.push(nodeData); } @@ -3539,7 +3535,7 @@ export default mixins( } }); - return Promise.resolve(data); + return data; }, resetWorkspace() { this.workflowsStore.resetWorkflow(); @@ -3581,7 +3577,6 @@ export default mixins( this.uiStore.nodeViewOffsetPosition = [0, 0]; this.credentialsUpdated = false; - return Promise.resolve(); }, async loadActiveWorkflows(): Promise<void> { await this.workflowsStore.fetchActiveWorkflows(); diff --git a/packages/nodes-base/nodes/Code/Code.node.ts b/packages/nodes-base/nodes/Code/Code.node.ts index ac64931d25fc7..a14b6ec73a862 100644 --- a/packages/nodes-base/nodes/Code/Code.node.ts +++ b/packages/nodes-base/nodes/Code/Code.node.ts @@ -88,7 +88,7 @@ export class Code implements INodeType { try { result = await sandbox.runCodeAllItems(); } catch (error) { - if (!this.continueOnFail()) return Promise.reject(error); + if (!this.continueOnFail()) throw error; result = [{ json: { error: error.message } }]; } @@ -122,7 +122,7 @@ export class Code implements INodeType { try { result = await sandbox.runCodeEachItem(index); } catch (error) { - if (!this.continueOnFail()) return Promise.reject(error); + if (!this.continueOnFail()) throw error; returnData.push({ json: { error: error.message } }); } diff --git a/packages/nodes-base/nodes/Function/Function.node.ts b/packages/nodes-base/nodes/Function/Function.node.ts index cdf1a110edd42..f681676fe7900 100644 --- a/packages/nodes-base/nodes/Function/Function.node.ts +++ b/packages/nodes-base/nodes/Function/Function.node.ts @@ -233,7 +233,7 @@ return items;`, } } - return Promise.reject(error); + throw error; } } diff --git a/packages/nodes-base/nodes/FunctionItem/FunctionItem.node.ts b/packages/nodes-base/nodes/FunctionItem/FunctionItem.node.ts index a81948fcb9987..e0971f339ed20 100644 --- a/packages/nodes-base/nodes/FunctionItem/FunctionItem.node.ts +++ b/packages/nodes-base/nodes/FunctionItem/FunctionItem.node.ts @@ -208,14 +208,14 @@ return item;`, const lineNumber = lineParts.splice(-2, 1); if (!isNaN(lineNumber as number)) { error.message = `${error.message} [Line ${lineNumber} | Item Index: ${itemIndex}]`; - return Promise.reject(error); + throw error; } } } error.message = `${error.message} [Item Index: ${itemIndex}]`; - return Promise.reject(error); + throw error; } } diff --git a/packages/nodes-base/nodes/Google/Ads/CampaignDescription.ts b/packages/nodes-base/nodes/Google/Ads/CampaignDescription.ts index b5ce28439ac99..3e86ce50d2f2a 100644 --- a/packages/nodes-base/nodes/Google/Ads/CampaignDescription.ts +++ b/packages/nodes-base/nodes/Google/Ads/CampaignDescription.ts @@ -13,17 +13,13 @@ async function processCampaignSearchResponse( ): Promise<INodeExecutionData[]> { const results = (responseData.body as IDataObject).results as GoogleAdsCampaignElement; - return Promise.resolve( - results.map((result) => { - return { - json: { - ...result.campaign, - ...result.metrics, - ...result.campaignBudget, - }, - }; - }), - ); + return results.map((result) => ({ + json: { + ...result.campaign, + ...result.metrics, + ...result.campaignBudget, + }, + })); } export const campaignOperations: INodeProperties[] = [ diff --git a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/executeQuery.test.ts b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/executeQuery.test.ts index 7991f36da60e5..e424ba7a11cf8 100644 --- a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/executeQuery.test.ts +++ b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/executeQuery.test.ts @@ -14,21 +14,20 @@ jest.mock('../../../v2/transport', () => { ...originalModule, googleApiRequest: jest.fn(async (method: string, resource: string) => { if (resource === '/v2/projects/test-project/jobs' && method === 'POST') { - return Promise.resolve({ + return { jobReference: { jobId: 'job_123', }, status: { state: 'DONE', }, - }); + }; } if (resource === '/v2/projects/test-project/queries/job_123' && method === 'GET') { - return Promise.resolve({}); + return {}; } - return Promise.resolve(); }), - // googleApiRequestAllItems: jest.fn(async () => Promise.resolve()), + // googleApiRequestAllItems: jest.fn(async () => {}), }; }); diff --git a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.autoMapMode.test.ts b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.autoMapMode.test.ts index 14d5771f1b792..c79556283223d 100644 --- a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.autoMapMode.test.ts +++ b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.autoMapMode.test.ts @@ -17,25 +17,24 @@ jest.mock('../../../v2/transport', () => { '/v2/projects/test-project/datasets/bigquery_node_dev_test_dataset/tables/num_text' && method === 'GET' ) { - return Promise.resolve({ + return { schema: { fields: [ { name: 'id', type: 'INT' }, { name: 'test', type: 'STRING' }, ], }, - }); + }; } if ( resource === '/v2/projects/test-project/datasets/bigquery_node_dev_test_dataset/tables/num_text/insertAll' && method === 'POST' ) { - return Promise.resolve({ kind: 'bigquery#tableDataInsertAllResponse' }); + return { kind: 'bigquery#tableDataInsertAllResponse' }; } - return Promise.resolve(); }), - googleApiRequestAllItems: jest.fn(async () => Promise.resolve()), + googleApiRequestAllItems: jest.fn(async () => {}), }; }); diff --git a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.manualMode.test.ts b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.manualMode.test.ts index c4181e9495452..52005cb834e88 100644 --- a/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.manualMode.test.ts +++ b/packages/nodes-base/nodes/Google/BigQuery/test/v2/node/insert.manualMode.test.ts @@ -17,7 +17,7 @@ jest.mock('../../../v2/transport', () => { '/v2/projects/test-project/datasets/bigquery_node_dev_test_dataset/tables/test_json' && method === 'GET' ) { - return Promise.resolve({ + return { schema: { fields: [ { name: 'json', type: 'JSON' }, @@ -25,22 +25,21 @@ jest.mock('../../../v2/transport', () => { { name: 'active', type: 'BOOLEAN' }, ], }, - }); + }; } if ( resource === '/v2/projects/test-project/datasets/bigquery_node_dev_test_dataset/tables/test_json/insertAll' && method === 'POST' ) { - return Promise.resolve({ kind: 'bigquery#tableDataInsertAllResponse' }); + return { kind: 'bigquery#tableDataInsertAllResponse' }; } - return Promise.resolve(); }), - googleApiRequestAllItems: jest.fn(async () => Promise.resolve()), + googleApiRequestAllItems: jest.fn(async () => {}), }; }); -describe('Test Google BigQuery V2, insert define manualy', () => { +describe('Test Google BigQuery V2, insert define manually', () => { const workflows = ['nodes/Google/BigQuery/test/v2/node/insert.manualMode.workflow.json']; const tests = workflowToTests(workflows); diff --git a/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts b/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts index 8f24baf49815e..a131e929be103 100644 --- a/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts +++ b/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts @@ -29,7 +29,7 @@ const fakeConnection = { format(query: string, values: any[]) { return mysql2.format(query, values); }, - query: jest.fn(async (_query = ''): Promise<any> => Promise.resolve([{}])), + query: jest.fn(async (_query = '') => [{}]), release: jest.fn(), beginTransaction: jest.fn(), commit: jest.fn(), @@ -41,7 +41,7 @@ const createFakePool = (connection: IDataObject) => { getConnection() { return connection; }, - query: jest.fn(async () => Promise.resolve([{}])), + query: jest.fn(async () => [{}]), } as unknown as Mysql2Pool; }; @@ -214,7 +214,7 @@ describe('Test MySql V2, operations', () => { } else { result.push({}); } - return Promise.resolve(result); + return result; }); const pool = createFakePool(fakeConnectionCopy); diff --git a/packages/nodes-base/nodes/MySql/test/v2/runQueries.test.ts b/packages/nodes-base/nodes/MySql/test/v2/runQueries.test.ts index 73a0eb3418ac5..3fd5ffce4eecb 100644 --- a/packages/nodes-base/nodes/MySql/test/v2/runQueries.test.ts +++ b/packages/nodes-base/nodes/MySql/test/v2/runQueries.test.ts @@ -23,7 +23,7 @@ const fakeConnection = { format(query: string, values: any[]) { return mysql2.format(query, values); }, - query: jest.fn(async () => Promise.resolve([{}])), + query: jest.fn(async () => [{}]), release: jest.fn(), beginTransaction: jest.fn(), commit: jest.fn(), @@ -35,7 +35,7 @@ const createFakePool = (connection: IDataObject) => { getConnection() { return connection; }, - query: jest.fn(async () => Promise.resolve([{}])), + query: jest.fn(async () => [{}]), } as unknown as Mysql2Pool; }; diff --git a/packages/nodes-base/nodes/Postgres/test/v2/operations.test.ts b/packages/nodes-base/nodes/Postgres/test/v2/operations.test.ts index 4de24f6b4cf96..4d0e30fa59fef 100644 --- a/packages/nodes-base/nodes/Postgres/test/v2/operations.test.ts +++ b/packages/nodes-base/nodes/Postgres/test/v2/operations.test.ts @@ -52,7 +52,7 @@ const createMockDb = (columnInfo: ColumnInfo[]) => { } as unknown as PgpDatabase; }; -// if node parameters copied from canvas all default parameters has to be added manualy as JSON would not have them +// if node parameters copied from canvas all default parameters has to be added manually as JSON would not have them describe('Test PostgresV2, deleteTable operation', () => { afterEach(() => { jest.clearAllMocks(); diff --git a/packages/workflow/src/Workflow.ts b/packages/workflow/src/Workflow.ts index feb9c699d88fd..a3befc4580b46 100644 --- a/packages/workflow/src/Workflow.ts +++ b/packages/workflow/src/Workflow.ts @@ -1236,13 +1236,7 @@ export class Workflow { return { data: null }; } - let promiseResults; - try { - promiseResults = await Promise.all(returnPromises); - } catch (error) { - return Promise.reject(error); - } - + const promiseResults = await Promise.all(returnPromises); if (promiseResults) { return { data: [promiseResults] }; }