diff --git a/.oxlintrc.json b/.oxlintrc.json
index ce90235fed..4b0d1d4aed 100644
--- a/.oxlintrc.json
+++ b/.oxlintrc.json
@@ -49,6 +49,11 @@
"react-hooks/rules-of-hooks": "off",
"guard-for-in": "error",
"symbol-description": "error",
+ "no-unneeded-ternary": "error",
+ "prefer-object-has-own": "error",
+ "no-redeclare": "error",
+ "no-multi-assign": "error",
+ "prefer-object-spread": "error",
"react/jsx-no-target-blank": "error",
"trigger/no-thrown-unawaited-redirect": "error",
"trigger-prisma/no-unbounded-list-filter": "error",
@@ -75,6 +80,12 @@
"trigger-prisma/no-unbounded-list-filter": "off",
"trigger-prisma/no-unbounded-list-filter-in-args-helper": "off"
}
+ },
+ {
+ "files": ["internal-packages/tsql/**"],
+ "rules": {
+ "prefer-object-has-own": "off"
+ }
}
]
}
diff --git a/apps/webapp/app/components/billing/UsageBar.tsx b/apps/webapp/app/components/billing/UsageBar.tsx
index fcb6377757..6cc5f6f93d 100644
--- a/apps/webapp/app/components/billing/UsageBar.tsx
+++ b/apps/webapp/app/components/billing/UsageBar.tsx
@@ -106,7 +106,7 @@ type LegendProps = {
function Legend({ text, value, position, percentage, tooltipContent }: LegendProps) {
const flipLegendPositionValue = 80;
- const flipLegendPosition = percentage > flipLegendPositionValue ? true : false;
+ const flipLegendPosition = percentage > flipLegendPositionValue;
return (
(tree: FlatTree
, state: NodesState)
const parent = node.parentId
? acc[node.parentId]
: { selected: defaultSelected, expanded: defaultExpanded, visible: true };
- const visible = parent.expanded && parent.visible === true ? true : false;
+ const visible = parent.expanded && parent.visible === true;
acc[node.id] = { ...nodeState, visible };
return acc;
diff --git a/apps/webapp/app/hooks/useThemeColor.ts b/apps/webapp/app/hooks/useThemeColor.ts
index f088d16b52..4555f6415e 100644
--- a/apps/webapp/app/hooks/useThemeColor.ts
+++ b/apps/webapp/app/hooks/useThemeColor.ts
@@ -7,7 +7,8 @@ import { useEffect, useState } from "react";
*/
function toRgb(color: string): string {
const canvas = document.createElement("canvas");
- canvas.width = canvas.height = 1;
+ canvas.width = 1;
+ canvas.height = 1;
const ctx = canvas.getContext("2d");
if (!ctx) return color;
ctx.fillStyle = color;
diff --git a/apps/webapp/app/presenters/v3/ApiErrorListPresenter.server.ts b/apps/webapp/app/presenters/v3/ApiErrorListPresenter.server.ts
index 13d794d659..ee61fd3131 100644
--- a/apps/webapp/app/presenters/v3/ApiErrorListPresenter.server.ts
+++ b/apps/webapp/app/presenters/v3/ApiErrorListPresenter.server.ts
@@ -48,9 +48,7 @@ export const ApiErrorListSearchParams = z.object({
const statuses = value.split(",");
// hasOwnProperty, not `in`: `in` walks the prototype chain, so
// `filter[status]=toString` would pass and map to a function.
- const invalid = statuses.filter(
- (status) => !Object.prototype.hasOwnProperty.call(API_STATUS_TO_DB, status)
- );
+ const invalid = statuses.filter((status) => !Object.hasOwn(API_STATUS_TO_DB, status));
if (invalid.length > 0) {
ctx.addIssue({
diff --git a/apps/webapp/app/presenters/v3/ApiWebhookDeliveryPresenter.server.ts b/apps/webapp/app/presenters/v3/ApiWebhookDeliveryPresenter.server.ts
index 7ebde680b6..0c6b2d1909 100644
--- a/apps/webapp/app/presenters/v3/ApiWebhookDeliveryPresenter.server.ts
+++ b/apps/webapp/app/presenters/v3/ApiWebhookDeliveryPresenter.server.ts
@@ -55,9 +55,7 @@ export const ApiWebhookDeliveryListSearchParams = z.object({
.transform((value, ctx) => {
if (!value) return undefined;
const statuses = value.split(",");
- const invalid = statuses.filter(
- (s) => !Object.prototype.hasOwnProperty.call(API_STATUS_TO_DB, s)
- );
+ const invalid = statuses.filter((s) => !Object.hasOwn(API_STATUS_TO_DB, s));
if (invalid.length > 0) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
diff --git a/apps/webapp/app/v3/eventRepository/common.server.ts b/apps/webapp/app/v3/eventRepository/common.server.ts
index eb8bf7f23e..8f7fef29ad 100644
--- a/apps/webapp/app/v3/eventRepository/common.server.ts
+++ b/apps/webapp/app/v3/eventRepository/common.server.ts
@@ -172,7 +172,7 @@ export function removePrivateProperties(
export function isEmptyObject(obj: object) {
for (var prop in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, prop)) {
+ if (Object.hasOwn(obj, prop)) {
return false;
}
}
diff --git a/apps/webapp/app/v3/eventRepository/eventRepository.server.ts b/apps/webapp/app/v3/eventRepository/eventRepository.server.ts
index ea778fb535..4a0dea3f4b 100644
--- a/apps/webapp/app/v3/eventRepository/eventRepository.server.ts
+++ b/apps/webapp/app/v3/eventRepository/eventRepository.server.ts
@@ -1692,13 +1692,11 @@ function parseStyleField(style: Prisma.JsonValue): TaskEventStyle {
}
if (typeof unsafe === "object") {
- return Object.assign(
- {
- icon: undefined,
- variant: undefined,
- },
- unsafe
- ) as TaskEventStyle;
+ return {
+ icon: undefined,
+ variant: undefined,
+ ...unsafe,
+ } as TaskEventStyle;
}
return {};
diff --git a/apps/webapp/app/v3/eventRepository/traceExport.server.ts b/apps/webapp/app/v3/eventRepository/traceExport.server.ts
index cea3dce65b..b1aba4e1f9 100644
--- a/apps/webapp/app/v3/eventRepository/traceExport.server.ts
+++ b/apps/webapp/app/v3/eventRepository/traceExport.server.ts
@@ -199,7 +199,7 @@ const FORMATS: Record = {
/** Resolve a `?format=` value to a format, defaulting to `log`. */
export function getTraceExportFormat(name: string | null | undefined): TraceExportFormat {
- if (name && Object.prototype.hasOwnProperty.call(FORMATS, name)) {
+ if (name && Object.hasOwn(FORMATS, name)) {
return FORMATS[name as TraceExportFormatName];
}
return logFormat;
diff --git a/apps/webapp/app/v3/services/alerts/createAlertChannel.server.ts b/apps/webapp/app/v3/services/alerts/createAlertChannel.server.ts
index c9163667be..50181de07b 100644
--- a/apps/webapp/app/v3/services/alerts/createAlertChannel.server.ts
+++ b/apps/webapp/app/v3/services/alerts/createAlertChannel.server.ts
@@ -104,7 +104,7 @@ export class CreateAlertChannelService extends BaseService {
properties: await this.#createProperties(options.channel),
enabled: true,
deduplicationKey: options.deduplicationKey,
- userProvidedDeduplicationKey: options.deduplicationKey ? true : false,
+ userProvidedDeduplicationKey: Boolean(options.deduplicationKey),
environmentTypes,
},
});
diff --git a/apps/webapp/memory-leak-detector.js b/apps/webapp/memory-leak-detector.js
index fafa55c84b..7bec919d15 100644
--- a/apps/webapp/memory-leak-detector.js
+++ b/apps/webapp/memory-leak-detector.js
@@ -544,6 +544,8 @@ class MemoryLeakDetector {
const snapshot3 = this.results.snapshots[2]; // after second load test
let analysis = {};
+ let heapGrowth;
+ let heapGrowthPercent;
// Handle different snapshot types
if (
@@ -592,8 +594,8 @@ class MemoryLeakDetector {
};
// Use total growth for recommendations
- var heapGrowth = totalGrowth;
- var heapGrowthPercent = totalGrowthPercent;
+ heapGrowth = totalGrowth;
+ heapGrowthPercent = totalGrowthPercent;
} else if (snapshot1.processMemory && snapshot2.processMemory && snapshot3.processMemory) {
// Traditional process memory analysis with 3 snapshots
const heap1 = snapshot1.processMemory.heapUsed;
@@ -632,8 +634,8 @@ class MemoryLeakDetector {
snapshots: this.results.snapshots.length,
};
- var heapGrowth = totalHeapGrowth;
- var heapGrowthPercent = (totalHeapGrowth / heap1) * 100;
+ heapGrowth = totalHeapGrowth;
+ heapGrowthPercent = (totalHeapGrowth / heap1) * 100;
} else {
this.log("Mixed or incompatible snapshot types - cannot analyze memory growth", "warn");
analysis = {
diff --git a/internal-packages/run-store/src/PostgresRunStore.ts b/internal-packages/run-store/src/PostgresRunStore.ts
index d11d51fb2c..ec3943cb11 100644
--- a/internal-packages/run-store/src/PostgresRunStore.ts
+++ b/internal-packages/run-store/src/PostgresRunStore.ts
@@ -1950,7 +1950,7 @@ export class PostgresRunStore implements RunStore {
?.filter((c) => c.index !== undefined)
.sort((a, b) => a.index! - b.index!)
.map((w) => w.id),
- isValid: error ? false : true,
+ isValid: !error,
error,
},
include: { checkpoint: true },
diff --git a/internal-packages/tsql/src/query/parser.ts b/internal-packages/tsql/src/query/parser.ts
index 38e2689e91..f7c664555f 100644
--- a/internal-packages/tsql/src/query/parser.ts
+++ b/internal-packages/tsql/src/query/parser.ts
@@ -1385,7 +1385,7 @@ export class TSQLParseTreeConverter implements TSQLParserVisitor {
}
const args: Expression[] = ctx._columnArgList ? this.visitExprList(ctx._columnArgList) : [];
- const distinct = ctx.DISTINCT() ? true : false;
+ const distinct = ctx.DISTINCT() !== undefined;
return { expression_type: "call", name, params: parameters, args, distinct };
}
diff --git a/packages/cli-v3/src/deploy/buildImage.ts b/packages/cli-v3/src/deploy/buildImage.ts
index 076ef271d1..b213a0bc79 100644
--- a/packages/cli-v3/src/deploy/buildImage.ts
+++ b/packages/cli-v3/src/deploy/buildImage.ts
@@ -1158,11 +1158,11 @@ function shouldPush(imageTag: string, push?: boolean) {
return false;
}
case undefined: {
- return imageTag.startsWith("localhost") ||
+ return !(
+ imageTag.startsWith("localhost") ||
imageTag.startsWith("127.0.0.1") ||
imageTag.startsWith("0.0.0.0")
- ? false
- : true;
+ );
}
default: {
assertExhaustive(push);
@@ -1180,7 +1180,7 @@ function shouldLoad(load?: boolean, push?: boolean) {
return false;
}
case undefined: {
- return push ? false : true;
+ return !push;
}
default: {
assertExhaustive(load);
diff --git a/packages/core/src/v3/apiClient/core.ts b/packages/core/src/v3/apiClient/core.ts
index a5f7f31bd7..23fb5b36f7 100644
--- a/packages/core/src/v3/apiClient/core.ts
+++ b/packages/core/src/v3/apiClient/core.ts
@@ -613,7 +613,7 @@ export function isEmptyObj(obj: object | null | undefined): boolean {
// https://eslint.org/docs/latest/rules/no-prototype-builtins
export function hasOwn(obj: object, key: string): boolean {
- return Object.prototype.hasOwnProperty.call(obj, key);
+ return Object.hasOwn(obj, key);
}
// If the requestInit has a header x-trigger-worker = true, then we will do
diff --git a/packages/core/src/v3/workers/populateEnv.ts b/packages/core/src/v3/workers/populateEnv.ts
index b21673c3fa..5ec00c7d97 100644
--- a/packages/core/src/v3/workers/populateEnv.ts
+++ b/packages/core/src/v3/workers/populateEnv.ts
@@ -39,7 +39,7 @@ export function populateEnv(
// Set process.env values
for (const key of Object.keys(envObject)) {
- if (Object.prototype.hasOwnProperty.call(process.env, key)) {
+ if (Object.hasOwn(process.env, key)) {
if (override) {
process.env[key] = envObject[key];
@@ -57,7 +57,7 @@ export function populateEnv(
if (previousEnv) {
// if there are any keys in previousEnv that are not in envObject, remove them from process.env
for (const key of Object.keys(previousEnv)) {
- if (!Object.prototype.hasOwnProperty.call(envObject, key)) {
+ if (!Object.hasOwn(envObject, key)) {
delete process.env[key];
}
}
diff --git a/scripts/recover-stuck-runs.ts b/scripts/recover-stuck-runs.ts
index 423e17bc07..6df2468265 100755
--- a/scripts/recover-stuck-runs.ts
+++ b/scripts/recover-stuck-runs.ts
@@ -142,7 +142,7 @@ async function main() {
? {
tls: {
// If connecting via localhost tunnel to a remote Redis, disable cert verification
- rejectUnauthorized: redisReadUrlObj.hostname === "localhost" ? false : true,
+ rejectUnauthorized: redisReadUrlObj.hostname !== "localhost",
},
}
: {}),
@@ -165,7 +165,7 @@ async function main() {
? {
tls: {
// If connecting via localhost tunnel to a remote Redis, disable cert verification
- rejectUnauthorized: redisWriteUrlObj.hostname === "localhost" ? false : true,
+ rejectUnauthorized: redisWriteUrlObj.hostname !== "localhost",
},
}
: {}),