37 lines
1.8 KiB
JavaScript
37 lines
1.8 KiB
JavaScript
const fs = require('node:fs')
|
|
const path = require('node:path')
|
|
const Module = require('node:module')
|
|
const ts = require('typescript')
|
|
|
|
const root = path.resolve(__dirname, '../..')
|
|
const compile = source => ts.transpileModule(source, {
|
|
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 },
|
|
}).outputText
|
|
|
|
function runtime() {
|
|
const clock = { now: 1793232000000, requests: 0, offline: false }
|
|
const realNow = Date.now, realFetch = global.fetch
|
|
Date.now = () => clock.now
|
|
global.fetch = async () => {
|
|
clock.requests++
|
|
if (clock.offline) throw new Error('Offline')
|
|
return { ok: true, json: async () => ({ data: { serverTime: clock.now, ttlSeconds: 1800 } }) }
|
|
}
|
|
const filename = path.join(root, 'src/utils/file-access.ts')
|
|
const core = new Module(path.join(root, 'src/utils/file-access-core.ts'), module)
|
|
core.filename = core.id; core.paths = Module._nodeModulePaths(path.dirname(core.filename))
|
|
core._compile(compile(fs.readFileSync(core.filename, 'utf8')), core.filename)
|
|
const loaded = new Module(filename, module)
|
|
loaded.filename = filename; loaded.paths = core.paths
|
|
loaded.require = name => name === './file-access-core' ? core.exports : core.require(name)
|
|
const env = {
|
|
VITE_FILE_ACCESS_APP_ID: 'admin', VITE_FILE_ACCESS_KEY_ID: 'v1',
|
|
VITE_FILE_ACCESS_KEY: JSON.parse(fs.readFileSync(path.join(root, 'test-vectors/file-access.json'), 'utf8'))[0].key,
|
|
VITE_IMAGE_BASE_PATH: 'https://files.example/api', VITE_FILE_ACCESS_ALLOWED_ORIGINS: '',
|
|
}
|
|
loaded._compile(compile(fs.readFileSync(filename, 'utf8').replace(/import\.meta\.env/g, '(' + JSON.stringify(env) + ')')), filename)
|
|
return { api: loaded.exports, clock, close() { Date.now = realNow; global.fetch = realFetch } }
|
|
}
|
|
|
|
module.exports = { runtime, compile, root }
|