const Unit = require('libflitter/Unit') const cors = require('cors') const Express = require('express') const path = require('path') class IonicUnit extends Unit { static get services() { return [...super.services, 'configs', 'express', 'canon', 'utility', 'scaffold'] } constructor(...args) { super(...args) /** * Fully qualified path to the root of the ionic app. * @type {string} */ this.directory = path.resolve(path.dirname(this.utility.root()), this.configs.get('ionic.root')) } async go(app) { app.express.use(cors()) app.express.use('/i', [ this.canon.get('middleware::auth:UserOnly'), (req, res, next) => { const allowed_extensions = [ '.html', '.js', '.css', '.svg', '.ttf', '.jpg', '.png', '.jpeg', '.webmanifest', '.json', '.eot', '.svg', '.cur', '.webp', '.gif', '.otf', '.woff', '.woff2', '.ani', '.map', '.ico', ] for ( const k1 in allowed_extensions ) { if ( req.path.endsWith(allowed_extensions[k1]) ) return next() } return res.sendFile(path.resolve(this.directory, 'index.html')) }, Express.static(this.directory), ]) // Create the full-text search indices const pages = this.scaffold.collection('api_Page') await pages.createIndex({ Name: 'text' }) const nodes = this.scaffold.collection('api_Node') await nodes.createIndex({ 'Value.Value': 'text' }) const databases = this.scaffold.collection('api_db_Database') await databases.createIndex({ Name: 'text' }) const codiums = this.scaffold.collection('api_Codium') await codiums.createIndex({ code: 'text' }) const files = this.scaffold.collection('upload__File') await files.createIndex({ original_name: 'text' }) } } module.exports = exports = IonicUnit