<div dir="ltr">I suppose a system class effectively creates a store of the environment loader hooks that can be trusted.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On 14 July 2014 10:53, John Barton <span dir="ltr"><<a href="mailto:johnjbarton@google.com" target="_blank">johnjbarton@google.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Why not something more like:<div><br></div><div>class RemappingLoader extends Reflect.Loader {</div><div>

  constructor(hooks, baseURL, paths) {</div><div>    super(hooks);</div><div>  //...</div><div>  }</div>
<div>  fetch(load) {</div><div>  // ..</div><div>  }</div><div>}</div><div>Reflect.global.System = new RemappingLoader(Reflect.global.System, </div>   process.cwd() + '/', {'*': '*.js' });<br><div>


<br></div><div>The main differences here are:</div><div>  1) This already works,</div><div>  2) Use std Loader not System.constructor,</div><div>  3) Don't attach baseURL to loaderConfig, since the loaderConfig is documented in the std.  </div>


<div><br></div><div>(System is already an instance of Reflect.Loader so I'm unclear on why we need the change you suggest).</div><div><br></div><div>The biggest hole I see in my example is the use of Reflect.global.System as the value for the loader hooks. What I want to say here is "This platform's built in loader hooks", not "The loader hooks some random other package wrote onto System". </div>


<div><br></div><div>jjb</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div class="h5">On Mon, Jul 14, 2014 at 10:39 AM, Guy Bedford <span dir="ltr"><<a href="mailto:guybedford@gmail.com" target="_blank">guybedford@gmail.com</a>></span> wrote:<br>


</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr">Currently if I want to subclass the System loader I need to do something like - <div>

<br></div><div>var newLoader = new Loader(System);</div>
<div>newLoader.fetch = function() {</div><div>  // ...</div><div>}</div>

<div><br></div><div>Effectively we're monkey-patching, which isn't pretty.</div><div><br></div><div>It would be nice to be able to do:</div><div><br></div><div>class newLoader extends System.constructor {</div><div>




  constructor(loaderConfig) {</div><div>    this.baseURL = loaderConfig.baseURL;</div><div>    // ...</div><div>  }</div><div>  fetch: function() {</div><div>    super.fetch</div><div>  }</div><div>}</div><div><br></div>



<div>
In order to allow this, we would need to first define a SystemLoader class, and make System an instance of it.</div></div>
<br></div></div>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>