diff --git a/CHANGELOG.md b/CHANGELOG.md index 78453f3..580d6ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,113 +1,103 @@ -# [1.4.0-develop.8](https://github.com/betterbugs/dev-tools/compare/v1.4.0-develop.7...v1.4.0-develop.8) (2026-03-08) +# [1.4.0-develop.9](https://github.com/betterbugs/dev-tools/compare/v1.4.0-develop.8...v1.4.0-develop.9) (2026-04-14) + +### Features +- add class-validator dependency and update page styles ([#81](https://github.com/betterbugs/dev-tools/issues/81)) ([67f1aeb](https://github.com/betterbugs/dev-tools/commit/67f1aeb5a82cad25f2c8bb3dcdc67e453b62cee2)) + +# [1.4.0-develop.8](https://github.com/betterbugs/dev-tools/compare/v1.4.0-develop.7...v1.4.0-develop.8) (2026-03-08) ### Features -* Added URL parser & Query Editor Tool ([c9933ba](https://github.com/betterbugs/dev-tools/commit/c9933bae3cfbeb65c210f6877abf367c3cb0f46e)), closes [#51](https://github.com/betterbugs/dev-tools/issues/51) +- Added URL parser & Query Editor Tool ([c9933ba](https://github.com/betterbugs/dev-tools/commit/c9933bae3cfbeb65c210f6877abf367c3cb0f46e)), closes [#51](https://github.com/betterbugs/dev-tools/issues/51) # [1.4.0-develop.7](https://github.com/betterbugs/dev-tools/compare/v1.4.0-develop.6...v1.4.0-develop.7) (2026-03-08) - ### Features -* **tools:** add Unix Timestamp Converter to development tools list ([3fedf57](https://github.com/betterbugs/dev-tools/commit/3fedf57f4036f7081b37c8ca1b3c585ea1e62045)) +- **tools:** add Unix Timestamp Converter to development tools list ([3fedf57](https://github.com/betterbugs/dev-tools/commit/3fedf57f4036f7081b37c8ca1b3c585ea1e62045)) # [1.4.0-develop.6](https://github.com/betterbugs/dev-tools/compare/v1.4.0-develop.5...v1.4.0-develop.6) (2026-03-08) - ### Features -* Add Unix Timestamp (Epoch) Converter Utility ([f277272](https://github.com/betterbugs/dev-tools/commit/f27727267639f54e4ffaa80919b1d0836621ac7d)), closes [#16](https://github.com/betterbugs/dev-tools/issues/16) +- Add Unix Timestamp (Epoch) Converter Utility ([f277272](https://github.com/betterbugs/dev-tools/commit/f27727267639f54e4ffaa80919b1d0836621ac7d)), closes [#16](https://github.com/betterbugs/dev-tools/issues/16) # [1.4.0-develop.5](https://github.com/betterbugs/dev-tools/compare/v1.4.0-develop.4...v1.4.0-develop.5) (2026-03-05) - ### Bug Fixes -* **release:** update GITHUB_TOKEN to use RELEASE_TOKEN for semantic release ([be3a012](https://github.com/betterbugs/dev-tools/commit/be3a012c6d7df84ab5826ce03268ec8aad402c15)) - +- **release:** update GITHUB_TOKEN to use RELEASE_TOKEN for semantic release ([be3a012](https://github.com/betterbugs/dev-tools/commit/be3a012c6d7df84ab5826ce03268ec8aad402c15)) ### Features -* **tools:** add SVG to React/CSS utility ([218ccad](https://github.com/betterbugs/dev-tools/commit/218ccad3c5eb7121a9bd7319147520eb39713695)), closes [#50](https://github.com/betterbugs/dev-tools/issues/50) +- **tools:** add SVG to React/CSS utility ([218ccad](https://github.com/betterbugs/dev-tools/commit/218ccad3c5eb7121a9bd7319147520eb39713695)), closes [#50](https://github.com/betterbugs/dev-tools/issues/50) # [1.4.0-develop.4](https://github.com/betterbugs/dev-tools/compare/v1.4.0-develop.3...v1.4.0-develop.4) (2026-03-03) - ### Features -* Add lockfile guard workflow to prevent unintended lockfile changes ([aa20fb5](https://github.com/betterbugs/dev-tools/commit/aa20fb5422aae56e9d80f7472a6f974624431572)) +- Add lockfile guard workflow to prevent unintended lockfile changes ([aa20fb5](https://github.com/betterbugs/dev-tools/commit/aa20fb5422aae56e9d80f7472a6f974624431572)) # [1.4.0-develop.3](https://github.com/betterbugs/dev-tools/compare/v1.4.0-develop.2...v1.4.0-develop.3) (2026-03-03) - ### Features -* Add IPv4 Subnet Calculator Tool ([ad1c03f](https://github.com/betterbugs/dev-tools/commit/ad1c03fd0065f0cfce409b72882188dc7de630d0)), closes [#33](https://github.com/betterbugs/dev-tools/issues/33) -* Add Smart Repair feature to JSON Validator ([#41](https://github.com/betterbugs/dev-tools/issues/41)) ([7a3c7a5](https://github.com/betterbugs/dev-tools/commit/7a3c7a5008d4236d954e1c20482635b0a0da5ef0)), closes [#38](https://github.com/betterbugs/dev-tools/issues/38) +- Add IPv4 Subnet Calculator Tool ([ad1c03f](https://github.com/betterbugs/dev-tools/commit/ad1c03fd0065f0cfce409b72882188dc7de630d0)), closes [#33](https://github.com/betterbugs/dev-tools/issues/33) +- Add Smart Repair feature to JSON Validator ([#41](https://github.com/betterbugs/dev-tools/issues/41)) ([7a3c7a5](https://github.com/betterbugs/dev-tools/commit/7a3c7a5008d4236d954e1c20482635b0a0da5ef0)), closes [#38](https://github.com/betterbugs/dev-tools/issues/38) # [1.4.0-develop.2](https://github.com/betterbugs/dev-tools/compare/v1.4.0-develop.1...v1.4.0-develop.2) (2026-02-28) - ### Bug Fixes -* **tools:** implement proper bcrypt generator ([94d19be](https://github.com/betterbugs/dev-tools/commit/94d19be7e4b8d9256557e7668898ec4d6c3ca15c)), closes [#23](https://github.com/betterbugs/dev-tools/issues/23) [#13](https://github.com/betterbugs/dev-tools/issues/13) +- **tools:** implement proper bcrypt generator ([94d19be](https://github.com/betterbugs/dev-tools/commit/94d19be7e4b8d9256557e7668898ec4d6c3ca15c)), closes [#23](https://github.com/betterbugs/dev-tools/issues/23) [#13](https://github.com/betterbugs/dev-tools/issues/13) # [1.4.0-develop.1](https://github.com/betterbugs/dev-tools/compare/v1.3.2...v1.4.0-develop.1) (2026-02-28) - ### Features -* **ui:** add reusable CopyButton and refactor wordCounter and jsonToTxt ([d5b9e83](https://github.com/betterbugs/dev-tools/commit/d5b9e8333673c5254cf39529a90869b1b741e385)), closes [#17](https://github.com/betterbugs/dev-tools/issues/17) +- **ui:** add reusable CopyButton and refactor wordCounter and jsonToTxt ([d5b9e83](https://github.com/betterbugs/dev-tools/commit/d5b9e8333673c5254cf39529a90869b1b741e385)), closes [#17](https://github.com/betterbugs/dev-tools/issues/17) ## [1.3.2](https://github.com/betterbugs/dev-tools/compare/v1.3.1...v1.3.2) (2026-02-16) - ### Bug Fixes -* update basePath and assetPrefix to use conditional logic for production ([b487fef](https://github.com/betterbugs/dev-tools/commit/b487fefbc8de696953ef4ba5cb1c3e55eda7fe7a)) +- update basePath and assetPrefix to use conditional logic for production ([b487fef](https://github.com/betterbugs/dev-tools/commit/b487fefbc8de696953ef4ba5cb1c3e55eda7fe7a)) ## [1.3.2-develop.1](https://github.com/betterbugs/dev-tools/compare/v1.3.1...v1.3.2-develop.1) (2026-02-16) - ### Bug Fixes -* update basePath and assetPrefix to use conditional logic for production ([b487fef](https://github.com/betterbugs/dev-tools/commit/b487fefbc8de696953ef4ba5cb1c3e55eda7fe7a)) +- update basePath and assetPrefix to use conditional logic for production ([b487fef](https://github.com/betterbugs/dev-tools/commit/b487fefbc8de696953ef4ba5cb1c3e55eda7fe7a)) ## [1.3.1](https://github.com/betterbugs/dev-tools/compare/v1.3.0...v1.3.1) (2026-02-10) - ### Bug Fixes -* correct spelling and update descriptions for color conversion tools ([70f373c](https://github.com/betterbugs/dev-tools/commit/70f373ca663401bfb176b13160c88b3326307acf)) +- correct spelling and update descriptions for color conversion tools ([70f373c](https://github.com/betterbugs/dev-tools/commit/70f373ca663401bfb176b13160c88b3326307acf)) # [1.3.0](https://github.com/betterbugs/dev-tools/compare/v1.2.0...v1.3.0) (2026-02-09) - ### Features -* add development tools API and enhance header components ([8aaad6a](https://github.com/betterbugs/dev-tools/commit/8aaad6a6e901d578924a8964addf697462a258f7)) +- add development tools API and enhance header components ([8aaad6a](https://github.com/betterbugs/dev-tools/commit/8aaad6a6e901d578924a8964addf697462a258f7)) # [1.2.0](https://github.com/betterbugs/dev-tools/compare/v1.1.0...v1.2.0) (2026-02-07) - ### Features -* enhance Discord notifications with author details and profile links ([098aaeb](https://github.com/betterbugs/dev-tools/commit/098aaeb9c576398260432f0c2c3175236248eb95)) +- enhance Discord notifications with author details and profile links ([098aaeb](https://github.com/betterbugs/dev-tools/commit/098aaeb9c576398260432f0c2c3175236248eb95)) # [1.1.0](https://github.com/betterbugs/dev-tools/compare/v1.0.0...v1.1.0) (2026-02-07) - ### Features -* add Discord notifications workflow for various GitHub events ([66ad9ba](https://github.com/betterbugs/dev-tools/commit/66ad9ba91f21e59678ecbd2a4cc58c7737d492d9)) +- add Discord notifications workflow for various GitHub events ([66ad9ba](https://github.com/betterbugs/dev-tools/commit/66ad9ba91f21e59678ecbd2a4cc58c7737d492d9)) # 1.0.0 (2026-02-07) - ### Bug Fixes -* **ci:** update Node.js to 20 for semantic-release compatibility ([34092b6](https://github.com/betterbugs/dev-tools/commit/34092b673e15c212520ba439889ef11078b62dc7)) +- **ci:** update Node.js to 20 for semantic-release compatibility ([34092b6](https://github.com/betterbugs/dev-tools/commit/34092b673e15c212520ba439889ef11078b62dc7)) # Changelog diff --git a/app/[slug]/page.tsx b/app/[slug]/page.tsx index b77333d..3dd074d 100644 --- a/app/[slug]/page.tsx +++ b/app/[slug]/page.tsx @@ -1,32 +1,34 @@ -"use client"; -import React, { useEffect, useState } from "react"; -import { DEVELOPMENTTOOLS } from "@/app/libs/developmentToolsConstant"; -import Link from "next/link"; -import { Button } from "antd"; -import Image from "next/image"; -import StarGardientIcon from "@/app/components/theme/Icon/starGradientIcon"; +'use client'; +import React, { useEffect, useState } from 'react'; +import { DEVELOPMENTTOOLS } from '@/app/libs/developmentToolsConstant'; +import Link from 'next/link'; +import { Button } from 'antd'; +import Image from 'next/image'; +import StarGardientIcon from '@/app/components/theme/Icon/starGradientIcon'; import { developmentToolsRoutes, Extension_URL, integrationTools, -} from "@/app/libs/constants"; -import PlayIcon from "@/app/components/theme/Icon/playIcon"; -import LogsGradientIcon from "@/app/components/theme/Icon/logsGradientIcon"; -import ShareGradientIcon from "@/app/components/theme/Icon/shareGradientIcon"; -import PowerCircleIcon from "@/app/components/theme/Icon/powerCircleIcon"; -import ComparisonsStyles from "../components/comparisonsComponent/comparisonsStyles.module.scss"; -import DevelopmentToolsStyles from "../developmentToolsStyles.module.scss"; -import { usePathname } from "next/navigation"; -import RecorderGradientIcon from "@/app/components/theme/Icon/recorderGradientIcon"; -import SEOComponent from "@/app/components/theme/SEOComponent/SEOComponent"; -import { detectBrowser } from "@/app/libs/helpers"; -import EdgeIcon from "@/app/components/theme/Icon/edgeIcon"; -import { useTheme } from "@/app/contexts/themeContext"; +} from '@/app/libs/constants'; +import PlayIcon from '@/app/components/theme/Icon/playIcon'; +import LogsGradientIcon from '@/app/components/theme/Icon/logsGradientIcon'; +import ShareGradientIcon from '@/app/components/theme/Icon/shareGradientIcon'; +import PowerCircleIcon from '@/app/components/theme/Icon/powerCircleIcon'; +import ComparisonsStyles from '../components/comparisonsComponent/comparisonsStyles.module.scss'; +import DevelopmentToolsStyles from '../developmentToolsStyles.module.scss'; +import { usePathname } from 'next/navigation'; +import RecorderGradientIcon from '@/app/components/theme/Icon/recorderGradientIcon'; +import SEOComponent from '@/app/components/theme/SEOComponent/SEOComponent'; +import { detectBrowser } from '@/app/libs/helpers'; +import EdgeIcon from '@/app/components/theme/Icon/edgeIcon'; +import { useTheme } from '@/app/contexts/themeContext'; const Page = ({ params: { slug } }: { params: { slug: string } }) => { - const [browser, setBrowser] = useState("chrome"); + const [browser, setBrowser] = useState('chrome'); const { isLightTheme } = useTheme(); - const logoSrc = isLightTheme ? "/images/bb-logo-light.svg" : "/images/bb-logo.svg"; + const logoSrc = isLightTheme + ? '/images/bb-logo-light.svg' + : '/images/bb-logo.svg'; useEffect(() => { setBrowser(detectBrowser()); @@ -59,11 +61,15 @@ const Page = ({ params: { slug } }: { params: { slug: string } }) => { ogDescription={meta_data?.og_description} ogImage={meta_data?.og_image} /> -
- Capture{" "}
+ Capture{' '}
- {" "}
+ {' '}
backend logs
with every bug report
@@ -160,7 +166,7 @@ const Page = ({ params: { slug } }: { params: { slug: string } }) => {
>
- Assign bugs and{" "} + Assign bugs and{' '} share at single click
@@ -174,7 +180,9 @@ const Page = ({ params: { slug } }: { params: { slug: string } }) => {
{hero_section?.description
- ?.split("BetterBugs.io")
+ ?.split('BetterBugs.io')
.map((part: any, index: any, arr: any) => (
{
{splitDescriptions.map(
(text: any, subIndex: any) => {
const isQuoted =
- text.startsWith("") && text.endsWith("");
+ typeof text === 'string' &&
+ /^(['"]).*\1$/.test(text);
const containsBetterBugs =
- text.includes("BetterBugs.io");
+ text.includes('BetterBugs.io');
if (containsBetterBugs) {
// Split the text around 'BetterBugs.io' to wrap it in a link
- const parts = text.split("BetterBugs.io");
+ const parts = text.split('BetterBugs.io');
return (
+
{development_tools_user_agent_info?.example_string}
- {development_tools_user_agent_info?.example_string_description}
+
+ {
+ development_tools_user_agent_info?.example_string_description
+ }
{output?.mode}
@@ -747,7 +790,9 @@ const Page = ({ params: { slug } }: { params: { slug: string } }) => {
- {development_tool_example?.javascript_example?.description}
+ {
+ development_tool_example?.javascript_example
+ ?.description
+ }
- {example?.title}
-
+ {example?.title}
+
- {development_tool_example?.javascript_example?.note}
+ {
+ development_tool_example?.javascript_example
+ ?.note
+ }
{how?.heading}
- Use AI{" "}
+ Use AI{' '}
to reproduce and fix bugs
Screen Recording
- {" "}
- with{" "}
+ {' '}
+ with{' '}
Rewind (Upto 2-min)
@@ -1061,9 +1128,9 @@ const Page = ({ params: { slug } }: { params: { slug: string } }) => {
>
- Capture{" "}
+ Capture{' '}
- {" "}
+ {' '}
backend logs
with every bug report
@@ -1074,7 +1141,7 @@ const Page = ({ params: { slug } }: { params: { slug: string } }) => {
>
- Assign bugs and{" "}
+ Assign bugs and{' '}
share at
single click
{tool?.name}
Edit the HTML to see updates here. Edit the HTML to see updates here.
+
Other Tools
+ {development_tool_example?.example_input
+ ?.json_data && (
+
)}
@@ -735,7 +775,10 @@ const Page = ({ params: { slug } }: { params: { slug: string } }) => {
)}
{development_tool_example?.example_outputs?.outputs?.map(
(output: any, index: number) => (
-
- {development_tool_example?.example_input?.json_data}
+ {
+ development_tool_example?.example_input
+ ?.json_data
+ }
+
{output?.content}
@@ -767,74 +812,88 @@ const Page = ({ params: { slug } }: { params: { slug: string } }) => {
{/* JavaScript example section (optional) */}
{development_tool_example?.javascript_example && (
- {development_tool_example?.javascript_example?.title}
+ {
+ development_tool_example?.javascript_example
+ ?.title
+ }
)}
- {development_tool_example?.javascript_example?.description && (
+ {development_tool_example?.javascript_example
+ ?.description && (
- {development_tool_example?.javascript_example?.methods?.map(
- (method: any, index: number) => (
-
-
+ {development_tool_example?.javascript_example?.methods?.map(
+ (method: any, index: number) => (
+
-
+ {method?.description && (
+
+ {method?.description}
+
)}
-
- {example?.code}
-
-
+
+ )}
+
+ {example?.code}
+
+
- The essential AI{" "}
+ The essential AI{' '}
companion every QA needs
@@ -994,7 +1057,7 @@ const Page = ({ params: { slug } }: { params: { slug: string } }) => {
+ {filtered.slice(0, 2000).map(({ en, idx }) => {
+ const method = String(en.request?.method ?? "").toUpperCase() || "—";
+ const url = String(en.request?.url ?? "");
+ const status = Number(en.response?.status ?? 0) || 0;
+ const totalMs = Math.max(0, Number(en.time ?? 0) || 0);
+ const selected = idx === activeId;
+ const statusColor =
+ status >= 200 && status < 300
+ ? "text-green-300"
+ : status >= 300 && status < 400
+ ? "text-yellow-300"
+ : status >= 400
+ ? "text-red-300"
+ : "text-white/60";
+
+ const typ = guessEntryType(en);
+ const typeLabel =
+ typ === "xhr" ? "XHR" : typ === "js" ? "JS" : typ === "css" ? "CSS" : typ === "img" ? "Img" : typ === "media" ? "Media" : "Other";
+
+ const segs = timingSegments(en);
+ const segTotal = segs.reduce((a, s) => a + s.ms, 0) || totalMs || 1;
+ const max = timelineMaxMs || 1;
+ const barW = Math.max(2, Math.min(100, (totalMs / max) * 100));
+
+ const reqHeaders = normalizeHeaders(en.request?.headers);
+ const resHeaders = normalizeHeaders(en.response?.headers);
+
+ return (
+
+ )}
+
+ Response headers
+
+
+ {resHeaders.map((h) => `${h.name}: ${h.value}`).join("\n")}
+
+ )}
+
+ Response content
+
+
+ {en.response?.content?.text ? String(en.response.content.text) : "—"}
+
+
+ Request headers
+
+
+ {reqHeaders.map((h) => `${h.name}: ${h.value}`).join("\n")}
+
+ Hello, HTML Viewer
\nHello, Html Viewer
\n