diff --git a/components.d.ts b/components.d.ts
index e31119b3..9a0a4ccf 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -89,26 +89,39 @@ declare module '@vue/runtime-core' {
HttpStatusCodes: typeof import('./src/tools/http-status-codes/http-status-codes.vue')['default']
IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default']
'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default']
+ 'IconMdi:contentCopy': typeof import('~icons/mdi/content-copy')['default']
'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default']
+ IconMdiArrowDown: typeof import('~icons/mdi/arrow-down')['default']
+ IconMdiArrowRightBottom: typeof import('~icons/mdi/arrow-right-bottom')['default']
+ IconMdiCamera: typeof import('~icons/mdi/camera')['default']
IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
IconMdiClose: typeof import('~icons/mdi/close')['default']
IconMdiContentCopy: typeof import('~icons/mdi/content-copy')['default']
+ IconMdiDeleteOutline: typeof import('~icons/mdi/delete-outline')['default']
+ IconMdiDownload: typeof import('~icons/mdi/download')['default']
IconMdiEye: typeof import('~icons/mdi/eye')['default']
IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default']
IconMdiHeart: typeof import('~icons/mdi/heart')['default']
+ IconMdiPause: typeof import('~icons/mdi/pause')['default']
+ IconMdiPlay: typeof import('~icons/mdi/play')['default']
+ IconMdiRecord: typeof import('~icons/mdi/record')['default']
+ IconMdiRefresh: typeof import('~icons/mdi/refresh')['default']
IconMdiSearch: typeof import('~icons/mdi/search')['default']
IconMdiTranslate: typeof import('~icons/mdi/translate')['default']
IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default']
+ IconMdiVideo: typeof import('~icons/mdi/video')['default']
InputCopyable: typeof import('./src/components/InputCopyable.vue')['default']
IntegerBaseConverter: typeof import('./src/tools/integer-base-converter/integer-base-converter.vue')['default']
Ipv4AddressConverter: typeof import('./src/tools/ipv4-address-converter/ipv4-address-converter.vue')['default']
Ipv4RangeExpander: typeof import('./src/tools/ipv4-range-expander/ipv4-range-expander.vue')['default']
Ipv4SubnetCalculator: typeof import('./src/tools/ipv4-subnet-calculator/ipv4-subnet-calculator.vue')['default']
Ipv6UlaGenerator: typeof import('./src/tools/ipv6-ula-generator/ipv6-ula-generator.vue')['default']
+ JavascriptToJson: typeof import('./src/tools/javascript-to-json/javascript-to-json.vue')['default']
JsonDiff: typeof import('./src/tools/json-diff/json-diff.vue')['default']
JsonMinify: typeof import('./src/tools/json-minify/json-minify.vue')['default']
JsonToCsv: typeof import('./src/tools/json-to-csv/json-to-csv.vue')['default']
+ JsonToJavascript: typeof import('./src/tools/json-to-javascript/json-to-javascript.vue')['default']
JsonToToml: typeof import('./src/tools/json-to-toml/json-to-toml.vue')['default']
JsonToYaml: typeof import('./src/tools/json-to-yaml-converter/json-to-yaml.vue')['default']
JsonViewer: typeof import('./src/tools/json-viewer/json-viewer.vue')['default']
@@ -126,25 +139,40 @@ declare module '@vue/runtime-core' {
MenuLayout: typeof import('./src/components/MenuLayout.vue')['default']
MetaTagGenerator: typeof import('./src/tools/meta-tag-generator/meta-tag-generator.vue')['default']
MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default']
+ NAlert: typeof import('naive-ui')['NAlert']
NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default']
+ NCheckbox: typeof import('naive-ui')['NCheckbox']
NCode: typeof import('naive-ui')['NCode']
NCollapseTransition: typeof import('naive-ui')['NCollapseTransition']
+ NColorPicker: typeof import('naive-ui')['NColorPicker']
NConfigProvider: typeof import('naive-ui')['NConfigProvider']
+ NDatePicker: typeof import('naive-ui')['NDatePicker']
NDivider: typeof import('naive-ui')['NDivider']
+ NDynamicInput: typeof import('naive-ui')['NDynamicInput']
NEllipsis: typeof import('naive-ui')['NEllipsis']
+ NForm: typeof import('naive-ui')['NForm']
NFormItem: typeof import('naive-ui')['NFormItem']
NGi: typeof import('naive-ui')['NGi']
NGrid: typeof import('naive-ui')['NGrid']
NH1: typeof import('naive-ui')['NH1']
+ NH2: typeof import('naive-ui')['NH2']
NH3: typeof import('naive-ui')['NH3']
NIcon: typeof import('naive-ui')['NIcon']
+ NImage: typeof import('naive-ui')['NImage']
+ NInputGroup: typeof import('naive-ui')['NInputGroup']
+ NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel']
NInputNumber: typeof import('naive-ui')['NInputNumber']
- NLabel: typeof import('naive-ui')['NLabel']
NLayout: typeof import('naive-ui')['NLayout']
NLayoutSider: typeof import('naive-ui')['NLayoutSider']
NMenu: typeof import('naive-ui')['NMenu']
+ NProgress: typeof import('naive-ui')['NProgress']
NScrollbar: typeof import('naive-ui')['NScrollbar']
+ NSlider: typeof import('naive-ui')['NSlider']
NSpin: typeof import('naive-ui')['NSpin']
+ NStatistic: typeof import('naive-ui')['NStatistic']
+ NSwitch: typeof import('naive-ui')['NSwitch']
+ NTable: typeof import('naive-ui')['NTable']
+ NTag: typeof import('naive-ui')['NTag']
NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default']
OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default']
PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default']
@@ -159,6 +187,7 @@ declare module '@vue/runtime-core' {
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
RsaKeyPairGenerator: typeof import('./src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue')['default']
+ SafelinkDecoder: typeof import('./src/tools/safelink-decoder/safelink-decoder.vue')['default']
SlugifyString: typeof import('./src/tools/slugify-string/slugify-string.vue')['default']
SpanCopyable: typeof import('./src/components/SpanCopyable.vue')['default']
SqlPrettify: typeof import('./src/tools/sql-prettify/sql-prettify.vue')['default']
diff --git a/locales/en.yml b/locales/en.yml
index 50d48af9..7a44010b 100644
--- a/locales/en.yml
+++ b/locales/en.yml
@@ -199,6 +199,14 @@ tools:
json-to-yaml-converter:
title: JSON to YAML converter
description: Simply convert JSON to YAML with this live online converter.
+
+ json-to-javascript:
+ title: JSON to JS converter
+ description: Simply convert JSON to Javascript object with this live online converter.
+
+ javascript-to-json:
+ title: JS to JSON converter
+ description: Simply convert Javascript object to JSON with this live online converter.
url-parser:
title: Url parser
diff --git a/locales/zh.yml b/locales/zh.yml
index 160fe1fa..4056e057 100644
--- a/locales/zh.yml
+++ b/locales/zh.yml
@@ -197,6 +197,14 @@ tools:
title: JSON到YAML转换器
description: 在线转换将JSON转换为YAML。
+ json-to-javascript:
+ title: JSON 到 JS 转换器
+ description: 使用此在线转换器将 JSON 转换为 Javascript 对象。
+
+ javascript-to-json:
+ title: JS 到 JSON 转换器
+ description: 使用此在线转换器将 Javascript 对象转换为 JSON。
+
url-parser:
title: Url分析器
description: 解析url字符串以获取所有不同的部分(协议、来源、参数、端口、用户名密码…)
diff --git a/src/components/TextareaCopyable.vue b/src/components/TextareaCopyable.vue
index 8b0aae61..27300f6c 100644
--- a/src/components/TextareaCopyable.vue
+++ b/src/components/TextareaCopyable.vue
@@ -2,6 +2,7 @@
import { Copy } from '@vicons/tabler';
import { useElementSize } from '@vueuse/core';
import hljs from 'highlight.js/lib/core';
+import javascriptHljs from 'highlight.js/lib/languages/javascript';
import jsonHljs from 'highlight.js/lib/languages/json';
import sqlHljs from 'highlight.js/lib/languages/sql';
import xmlHljs from 'highlight.js/lib/languages/xml';
@@ -24,6 +25,7 @@ const props = withDefaults(
copyMessage: 'Copy to clipboard',
},
);
+hljs.registerLanguage('javascript', javascriptHljs);
hljs.registerLanguage('sql', sqlHljs);
hljs.registerLanguage('json', jsonHljs);
hljs.registerLanguage('html', xmlHljs);
diff --git a/src/tools/index.ts b/src/tools/index.ts
index aa861c93..54937143 100644
--- a/src/tools/index.ts
+++ b/src/tools/index.ts
@@ -28,6 +28,8 @@ import { tool as jsonDiff } from './json-diff';
import { tool as ipv4RangeExpander } from './ipv4-range-expander';
import { tool as httpStatusCodes } from './http-status-codes';
import { tool as yamlToJson } from './yaml-to-json-converter';
+import { tool as javascriptToJson } from './javascript-to-json';
+import { tool as jsonToJavascript } from './json-to-javascript';
import { tool as jsonToYaml } from './json-to-yaml-converter';
import { tool as ipv6UlaGenerator } from './ipv6-ula-generator';
import { tool as ipv4AddressConverter } from './ipv4-address-converter';
@@ -102,6 +104,8 @@ export const toolsByCategory: ToolCategory[] = [
textToUnicode,
yamlToJson,
yamlToToml,
+ javascriptToJson,
+ jsonToJavascript,
jsonToYaml,
jsonToToml,
listConverter,
diff --git a/src/tools/javascript-to-json/index.ts b/src/tools/javascript-to-json/index.ts
new file mode 100644
index 00000000..4181636f
--- /dev/null
+++ b/src/tools/javascript-to-json/index.ts
@@ -0,0 +1,13 @@
+import { Braces } from '@vicons/tabler';
+import { defineTool } from '../tool';
+import { translate } from '@/plugins/i18n.plugin';
+
+export const tool = defineTool({
+ name: translate('tools.javascript-to-json.title'),
+ path: '/javascript-to-json',
+ description: translate('tools.javascript-to-json.description'),
+ keywords: ['javascript', 'to', 'json'],
+ component: () => import('./javascript-to-json.vue'),
+ icon: Braces,
+ createdAt: new Date('2024-03-29'),
+});
diff --git a/src/tools/javascript-to-json/javascript-to-json.vue b/src/tools/javascript-to-json/javascript-to-json.vue
new file mode 100644
index 00000000..b563401d
--- /dev/null
+++ b/src/tools/javascript-to-json/javascript-to-json.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/src/tools/json-to-javascript/index.ts b/src/tools/json-to-javascript/index.ts
new file mode 100644
index 00000000..0f61192e
--- /dev/null
+++ b/src/tools/json-to-javascript/index.ts
@@ -0,0 +1,13 @@
+import { Braces } from '@vicons/tabler';
+import { defineTool } from '../tool';
+import { translate } from '@/plugins/i18n.plugin';
+
+export const tool = defineTool({
+ name: translate('tools.json-to-javascript.title'),
+ path: '/json-to-javascript',
+ description: translate('tools.json-to-javascript.description'),
+ keywords: ['json', 'to', 'javascript'],
+ component: () => import('./json-to-javascript.vue'),
+ icon: Braces,
+ createdAt: new Date('2024-03-29'),
+});
diff --git a/src/tools/json-to-javascript/json-to-javascript.vue b/src/tools/json-to-javascript/json-to-javascript.vue
new file mode 100644
index 00000000..7318d5f2
--- /dev/null
+++ b/src/tools/json-to-javascript/json-to-javascript.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+