Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom template override #123

Closed
BrianWendt opened this issue Apr 11, 2019 · 6 comments
Closed

Custom template override #123

BrianWendt opened this issue Apr 11, 2019 · 6 comments

Comments

@BrianWendt
Copy link

BrianWendt commented Apr 11, 2019

I think it would be a good idea to be able to override templates.

I propose adding an option
-t --template path to directory containing Embedded JavaScript (ejs) templates
jsonschema2md -o docs/reference -t docs/templates

The module would look first for the template ejs file in the given directory and fallback to the default template found in @adobe\jsonschema2md\templates\md.

This would provide the ability to override specific template includes giving users more control over their documentation.

I believe this would require some changes to the following

  • lib/markdownWriter.js
  • lib/readmeWriter.js
  • lib/schema.js (edit: I missed this in my initial evaluation)
  • templates/md/array-types.ejs
  • templates/md/property.ejs
  • templates/md/pattern-property.ejs
  • templates/md/object-type.ejs
  • templates/md/nested-property.ejs
  • templates/md/join-type.ejs
  • templates/md/innerSchema.ejs

The two lib files would be strait forward modifications. For the ejs files Wrapping the include() function to handle the search might be a good approach, imo.

@trieloff
Copy link
Collaborator

I feel like the templates are not stable enough to warrant good extension points. Are there specific overrides you have in mind?

@BrianWendt
Copy link
Author

The big thing I wanted was the ability to do more with the README.md

I have my branch nearly finished for the enhancements I mentioned. Once I got in there and started hacking away I did end up also changing lib/schema.js.

I'm not a GitHub guru by any means so maybe you can help explain something; When I do npm install -g @adobe/jsonschema2md it pulls version 2.0.0 which is because npm has it as the newest version. However, master on GitHub is 1.1.1. Is 2.0.0 supposed to be the new version people are using?

@BrianWendt
Copy link
Author

What about the stability is concerning?

@trieloff
Copy link
Collaborator

Thanks for the use case, that makes a lot of sense.

Maybe we should start with a method to set prefix and suffix for the generated README.md then. You'd simply pass in two files, and one gets prepended and the other appended to the generated README.md. We could also think of a solution for README.md in particular that mirrors the approach taken by https://github.com/jsdoc2md/jsdoc-to-markdown/wiki/Create-a-README-template

What about the stability is concerning?

I would not consider any of the template files parts of a defined and reliable API, but rather an implementation detail. If we decide to change anything, i.e. #126 or #125 your customizations won't work anymore.

Is 2.0.0 supposed to be the new version people are using?

We are using semantic-release which is creating new version numbers automatically (but it's not yet updating the package.json), so the code you are seeing in master is 2.0.0, except that the version number in the package.json is not accurate.

@BrianWendt
Copy link
Author

Thanks for the clarifications. I'll set up a script to generate the README.md for now.

@trieloff trieloff mentioned this issue Dec 11, 2019
7 tasks
trieloff pushed a commit that referenced this issue Dec 16, 2019
# [4.0.0](v3.3.1...v4.0.0) (2019-12-16)

### Bug Fixes

* **i18n:** use correct file name format ([43a74f4](43a74f4))
* **markdown:** constraint values can be zero now ([2e057fd](2e057fd))
* **markdown:** handle null as a constant value ([e652e11](e652e11))
* **proxy:** remove logging statements ([616a1d9](616a1d9))
* **schemas:** remove references going nowhere ([2186142](2186142))

### Build System

* **dependencies:** remove unused dependencies ([dbc9192](dbc9192))

### Code Refactoring

* **cli:** remove bluebird, lodash, simplify arg parsing ([b6b1822](b6b1822))

### Continuous Integration

* **test:** require node 10 ([ba4a947](ba4a947))

### Documentation

* **changelog:** mention changes for v4 ([4dfe90c](4dfe90c)), closes [#126](#126) [#174](#174) [#72](#72) [#73](#73) [#94](#94) [#52](#52) [#20](#20) [#125](#125) [#177](#177) [#34](#34) [#123](#123)

### Features

* **cli:** generate JSON schema output ([dd18f3b](dd18f3b)), closes [#176](#176)
* **formats:** add support for formats: json-pointer, relative-json-pointer, regex, and uri-template ([689c158](689c158))
* **i18n:** new internationalization system ([1a664de](1a664de))
* **i18n:** provide complete en_US translation ([5eb0c89](5eb0c89))
* **markdown:** add header surpression ([6225b9f](6225b9f))
* **markdown:** add support for `default` keyword ([72a0fde](72a0fde))
* **markdown:** add support for comments ([07bb52f](07bb52f))
* **markdown:** add YAML frontmatter support ([4df92e6](4df92e6))
* **markdown:** create and write markdown ([e521541](e521541))
* **markdown:** generate additional detail ([cc07df2](cc07df2))
* **markdown:** generate header again ([011427c](011427c))
* **markdown:** generate some property details ([fa34cf1](fa34cf1))
* **markdown:** generate type details ([c9f19e1](c9f19e1))
* **markdown:** highlight keyword usage for documentation ([d35e4ed](d35e4ed)), closes [#100](#100)
* **markdown:** list nested schemas in README ([608674b](608674b))
* **markdown:** list nested schemas in README ([87e8489](87e8489))
* **markdown:** show examples ([c8e8dfa](c8e8dfa))
* **markdown:** show extensibility and abstraction in header ([90a9a8e](90a9a8e))
* **markdown:** show id and status in header ([08e1923](08e1923))
* **markdown:** show id and status in header ([b6fcf53](b6fcf53))
* **markdown:** show join types ([12af018](12af018))
* **markdown:** show some info about properties, switch i18n library ([f8a32df](f8a32df))
* **markdown:** show type, link, additional and custom properties in header ([eff129a](eff129a))
* **markdown:** show value constraints ([515969c](515969c))
* **markdown:** support item arrays and additionalItems ([c9fbcdf](c9fbcdf)), closes [#31](#31)
* **markdown:** support patternProperties and additionalProperties ([1386ee3](1386ee3)), closes [#95](#95) [#180](#180)
* **proxy:** generate meta information ([ac65ac6](ac65ac6))
* **proxy:** generate slugs ([eacbf38](eacbf38))
* **proxy:** resolve references ([4cea068](4cea068))
* **readme:** generate readme again ([d6b9e5e](d6b9e5e))
* **readme:** mention the most common schema version ([fc583d7](fc583d7))
* **schema:** add full support for "A Vocabulary for the Contents of String-Encoded Data" ([96ca3a6](96ca3a6))
* **schema:** add support for keyword `$defs` ([70b63c8](70b63c8))
* **schema:** add support for keyword `deprecated` ([934b856](934b856))
* **schema:** add support for readOnly and writeOnly schemas and properties ([7452882](7452882))

### BREAKING CHANGES

* **changelog:**
* **i18n:** The file format for the i18n files has changed

You can now specify the language to use using `-l` and `jsonschema2md` will pick up the correct language configuration.
* **test:** Node 8 is no longer supported
* **dependencies:** Removes the JSON schema validation feature entirely
* **cli:** Repaces lodash with ferrum, removed bluebird, changes the meaning of `--schema-out` or `-x` to be no longer relative to output dir

The `--schema-out` or `-x` command line option is no longer relative to the output path (specified with `-o` or `--out`)
@trieloff
Copy link
Collaborator

🎉 This issue has been resolved in version 4.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants