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 @@ + + +