UNPKG

greybel-js

Version:

Transpiler/Interpreter for GreyScript. (GreyHack)

47 lines (46 loc) 1.97 kB
import { DefaultResourceHandler as DefaultInterpreterResourceHandler } from 'greybel-interpreter'; import { ResourceProvider as TranspilerResourceProviderBase } from 'greybel-transpiler'; import path from 'path'; import { DocumentURIBuilder } from './document-uri-builder.js'; import { FileSystemManagerWithCache } from './fs.js'; const createDocumentUriBuilder = (source, fileSystemManager) => { return new DocumentURIBuilder(path.resolve(source, '..'), fileSystemManager); }; export class TranspilerResourceProvider extends TranspilerResourceProviderBase { getHandler() { const handler = super.getHandler(); const fileSystemManager = new FileSystemManagerWithCache(); return { ...handler, getTargetRelativeTo: async (source, target) => { const documentUriBuilder = createDocumentUriBuilder(source, fileSystemManager); const result = await documentUriBuilder.getPathUseReturnOriginal(target); return result; }, has: async (target) => { return await fileSystemManager.checkFileExists(target); }, get: async (target) => { return await fileSystemManager.tryToDecode(target); } }; } } export class InterpreterResourceProvider extends DefaultInterpreterResourceHandler { fileSystemManager; constructor() { super(); this.fileSystemManager = new FileSystemManagerWithCache(); } async getTargetRelativeTo(source, target) { const documentUriBuilder = createDocumentUriBuilder(source, this.fileSystemManager); const result = await documentUriBuilder.getPathUseReturnOriginal(target); return result.toString(); } async has(target) { return await this.fileSystemManager.checkFileExists(target); } async get(target) { return await this.fileSystemManager.tryToDecode(target); } }