sourceafDuvet::DuvetConfigIds.fan

using afIocConfig

** [IoC Config]`http://www.fantomfactory.org/pods/afIocConfig` values for 'Duvet'.
const class DuvetConfigIds {
    
    ** The base URL from where [RequireJS]`http://requirejs.org/` / AMD modules are loaded. 
    ** It should be mapped by BedSheet's 'FileHandler' service as this is where you save your Javascript modules.
    **   
    ** Override this URL should it conflict with an existing BedSheet Route.
    ** 
    ** Defaults to '`/modules/`'.
    static const Str requireBaseUrl := "afDuvet.requireBaseUrl"
    
    ** The URL that the [RequireJS]`http://requirejs.org/` library will be served under. 
    ** Override it should it conflict with an existing BedSheet Route.
    ** 
    ** Defaults to '`/scripts/require-2.1.14.js`'.
    static const Str requireJsUrl   := "afDuvet.requireJsUrl"
    
    ** The file that will be served under the [RequireJS]`http://requirejs.org/` URL. 
    ** Override it should you wish to serve a custom / updated version of [RequireJS]`http://requirejs.org/`.
    ** 
    ** Defaults to '`fan://afDuvet/res/require-2.1.14.js`.get'.
    static const Str requireJsFile  := "afDuvet.requireJsFile"
    
    ** How long RequireJs waits before giving up on loading a script. 
    ** Setting it to '0' or 'null' disables the timeout.
    ** Equates to the [waitSeconds]`http://requirejs.org/docs/api.html#config-waitSeconds` config option.
    **
    ** Defaults to '15sec'.
    static const Str requireTimeout := "afDuvet.requireTimeout"

    internal static Void validateConfig(IocConfigSource iocConfig) {
        requireBaseUrl := (Uri) iocConfig.get(DuvetConfigIds.requireBaseUrl, Uri#)
        if (!requireBaseUrl.isPathOnly)
            throw ParseErr(ErrMsgs.urlMustBePathOnly("Module Base", requireBaseUrl, `/modules/`))
        if (!requireBaseUrl.isPathAbs)
            throw ParseErr(ErrMsgs.urlMustStartWithSlash("Module Base", requireBaseUrl, `/modules/`))
        if (!requireBaseUrl.isDir)
            throw ParseErr(ErrMsgs.urlMustEndWithSlash("Module Base", requireBaseUrl, `/modules/`))
        
        requireJsUrl := (Uri) iocConfig.get(DuvetConfigIds.requireJsUrl, Uri#)
        if (!requireJsUrl.isPathOnly)
            throw ParseErr(ErrMsgs.urlMustBePathOnly("RequireJS", requireJsUrl, `/scripts/require.js`))
        if (!requireJsUrl.isPathAbs)
            throw ParseErr(ErrMsgs.urlMustStartWithSlash("RequireJS", requireJsUrl, `/scripts/require.js`))
        if (requireJsUrl.isDir)
            throw ParseErr(ErrMsgs.urlMustNotEndWithSlash("RequireJS", requireJsUrl, `/scripts/require.js`))
        
        requireJsFile := (File) iocConfig.get(DuvetConfigIds.requireJsFile, File#)
        if (!requireJsFile.exists)
            throw ParseErr(ErrMsgs.requireJsLibNoExist(requireJsFile))
        
        requireTimeout := (Duration?) iocConfig.get(DuvetConfigIds.requireTimeout, Duration?#)
        if (requireTimeout != null && requireTimeout < 0ms)
            throw ParseErr(ErrMsgs.requireTimeoutMustBePositive(requireTimeout))        
    }
}