mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-04-20 14:56:17 -04:00
feat(new-tool): json minify (#265)
Co-authored-by: Corentin THOMASSET <corentin.thomasset74@gmail.com>
This commit is contained in:
parent
db817a2459
commit
f708f5091e
3 changed files with 70 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
||||||
import { tool as base64FileConverter } from './base64-file-converter';
|
import { tool as base64FileConverter } from './base64-file-converter';
|
||||||
import { tool as base64StringConverter } from './base64-string-converter';
|
import { tool as base64StringConverter } from './base64-string-converter';
|
||||||
import { tool as basicAuthGenerator } from './basic-auth-generator';
|
import { tool as basicAuthGenerator } from './basic-auth-generator';
|
||||||
|
import { tool as jsonMinify } from './json-minify';
|
||||||
import { tool as bcrypt } from './bcrypt';
|
import { tool as bcrypt } from './bcrypt';
|
||||||
import { tool as bip39 } from './bip39-generator';
|
import { tool as bip39 } from './bip39-generator';
|
||||||
import { tool as caseConverter } from './case-converter';
|
import { tool as caseConverter } from './case-converter';
|
||||||
|
@ -74,7 +75,7 @@ export const toolsByCategory: ToolCategory[] = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Development',
|
name: 'Development',
|
||||||
components: [gitMemo, randomPortGenerator, crontabGenerator, jsonViewer, sqlPrettify, chmodCalculator],
|
components: [gitMemo, randomPortGenerator, crontabGenerator, jsonViewer, jsonMinify, sqlPrettify, chmodCalculator],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Math',
|
name: 'Math',
|
||||||
|
|
11
src/tools/json-minify/index.ts
Normal file
11
src/tools/json-minify/index.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import { Braces } from '@vicons/tabler';
|
||||||
|
import { defineTool } from '../tool';
|
||||||
|
|
||||||
|
export const tool = defineTool({
|
||||||
|
name: 'JSON minify',
|
||||||
|
path: '/json-minify',
|
||||||
|
description: 'Minify and compress your JSON by removing unnecessary white spaces.',
|
||||||
|
keywords: ['json', 'minify', 'format'],
|
||||||
|
component: () => import('./json-minify.vue'),
|
||||||
|
icon: Braces,
|
||||||
|
});
|
57
src/tools/json-minify/json-minify.vue
Normal file
57
src/tools/json-minify/json-minify.vue
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<template>
|
||||||
|
<n-form-item
|
||||||
|
label="Your raw json"
|
||||||
|
:feedback="rawJsonValidation.message"
|
||||||
|
:validation-status="rawJsonValidation.status"
|
||||||
|
>
|
||||||
|
<n-input
|
||||||
|
ref="inputElement"
|
||||||
|
v-model:value="rawJson"
|
||||||
|
placeholder="Paste your raw json here..."
|
||||||
|
type="textarea"
|
||||||
|
rows="20"
|
||||||
|
autocomplete="off"
|
||||||
|
autocorrect="off"
|
||||||
|
autocapitalize="off"
|
||||||
|
spellcheck="false"
|
||||||
|
/>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item label="Minify version of your JSON">
|
||||||
|
<textarea-copyable :value="cleanJson" language="json" :follow-height-of="inputElement" />
|
||||||
|
</n-form-item>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import TextareaCopyable from '@/components/TextareaCopyable.vue';
|
||||||
|
import { useValidation } from '@/composable/validation';
|
||||||
|
import { withDefaultOnError } from '@/utils/defaults';
|
||||||
|
import JSON5 from 'json5';
|
||||||
|
import { computed, ref } from 'vue';
|
||||||
|
|
||||||
|
const inputElement = ref<HTMLElement>();
|
||||||
|
|
||||||
|
const rawJson = ref('{\n\t"hello": [\n\t\t"world"\n\t]\n}');
|
||||||
|
const cleanJson = computed(() => withDefaultOnError(() => JSON.stringify(JSON5.parse(rawJson.value), null, 0), ''));
|
||||||
|
|
||||||
|
const rawJsonValidation = useValidation({
|
||||||
|
source: rawJson,
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
validator: (v) => v === '' || JSON5.parse(v),
|
||||||
|
message: 'Provided JSON is not valid.',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.result-card {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.copy-button {
|
||||||
|
position: absolute;
|
||||||
|
top: 10px;
|
||||||
|
right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Add table
Add a link
Reference in a new issue