mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-01-14 06:43:25 +08:00
7c3a73d4a8
Add script `packages/mermaid/scripts/create-types-from-json-schema.mts` to automatically generate the TypeScript definition for `MermaidConfig` from the `MermaidConfig` JSON Schema at `packages/mermaid/src/schemas/config.schema.yaml`. To do this, we are using this library [`json-schema-to-typescript`][1], which is also used by Webpack to generate their types from their JSON Schema. In order to make sure that this isn't a breaking change, the script makes all fields **optional**, as that is what the original typescript file has. Additionally, I've put in some custom logic into the script, so that the exact same order is used for the TypeScript file, to make the `git diff` easier to review. In the future, we can remove this custom logic, once we no longer need to worry about `git merge` conflicts. [1]: https://github.com/bcherny/json-schema-to-typescript
163 lines
4.6 KiB
JavaScript
163 lines
4.6 KiB
JavaScript
module.exports = {
|
|
env: {
|
|
browser: true,
|
|
es6: true,
|
|
'jest/globals': true,
|
|
node: true,
|
|
},
|
|
root: true,
|
|
parser: '@typescript-eslint/parser',
|
|
parserOptions: {
|
|
ecmaFeatures: {
|
|
experimentalObjectRestSpread: true,
|
|
jsx: true,
|
|
},
|
|
tsconfigRootDir: __dirname,
|
|
sourceType: 'module',
|
|
ecmaVersion: 2020,
|
|
allowAutomaticSingleRunInference: true,
|
|
project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
|
|
parser: '@typescript-eslint/parser',
|
|
},
|
|
extends: [
|
|
'eslint:recommended',
|
|
'plugin:@typescript-eslint/recommended',
|
|
'plugin:json/recommended',
|
|
'plugin:markdown/recommended',
|
|
'plugin:@cspell/recommended',
|
|
'prettier',
|
|
],
|
|
plugins: [
|
|
'@typescript-eslint',
|
|
'no-only-tests',
|
|
'html',
|
|
'jest',
|
|
'jsdoc',
|
|
'json',
|
|
'@cspell',
|
|
'lodash',
|
|
'unicorn',
|
|
],
|
|
ignorePatterns: [
|
|
// this file is automatically generated by `pnpm run --filter mermaid types:build-config`
|
|
'packages/mermaid/src/config.type.ts',
|
|
],
|
|
rules: {
|
|
curly: 'error',
|
|
'no-console': 'error',
|
|
'no-prototype-builtins': 'off',
|
|
'no-unused-vars': 'off',
|
|
'cypress/no-async-tests': 'off',
|
|
'@typescript-eslint/no-floating-promises': 'error',
|
|
'@typescript-eslint/no-misused-promises': 'error',
|
|
'@typescript-eslint/ban-ts-comment': [
|
|
'error',
|
|
{
|
|
'ts-expect-error': 'allow-with-description',
|
|
'ts-ignore': 'allow-with-description',
|
|
'ts-nocheck': 'allow-with-description',
|
|
'ts-check': 'allow-with-description',
|
|
minimumDescriptionLength: 10,
|
|
},
|
|
],
|
|
'json/*': ['error', 'allowComments'],
|
|
'@cspell/spellchecker': [
|
|
'error',
|
|
{
|
|
checkIdentifiers: false,
|
|
checkStrings: false,
|
|
checkStringTemplates: false,
|
|
},
|
|
],
|
|
'no-empty': [
|
|
'error',
|
|
{
|
|
allowEmptyCatch: true,
|
|
},
|
|
],
|
|
'no-only-tests/no-only-tests': 'error',
|
|
'lodash/import-scope': ['error', 'method'],
|
|
'unicorn/better-regex': 'error',
|
|
'unicorn/no-abusive-eslint-disable': 'error',
|
|
'unicorn/no-array-push-push': 'error',
|
|
'unicorn/no-for-loop': 'error',
|
|
'unicorn/no-instanceof-array': 'error',
|
|
'unicorn/no-typeof-undefined': 'error',
|
|
'unicorn/no-unnecessary-await': 'error',
|
|
'unicorn/no-unsafe-regex': 'warn',
|
|
'unicorn/no-useless-promise-resolve-reject': 'error',
|
|
'unicorn/prefer-array-find': 'error',
|
|
'unicorn/prefer-array-flat-map': 'error',
|
|
'unicorn/prefer-array-index-of': 'error',
|
|
'unicorn/prefer-array-some': 'error',
|
|
'unicorn/prefer-default-parameters': 'error',
|
|
'unicorn/prefer-includes': 'error',
|
|
'unicorn/prefer-negative-index': 'error',
|
|
'unicorn/prefer-object-from-entries': 'error',
|
|
'unicorn/prefer-string-starts-ends-with': 'error',
|
|
'unicorn/prefer-string-trim-start-end': 'error',
|
|
'unicorn/string-content': 'error',
|
|
'unicorn/prefer-spread': 'error',
|
|
'unicorn/no-lonely-if': 'error',
|
|
},
|
|
overrides: [
|
|
{
|
|
files: ['cypress/**', 'demos/**'],
|
|
rules: {
|
|
'no-console': 'off',
|
|
},
|
|
},
|
|
{
|
|
files: ['*.{js,jsx,mjs,cjs}'],
|
|
extends: ['plugin:jsdoc/recommended'],
|
|
rules: {
|
|
'jsdoc/check-indentation': 'off',
|
|
'jsdoc/check-alignment': 'off',
|
|
'jsdoc/check-line-alignment': 'off',
|
|
'jsdoc/multiline-blocks': 'off',
|
|
'jsdoc/newline-after-description': 'off',
|
|
'jsdoc/tag-lines': 'off',
|
|
'jsdoc/require-param-description': 'off',
|
|
'jsdoc/require-param-type': 'off',
|
|
'jsdoc/require-returns': 'off',
|
|
'jsdoc/require-returns-description': 'off',
|
|
},
|
|
},
|
|
{
|
|
files: ['*.{ts,tsx}'],
|
|
plugins: ['tsdoc'],
|
|
rules: {
|
|
'no-restricted-syntax': [
|
|
'error',
|
|
{
|
|
selector: 'TSEnumDeclaration',
|
|
message:
|
|
'Prefer using TypeScript union types over TypeScript enum, since TypeScript enums have a bunch of issues, see https://dev.to/dvddpl/whats-the-problem-with-typescript-enums-2okj',
|
|
},
|
|
],
|
|
'tsdoc/syntax': 'error',
|
|
},
|
|
},
|
|
{
|
|
files: ['*.spec.{ts,js}', 'cypress/**', 'demos/**', '**/docs/**'],
|
|
rules: {
|
|
'jsdoc/require-jsdoc': 'off',
|
|
'@typescript-eslint/no-unused-vars': 'off',
|
|
},
|
|
},
|
|
{
|
|
files: ['*.html', '*.md', '**/*.md/*'],
|
|
rules: {
|
|
'no-var': 'error',
|
|
'no-undef': 'off',
|
|
'@typescript-eslint/no-unused-vars': 'off',
|
|
'@typescript-eslint/no-floating-promises': 'off',
|
|
'@typescript-eslint/no-misused-promises': 'off',
|
|
},
|
|
parserOptions: {
|
|
project: null,
|
|
},
|
|
},
|
|
],
|
|
};
|