Commit Graph

8236 Commits

Author SHA1 Message Date
Alois Klink 063cb124cd test(config): add temp test for defaultConfig
Adds a temporary test to ensure that the new defaultConfig,
generated by Vite automatically from the `MermaidConfig` JSON Schema,
has the same values as the old defaultConfig
(taken from
38013de711/packages/mermaid/src/defaultConfig.ts)

The only minor difference seems to be that:
  - `gitGraph` now has a default `useMaxWidth: false` option
    (previously used to be `undefined`),
  - `class` now has a `htmlLabels` value of `false` instead of `undefined`.
2023-07-06 03:53:40 +01:00
Alois Klink eb5d65fabc build(types): create types from config JSON Schema
Runs `pnpm --filter mermaid run types:build-config` to automatically
generate typescript types for `MermaidConfig` from the
JSON Schema file.
2023-07-06 03:53:40 +01:00
Alois Klink 7c3a73d4a8 build(types): add script to generate Config types
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
2023-07-06 03:53:40 +01:00
Alois Klink 0230722d36 build(docs): build JSON Schema docs
Automatically build documentation for JSON Schema.

This is only built when running with `--vitepress`,
as it currently produces loads of markdown files, which I feel like
we shouldn't be committing.

This currently manually uses some internal `jsonschema2md` functions
so that we can manually control the Markdown output.
2023-07-06 03:53:40 +01:00
Alois Klink 52a1243da5 build: use vite to get default mermaid config
Adds a vitepress JsonSchema plugin that automatically loads
the Mermaid Config JSON Schema from a .schema.yaml file and
gets the default values from it.
2023-07-06 03:53:40 +01:00
Alois Klink 58b43976ff feat: add Mermaid Config in JSON Schema format
Add a JSON Schema file (in YAML) for the MermaidConfig.

This JSON Schema file follows [JSON Schema 2019-09][1], with some slight
modifications to work with:

- [json-schema-to-typescript][2]
  The `tsType` keyword is used to override the generated TypeScript
  type, when it doesn't match the JSON Schema type.

  This is used in two cases:
    - when the current type cannot be represented in JSON Schema
      (e.g. `FontCalculator`, which is a function)
    - when the JSON Schema type is narrower than the TypeScript type.
      Currently, many enums types are listed as `string` in TypeScript,
      but json-schema-to-typescript converts them to `"val1" | "val2"`.
      I've manually set them to `string | "val1" | "val2"` to avoid
      causing a breaking change in the TypeScript types. We should
      remove these in a future major version of TypeScript.
- [@adobe/jsonschema2md][3]
  The `meta:enum` keyword is used to add documentation for specific enum
  values.

[1]: https://json-schema.org/draft/2019-09/release-notes.html
[2]: https://www.npmjs.com/package/json-schema-to-typescript
[3]: https://www.npmjs.com/package/@adobe/jsonschema2md
2023-07-06 03:53:35 +01:00
Alois Klink 4372a54dba docs: add support for ```regexp``` code blocks
Currently, shiki doesn't support code-blocks that use the regexp
language, which means vitepress throws an error on them:

```regexp
^([1-9][0-9]*)(minute|hour|day|week|month)$
```

As a hack until shiki supports them, I've just modified them to get
converted into JavaScript RegEx literal code-blocks, e.g.:

```javascript
/^([1-9][0-9]*)(minute|hour|day|week|month)$/
```
2023-07-06 03:04:08 +01:00
Alois Klink a862565a24 test: test partial QuadrantChartConfig options 2023-07-06 01:35:11 +01:00
Alois Klink 6ceee7f253 test: fix types in `config.spec.ts`
The `foo`, `bar`, and `foobar` options don't exist in MermaidConfig.

Instead, I've replaced them with:
  - `foo` -> `fontFamily`
  - `bar` -> `fontSize`
  - `foobar` -> `altfontFamily`
