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

DEX-229 SDK references #114

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions markdown-gen.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const fs = require('fs');
const path = require('path');

function getModuleName(filePath) {
const parsedPath = path.parse(filePath);
let moduleName = parsedPath.name;

if (moduleName.endsWith('.default')) {
moduleName = moduleName.slice(0, -8);
}

return moduleName;
}

const directoryPath = path.join(__dirname, 'docs/classes');

fs.readdir(directoryPath, (err, files) => {
if (err) {
console.error(`Error reading directory: ${err}`);
return;
}
files.forEach(file => {
if (path.extname(file) === '.md') {
const filePath = path.join(directoryPath, file);
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(`Error reading file: ${err}`);
return;
}
const lines = data.split('\n');
lines[0] = `# Class: ${getModuleName(path.parse(file).name)}`;
const updatedContent = lines.join('\n');
fs.writeFile(filePath, updatedContent, err => {
if (err) {
console.error(`Error writing file: ${err}`);
} else {
console.log(`Updated file: ${filePath}`);
}
});
});
}
});
});
9 changes: 6 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"eslint": "eslint '**/*.js' --max-warnings 0",
"prettier": "prettier --list-different '**/*.{js,ts}'",
"lint": "npm run prettier && npm run eslint",
"lint-fix": "prettier --write '**/*.{js,ts}' && eslint --fix '**/*.js'"
"lint-fix": "prettier --write '**/*.{js,ts}' && eslint --fix '**/*.js'",
"docs-gen": "typedoc && node markdown-gen.js && npx ts-node scripts/processMarkdown.ts"
},
"repository": {
"type": "git",
Expand Down Expand Up @@ -41,7 +42,9 @@
"jsonwebtoken": "^9.0.0",
"jwt-decode": "^2.2.0",
"promise.allsettled": "^1.0.5",
"qs": "^6.10.3"
"qs": "^6.10.3",
"typedoc": "^0.24.4",
"typedoc-plugin-markdown": "^3.15.1"
},
"devDependencies": {
"@babel/cli": "^7.0.0",
Expand Down Expand Up @@ -76,6 +79,6 @@
"null-loader": "^0.1.1",
"nyc": "^15.1.0",
"prettier": "^1.13.7",
"typescript": "^4.4.4"
"typescript": "^4.7.3"
}
}
139 changes: 139 additions & 0 deletions scripts/processMarkdown.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
import { readdirSync, readFileSync, statSync, writeFileSync } from "fs";
import path from "path";

function removeListCharacters(markdown: string): string {
// Match list items with bullets, numbered lists, or other list-type characters
// const listRegex = /^(\s*[\*\-\+\•\▸]\s*|\s*\d+\.\s*|\s*\w\.\s*)/;
const listRegex = /^(\s*[\*\-\+\•\▸]\s|^\s*\d+\.\s|^\s*\w\.\s)/;

// Split the Markdown file into lines
const lines = markdown.split('\n');

// Track whether a list is currently in progress
let inList = false;

// Iterate through each line and remove list characters if necessary
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
const match = line.match(listRegex);

if (match) {
// Check if the list is continuing or if it's a new list
if (!inList && !lines[i+1].match(listRegex)) {
// Remove list characters
lines[i] = line.replace(listRegex, '');
}
inList = true;
} else {
inList = false;
}
}

// Join the lines back into a single string
const result = lines.join('\n');

return result;
}

function processUrls(markdown: string, itemPath: string): string {
// remove extension .md from urls
const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
const editedMarkdown = markdown.replace(linkRegex, (match, text, url) => {
if(url.split('.').pop().startsWith('md'))
{
const hash = url.split('.').pop().replace('md', '')
let editedUrl = (url.split('.').slice(0, -1)).join('.')+hash;
if(editedUrl.startsWith('../') && editedUrl.split('/').length > 1)
{
editedUrl = `/sdks/skyflow-node/${editedUrl.split('/').slice(1).join('/')}`;
}
else
{
editedUrl = `/sdks/skyflow-node/${itemPath.split('/')[1]}/${editedUrl}`;
}
return `[${text}](${editedUrl})`;
}
return `[${text}](${url})`;
});
return editedMarkdown;
}

function createEnumerationTable(markdown) {
const enumMembersRegex = /### (.+)[\s\S]*?\*\*(.+)\*\* = `(.+)`/g;
const matches = [...markdown.matchAll(enumMembersRegex)];
const lines = markdown.split('\n');

if (matches.length === 0) {
return ''; // No enumeration members found
}

const index = lines.indexOf('## Enumeration Members')

let editedMarkdown = `${lines.slice(0, index+1). join('\n')}\n\n| Member | Value |\n| --- | --- |`;

for (const match of matches) {
const member = match[1];
const value = match[3];
editedMarkdown += `\n| ${member} | ${value} |`
}
editedMarkdown += '\n';
return editedMarkdown;
}


function processMarkdown(markdown: string, isEnum: boolean, itemPath: string): string {
const processLists = removeListCharacters(markdown);

const editUrls = processUrls(processLists, itemPath);

let processedMarkdown = editUrls;

if(isEnum)
{
const processEnums = createEnumerationTable(editUrls);
processedMarkdown = processEnums;
}

return processedMarkdown;
}

// Example usage
// const markdown = `# Class: Skyflow
// ...
// ### init
// * \`Static\` **init**(\`config\`): [\`default\`](Skyflow.default.md)

// * \`Static\` **init**(\`config\`): [\`IGetByIdInput\`](../interfaces/utils_common.IGetByIdInput.md)

// * \`Static\` **init**(\`config\`): [\`IGetByIdInput\`](../interfaces/utils_common.IGetByIdInput.txt)
// * \`Static\` **init**(\`config\`): [\`IGetByIdInput\`](../interfaces/utils_common.IGetByIdInput)
// ...
// `;

function readFolderStructure(folderPath: string, isEnum: boolean) {
const folderContents = readdirSync(folderPath);
folderContents.forEach((item) => {
const itemPath = path.join(folderPath, item);
const isDirectory = statSync(itemPath).isDirectory();

if (isDirectory) {
if(item == 'enums') {
readFolderStructure(itemPath, true);
}
else{
readFolderStructure(itemPath, false);
}
} else {
const markdown = readFileSync(itemPath, 'utf8');
const transformedMarkdown = processMarkdown(markdown, isEnum, itemPath);
const flaggedMarkdown = '{% env enable="nodeJsSdkRef" %}\n\n' + transformedMarkdown + '\n{% /env %}'
writeFileSync(itemPath, flaggedMarkdown, 'utf-8');
}
});
}

const folderPath = './docs/';
readFolderStructure(folderPath, false);
// const transformedMarkdown = processMarkdown(markdown, true);
// console.log(transformedMarkdown);

Loading
Loading