Inital commit

This commit is contained in:
2023-03-09 00:38:30 +01:00
commit 56fa5970af
3273 changed files with 537628 additions and 0 deletions

149
src/core/jsondoc.js Normal file
View File

@@ -0,0 +1,149 @@
import fs from 'fs'
import path from 'path'
import YAML from 'yaml'
import utils from './utils.js'
const load = (yamlFile) => {
const docu = {
settings: {
rootPath: '',
templates: 'templates',
doc: 'doc',
html: 'html',
style: '',
server: {
port: 3000,
bind: '127.0.0.1',
},
},
root: {
name: '',
title: '',
toc: false,
book:false,
url: '/',
templates: {
node: '@node',
items: '@item',
},
parent: null,
nodes: [],
items: [],
},
}
if(! fs.existsSync(yamlFile)) return docu
const yamlDocu = YAML.parse(fs.readFileSync(yamlFile, 'utf8'))
docu.settings.rootPath = path.resolve(path.dirname(yamlFile))
if(yamlDocu) {
if(yamlDocu.templates) docu.settings.templates = yamlDocu.templates
if(yamlDocu.doc) docu.settings.doc = yamlDocu.doc
if(yamlDocu.html) docu.settings.html = yamlDocu.html
if(yamlDocu.style) {
if(fs.existsSync(path.join(docu.settings.rootPath, docu.settings.html, yamlDocu.style))){
docu.settings.style = yamlDocu.style
}
}
if(yamlDocu?.server?.port) docu.settings.server.port = yamlDocu.server.port
if(yamlDocu?.server?.bind) docu.settings.server.bind = yamlDocu.server.bind
}
const loadNode = (nodePath, parentNode) => {
if(! fs.existsSync(path.join(nodePath, '_index.yaml'))) return null
const nodePathParts = nodePath.split(path.sep)
const nodeName = (parentNode)?nodePathParts[nodePathParts.length - 1]:'root'
const node = {
index: 100,
name: nodeName,
title: nodeName,
toc: true,
book: true,
url: (!parentNode)?'/':nodePath.substring(path.join(docu.settings.rootPath, docu.settings.doc).length).replaceAll('\\', '/'),
templates: {
node: '@node',
items: '@item',
},
parent: parentNode,
nodes: [],
items: [],
}
node.getNode = (name) => {
return getNode(node, name)
}
node.getItem = (name) => {
return getItem(node, name)
}
const yamlNode = YAML.parse(fs.readFileSync(path.join(nodePath, '_index.yaml'), 'utf8'))
if(yamlNode) {
if(yamlNode.index) node.index = yamlNode.index
if(yamlNode.title) node.title = yamlNode.title
if(yamlNode.toc == false) node.toc = yamlNode.toc
if(yamlNode.book == false) node.book = yamlNode.book
if(yamlNode?.templates?.node) node.templates.node = yamlNode.templates.node
if(yamlNode?.templates?.items) node.templates.items = yamlNode.templates.items
if(yamlNode.headfiles) node.headfiles = yamlNode.headfiles
if(yamlNode.files) node.files = yamlNode.files
if(yamlNode.footfiles) node.footfiles = yamlNode.footfiles
}
utils.getDirs(nodePath).forEach((directory) => {
loadNode(path.join(nodePath, directory), node)
})
utils.getFiles(nodePath, 'yaml').forEach((file) => {
if(file !== '_index.yaml') loadItem(path.join(nodePath, file), node)
})
node.nodes = node.nodes.sort((a, b) => {
return a.index - b.index
})
if(parentNode) parentNode.nodes.push(node)
else docu.root = node
return node
}
const loadItem = (itemPath, parentNode) => {
const itemPathParts = itemPath.split(path.sep)
const itemFileName = itemPathParts[itemPathParts.length - 1]
const itemName = itemFileName.substring(0, itemFileName.length - 5)
const item = {
name: itemName,
title: itemName,
toc: false,
book: true,
url: parentNode.url + '?itm=' + itemName,
data: {}
}
const yamlItem = YAML.parse(fs.readFileSync(itemPath, 'utf8'))
if(yamlItem) item.data = yamlItem
if(item.data.name) item.title = item.data.name
else item.data.name = item.name
if(!item.data.title) item.data.title = item.title
if(item.data.toc) item.toc = item.data.toc
if(item.data.book) item.book = item.data.book
parentNode.items.push(item)
return item
}
loadNode(path.join(docu.settings.rootPath, docu.settings.doc))
return docu
}
const getNode = (node, nodeName) => {
return node.nodes.find(itm => itm.name === nodeName)
}
const getItem = (node, itemName) => {
return node.items.find(itm => itm.name === itemName)
}
export default {
load,
// getItem,
}