2023-07-06 01:27:24 +01:00
Alois Klink f731853e01 style: fix lint issues in src/config.spec.ts
It looks like our linter automatically converts `let` to `const` in
TypeScript files, but not in JavaScript files.
2023-07-06 01:20:24 +01:00
Alois Klink 5885f5f82a test: rename src/config.spec.js to config.spec.ts 2023-07-06 01:19:34 +01:00
Alois Klink 38013de711 fix(quadrant): make quadrant options optional
Make the types of the options in QuadrantChartConfig in the
MermaidConfig optional. All of these (except for the values in
`BaseDiagramConfig`) will be automatically set to their
default values, so they're optional from a user perspective.
2023-07-06 01:06:01 +01:00
Steph 9251e520ab fix lint 2023-07-05 13:50:33 -07:00
Steph 5e7e3e21c8 update homepage community link 2023-07-05 13:42:42 -07:00
Tom PERRILLAT-COLLOMB fcb25aee7c docs(flowchart): add documentation on multiple nodes style 2023-07-05 21:09:44 +02:00
Nikolay Rozhkov 95d62367e9 Add docker-specific command, leave commonly used command intact 2023-07-05 19:39:05 +03:00
Ibrahim Wassouf 1d5f3bb64d
Merge branch 'develop' into enhancement/4158_Add_primary_key_beginning_with_asterisk 2023-07-05 11:19:08 -04:00
Ibrahim Wassouf bd772e1bf4
Merge branch 'develop' into bug/4590_allow_notes_identical_to_keywords 2023-07-05 11:00:00 -04:00
Nikolay Rozhkov 34b2b5ba35 Support docs:dev in docker 2023-07-05 17:25:07 +03:00
Nikolay Rozhkov c742ac71a4
Merge pull request #4598 from mermaid-js/sidv/fixDocsDev
Fix docs:dev
2023-07-05 14:05:27 +00:00
Sidharth Vinod 62b988a09f
Merge pull request #4595 from nirname/fix/sankey-diagram-examples
Sankey: Remove duplicated examples
2023-07-05 06:53:43 +00:00
Sidharth Vinod 382026ed33
Fix docs:dev 2023-07-05 12:20:56 +05:30
Ibrahim Wassouf 34e89098f5 Refactor code smells in unit tests 2023-07-04 21:34:14 -03:00
Ibrahim Wassouf e3c90ac084 Apply formatting to file 2023-07-04 21:16:14 -03:00
Ibrahim Wassouf 099f85f014 Add unit tests with keywords in notes 2023-07-04 21:07:46 -03:00
Ibrahim Wassouf 49747b314d Modify wildcard state of tokens in lexer 2023-07-04 20:44:22 -03:00
Nikolay Rozhkov 9f5f0a6e66 Reduce sankey width 2023-07-05 01:49:58 +03:00
nirname 6f03e22cc4 Update docs 2023-07-04 22:18:57 +00:00
Nikolay Rozhkov 8449a44607 Sankey: Remove duplicated examples 2023-07-05 01:15:22 +03:00
Lishid 12fe6ff26e
Fix lint. 2023-07-03 18:56:00 -07:00
Ibrahim Wassouf 451b6b687e
Merge branch 'develop' into enhancement/4158_Add_primary_key_beginning_with_asterisk 2023-07-03 19:54:26 -04:00
Nikolay Rozhkov f431bae0ba
Merge pull request #4587 from nirname/refactoring/remove-double-parsing
Remove double parsing
2023-07-03 22:02:20 +00:00
Ibrahim Wassouf 5a94256e4f Allow entity diagram attribute names to start with asterisk 2023-07-03 15:11:02 -03:00
Nikolay Rozhkov d5021cab1d Remove double parsing 2023-07-03 18:57:26 +03:00
Sidharth Vinod 288f51216d
Add codecov token 2023-07-03 21:01:04 +05:30
Sidharth Vinod 1b190b2892
Merge pull request #4551 from Yokozuna59/refactor-accessibility
refactor accessibility
2023-07-03 15:07:21 +00:00
Sidharth Vinod 8e15e534ea
Add codecov token 2023-07-03 19:19:11 +05:30
Sidharth Vinod 6d7cd2b41f
Merge pull request #4580 from aloisklink/refactor/replace-enums
Remove all TypeScript enums and forbid them in ESLint
2023-07-03 07:26:39 +00:00
Sidharth Vinod 15b2105ce6
Merge pull request #4581 from mermaid-js/renovate/patch-all-patch
Update all patch dependencies (patch)
2023-07-03 07:10:51 +00:00
renovate[bot] d6731a07db
Update all patch dependencies 2023-07-03 05:18:01 +00:00
Alois Klink 79688a1dc1 build: forbid using TypeScript enums using eslint
[TypeScript enums][1] are an unusual TypeScript feature, because it's
one of the only features that is "not a type-level extension of
JavaScript".

This means TypeScript generates custom code for enums, which can cause a
bunch of issues, especially as this custom code can be built differently
depending on which bundler you use, and because of this, many people
discourage the use of enums:

- [The Dangers of TypeScript Enums][2]
- [Tidy TypeScript: Prefer union types over enums][3]
- [TypeScript: Handbook - Enums # Objects vs Enums][4]

I've added an ESLint rule that forbids TypeScript enums, as in most
cases, it's better to use string literals instead, e.g. like
`type a = "a" | "b" | "c";`.

[1]: https://www.typescriptlang.org/docs/handbook/enums.html#string-enums
[2]: https://dev.to/azure/the-dangers-of-typescript-enums-55pd
[3]: https://fettblog.eu/tidy-typescript-avoid-enums/
[4]: https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums
2023-07-03 00:04:16 +01:00
Alois Klink fbf79ffcc0 refactor: replace TypeScript enum with JS obj
[`const` assertions where added in TypeScript 3.4][1] and can be used
to create enum-like objects in plain JavaScript, that act like
TypeScript enums, but has none of the downsides of TypeScript enums.

[1]: https://devblogs.microsoft.com/typescript/announcing-typescript-3-4/#const-assertions
2023-07-02 23:56:42 +01:00
Alois Klink b989ff5362 fix: change sankey config types to be unions
Replace the TypeScript `enum {a = "a", b = "b"}` types with
TypeScript's literal types (e.g. `"a" | "b"`).

This is because TypeScript enums are
[_not_ a type-level addition to JavaScript][1], and even the official
TypeScript docs say to be careful when using.

[1]: https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums
2023-07-02 23:44:19 +01:00
Dmitry Kisler 592e9c959b
fix(diagrams/c4/parser): fixes support of the macro ContainerQueue_Ext for C4 diagrams. 2023-07-02 17:10:06 +02:00
Yokozuna59 406df57f81
Merge branch 'develop' into refactor-accessibility 2023-07-02 10:24:21 +02:00
Sidharth Vinod 9c011abbd4
Merge pull request #4466 from Valentine14th/feature/1838_actor_creation_destruction
Feature/1838 actor creation destruction
2023-07-02 08:10:24 +00:00
Sidharth Vinod dfc466514d
Merge branch 'develop' into feature/1838_actor_creation_destruction 2023-07-02 13:36:04 +05:30
Sidharth Vinod 29c866b09a
Don't fail CI on codecov error 2023-07-02 13:22:00 +05:30
Sidharth Vinod 2a1759aab4
Merge branch 'develop' into refactor-accessibility 2023-07-02 13:04:09 +05:30
Sidharth Vinod 28ce5e780f
Merge pull request #4566 from mermaid-js/renovate/patch-all-patch
Update all patch dependencies (patch)
2023-07-02 05:12:41 +00:00