diff options
Diffstat (limited to 'src')
5 files changed, 67 insertions, 1 deletions
diff --git a/src/components/TextareaCopyable.vue b/src/components/TextareaCopyable.vue index 12d189e..4bc09f4 100644 --- a/src/components/TextareaCopyable.vue +++ b/src/components/TextareaCopyable.vue @@ -34,11 +34,13 @@ import hljs from 'highlight.js/lib/core'; import jsonHljs from 'highlight.js/lib/languages/json'; import sqlHljs from 'highlight.js/lib/languages/sql'; import xmlHljs from 'highlight.js/lib/languages/xml'; +import yamlHljs from 'highlight.js/lib/languages/yaml'; import { ref, toRefs } from 'vue'; hljs.registerLanguage('sql', sqlHljs); hljs.registerLanguage('json', jsonHljs); hljs.registerLanguage('html', xmlHljs); +hljs.registerLanguage('yaml', yamlHljs); const props = withDefaults( defineProps<{ diff --git a/src/tools/docker-run-to-docker-compose-converter/composerize.d.ts b/src/tools/docker-run-to-docker-compose-converter/composerize.d.ts new file mode 100644 index 0000000..aab47a2 --- /dev/null +++ b/src/tools/docker-run-to-docker-compose-converter/composerize.d.ts @@ -0,0 +1,4 @@ +declare module 'composerize' { + const composerize: (arg: string) => string; + export default composerize; +} diff --git a/src/tools/docker-run-to-docker-compose-converter/docker-run-to-docker-compose-converter.vue b/src/tools/docker-run-to-docker-compose-converter/docker-run-to-docker-compose-converter.vue new file mode 100644 index 0000000..583bd58 --- /dev/null +++ b/src/tools/docker-run-to-docker-compose-converter/docker-run-to-docker-compose-converter.vue @@ -0,0 +1,39 @@ +<template> + <div> + <n-form-item label="Your docker run command:" :show-feedback="false"> + <n-input + v-model:value="dockerRun" + style="font-family: monospace" + type="textarea" + placeholder="Your docker run command to convert..." + rows="3" + /> + </n-form-item> + + <n-divider /> + + <textarea-copyable :value="dockerCompose" language="yaml" /> + <br /> + <br /> + <n-space justify="center"> + <n-button :disabled="dockerCompose === ''" secondary @click="download"> Download docker-compose.yml </n-button> + </n-space> + </div> +</template> + +<script setup lang="ts"> +import { computed, ref } from 'vue'; +import { withDefaultOnError } from '@/utils/defaults'; +import { useDownloadFileFromBase64 } from '@/composable/downloadBase64'; +import { textToBase64 } from '@/utils/base64'; +import TextareaCopyable from '@/components/TextareaCopyable.vue'; + +import composerize from 'composerize'; + +const dockerRun = ref( + 'docker run -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro --restart always --log-opt max-size=1g nginx', +); +const dockerCompose = computed(() => withDefaultOnError(() => composerize(dockerRun.value), '')); +const dockerComposeBase64 = computed(() => 'data:application/yaml;base64,' + textToBase64(dockerCompose.value)); +const { download } = useDownloadFileFromBase64({ source: dockerComposeBase64, filename: 'docker-compose.yml' }); +</script> diff --git a/src/tools/docker-run-to-docker-compose-converter/index.ts b/src/tools/docker-run-to-docker-compose-converter/index.ts new file mode 100644 index 0000000..d9c1437 --- /dev/null +++ b/src/tools/docker-run-to-docker-compose-converter/index.ts @@ -0,0 +1,11 @@ +import { BrandDocker } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'Docker run to Docker compose converter', + path: '/docker-run-to-docker-compose-converter', + description: 'Turns docker run commands into docker-compose files!', + keywords: ['docker', 'run', 'compose', 'yaml', 'yml', 'convert', 'deamon'], + component: () => import('./docker-run-to-docker-compose-converter.vue'), + icon: BrandDocker, +}); diff --git a/src/tools/index.ts b/src/tools/index.ts index 4b4ff22..1d0b3ad 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; +import { tool as dockerRunToDockerComposeConverter } from './docker-run-to-docker-compose-converter'; import { tool as htmlWysiwygEditor } from './html-wysiwyg-editor'; import { tool as rsaKeyPairGenerator } from './rsa-key-pair-generator'; import { tool as textToNatoAlphabet } from './text-to-nato-alphabet'; @@ -84,7 +85,16 @@ export const toolsByCategory: ToolCategory[] = [ }, { name: 'Development', - components: [gitMemo, randomPortGenerator, crontabGenerator, jsonViewer, jsonMinify, sqlPrettify, chmodCalculator], + components: [ + gitMemo, + randomPortGenerator, + crontabGenerator, + jsonViewer, + jsonMinify, + sqlPrettify, + chmodCalculator, + dockerRunToDockerComposeConverter, + ], }, { name: 'Math', |