Use a proxy to support relative requires

This commit is contained in:
Jonathan Clem
2021-04-21 16:32:28 -04:00
parent ddba1b195d
commit f4e5d39c2a
2 changed files with 25 additions and 4 deletions

View File

@@ -1,6 +1,6 @@
import * as core from '@actions/core'
import { Context } from '@actions/github/lib/context'
import { GitHub } from '@actions/github/lib/utils'
import {Context} from '@actions/github/lib/context'
import {GitHub} from '@actions/github/lib/utils'
import * as glob from '@actions/glob'
import * as io from '@actions/io'

View File

@@ -2,9 +2,10 @@ import * as core from '@actions/core'
import {context, getOctokit} from '@actions/github'
import * as glob from '@actions/glob'
import * as io from '@actions/io'
import * as path from 'path'
import {callAsyncFunction} from './async-function'
declare const __non_webpack_require__: typeof require
declare const __non_webpack_require__: NodeRequire
process.on('unhandledRejection', handleError)
main().catch(handleError)
@@ -31,7 +32,14 @@ async function main(): Promise<void> {
// Using property/value shorthand on `require` (e.g. `{require}`) causes compilation errors.
const result = await callAsyncFunction(
{require: __non_webpack_require__, github, context, core, glob, io},
{
require: wrapRequire,
github,
context,
core,
glob,
io
},
script
)
@@ -54,6 +62,19 @@ async function main(): Promise<void> {
core.setOutput('result', output)
}
const wrapRequire = new Proxy(__non_webpack_require__, {
apply: (target, thisArg, [moduleID]) => {
if (moduleID.startsWith('.')) {
moduleID = path.join(process.cwd(), moduleID)
}
return target.apply(thisArg, [moduleID])
},
get: (target, prop, receiver) => {
Reflect.get(target, prop, receiver)
}
})
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function handleError(err: any): void {
console.error(err)