Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Side by Side Diff: lib/runtime/dart_library.js

Issue 2249233002: fix #626, add AMD module format and make it default (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: merged Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/js/legacy/dart_sdk.js ('k') | lib/runtime/run.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 /* This file defines the module loader for the dart runtime.
6 */
7
8 var dart_library =
9 typeof module != "undefined" && module.exports || {};
10
11 (function (dart_library) {
12 'use strict';
13
14 /** Note that we cannot use dart_utils.throwInternalError from here. */
15 function throwLibraryError(message) {
16 throw Error(message);
17 }
18
19 const dartLibraryName = Symbol('dartLibraryName');
20 dart_library.dartLibraryName = dartLibraryName;
21
22 const libraryImports = Symbol('libraryImports');
23 dart_library.libraryImports = libraryImports;
24
25 // Module support. This is a simplified module system for Dart.
26 // Longer term, we can easily migrate to an existing JS module system:
27 // ES6, AMD, RequireJS, ....
28
29 class LibraryLoader {
30
31 constructor(name, defaultValue, imports, loader) {
32 this._name = name;
33 this._library = defaultValue ? defaultValue : {};
34 this._imports = imports;
35 this._loader = loader;
36
37 // Cyclic import detection
38 this._state = LibraryLoader.NOT_LOADED;
39 }
40
41 loadImports() {
42 let results = [];
43 for (let name of this._imports) {
44 let lib = libraries.get(name);
45 if (!lib) {
46 throwLibraryError('Library not available: ' + name);
47 }
48 results.push(lib.load());
49 }
50 return results;
51 }
52
53 load() {
54 // Check for cycles
55 if (this._state == LibraryLoader.LOADING) {
56 throwLibraryError('Circular dependence on library: '
57 + this._name);
58 } else if (this._state >= LibraryLoader.READY) {
59 return this._library;
60 }
61 this._state = LibraryLoader.LOADING;
62
63 // Handle imports
64 let args = this.loadImports();
65
66 // Load the library
67 args.unshift(this._library);
68 this._loader.apply(null, args);
69 this._state = LibraryLoader.READY;
70 this._library[dartLibraryName] = this._name;
71 this._library[libraryImports] = this._imports;
72 return this._library;
73 }
74
75 stub() {
76 return this._library;
77 }
78 }
79 LibraryLoader.NOT_LOADED = 0;
80 LibraryLoader.LOADING = 1;
81 LibraryLoader.READY = 2;
82
83 // Map from name to LibraryLoader
84 let libraries = new Map();
85 dart_library.libraries = function() { return libraries.keys(); };
86 dart_library.debuggerLibraries = function() {
87 var debuggerLibraries = [];
88 libraries.forEach(function (value, key, map) {
89 debuggerLibraries.push(value.load());
90 });
91 debuggerLibraries.__proto__ = null;
92 return debuggerLibraries;
93 };
94
95 function library(name, defaultValue, imports, loader) {
96 let result = new LibraryLoader(name, defaultValue, imports, loader);
97 libraries.set(name, result);
98 return result;
99 }
100 dart_library.library = library;
101
102 function import_(libraryName) {
103 bootstrap();
104 let loader = libraries.get(libraryName);
105 // TODO(vsm): A user might call this directly from JS (as we do in tests).
106 // We may want a different error type.
107 if (!loader) throwLibraryError('Library not found: ' + libraryName);
108 return loader.load();
109 }
110 dart_library.import = import_;
111
112 function start(moduleName, libraryName) {
113 if (libraryName == null) libraryName = moduleName;
114 let library = import_(moduleName)[libraryName];
115 let dart_sdk = import_('dart_sdk');
116 dart_sdk._isolate_helper.startRootIsolate(library.main, []);
117 }
118 dart_library.start = start;
119
120 let _bootstrapped = false;
121 function bootstrap() {
122 if (_bootstrapped) return;
123 _bootstrapped = true;
124
125 // Force import of core.
126 var dart_sdk = import_('dart_sdk');
127
128 // TODO(vsm): DOM facades?
129 // See: https://github.com/dart-lang/dev_compiler/issues/173
130 if (typeof NodeList !== "undefined") {
131 NodeList.prototype.get = function(i) { return this[i]; };
132 NamedNodeMap.prototype.get = function(i) { return this[i]; };
133 DOMTokenList.prototype.get = function(i) { return this[i]; };
134 HTMLCollection.prototype.get = function(i) { return this[i]; };
135 // Expose constructors for DOM types dart:html needs to assume are
136 // available on window.
137 if (typeof PannerNode == "undefined") {
138 let audioContext = new AudioContext();
139 window.PannerNode = audioContext.createPanner().constructor;
140 window.StereoPannerNode = audioContext.createStereoPanner().constructor;
141 }
142 if (typeof AudioSourceNode == "undefined") {
143 window.AudioSourceNode = MediaElementAudioSourceNode.constructor;
144 }
145 if (typeof FontFaceSet == "undefined") {
146 window.FontFaceSet = document.fonts.__proto__.constructor;
147 }
148 if (typeof MemoryInfo == "undefined") {
149 window.MemoryInfo = window.performance.memory.constructor;
150 }
151 if (typeof Geolocation == "undefined") {
152 navigator.geolocation.constructor;
153 }
154 if (typeof Animation == "undefined") {
155 let d = document.createElement('div');
156 window.Animation = d.animate(d).constructor;
157 }
158 if (typeof SourceBufferList == "undefined") {
159 window.SourceBufferList = new MediaSource().sourceBuffers.constructor;
160 }
161 }
162
163 // This import is only needed for chrome debugging. We should provide an
164 // option to compile without it.
165 dart_sdk._debugger.registerDevtoolsFormatter();
166 }
167
168 })(dart_library);
OLDNEW
« no previous file with comments | « lib/js/legacy/dart_sdk.js ('k') | lib/runtime/run.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698