commit be32a075b45b591da5777bf99d75df0bf2bab780 Author: Simon Date: Tue Jul 12 20:44:26 2022 +0200 feat(core): initial commit diff --git a/.docs/screenshot.png b/.docs/screenshot.png new file mode 100644 index 0000000..6f4412d Binary files /dev/null and b/.docs/screenshot.png differ diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..7153067 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,32 @@ +kind: pipeline +name: default + +steps: +- name: install + image: node:18-alpine + commands: + - corepack pnpm@7.5.1 install + +- name: build + image: node:18-alpine + commands: + - corepack pnpm@7.5.1 build + +- name: deploy + image: plugins/docker + settings: + registry: registry.cliffbreak.de + repo: registry.cliffbreak.de/kispi-core + username: + from_secret: docker_username + password: + from_secret: docker_password + when: + event: + - push + - tag + - promote + +trigger: + branch: + - master \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..a305e81 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,144 @@ +module.exports = { + root: true, + extends: [ + 'eslint:recommended', + 'plugin:vue/vue3-recommended', + 'plugin:vue-scoped-css/vue3-recommended', + ], + parser: 'vue-eslint-parser', + env: { + 'node': true, + 'es6': true, + }, + rules: { + 'camelcase': ['error', { + 'properties': 'always', + 'ignoreDestructuring': false, + 'ignoreImports': false, + }], + 'comma-dangle': ['error', 'always-multiline'], + 'comma-spacing': ['error', { 'before': false, 'after': true }], + 'curly': ['error', 'all'], + 'eol-last': ['error', 'never'], + 'indent': ['error', 2], + 'key-spacing': ['error', { + 'beforeColon': false, + 'afterColon': true, + 'mode': 'strict', + }], + 'keyword-spacing': ['error', { + 'after': true, + 'overrides': { + 'if': { 'after': false }, + 'for': { 'after': false }, + 'while': { 'after': false }, + }, + }], + 'max-classes-per-file': ['error', 1], + 'max-len': ['error', 150], + 'no-console': ['warn'], + 'no-empty': ['error', { 'allowEmptyCatch': false }], + 'no-multi-spaces': ['error', { 'ignoreEOLComments': false }], + 'no-trailing-spaces': ['error', { 'ignoreComments': false }], + 'no-warning-comments': ['warn', { 'location': 'start' }], + 'object-curly-spacing': ['error', 'always'], + 'quotes': ['error', 'single'], + 'semi': ['error', 'always'], + 'sort-vars': ['error', { 'ignoreCase': true }], + 'space-before-blocks': ['error', 'always'], + 'space-before-function-paren': ['error', { + 'anonymous': 'always', + 'named': 'never', + 'asyncArrow': 'always', + }], + 'space-in-parens': ['error', 'never'], + 'spaced-comment': ['error', 'always'], + }, + overrides: [ + { + files: ['*.js'], + parserOptions: { + 'sourceType': 'module', + }, + env: { + 'browser': true, + }, + }, + { + files: ['*.ts', '*.vue'], + parser: 'vue-eslint-parser', + parserOptions: { + parser: '@typescript-eslint/parser', + sourceType: 'module', + 'project': 'tsconfig.json', + extraFileExtensions: ['.vue'], + }, + plugins: [ + '@typescript-eslint', + ], + extends: [ + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + ], + globals: { + defineProps: 'readonly', + defineEmits: 'readonly', + defineExpose: 'readonly', + }, + rules: { + '@typescript-eslint/naming-convention': [ + 'error', + { + 'selector': 'default', + 'format': ['camelCase'], + }, + { + 'selector': 'variable', + 'modifiers': ['const'], + 'format': ['PascalCase', 'camelCase', 'UPPER_CASE'], + }, + { + 'selector': ['parameter', 'property'], + 'format': ['camelCase'], + 'leadingUnderscore': 'allow', + }, + { + 'selector': 'typeLike', + 'format': ['PascalCase'], + }, + { + 'selector': 'interface', + 'format': ['PascalCase'], + 'prefix': ['I'], + }, + { + 'selector': 'enumMember', + 'format': ['UPPER_CASE'], + }, + { + 'selector': 'variable', + 'types': ['boolean'], + 'format': ['PascalCase'], + 'prefix': ['is', 'should', 'has', 'can', 'did', 'will'], + }, + ], + '@typescript-eslint/no-empty-interface': ['error', { 'allowSingleExtends': false }], + 'quotes': 'off', + '@typescript-eslint/quotes': ['error', 'single'], + '@typescript-eslint/type-annotation-spacing': ['error', { 'before': false, 'after': true }], + 'vue/singleline-html-element-content-newline': 0, + 'vue/require-v-for-key': 'off', + 'vue/no-v-html': 'off', + 'vue/html-self-closing': ['error', { + 'html': { + 'void': 'any', + 'normal': 'always', + 'component': 'always', + }, + 'svg': 'always', + 'math': 'always', + }], + }, + }, + ], +}; \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8b7e502 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..02cadfe --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,11 @@ +{ + "recommendations": [ + "streetsidesoftware.code-spell-checker", + "usernamehw.errorlens", + "dbaeumer.vscode-eslint", + "streetsidesoftware.code-spell-checker-german", + "jasonlhy.hungry-delete", + "gruntfuggly.todo-tree", + "Vue.volar" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..32584e3 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,18 @@ +{ + "cSpell.words": [ + "appwrite", + "camelcase", + "checkin", + "cliffbreak", + "corepack", + "daisyui", + "Gitea", + "heroicons", + "kispi", + "pnpm", + "tailwindcss", + "vite", + "vitejs", + "vueuse" + ] +} \ No newline at end of file diff --git a/COMMIT_CONVENTION.md b/COMMIT_CONVENTION.md new file mode 100755 index 0000000..e79083f --- /dev/null +++ b/COMMIT_CONVENTION.md @@ -0,0 +1,79 @@ +### Commit Message Format + +Each commit message consists of a **header**, a **body** and a **footer**. +The header has a special format that includes a **type**, a **scope** and a **subject**: + +``` +(): + + + +