You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
2.9 KiB

import slugify from 'slugify'
import { marked } from 'marked'
import * as fs from 'fs'
import path from 'path'
const basePath = path.join(path.resolve(), '/../../')
/**
* etaHelpers
*
* collection for helpers to extend eta
*
*
*/
/**
* getting name of view as slug
*
* @param array $page
* @return string
*
*/
/**function canonical()
{
if (isset($_SERVER['HTTPS'])) {
$canoncial = 'https';
} else {
$canoncial = 'http';
}
$canoncial .= '://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
return $canoncial;
}*/
/**
* asset - checks manifest.json for given path and return
* file path with id for cache busting
*
*
* @param {String} publicPath
*
*/
function asset(publicPath)
{
// getting basePath
let result = publicPath
// path to mix-manifest
const file = basePath + 'mix-manifest.json'
if (fs.existsSync(file)) {
const manifest = fs.readFileSync(file)
const files = JSON.parse(manifest)
if (files[publicPath]) {
result = files[publicPath]
}
}
return result
}
/**
* templateClass - parse template name to css-classname,
* use prefix, default is "page"
*
*
* @param {Object} entity
* @param {String} [prefix='page']
* @return {String}
*
*/
function templateClass(entity, prefix = 'page') {
if (entity.data && entity.data.template) {
prefix += '-' + entity.data.template
}
return prefix
}
/**
* isHome - check if entity is home,
* checks for permalink
*
2 years ago
*
* @param {Object} entity
* @return {Boolean}
*
*/
function isHome(entity) {
let result = false
if (entity.data && entity.data.permalink && entity.data.permalink === "/") {
result = true
}
return result
}
/**
2 years ago
* injectStore - import store, check if store exists and
* create object from class
*
*
* @param {String} name
* @return {Object}
*
*/
async function injectStore(name) {
const importPath = './../stores/' + name + '.js'
const filePath = basePath + 'packages/server/stores/' + name + '.js'
// if class not exists, throw exception
if (!fs.existsSync(filePath)) {
throw new Error(name + ' not exists!')
}
const StoreClass = await import(importPath)
const store = new StoreClass.default()
return store
}
/**
* mediaUrl - create url for assets from directus,
* default options are with access_token for permissions
*
*
* @param {String} id
* @param {Object} options
* @return {String}
*
*/
function mediaUrl(id, options = {})
{
let query
// merge options, default is access_token
options = Object.assign({
'access_token': process.env.DIRECTUS_API_TOKEN
}, options)
// create query
query = '?' + new URLSearchParams(options).toString();
return process.env.DIRECTUS_API_URL + '/assets/' + id + query;
}
export { asset, templateClass, isHome, injectStore, mediaUrl }