#656·goja

require.SourceLoader taking script path as well?

Author: SolarLuneCreated Jan 29, 2025Updated Mar 7, 2025
Labelsquestion

Hello~

When I create a script registry, I'm using a loading function through require.WithLoader() to manually load the script and return the []byte, which works fine:

g.ScriptRequireRegistry = require.NewRegistry(require.WithLoader(func(path string) ([]byte, error) {
	correctPath := filepath.Join("assets/scripts/", path)
	res, err := fs.ReadFile(assetFileSystem, correctPath)
	if err != nil {
		log.Println("load required module:", correctPath, "failed:", err)
		return nil, err
	}
	log.Println("load required module:", correctPath, "succeeded")
	return res, nil
}))

However, if the module is requested through a relative path from the script, which is in a subdirectory (e.g. something like const Actions = require("../libraries/Actions.mjs");), then I need to know where the requesting script is loading it from.

Would it be possible to make require.SourceLoader take the requesting script's path as well as the module path?