93251ee241
fixes https://github.com/dart-lang/dev_compiler/issues/471 Changes here are: * Analyzer now infers list/map literals * Analyzer changed how isPotentiallyMutated* APIs work, so we need to track current function * Another fix to arrow functions. We shouldn't skip generating covariant arg checks. If there were any, we use `=> { block }` form rather than `=> expr` form. R=vsm@google.com Review URL: https://codereview.chromium.org/1757343002 .
566 lines
20 KiB
JavaScript
566 lines
20 KiB
JavaScript
dart_library.library('dart/_debugger', null, /* Imports */[
|
|
'dart/_runtime',
|
|
'dart/core'
|
|
], /* Lazy imports */[
|
|
], function(exports, dart, core) {
|
|
'use strict';
|
|
let dartx = dart.dartx;
|
|
const skipDartConfig = dart.const(new core.Object());
|
|
exports.maxIterableChildrenToDisplay = 50;
|
|
dart.defineLazyProperties(exports, {
|
|
get _devtoolsFormatter() {
|
|
return new JsonMLFormatter(new DartFormatter());
|
|
},
|
|
set _devtoolsFormatter(_) {}
|
|
});
|
|
function _typeof(object) {
|
|
return typeof object;
|
|
}
|
|
dart.fn(_typeof, core.String, [dart.dynamic]);
|
|
function _instanceof(object, clazz) {
|
|
return object instanceof clazz;
|
|
}
|
|
dart.fn(_instanceof, core.bool, [dart.dynamic, dart.dynamic]);
|
|
function getOwnPropertyNames(object) {
|
|
return dart.as(dart.list(Object.getOwnPropertyNames(object), core.String), core.List$(core.String));
|
|
}
|
|
dart.fn(getOwnPropertyNames, core.List$(core.String), [dart.dynamic]);
|
|
function getOwnPropertySymbols(object) {
|
|
return Object.getOwnPropertySymbols(object);
|
|
}
|
|
dart.fn(getOwnPropertySymbols, core.List, [dart.dynamic]);
|
|
class JSNative extends core.Object {
|
|
static getProperty(object, name) {
|
|
return object[name];
|
|
}
|
|
static setProperty(object, name, value) {
|
|
return object[name] = value;
|
|
}
|
|
}
|
|
dart.setSignature(JSNative, {
|
|
statics: () => ({
|
|
getProperty: [dart.dynamic, [dart.dynamic, dart.dynamic]],
|
|
setProperty: [dart.dynamic, [dart.dynamic, dart.dynamic, dart.dynamic]]
|
|
}),
|
|
names: ['getProperty', 'setProperty']
|
|
});
|
|
function isRegularDartObject(object) {
|
|
if (_typeof(object) == 'function') return false;
|
|
return _instanceof(object, core.Object);
|
|
}
|
|
dart.fn(isRegularDartObject, core.bool, [dart.dynamic]);
|
|
function getObjectTypeName(object) {
|
|
let realRuntimeType = dart.realRuntimeType(object);
|
|
if (realRuntimeType == null) {
|
|
if (_typeof(object) == 'function') {
|
|
return '[[Raw JavaScript Function]]';
|
|
}
|
|
return '<Error getting type name>';
|
|
}
|
|
return getTypeName(dart.as(realRuntimeType, core.Type));
|
|
}
|
|
dart.fn(getObjectTypeName, core.String, [dart.dynamic]);
|
|
function getTypeName(type) {
|
|
let name = dart.typeName(type);
|
|
if (dart.equals(name, 'JSArray<dynamic>') || dart.equals(name, 'JSObject<Array>')) return 'List<dynamic>';
|
|
return dart.as(name, core.String);
|
|
}
|
|
dart.fn(getTypeName, core.String, [core.Type]);
|
|
const _simpleFormatter = Symbol('_simpleFormatter');
|
|
function safePreview(object) {
|
|
try {
|
|
let preview = exports._devtoolsFormatter[_simpleFormatter].preview(object);
|
|
if (preview != null) return preview;
|
|
return dart.toString(object);
|
|
} catch (e) {
|
|
return '<Exception thrown>';
|
|
}
|
|
|
|
}
|
|
dart.fn(safePreview, core.String, [dart.dynamic]);
|
|
function symbolName(symbol) {
|
|
let name = dart.toString(symbol);
|
|
dart.assert(name[dartx.startsWith]('Symbol('));
|
|
return name[dartx.substring]('Symbol('[dartx.length], dart.notNull(name[dartx.length]) - 1);
|
|
}
|
|
dart.fn(symbolName, core.String, [dart.dynamic]);
|
|
function hasMethod(object, name) {
|
|
try {
|
|
return dart.as(dart.hasMethod(object, name), core.bool);
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
dart.fn(hasMethod, core.bool, [dart.dynamic, core.String]);
|
|
class NameValuePair extends core.Object {
|
|
NameValuePair(opts) {
|
|
let name = opts && 'name' in opts ? opts.name : null;
|
|
let value = opts && 'value' in opts ? opts.value : null;
|
|
let skipDart = opts && 'skipDart' in opts ? opts.skipDart : null;
|
|
this.name = name;
|
|
this.value = value;
|
|
this.skipDart = skipDart == true;
|
|
}
|
|
}
|
|
dart.setSignature(NameValuePair, {
|
|
constructors: () => ({NameValuePair: [NameValuePair, [], {name: core.String, value: core.Object, skipDart: core.bool}]})
|
|
});
|
|
class MapEntry extends core.Object {
|
|
MapEntry(opts) {
|
|
let key = opts && 'key' in opts ? opts.key : null;
|
|
let value = opts && 'value' in opts ? opts.value : null;
|
|
this.key = key;
|
|
this.value = value;
|
|
}
|
|
}
|
|
dart.setSignature(MapEntry, {
|
|
constructors: () => ({MapEntry: [MapEntry, [], {key: core.String, value: core.Object}]})
|
|
});
|
|
class ClassMetadata extends core.Object {
|
|
ClassMetadata(object) {
|
|
this.object = object;
|
|
}
|
|
}
|
|
dart.setSignature(ClassMetadata, {
|
|
constructors: () => ({ClassMetadata: [ClassMetadata, [core.Object]]})
|
|
});
|
|
class HeritageClause extends core.Object {
|
|
HeritageClause(name, types) {
|
|
this.name = name;
|
|
this.types = types;
|
|
}
|
|
}
|
|
dart.setSignature(HeritageClause, {
|
|
constructors: () => ({HeritageClause: [HeritageClause, [core.String, core.List]]})
|
|
});
|
|
const _attributes = Symbol('_attributes');
|
|
const _jsonML = Symbol('_jsonML');
|
|
class JsonMLElement extends core.Object {
|
|
JsonMLElement(tagName) {
|
|
this[_attributes] = null;
|
|
this[_jsonML] = null;
|
|
this[_attributes] = {};
|
|
this[_jsonML] = [tagName, this[_attributes]];
|
|
}
|
|
appendChild(element) {
|
|
this[_jsonML][dartx.add](dart.dsend(element, 'toJsonML'));
|
|
}
|
|
createChild(tagName) {
|
|
let c = new JsonMLElement(tagName);
|
|
this[_jsonML][dartx.add](c.toJsonML());
|
|
return c;
|
|
}
|
|
createObjectTag(object) {
|
|
return (() => {
|
|
let _ = this.createChild('object');
|
|
_.addAttribute('object', object);
|
|
return _;
|
|
})();
|
|
}
|
|
setStyle(style) {
|
|
dart.dput(this[_attributes], 'style', style);
|
|
}
|
|
addStyle(style) {
|
|
if (dart.dload(this[_attributes], 'style') == null) {
|
|
dart.dput(this[_attributes], 'style', style);
|
|
} else {
|
|
let o = this[_attributes];
|
|
dart.dput(o, 'style', dart.dsend(dart.dload(o, 'style'), '+', style));
|
|
}
|
|
}
|
|
addAttribute(key, value) {
|
|
JSNative.setProperty(this[_attributes], key, value);
|
|
}
|
|
createTextChild(text) {
|
|
this[_jsonML][dartx.add](text);
|
|
}
|
|
toJsonML() {
|
|
return this[_jsonML];
|
|
}
|
|
}
|
|
dart.setSignature(JsonMLElement, {
|
|
constructors: () => ({JsonMLElement: [JsonMLElement, [dart.dynamic]]}),
|
|
methods: () => ({
|
|
appendChild: [dart.dynamic, [dart.dynamic]],
|
|
createChild: [JsonMLElement, [core.String]],
|
|
createObjectTag: [JsonMLElement, [dart.dynamic]],
|
|
setStyle: [dart.void, [core.String]],
|
|
addStyle: [dart.dynamic, [core.String]],
|
|
addAttribute: [dart.dynamic, [dart.dynamic, dart.dynamic]],
|
|
createTextChild: [dart.dynamic, [core.String]],
|
|
toJsonML: [dart.dynamic, []]
|
|
})
|
|
});
|
|
class JsonMLFormatter extends core.Object {
|
|
JsonMLFormatter(simpleFormatter) {
|
|
this[_simpleFormatter] = simpleFormatter;
|
|
}
|
|
header(object, config) {
|
|
if (core.identical(config, skipDartConfig)) return null;
|
|
let c = this[_simpleFormatter].preview(object);
|
|
if (c == null) return null;
|
|
let element = new JsonMLElement('span');
|
|
element.setStyle('background-color: #d9edf7');
|
|
element.createTextChild(c);
|
|
return element.toJsonML();
|
|
}
|
|
hasBody(object) {
|
|
return this[_simpleFormatter].hasChildren(object);
|
|
}
|
|
body(object) {
|
|
let body = new JsonMLElement('ol');
|
|
body.setStyle('list-style-type: none;' + 'padding-left: 0px;' + 'margin-top: 0px;' + 'margin-bottom: 0px;' + 'margin-left: 12px');
|
|
let children = this[_simpleFormatter].children(object);
|
|
for (let child of children) {
|
|
let li = body.createChild('li');
|
|
let nameSpan = new JsonMLElement('span');
|
|
nameSpan.createTextChild(child.name != null ? dart.notNull(child.name) + ': ' : '');
|
|
nameSpan.setStyle('color: rgb(136, 19, 145);');
|
|
if (_typeof(child.value) == 'object' || _typeof(child.value) == 'function') {
|
|
nameSpan.addStyle("padding-left: 13px;");
|
|
li.appendChild(nameSpan);
|
|
let objectTag = li.createObjectTag(child.value);
|
|
if (dart.notNull(child.skipDart)) {
|
|
objectTag.addAttribute('config', skipDartConfig);
|
|
}
|
|
if (!dart.notNull(this[_simpleFormatter].hasChildren(child.value))) {
|
|
li.setStyle("padding-left: 13px;");
|
|
}
|
|
} else {
|
|
li.setStyle("padding-left: 13px;");
|
|
let _ = li.createChild('span');
|
|
_.appendChild(nameSpan);
|
|
_.createTextChild(safePreview(child.value));
|
|
}
|
|
}
|
|
return body.toJsonML();
|
|
}
|
|
}
|
|
dart.setSignature(JsonMLFormatter, {
|
|
constructors: () => ({JsonMLFormatter: [JsonMLFormatter, [DartFormatter]]}),
|
|
methods: () => ({
|
|
header: [dart.dynamic, [dart.dynamic, dart.dynamic]],
|
|
hasBody: [core.bool, [dart.dynamic]],
|
|
body: [dart.dynamic, [dart.dynamic]]
|
|
})
|
|
});
|
|
class Formatter extends core.Object {}
|
|
const _formatters = Symbol('_formatters');
|
|
class DartFormatter extends core.Object {
|
|
DartFormatter() {
|
|
this[_formatters] = null;
|
|
this[_formatters] = dart.list([new FunctionFormatter(), new MapFormatter(), new IterableFormatter(), new MapEntryFormatter(), new ClassMetadataFormatter(), new HeritageClauseFormatter(), new ObjectFormatter()], Formatter);
|
|
}
|
|
preview(object) {
|
|
if (object == null) return 'null';
|
|
if (typeof object == 'number') return dart.toString(object);
|
|
if (typeof object == 'string') return `"${object}"`;
|
|
for (let formatter of this[_formatters]) {
|
|
if (dart.notNull(formatter.accept(object))) return formatter.preview(object);
|
|
}
|
|
return null;
|
|
}
|
|
hasChildren(object) {
|
|
if (object == null) return false;
|
|
for (let formatter of this[_formatters]) {
|
|
if (dart.notNull(formatter.accept(object))) return formatter.hasChildren(object);
|
|
}
|
|
return false;
|
|
}
|
|
children(object) {
|
|
if (object != null) {
|
|
for (let formatter of this[_formatters]) {
|
|
if (dart.notNull(formatter.accept(object))) return formatter.children(object);
|
|
}
|
|
}
|
|
return dart.list([], NameValuePair);
|
|
}
|
|
}
|
|
dart.setSignature(DartFormatter, {
|
|
constructors: () => ({DartFormatter: [DartFormatter, []]}),
|
|
methods: () => ({
|
|
preview: [core.String, [dart.dynamic]],
|
|
hasChildren: [core.bool, [dart.dynamic]],
|
|
children: [core.List$(NameValuePair), [dart.dynamic]]
|
|
})
|
|
});
|
|
const _addMembers = Symbol('_addMembers');
|
|
class ObjectFormatter extends Formatter {
|
|
accept(object) {
|
|
return isRegularDartObject(object);
|
|
}
|
|
preview(object) {
|
|
return getObjectTypeName(object);
|
|
}
|
|
hasChildren(object) {
|
|
return true;
|
|
}
|
|
[_addMembers](current, object, properties) {
|
|
let className = dart.dload(dart.realRuntimeType(current), 'name');
|
|
for (let name of getOwnPropertyNames(current)) {
|
|
if (name == 'constructor' || name == '__proto__' || dart.equals(name, className)) continue;
|
|
if (dart.notNull(hasMethod(object, name))) {
|
|
continue;
|
|
}
|
|
let value = null;
|
|
try {
|
|
value = JSNative.getProperty(object, name);
|
|
} catch (e) {
|
|
value = '<Exception thrown>';
|
|
}
|
|
|
|
properties[dartx.add](new NameValuePair({name: name, value: value}));
|
|
}
|
|
for (let symbol of getOwnPropertySymbols(current)) {
|
|
let dartName = symbolName(symbol);
|
|
if (dart.notNull(hasMethod(object, dartName))) {
|
|
continue;
|
|
}
|
|
let value = null;
|
|
try {
|
|
value = JSNative.getProperty(object, symbol);
|
|
} catch (e) {
|
|
value = '<Exception thrown>';
|
|
}
|
|
|
|
properties[dartx.add](new NameValuePair({name: dartName, value: value}));
|
|
}
|
|
let base = JSNative.getProperty(current, '__proto__');
|
|
if (base == null) return;
|
|
if (dart.notNull(isRegularDartObject(base))) {
|
|
this[_addMembers](base, object, properties);
|
|
}
|
|
}
|
|
children(object) {
|
|
let properties = dart.list([], NameValuePair);
|
|
this.addMetadataChildren(object, properties);
|
|
this[_addMembers](object, object, properties);
|
|
return properties;
|
|
}
|
|
addMetadataChildren(object, ret) {
|
|
ret[dartx.add](new NameValuePair({name: '[[class]]', value: new ClassMetadata(object)}));
|
|
}
|
|
}
|
|
dart.setSignature(ObjectFormatter, {
|
|
methods: () => ({
|
|
accept: [core.bool, [dart.dynamic]],
|
|
preview: [core.String, [dart.dynamic]],
|
|
hasChildren: [core.bool, [dart.dynamic]],
|
|
[_addMembers]: [dart.dynamic, [dart.dynamic, dart.dynamic, core.List$(NameValuePair)]],
|
|
children: [core.List$(NameValuePair), [dart.dynamic]],
|
|
addMetadataChildren: [dart.dynamic, [dart.dynamic, core.List$(NameValuePair)]]
|
|
})
|
|
});
|
|
class FunctionFormatter extends Formatter {
|
|
accept(object) {
|
|
if (_typeof(object) != 'function') return false;
|
|
return dart.realRuntimeType(object) != null;
|
|
}
|
|
hasChildren(object) {
|
|
return true;
|
|
}
|
|
preview(object) {
|
|
return dart.as(dart.typeName(dart.realRuntimeType(object)), core.String);
|
|
}
|
|
children(object) {
|
|
return dart.list([new NameValuePair({name: 'signature', value: this.preview(object)}), new NameValuePair({name: 'JavaScript Function', value: object, skipDart: true})], NameValuePair);
|
|
}
|
|
}
|
|
dart.setSignature(FunctionFormatter, {
|
|
methods: () => ({
|
|
accept: [core.bool, [dart.dynamic]],
|
|
hasChildren: [core.bool, [dart.dynamic]],
|
|
preview: [core.String, [dart.dynamic]],
|
|
children: [core.List$(NameValuePair), [dart.dynamic]]
|
|
})
|
|
});
|
|
class MapFormatter extends ObjectFormatter {
|
|
accept(object) {
|
|
return dart.is(object, core.Map);
|
|
}
|
|
hasChildren(object) {
|
|
return true;
|
|
}
|
|
preview(object) {
|
|
let map = dart.as(object, core.Map);
|
|
return `${getObjectTypeName(map)} length ${map[dartx.length]}`;
|
|
}
|
|
children(object) {
|
|
let map = dart.as(object, core.Map);
|
|
let keys = map[dartx.keys][dartx.toList]();
|
|
let entries = dart.list([], NameValuePair);
|
|
map[dartx.forEach](dart.fn((key, value) => {
|
|
let entryWrapper = new MapEntry({key: dart.as(key, core.String), value: value});
|
|
entries[dartx.add](new NameValuePair({name: dart.toString(entries[dartx.length]), value: entryWrapper}));
|
|
}, dart.void, [dart.dynamic, dart.dynamic]));
|
|
this.addMetadataChildren(object, entries);
|
|
return entries;
|
|
}
|
|
}
|
|
class IterableFormatter extends ObjectFormatter {
|
|
accept(object) {
|
|
return dart.is(object, core.Iterable);
|
|
}
|
|
preview(object) {
|
|
let iterable = dart.as(object, core.Iterable);
|
|
try {
|
|
let length = iterable[dartx.length];
|
|
return `${getObjectTypeName(iterable)} length ${length}`;
|
|
} catch (_) {
|
|
return `${getObjectTypeName(iterable)}`;
|
|
}
|
|
|
|
}
|
|
hasChildren(object) {
|
|
return true;
|
|
}
|
|
children(object) {
|
|
let iterable = dart.as(object, core.Iterable);
|
|
let ret = dart.list([], NameValuePair);
|
|
let i = 0;
|
|
for (let entry of iterable) {
|
|
if (i > dart.notNull(exports.maxIterableChildrenToDisplay)) {
|
|
ret[dartx.add](new NameValuePair({name: 'Warning', value: 'Truncated Iterable display'}));
|
|
break;
|
|
}
|
|
ret[dartx.add](new NameValuePair({name: dart.toString(i), value: entry}));
|
|
i++;
|
|
}
|
|
this.addMetadataChildren(object, ret);
|
|
return ret;
|
|
}
|
|
}
|
|
const _getType = Symbol('_getType');
|
|
class ClassMetadataFormatter extends core.Object {
|
|
accept(object) {
|
|
return dart.is(object, ClassMetadata);
|
|
}
|
|
[_getType](object) {
|
|
if (dart.is(object, core.Type)) return object;
|
|
return dart.realRuntimeType(object);
|
|
}
|
|
preview(object) {
|
|
let entry = dart.as(object, ClassMetadata);
|
|
return getTypeName(dart.as(this[_getType](entry.object), core.Type));
|
|
}
|
|
hasChildren(object) {
|
|
return true;
|
|
}
|
|
children(object) {
|
|
let entry = dart.as(object, ClassMetadata);
|
|
let type = this[_getType](entry.object);
|
|
let ret = dart.list([], NameValuePair);
|
|
let implements$ = dart.getImplements(type);
|
|
if (implements$ != null) {
|
|
ret[dartx.add](new NameValuePair({name: '[[Implements]]', value: new HeritageClause('implements', dart.as(dart.dcall(implements$), core.List))}));
|
|
}
|
|
let mixins = dart.getMixins(type);
|
|
if (mixins != null) {
|
|
ret[dartx.add](new NameValuePair({name: '[[Mixins]]', value: new HeritageClause('mixins', dart.as(dart.dcall(mixins), core.List))}));
|
|
}
|
|
ret[dartx.add](new NameValuePair({name: '[[JavaScript View]]', value: entry.object, skipDart: true}));
|
|
if (!dart.is(entry.object, core.Type)) {
|
|
ret[dartx.add](new NameValuePair({name: '[[JavaScript Constructor]]', value: JSNative.getProperty(entry.object, 'constructor'), skipDart: true}));
|
|
}
|
|
return ret;
|
|
}
|
|
}
|
|
ClassMetadataFormatter[dart.implements] = () => [Formatter];
|
|
dart.setSignature(ClassMetadataFormatter, {
|
|
methods: () => ({
|
|
accept: [core.bool, [dart.dynamic]],
|
|
[_getType]: [dart.dynamic, [dart.dynamic]],
|
|
preview: [core.String, [dart.dynamic]],
|
|
hasChildren: [core.bool, [dart.dynamic]],
|
|
children: [core.List$(NameValuePair), [dart.dynamic]]
|
|
})
|
|
});
|
|
class MapEntryFormatter extends core.Object {
|
|
accept(object) {
|
|
return dart.is(object, MapEntry);
|
|
}
|
|
preview(object) {
|
|
let entry = dart.as(object, MapEntry);
|
|
return `${safePreview(entry.key)} => ${safePreview(entry.value)}`;
|
|
}
|
|
hasChildren(object) {
|
|
return true;
|
|
}
|
|
children(object) {
|
|
return dart.list([new NameValuePair({name: 'key', value: dart.dload(object, 'key')}), new NameValuePair({name: 'value', value: dart.dload(object, 'value')})], NameValuePair);
|
|
}
|
|
}
|
|
MapEntryFormatter[dart.implements] = () => [Formatter];
|
|
dart.setSignature(MapEntryFormatter, {
|
|
methods: () => ({
|
|
accept: [core.bool, [dart.dynamic]],
|
|
preview: [core.String, [dart.dynamic]],
|
|
hasChildren: [core.bool, [dart.dynamic]],
|
|
children: [core.List$(NameValuePair), [dart.dynamic]]
|
|
})
|
|
});
|
|
class HeritageClauseFormatter extends core.Object {
|
|
accept(object) {
|
|
return dart.is(object, HeritageClause);
|
|
}
|
|
preview(object) {
|
|
let clause = dart.as(object, HeritageClause);
|
|
let typeNames = clause.types[dartx.map](dart.fn(type => getTypeName(dart.as(type, core.Type)), core.String, [dart.dynamic]));
|
|
return `${clause.name} ${typeNames[dartx.join](", ")}`;
|
|
}
|
|
hasChildren(object) {
|
|
return true;
|
|
}
|
|
children(object) {
|
|
let clause = dart.as(object, HeritageClause);
|
|
let ret = dart.list([], NameValuePair);
|
|
for (let type of clause.types) {
|
|
ret[dartx.add](new NameValuePair({value: new ClassMetadata(type)}));
|
|
}
|
|
return ret;
|
|
}
|
|
}
|
|
HeritageClauseFormatter[dart.implements] = () => [Formatter];
|
|
dart.setSignature(HeritageClauseFormatter, {
|
|
methods: () => ({
|
|
accept: [core.bool, [dart.dynamic]],
|
|
preview: [core.String, [dart.dynamic]],
|
|
hasChildren: [core.bool, [dart.dynamic]],
|
|
children: [core.List$(NameValuePair), [dart.dynamic]]
|
|
})
|
|
});
|
|
function registerDevtoolsFormatter() {
|
|
let formatters = dart.list([exports._devtoolsFormatter], JsonMLFormatter);
|
|
dart.global.devtoolsFormatters = formatters;
|
|
}
|
|
dart.fn(registerDevtoolsFormatter);
|
|
// Exports:
|
|
exports.skipDartConfig = skipDartConfig;
|
|
exports.getOwnPropertyNames = getOwnPropertyNames;
|
|
exports.getOwnPropertySymbols = getOwnPropertySymbols;
|
|
exports.JSNative = JSNative;
|
|
exports.isRegularDartObject = isRegularDartObject;
|
|
exports.getObjectTypeName = getObjectTypeName;
|
|
exports.getTypeName = getTypeName;
|
|
exports.safePreview = safePreview;
|
|
exports.symbolName = symbolName;
|
|
exports.hasMethod = hasMethod;
|
|
exports.NameValuePair = NameValuePair;
|
|
exports.MapEntry = MapEntry;
|
|
exports.ClassMetadata = ClassMetadata;
|
|
exports.HeritageClause = HeritageClause;
|
|
exports.JsonMLElement = JsonMLElement;
|
|
exports.JsonMLFormatter = JsonMLFormatter;
|
|
exports.Formatter = Formatter;
|
|
exports.DartFormatter = DartFormatter;
|
|
exports.ObjectFormatter = ObjectFormatter;
|
|
exports.FunctionFormatter = FunctionFormatter;
|
|
exports.MapFormatter = MapFormatter;
|
|
exports.IterableFormatter = IterableFormatter;
|
|
exports.ClassMetadataFormatter = ClassMetadataFormatter;
|
|
exports.MapEntryFormatter = MapEntryFormatter;
|
|
exports.HeritageClauseFormatter = HeritageClauseFormatter;
|
|
exports.registerDevtoolsFormatter = registerDevtoolsFormatter;
|
|
});
|