// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.10

library dart2js.script;

import 'io/source_file.dart';

class Script {
  final SourceFile file;

  /// The readable URI from which this script was loaded.
  ///
  /// See [LibraryLoader] for terminology on URIs.
  final Uri readableUri;

  /// The resource URI from which this script was loaded.
  ///
  /// See [LibraryLoader] for terminology on URIs.
  final Uri resourceUri;

  /// This script was synthesized.
  final bool isSynthesized;

  Script(this.readableUri, this.resourceUri, this.file) : isSynthesized = false;

  Script.synthetic(Uri uri)
      : readableUri = uri,
        resourceUri = uri,
        file = StringSourceFile.fromUri(
            uri, "// Synthetic source file generated for '$uri'."),
        isSynthesized = true;

  String get text => (file == null) ? null : file.slowText();
  String get name => (file == null) ? null : file.filename;

  /// Creates a new [Script] with the same URIs, but new content ([file]).
  Script copyWithFile(SourceFile file) {
    return Script(readableUri, resourceUri, file);
  }
}
