diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..dde7877 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# http://editorconfig.org +root = true + +[*] +end_of_line = lf +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +[{*.js,*.mjs,*.ts,*.json,*.yml}] +indent_size = 2 +indent_style = space diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +node_modules/ diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..d04439f --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,160 @@ +{ + "env": { + "browser": true, + "es6": true, + "node": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 2020 + }, + "globals": { + "BigInt": true, + "Metacom": true + }, + "rules": { + "indent": ["error", 2], + "linebreak-style": ["error", "unix"], + "quotes": ["error", "single"], + "semi": ["error", "always"], + "no-loop-func": ["error"], + "block-spacing": ["error", "always"], + "camelcase": ["error"], + "eqeqeq": ["error", "always"], + "strict": ["error", "global"], + "brace-style": [ + "error", + "1tbs", + { + "allowSingleLine": true + } + ], + "comma-style": ["error", "last"], + "comma-spacing": [ + "error", + { + "before": false, + "after": true + } + ], + "eol-last": ["error"], + "func-call-spacing": ["error", "never"], + "key-spacing": [ + "error", + { + "beforeColon": false, + "afterColon": true, + "mode": "minimum" + } + ], + "keyword-spacing": [ + "error", + { + "before": true, + "after": true, + "overrides": { + "function": { + "after": false + } + } + } + ], + "max-len": [ + "error", + { + "code": 80, + "ignoreUrls": true + } + ], + "max-nested-callbacks": [ + "error", + { + "max": 7 + } + ], + "new-cap": [ + "error", + { + "newIsCap": true, + "capIsNew": false, + "properties": true + } + ], + "new-parens": ["error"], + "no-lonely-if": ["error"], + "no-trailing-spaces": ["error"], + "no-unneeded-ternary": ["error"], + "no-whitespace-before-property": ["error"], + "object-curly-spacing": ["error", "always"], + "operator-assignment": ["error", "always"], + "operator-linebreak": ["error", "after"], + "semi-spacing": [ + "error", + { + "before": false, + "after": true + } + ], + "space-before-blocks": ["error", "always"], + "space-before-function-paren": [ + "error", + { + "anonymous": "never", + "named": "never", + "asyncArrow": "always" + } + ], + "space-in-parens": ["error", "never"], + "space-infix-ops": ["error"], + "space-unary-ops": [ + "error", + { + "words": true, + "nonwords": false, + "overrides": { + "typeof": false + } + } + ], + "no-unreachable": ["error"], + "no-global-assign": ["error"], + "no-self-compare": ["error"], + "no-unmodified-loop-condition": ["error"], + "no-constant-condition": [ + "error", + { + "checkLoops": false + } + ], + "no-console": ["off"], + "no-useless-concat": ["error"], + "no-useless-escape": ["error"], + "no-shadow-restricted-names": ["error"], + "no-use-before-define": [ + "error", + { + "functions": false + } + ], + "arrow-parens": ["error", "always"], + "arrow-body-style": ["error", "as-needed"], + "arrow-spacing": ["error"], + "no-confusing-arrow": [ + "error", + { + "allowParens": true + } + ], + "no-useless-computed-key": ["error"], + "no-useless-rename": ["error"], + "no-var": ["error"], + "object-shorthand": ["error", "always"], + "prefer-arrow-callback": ["error"], + "prefer-const": ["error"], + "prefer-numeric-literals": ["error"], + "prefer-rest-params": ["error"], + "prefer-spread": ["error"], + "rest-spread-spacing": ["error", "never"], + "template-curly-spacing": ["error", "never"] + } +} diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..74d3eb4 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,10 @@ +{ + "singleQuote": true, + "trailingComma": "es5", + "overrides": [ + { + "files": ".prettierrc", + "options": { "parser": "json" } + } + ] +} diff --git a/application/.eslintrc.json b/application/.eslintrc.json new file mode 100644 index 0000000..b871c82 --- /dev/null +++ b/application/.eslintrc.json @@ -0,0 +1,19 @@ +{ + "parserOptions": { + "sourceType": "module" + }, + "rules": { + "id-denylist": [ + 2, + "application", + "node", + "npm", + "api", + "lib", + "db", + "domain", + "config", + "metarhia" + ] + } +} diff --git a/application/api/system.1/introspect.js b/application/api/system.1/introspect.js new file mode 100644 index 0000000..d055e57 --- /dev/null +++ b/application/api/system.1/introspect.js @@ -0,0 +1,4 @@ +({ + access: 'public', + method: application.introspect, +}); diff --git a/server.js b/server.js new file mode 100644 index 0000000..8a3c729 --- /dev/null +++ b/server.js @@ -0,0 +1,3 @@ +'use strict'; + +require('impress'); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1625593 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ESNext", + "moduleResolution": "node", + "strict": true, + "baseUrl": ".", + "preserveWatchOutput": true, + "allowJs": true, + "noEmit": true, + "skipLibCheck": true + }, + "include": ["types/**/*.ts", "application/**/*"] +} diff --git a/types/global.d.ts b/types/global.d.ts new file mode 100644 index 0000000..438e803 --- /dev/null +++ b/types/global.d.ts @@ -0,0 +1,20 @@ +import * as _impress from 'impress'; + +import * as _metasql from 'metasql'; +import { Database } from 'metasql'; + +declare global { + namespace metarhia { + const metasql: typeof _metasql; + } + + namespace api {} + + namespace lib {} + + namespace domain {} + + namespace db { + const pg: Database; + } +}