// Copyright 2020 The Dart Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/// The JavaScript bootstrap script to support in-browser hot restart.
///
/// The [requireUrl] loads our cached RequireJS script file. The [mapperUrl]
/// loads the special Dart stack trace mapper.
///
/// This file is served when the browser requests `$entrypoint.js` in debug
/// mode, and is responsible for bootstrapping the RequireJS modules and
/// attaching the hot reload hooks.
String generateAmdBootstrapScript({
  required String requireUrl,
  required String mapperUrl,
  required String entrypoint,
}) {
  return '''
"use strict";

// Attach source mapping.
var mapperEl = document.createElement("script");
mapperEl.defer = true;
mapperEl.async = false;
mapperEl.src = "$mapperUrl";
document.head.appendChild(mapperEl);

// Attach require JS.
var requireEl = document.createElement("script");
requireEl.defer = true;
requireEl.async = false;
requireEl.src = "$requireUrl";

// This attribute tells require JS what to load as main (defined below).
requireEl.setAttribute("data-main", "$entrypoint.bootstrap");
document.head.appendChild(requireEl);
''';
}

/// Generate a synthetic main module which captures the application's main
/// method.
///
/// RE: Object.keys usage in app.main:
/// This attaches the main entrypoint and hot reload functionality to the
/// window. The app module will have a single property which contains the
/// actual application code. The property name is based off of the entrypoint
/// that is generated, for example the file `foo/bar/baz.dart` will generate
/// a property named approximately `foo__bar__baz`. Rather than attempt to
/// guess, we assume the first property of this object is the module.
String generateAmdMainModule({required String entrypoint}) {
  return '''/* ENTRYPOINT_EXTENTION_MARKER */
// Create the main module loaded below.
require(["$entrypoint.lib.js", "dart_sdk"], function(app, dart_sdk) {
  dart_sdk._debugger.registerDevtoolsFormatter();

  // See the generateMainModule doc comment.
  app[Object.keys(app)[0]].main();
});
''';
}
