chore: Add path alias to api package (#107)

small dev ex improvement:

Before: `import { ... } from '../../../fixtures';`
After: `import { ... } from '@/fixtures';`

after checking out, rebuild `api` and `task-check-alerts` containers:
```sh
docker compose -f docker-compose.dev.yml up -d --no-deps --build task-check-alerts api
```
This commit is contained in:
Shorpo 2023-11-17 14:31:24 -07:00 committed by GitHub
parent c56fe9c0a7
commit 42969f243e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
36 changed files with 128 additions and 109 deletions

View file

@ -0,0 +1,5 @@
---
'@hyperdx/api': patch
---
chore: Add path aliases

View file

@ -6,4 +6,7 @@ module.exports = {
rootDir: './src',
testMatch: ['**/__tests__/*.test.ts?(x)'],
testTimeout: 30000,
moduleNameMapper: {
'@/(.*)$': '<rootDir>/$1',
},
};

View file

@ -77,12 +77,13 @@
"supertest": "^6.3.1",
"ts-jest": "^28.0.5",
"ts-node": "^10.8.1",
"tsconfig-paths": "^4.2.0",
"typescript": "^4.9.5"
},
"scripts": {
"start": "node ./build/index.js",
"dev": "nodemon --signal SIGTERM -e ts,json --exec 'ts-node' --transpile-only -r '@hyperdx/node-opentelemetry/build/src/tracing' ./src/index.ts",
"dev:task": "ts-node -r '@hyperdx/node-opentelemetry/build/src/tracing' ./src/tasks/index.ts",
"dev": "nodemon --signal SIGTERM -e ts,json --exec 'ts-node' --transpile-only -r tsconfig-paths/register -r '@hyperdx/node-opentelemetry/build/src/tracing' ./src/index.ts",
"dev:task": "ts-node -r tsconfig-paths/register -r tsconfig-paths/register -r '@hyperdx/node-opentelemetry/build/src/tracing' ./src/tasks/index.ts",
"build": "rimraf ./build && tsc",
"lint": "eslint . --ext .ts",
"ci:lint": "yarn lint && yarn tsc --noEmit",

View file

@ -14,9 +14,9 @@ import {
} from '@clickhouse/client/dist/logger';
import { serializeError } from 'serialize-error';
import * as config from '../config';
import logger from '../utils/logger';
import { sleep } from '../utils/common';
import * as config from '@/config';
import logger from '@/utils/logger';
import { sleep } from '@/utils/common';
import {
LogsPropertyTypeMappingsModel,
MetricsPropertyTypeMappingsModel,
@ -36,7 +36,7 @@ import type {
LogStreamModel,
MetricModel,
RrwebEventModel,
} from '../utils/logParser';
} from '@/utils/logParser';
const tracer = opentelemetry.trace.getTracer(__filename);

View file

@ -1,9 +1,9 @@
import ms from 'ms';
import { serializeError } from 'serialize-error';
import logger from '../utils/logger';
import redisClient from '../utils/redis';
import { IS_DEV } from '../config';
import logger from '@/utils/logger';
import redisClient from '@/utils/redis';
import { IS_DEV } from '@/config';
import type { ResponseJSON } from '@clickhouse/client';

View file

@ -2,7 +2,7 @@ import SqlString from 'sqlstring';
import lucene from '@hyperdx/lucene';
import { serializeError } from 'serialize-error';
import { LogPlatform, LogType } from '../utils/logParser';
import { LogPlatform, LogType } from '@/utils/logParser';
import { PropertyTypeMappingsModel } from './propertyTypeMappingsModel';
function encodeSpecialTokens(query: string): string {

View file

@ -1,5 +1,5 @@
import { clearDBCollections, closeDB, connectDB } from '../../fixtures';
import { createTeam, getTeam, getTeamByApiKey } from '../../controllers/team';
import { clearDBCollections, closeDB, connectDB } from '@/fixtures';
import { createTeam, getTeam, getTeamByApiKey } from '@/controllers/team';
describe('team controller', () => {
beforeAll(async () => {

View file

@ -5,9 +5,9 @@ import Alert, {
AlertInterval,
AlertType,
AlertSource,
} from '../models/alert';
import * as clickhouse from '../clickhouse';
import { SQLSerializer } from '../clickhouse/searchQueryParser';
} from '@/models/alert';
import * as clickhouse from '@/clickhouse';
import { SQLSerializer } from '@/clickhouse/searchQueryParser';
import ms from 'ms';
export type AlertInput = {

View file

@ -1,8 +1,8 @@
import { v4 as uuidv4 } from 'uuid';
import Team from '../models/team';
import Team from '@/models/team';
import type { ObjectId } from '../models';
import type { ObjectId } from '@/models';
export async function isTeamExisting() {
const teamCount = await Team.countDocuments({});

View file

@ -1,6 +1,6 @@
import User from '../models/user';
import User from '@/models/user';
import type { ObjectId } from '../models';
import type { ObjectId } from '@/models';
export function findUserById(id: string) {
return User.findById(id);

View file

@ -3,10 +3,10 @@ import type { Request, Response, NextFunction } from 'express';
import { serializeError } from 'serialize-error';
import { setTraceAttributes } from '@hyperdx/node-opentelemetry';
import * as config from '../config';
import logger from '../utils/logger';
import * as config from '@/config';
import logger from '@/utils/logger';
import type { UserDocument } from '../models/user';
import type { UserDocument } from '@/models/user';
declare global {
namespace Express {

View file

@ -1,5 +1,5 @@
import cors from 'cors';
import { FRONTEND_URL } from '../config';
import { FRONTEND_URL } from '@/config';
export const noCors = cors();

View file

@ -2,8 +2,8 @@ import type { Request, Response, NextFunction } from 'express';
import { serializeError } from 'serialize-error';
import logger from '../utils/logger';
import { BaseError, StatusCode, isOperationalError } from '../utils/errors';
import logger from '@/utils/logger';
import { BaseError, StatusCode, isOperationalError } from '@/utils/errors';
// WARNING: need to keep the 4th arg for express to identify it as an error-handling middleware function
export const appErrorHandler = (

View file

@ -1,7 +1,7 @@
import mongoose from 'mongoose';
import * as config from '../config';
import logger from '../utils/logger';
import * as config from '@/config';
import logger from '@/utils/logger';
export type ObjectId = mongoose.Types.ObjectId;

View file

@ -1,22 +1,22 @@
import express from 'express';
import groupBy from 'lodash/groupBy';
import * as config from '../../config';
import logger from '../../utils/logger';
import * as config from '@/config';
import logger from '@/utils/logger';
import {
bulkInsertRrwebEvents,
bulkInsertTeamLogStream,
bulkInsertTeamMetricStream,
} from '../../clickhouse';
} from '@/clickhouse';
import {
extractApiKey,
vectorLogParser,
vectorMetricParser,
vectorRrwebParser,
} from '../../utils/logParser';
import { getTeamByApiKey } from '../../controllers/team';
} from '@/utils/logParser';
import { getTeamByApiKey } from '@/controllers/team';
import type { VectorLog, VectorMetric } from '../../utils/logParser';
import type { VectorLog, VectorMetric } from '@/utils/logParser';
const router = express.Router();

View file

@ -3,7 +3,7 @@ import {
clearDBCollections,
getLoggedInAgent,
getServer,
} from '../../../fixtures';
} from '@/fixtures';
const randomId = () => Math.random().toString(36).substring(7);

View file

@ -5,7 +5,7 @@ import {
closeDB,
getLoggedInAgent,
getServer,
} from '../../../fixtures';
} from '@/fixtures';
describe('team router', () => {
const server = getServer();

View file

@ -2,14 +2,14 @@ import express from 'express';
import { z } from 'zod';
import { validateRequest } from 'zod-express-middleware';
import Alert from '../../models/alert';
import { getTeam } from '../../controllers/team';
import { isUserAuthenticated } from '../../middleware/auth';
import Alert from '@/models/alert';
import { getTeam } from '@/controllers/team';
import { isUserAuthenticated } from '@/middleware/auth';
import {
createAlert,
updateAlert,
validateGroupByProperty,
} from '../../controllers/alerts';
} from '@/controllers/alerts';
const router = express.Router();

View file

@ -1,8 +1,8 @@
import express from 'express';
import Dashboard from '../../models/dashboard';
import Alert from '../../models/alert';
import { isUserAuthenticated } from '../../middleware/auth';
import Dashboard from '@/models/dashboard';
import Alert from '@/models/alert';
import { isUserAuthenticated } from '@/middleware/auth';
import { validateRequest } from 'zod-express-middleware';
import { z } from 'zod';
import { groupBy, differenceBy } from 'lodash';

View file

@ -1,8 +1,8 @@
import express from 'express';
import Alert from '../../models/alert';
import LogView from '../../models/logView';
import { isUserAuthenticated } from '../../middleware/auth';
import Alert from '@/models/alert';
import LogView from '@/models/logView';
import { isUserAuthenticated } from '@/middleware/auth';
const router = express.Router();

View file

@ -6,13 +6,13 @@ import { serializeError } from 'serialize-error';
import { validateRequest } from 'zod-express-middleware';
import { z } from 'zod';
import * as clickhouse from '../../clickhouse';
import { isUserAuthenticated } from '../../middleware/auth';
import logger from '../../utils/logger';
import { LimitedSizeQueue } from '../../utils/queue';
import { customColumnMapType } from '../../clickhouse/searchQueryParser';
import { getLogsPatterns } from '../../utils/miner';
import { getTeam } from '../../controllers/team';
import * as clickhouse from '@/clickhouse';
import { isUserAuthenticated } from '@/middleware/auth';
import logger from '@/utils/logger';
import { LimitedSizeQueue } from '@/utils/queue';
import { customColumnMapType } from '@/clickhouse/searchQueryParser';
import { getLogsPatterns } from '@/utils/miner';
import { getTeam } from '@/controllers/team';
const router = express.Router();

View file

@ -2,8 +2,8 @@ import express from 'express';
import opentelemetry, { SpanStatusCode } from '@opentelemetry/api';
import { isNumber, parseInt } from 'lodash';
import * as clickhouse from '../../clickhouse';
import { isUserAuthenticated } from '../../middleware/auth';
import * as clickhouse from '@/clickhouse';
import { isUserAuthenticated } from '@/middleware/auth';
const router = express.Router();

View file

@ -3,17 +3,17 @@ import { serializeError } from 'serialize-error';
import { z } from 'zod';
import { validateRequest } from 'zod-express-middleware';
import * as config from '../../config';
import User from '../../models/user'; // TODO -> do not import model directly
import logger from '../../utils/logger';
import passport from '../../utils/passport';
import { Api404Error } from '../../utils/errors';
import { isTeamExisting, createTeam, getTeam } from '../../controllers/team';
import * as config from '@/config';
import User from '@/models/user'; // TODO -> do not import model directly
import logger from '@/utils/logger';
import passport from '@/utils/passport';
import { Api404Error } from '@/utils/errors';
import { isTeamExisting, createTeam, getTeam } from '@/controllers/team';
import {
isUserAuthenticated,
redirectToDashboard,
handleAuthError,
} from '../../middleware/auth';
} from '@/middleware/auth';
const registrationSchema = z
.object({

View file

@ -3,10 +3,10 @@ import opentelemetry, { SpanStatusCode } from '@opentelemetry/api';
import { isNumber, parseInt } from 'lodash';
import { serializeError } from 'serialize-error';
import * as clickhouse from '../../clickhouse';
import { isUserAuthenticated } from '../../middleware/auth';
import logger from '../../utils/logger';
import { getTeam } from '../../controllers/team';
import * as clickhouse from '@/clickhouse';
import { isUserAuthenticated } from '@/middleware/auth';
import logger from '@/utils/logger';
import { getTeam } from '@/controllers/team';
const router = express.Router();

View file

@ -5,17 +5,14 @@ import isemail from 'isemail';
import pick from 'lodash/pick';
import { serializeError } from 'serialize-error';
import * as config from '../../config';
import TeamInvite from '../../models/teamInvite';
import User from '../../models/user';
import logger from '../../utils/logger';
import { findUserByEmail, findUsersByTeam } from '../../controllers/user';
import { getTeam, rotateTeamApiKey } from '../../controllers/team';
import {
isUserAuthenticated,
redirectToDashboard,
} from '../../middleware/auth';
import { validatePassword } from '../../utils/validators';
import * as config from '@/config';
import TeamInvite from '@/models/teamInvite';
import User from '@/models/user';
import logger from '@/utils/logger';
import { findUserByEmail, findUsersByTeam } from '@/controllers/user';
import { getTeam, rotateTeamApiKey } from '@/controllers/team';
import { isUserAuthenticated, redirectToDashboard } from '@/middleware/auth';
import { validatePassword } from '@/utils/validators';
const router = express.Router();

View file

@ -1,7 +1,7 @@
import express from 'express';
import Webhook from '../../models/webhook';
import { isUserAuthenticated } from '../../middleware/auth';
import Webhook from '@/models/webhook';
import { isUserAuthenticated } from '@/middleware/auth';
const router = express.Router();

View file

@ -8,20 +8,20 @@ import * as fnsTz from 'date-fns-tz';
import ms from 'ms';
import { serializeError } from 'serialize-error';
import * as clickhouse from '../clickhouse';
import * as config from '../config';
import * as slack from '../utils/slack';
import Alert, { AlertState, IAlert, AlertSource } from '../models/alert';
import AlertHistory, { IAlertHistory } from '../models/alertHistory';
import LogView from '../models/logView';
import Webhook from '../models/webhook';
import logger from '../utils/logger';
import { ITeam } from '../models/team';
import { ObjectId } from '../models';
import { truncateString } from '../utils/common';
import * as clickhouse from '@/clickhouse';
import * as config from '@/config';
import * as slack from '@/utils/slack';
import Alert, { AlertState, IAlert, AlertSource } from '@/models/alert';
import AlertHistory, { IAlertHistory } from '@/models/alertHistory';
import LogView from '@/models/logView';
import Webhook from '@/models/webhook';
import logger from '@/utils/logger';
import { ITeam } from '@/models/team';
import { ObjectId } from '@/models';
import { truncateString } from '@/utils/common';
import type { ResponseJSON } from '@clickhouse/client';
import type { LogSearchRow } from '../clickhouse';
import type { LogSearchRow } from '@/clickhouse';
const MAX_MESSAGE_LENGTH = 500;

View file

@ -5,11 +5,11 @@ import schedule from 'node-schedule';
import { serializeError } from 'serialize-error';
import checkAlerts from './checkAlerts';
import logger from '../utils/logger';
import redisClient from '../utils/redis';
import logger from '@/utils/logger';
import redisClient from '@/utils/redis';
import refreshPropertyTypeMappings from './refreshPropertyTypeMappings';
import { IS_DEV } from '../config';
import { connectDB, mongooseConnection } from '../models';
import { IS_DEV } from '@/config';
import { connectDB, mongooseConnection } from '@/models';
const main = async () => {
const argv = minimist(process.argv.slice(2));

View file

@ -3,10 +3,10 @@
// --------------------------------------------------------
import ms from 'ms';
import * as clickhouse from '../clickhouse';
import Team from '../models/team';
import logger from '../utils/logger';
import { LogsPropertyTypeMappingsModel } from '../clickhouse/propertyTypeMappingsModel';
import * as clickhouse from '@/clickhouse';
import Team from '@/models/team';
import logger from '@/utils/logger';
import { LogsPropertyTypeMappingsModel } from '@/clickhouse/propertyTypeMappingsModel';
const MAX_PROCESS_TEAMS = 30;
const LOG_PREFIX = '[refreshPropertyTypeMappings]';

View file

@ -4,10 +4,10 @@ import url from 'url';
import winston from 'winston';
import { HyperDXWinston } from '@hyperdx/node-logger';
import * as clickhouse from '../clickhouse';
import * as config from '../config';
import Team from '../models/team';
import User from '../models/user';
import * as clickhouse from '@/clickhouse';
import * as config from '@/config';
import Team from '@/models/team';
import User from '@/models/user';
import type { ResponseJSON } from '@clickhouse/client';

View file

@ -8,7 +8,7 @@ import {
HYPERDX_LOG_LEVEL,
INGESTOR_API_URL,
IS_PROD,
} from '../config';
} from '@/config';
// LOCAL DEV ONLY
addColors({

View file

@ -1,7 +1,7 @@
import axios from 'axios';
import ms from 'ms';
import * as config from '../config';
import * as config from '@/config';
import logger from './logger';
const MAX_LOG_LINES = 1e4;

View file

@ -2,10 +2,10 @@ import passport from 'passport';
import { Strategy as LocalStrategy } from 'passport-local';
import logger from './logger';
import User from '../models/user';
import { findUserById } from '../controllers/user';
import User from '@/models/user';
import { findUserById } from '@/controllers/user';
import type { UserDocument } from '../models/user';
import type { UserDocument } from '@/models/user';
passport.serializeUser(function (user, done) {
done(null, (user as any)._id);

View file

@ -1,8 +1,8 @@
import { createClient } from 'redis';
import { serializeError } from 'serialize-error';
import * as config from '../config';
import logger from '../utils/logger';
import * as config from '@/config';
import logger from '@/utils/logger';
const client = createClient({
url: config.REDIS_URL,

View file

@ -1,5 +1,9 @@
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"@/*": ["./*"]
},
"allowSyntheticDefaultImports": true,
"downlevelIteration": true,
"esModuleInterop": true,

View file

@ -15175,6 +15175,15 @@ tsconfig-paths@^4.1.2:
minimist "^1.2.6"
strip-bom "^3.0.0"
tsconfig-paths@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c"
integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==
dependencies:
json5 "^2.2.2"
minimist "^1.2.6"
strip-bom "^3.0.0"
tslib@2.5.3:
version "2.5.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"