From 5df3ebae22f0030e301746c51b3f3d12418e5198 Mon Sep 17 00:00:00 2001 From: Osheen Sachdev <45964755+oshhh@users.noreply.github.com> Date: Wed, 21 Apr 2021 22:47:31 +0530 Subject: [PATCH] Documentation generation (#1610) Co-authored-by: Isha Gupta <40794215+IshaGupta18@users.noreply.github.com> Co-authored-by: IshaGupta18 Co-authored-by: Liyas Thomas --- assets/md/docs.md | 220 ++---------------------------------- assets/md/folderBody.md | 113 ++++++++++++++++++ assets/md/folderContents.md | 4 + pages/doc.vue | 70 +++++++++--- 4 files changed, 176 insertions(+), 231 deletions(-) create mode 100644 assets/md/folderBody.md create mode 100644 assets/md/folderContents.md diff --git a/assets/md/docs.md b/assets/md/docs.md index bf60bf649..fdce63fcc 100644 --- a/assets/md/docs.md +++ b/assets/md/docs.md @@ -1,218 +1,12 @@ +**Table of Contents** + +{{#collections}} +{{>folderContents}} +{{/collections}} + {{#collections}} -# {{name}} - -## {{#folders}} - -## Folder: {{name}} - -{{#requests}} - -### {{name}} - -**Method**: {{method}} - -**Request URL**: `{{{url}}}{{{path}}}` - -{{#isHeaders}} -**Headers**: - - - - - - -{{#headers}} - - - - -{{/headers}} -
KeyValue
{{{key}}}`{{{value}}}`
-{{/isHeaders}} - -{{#isParams}} -**Parameters**: - - - - - - - -{{#params}} - - - - - -{{/params}} -
typeKeyValue
{{type}}{{{key}}}{{{value}}}
-{{/isParams}} - -{{#isAuth}} -**Authentication Type**: {{{auth}}} -{{/isAuth}} - -{{#bearerToken}} -**Bearer Token**: `{{{.}}}` -{{/bearerToken}} - -{{#isAuthBasic}} -Username: `{{{httpUser}}}` -Password: `{{{httpPassword}}}` -{{/isAuthBasic}} - -{{#isRawParams}} -**RawParams**: - -```json -{{{rawParams}}} -``` - -{{/isRawParams}} - -{{#contentType}} -**ContentType**: `{{{contentType}}}` -{{/contentType}} - -{{#preRequestScript}} -**Pre Request Script**: - -```js -{ - { - { - preRequestScript - } - } -} -``` - -{{/preRequestScript}} - -{{#testScript}} -**Test Script**: - -```js -{ - { - { - testScript - } - } -} -``` - -{{/testScript}} - -{{/requests}} - ---- - -{{/folders}} - -{{#requests}} - -## {{name}} - -**Method**: {{method}} - -**Request URL**: `{{{url}}}{{{path}}}` - -{{#isHeaders}} -**Headers**: - - - - - - -{{#headers}} - - - - -{{/headers}} -
KeyValue
{{{key}}}`{{{value}}}`
-{{/isHeaders}} - -{{#isParams}} -**Parameters**: - - - - - - - -{{#params}} - - - - - -{{/params}} -
typeKeyValue
{{type}}{{{key}}}{{{value}}}
-{{/isParams}} - -{{#isAuth}} -**Authentication Type**: {{{auth}}} -{{/isAuth}} - -{{#bearerToken}} -**Bearer Token**: `{{{.}}}` -{{/bearerToken}} - -{{#isAuthBasic}} -Username: `{{{httpUser}}}` -Password: `{{{httpPassword}}}` -{{/isAuthBasic}} - -{{#isRawParams}} -**Raw Parameters**: - -```json -{{{rawParams}}} -``` - -{{/isRawParams}} - -{{#contentType}} -**Content Type**: `{{{contentType}}}` -{{/contentType}} - -{{#preRequestScript}} -**Pre Request Script**: - -```js -{ - { - { - preRequestScript - } - } -} -``` - -{{/preRequestScript}} - -{{#testScript}} -**Test Script**: - -```js -{ - { - { - testScript - } - } -} -``` - -{{/testScript}} - -{{/requests}} +{{>folderBody}} {{/collections}} diff --git a/assets/md/folderBody.md b/assets/md/folderBody.md new file mode 100644 index 000000000..9646a84ab --- /dev/null +++ b/assets/md/folderBody.md @@ -0,0 +1,113 @@ +{{nesting_level}} {{name}} + +{{#requests}} + +{{nesting_level}} Request: {{name}} + +**Method**: {{method}} + +**Request URL**: + +``` +{{{url}}}{{{path}}} +``` + +{{#isHeaders}} +**Headers**: + + + + + + +{{#headers}} + + + + +{{/headers}} +
KeyValue
{{{key}}}`{{{value}}}`
+{{/isHeaders}} + +{{#isParams}} +**Parameters**: + + + + + + + +{{#params}} + + + + + +{{/params}} +
typeKeyValue
{{type}}{{{key}}}{{{value}}}
+{{/isParams}} + +{{#isAuth}} +**Authentication Type**: {{{auth}}} +{{/isAuth}} + +{{#bearerToken}} +**Bearer Token**: `{{{.}}}` +{{/bearerToken}} + +{{#isAuthBasic}} +Username: `{{{httpUser}}}` +Password: `{{{httpPassword}}}` +{{/isAuthBasic}} + +{{#isRawParams}} +**Raw Parameters**: + +```json +{{{rawParams}}} +``` + +{{/isRawParams}} + +{{#contentType}} +**Content Type**: `{{{contentType}}}` +{{/contentType}} + +{{#isPreRequestScript}} +**Pre Request Script**: + +```js +{ + { + { + preRequestScript + } + } +} +``` + +{{/isPreRequestScript}} + +{{#isTestScript}} +**Test Script**: + +```js +{ + { + { + testScript + } + } +} +``` + +{{/isTestScript}} + +{{/requests}} + +{{#folders}} + +{{> folderBody }} + +{{/folders}} diff --git a/assets/md/folderContents.md b/assets/md/folderContents.md new file mode 100644 index 000000000..52b3805d8 --- /dev/null +++ b/assets/md/folderContents.md @@ -0,0 +1,4 @@ +{{{id}}} {{name}}
+{{#folders}} +{{> folderContents}} +{{/folders}} diff --git a/pages/doc.vue b/pages/doc.vue index 2cba53a8c..8cd43e684 100644 --- a/pages/doc.vue +++ b/pages/doc.vue @@ -100,6 +100,8 @@ import { fb } from "~/helpers/fb" import Mustache from "mustache" import DocsTemplate from "~/assets/md/docs.md" +import folderContents from "~/assets/md/folderContents.md" +import folderBody from "~/assets/md/folderBody.md" export default { data() { @@ -163,32 +165,64 @@ export default { this.$refs.collectionUpload.value = "" }, + assignIDs(items, pref, nesting_level) { + for (var i = 0; i < items.length; ++i) { + items[i].id = ` ${pref}${i + 1}.` + items[i].ref = `${items[i].name.split(" ").join("-")}` + items[i].nesting_level = nesting_level + items[i].folders = this.assignIDs(items[i].folders, items[i].id, nesting_level + "#") + for (var j = 0; j < items[i].requests.length; ++j) { + items[i].requests[j].id = ` ${items[i].id}${i + 1}` + items[i].requests[j].ref = `${items[i].requests[j].name.split(" ").join("-")}` + items[i].requests[j].nesting_level = nesting_level + "#" + } + } + return items + }, + getDoc() { try { this.items = JSON.parse(this.collectionJSON) + this.assignIDs(this.items, "", "#") this.$toast.clear() this.$toast.info(this.$t("docs_generated"), { icon: "book", }) - const docsMarkdown = Mustache.render(DocsTemplate, { - collections: this.items, - isHeaders() { - return this.headers.length + const docsMarkdown = Mustache.render( + DocsTemplate, + { + collections: this.items, + isHeaders() { + return this.headers.length + }, + isParams() { + return this.params.length + }, + isAuth() { + return this.auth !== "None" + }, + isAuthBasic() { + return this.httpUser && this.httpPassword + }, + isRawParams() { + return this.rawParams && this.rawParams !== "{}" + }, + isPreRequestScript() { + return ( + this.preRequestScript && + this.preRequestScript != `// pw.env.set('variable', 'value');` + ) + }, + isTestScript() { + return this.testScript && this.testScript != `// pw.expect('variable').toBe('value');` + }, }, - isParams() { - return this.params.length - }, - isAuth() { - return this.auth !== "None" - }, - isAuthBasic() { - return this.httpUser && this.httpPassword - }, - isRawParams() { - return this.rawParams && this.rawParams !== "{}" - }, - }) - this.docsMarkdown = docsMarkdown.replace(/^\s*[\r\n]/gm, "\n") + { + folderContents: folderContents, + folderBody: folderBody, + } + ) + this.docsMarkdown = docsMarkdown.replace(/^\s*[\r\n]/gm, "\n\n") } catch (e) { this.$toast.error(e, { icon: "code",