ember-source 2.0.3.1 → 2.1.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ember-source might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2bfe4fe7faef8a991541dfd6f9fa54236d19c72d
4
- data.tar.gz: 3910a9ef37c53bce2e3d75eb3c333ef0e4f9f285
3
+ metadata.gz: 6f9cb78ab289bef4b21a2365d166d7183872d41d
4
+ data.tar.gz: 17f6a12bf1ece2899c2bbc3356b6e00a2214f404
5
5
  SHA512:
6
- metadata.gz: 43ec2307d332ca1065036ac2273d09dcb9a237af4ada6d59107c0e0e88c737fc695c974d403b37ab95e1ec6024ef57943580da42f1602845aae409d447cd9910
7
- data.tar.gz: bb43549157b21623811137caeaee54cda9acc8cad53bb1257c778ad2dbd8cd7e97d4d228c369e0ea412d6c1324d763a3a2aca30cd22ac49f95ef35f83a7659d1
6
+ metadata.gz: 2bac0642a221c467d6ebe10378e638fa41d3cac939792ecfd8ff7dd6d6fb18fe2a20f5f393459be9a3112a6bd04b78f118c0d977e682c9caee3fb4bd82f11b59
7
+ data.tar.gz: edd837b7f89eabbc82ff5333bc47b28e29350780c4bbba77a93a4aa653103be018852703cbd64f34a287cc798d6b07ed673f50478d36a528020fb0e695e2d648
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.3.1
1
+ 2.1.0-beta.1
@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 2.0.3
8
+ * @version 2.1.0-beta.1
9
9
  */
10
10
 
11
11
  (function() {
@@ -67,7 +67,7 @@ var mainContext = this;
67
67
  var reified = [];
68
68
  var length = deps.length;
69
69
 
70
- for (var i=0; i<length; i++) {
70
+ for (var i = 0; i < length; i++) {
71
71
  if (deps[i] === 'exports') {
72
72
  reified.push(exports);
73
73
  } else {
@@ -87,7 +87,7 @@ var mainContext = this;
87
87
  var parts = child.split('/');
88
88
  var parentBase = name.split('/').slice(0, -1);
89
89
 
90
- for (var i=0, l=parts.length; i<l; i++) {
90
+ for (var i = 0, l = parts.length; i < l; i++) {
91
91
  var part = parts[i];
92
92
 
93
93
  if (part === '..') {
@@ -1160,13 +1160,13 @@ enifed('backburner/utils', ['exports'], function (exports) {
1160
1160
  };
1161
1161
  }
1162
1162
  });
1163
- enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'ember-metal/error', 'ember-metal/logger', 'ember-debug/deprecation-manager', 'ember-metal/environment'], function (exports, _emberMetalCore, _emberMetalFeatures, _emberMetalError, _emberMetalLogger, _emberDebugDeprecationManager, _emberMetalEnvironment) {
1164
- /*global __fail__*/
1165
-
1163
+ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/assert', 'ember-metal/features', 'ember-metal/error', 'ember-metal/logger', 'ember-metal/environment', 'ember-debug/deprecate', 'ember-debug/warn', 'ember-debug/is-plain-function'], function (exports, _emberMetalCore, _emberMetalAssert, _emberMetalFeatures, _emberMetalError, _emberMetalLogger, _emberMetalEnvironment, _emberDebugDeprecate, _emberDebugWarn, _emberDebugIsPlainFunction) {
1166
1164
  'use strict';
1167
1165
 
1168
1166
  exports._warnIfUsingStrippedFeatureFlags = _warnIfUsingStrippedFeatureFlags;
1169
1167
 
1168
+ _emberMetalCore.default.deprecate = _emberDebugDeprecate.default;
1169
+
1170
1170
  /**
1171
1171
  @module ember
1172
1172
  @submodule ember-debug
@@ -1177,10 +1177,6 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1177
1177
  @public
1178
1178
  */
1179
1179
 
1180
- function isPlainFunction(test) {
1181
- return typeof test === 'function' && test.PrototypeMixin === undefined;
1182
- }
1183
-
1184
1180
  /**
1185
1181
  Define an assertion that will throw an exception if the condition is not
1186
1182
  met. Ember build tools will remove any calls to `Ember.assert()` when
@@ -1202,10 +1198,10 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1202
1198
  its return value will be used as condition.
1203
1199
  @public
1204
1200
  */
1205
- _emberMetalCore.default.assert = function (desc, test) {
1201
+ function assert(desc, test) {
1206
1202
  var throwAssertion;
1207
1203
 
1208
- if (isPlainFunction(test)) {
1204
+ if (_emberDebugIsPlainFunction.default(test)) {
1209
1205
  throwAssertion = !test();
1210
1206
  } else {
1211
1207
  throwAssertion = !test;
@@ -1214,26 +1210,7 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1214
1210
  if (throwAssertion) {
1215
1211
  throw new _emberMetalError.default('Assertion Failed: ' + desc);
1216
1212
  }
1217
- };
1218
-
1219
- /**
1220
- Display a warning with the provided message. Ember build tools will
1221
- remove any calls to `Ember.warn()` when doing a production build.
1222
-
1223
- @method warn
1224
- @param {String} message A warning to display.
1225
- @param {Boolean} test An optional boolean. If falsy, the warning
1226
- will be displayed.
1227
- @public
1228
- */
1229
- _emberMetalCore.default.warn = function (message, test) {
1230
- if (!test) {
1231
- _emberMetalLogger.default.warn('WARNING: ' + message);
1232
- if ('trace' in _emberMetalLogger.default) {
1233
- _emberMetalLogger.default.trace();
1234
- }
1235
- }
1236
- };
1213
+ }
1237
1214
 
1238
1215
  /**
1239
1216
  Display a debug notice. Ember build tools will remove any calls to
@@ -1247,90 +1224,9 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1247
1224
  @param {String} message A debug message to display.
1248
1225
  @public
1249
1226
  */
1250
- _emberMetalCore.default.debug = function (message) {
1227
+ function debug(message) {
1251
1228
  _emberMetalLogger.default.debug('DEBUG: ' + message);
1252
- };
1253
-
1254
- /**
1255
- Display a deprecation warning with the provided message and a stack trace
1256
- (Chrome and Firefox only). Ember build tools will remove any calls to
1257
- `Ember.deprecate()` when doing a production build.
1258
-
1259
- @method deprecate
1260
- @param {String} message A description of the deprecation.
1261
- @param {Boolean|Function} test An optional boolean. If falsy, the deprecation
1262
- will be displayed. If this is a function, it will be executed and its return
1263
- value will be used as condition.
1264
- @param {Object} options An optional object that can be used to pass
1265
- in a `url` to the transition guide on the emberjs.com website, and a unique
1266
- `id` for this deprecation. The `id` can be used by Ember debugging tools
1267
- to change the behavior (raise, log or silence) for that specific deprecation.
1268
- The `id` should be namespaced by dots, e.g. "view.helper.select".
1269
- @public
1270
- */
1271
- _emberMetalCore.default.deprecate = function (message, test, options) {
1272
- if (_emberMetalCore.default.ENV.RAISE_ON_DEPRECATION) {
1273
- _emberDebugDeprecationManager.default.setDefaultLevel(_emberDebugDeprecationManager.deprecationLevels.RAISE);
1274
- }
1275
- if (_emberDebugDeprecationManager.default.getLevel(options && options.id) === _emberDebugDeprecationManager.deprecationLevels.SILENCE) {
1276
- return;
1277
- }
1278
-
1279
- var noDeprecation;
1280
-
1281
- if (isPlainFunction(test)) {
1282
- noDeprecation = test();
1283
- } else {
1284
- noDeprecation = test;
1285
- }
1286
-
1287
- if (noDeprecation) {
1288
- return;
1289
- }
1290
-
1291
- if (options && options.id) {
1292
- message = message + (' [deprecation id: ' + options.id + ']');
1293
- }
1294
-
1295
- if (_emberDebugDeprecationManager.default.getLevel(options && options.id) === _emberDebugDeprecationManager.deprecationLevels.RAISE) {
1296
- throw new _emberMetalError.default(message);
1297
- }
1298
-
1299
- var error;
1300
-
1301
- // When using new Error, we can't do the arguments check for Chrome. Alternatives are welcome
1302
- try {
1303
- __fail__.fail();
1304
- } catch (e) {
1305
- error = e;
1306
- }
1307
-
1308
- if (arguments.length === 3) {
1309
- _emberMetalCore.default.assert('options argument to Ember.deprecate should be an object', options && typeof options === 'object');
1310
- if (options.url) {
1311
- message += ' See ' + options.url + ' for more details.';
1312
- }
1313
- }
1314
-
1315
- if (_emberMetalCore.default.LOG_STACKTRACE_ON_DEPRECATION && error.stack) {
1316
- var stack;
1317
- var stackStr = '';
1318
-
1319
- if (error['arguments']) {
1320
- // Chrome
1321
- stack = error.stack.replace(/^\s+at\s+/gm, '').replace(/^([^\(]+?)([\n$])/gm, '{anonymous}($1)$2').replace(/^Object.<anonymous>\s*\(([^\)]+)\)/gm, '{anonymous}($1)').split('\n');
1322
- stack.shift();
1323
- } else {
1324
- // Firefox
1325
- stack = error.stack.replace(/(?:\n@:0)?\s+$/m, '').replace(/^\(/gm, '{anonymous}(').split('\n');
1326
- }
1327
-
1328
- stackStr = '\n ' + stack.slice(2).join('\n ');
1329
- message = message + stackStr;
1330
- }
1331
-
1332
- _emberMetalLogger.default.warn('DEPRECATION: ' + message);
1333
- };
1229
+ }
1334
1230
 
1335
1231
  /**
1336
1232
  Alias an old, deprecated method with its new counterpart.
@@ -1352,7 +1248,7 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1352
1248
  @return {Function} a new function that wrapped the original function with a deprecation warning
1353
1249
  @private
1354
1250
  */
1355
- _emberMetalCore.default.deprecateFunc = function () {
1251
+ function deprecateFunc() {
1356
1252
  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
1357
1253
  args[_key] = arguments[_key];
1358
1254
  }
@@ -1387,7 +1283,7 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1387
1283
 
1388
1284
  if (typeof _ret2 === 'object') return _ret2.v;
1389
1285
  }
1390
- };
1286
+ }
1391
1287
 
1392
1288
  /**
1393
1289
  Run a function meant for debugging. Ember build tools will remove any calls to
@@ -1408,9 +1304,16 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1408
1304
  @since 1.5.0
1409
1305
  @public
1410
1306
  */
1411
- _emberMetalCore.default.runInDebug = function (func) {
1307
+ function runInDebug(func) {
1412
1308
  func();
1413
- };
1309
+ }
1310
+
1311
+ _emberMetalAssert.registerDebugFunction('assert', assert);
1312
+ _emberMetalAssert.registerDebugFunction('warn', _emberDebugWarn.default);
1313
+ _emberMetalAssert.registerDebugFunction('debug', debug);
1314
+ _emberMetalAssert.registerDebugFunction('deprecate', _emberDebugDeprecate.default);
1315
+ _emberMetalAssert.registerDebugFunction('deprecateFunc', deprecateFunc);
1316
+ _emberMetalAssert.registerDebugFunction('runInDebug', runInDebug);
1414
1317
 
1415
1318
  /**
1416
1319
  Will call `Ember.warn()` if ENABLE_ALL_FEATURES, ENABLE_OPTIONAL_FEATURES, or
@@ -1425,12 +1328,12 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1425
1328
 
1426
1329
  function _warnIfUsingStrippedFeatureFlags(FEATURES, featuresWereStripped) {
1427
1330
  if (featuresWereStripped) {
1428
- _emberMetalCore.default.warn('Ember.ENV.ENABLE_ALL_FEATURES is only available in canary builds.', !_emberMetalCore.default.ENV.ENABLE_ALL_FEATURES);
1429
- _emberMetalCore.default.warn('Ember.ENV.ENABLE_OPTIONAL_FEATURES is only available in canary builds.', !_emberMetalCore.default.ENV.ENABLE_OPTIONAL_FEATURES);
1331
+ _emberMetalCore.default.warn('Ember.ENV.ENABLE_ALL_FEATURES is only available in canary builds.', !_emberMetalCore.default.ENV.ENABLE_ALL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' });
1332
+ _emberMetalCore.default.warn('Ember.ENV.ENABLE_OPTIONAL_FEATURES is only available in canary builds.', !_emberMetalCore.default.ENV.ENABLE_OPTIONAL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' });
1430
1333
 
1431
1334
  for (var key in FEATURES) {
1432
1335
  if (FEATURES.hasOwnProperty(key) && key !== 'isEnabled') {
1433
- _emberMetalCore.default.warn('FEATURE["' + key + '"] is set as enabled, but FEATURE flags are only available in canary builds.', !FEATURES[key]);
1336
+ _emberMetalCore.default.warn('FEATURE["' + key + '"] is set as enabled, but FEATURE flags are only available in canary builds.', !FEATURES[key], { id: 'ember-debug.feature-flag-with-features-stripped' });
1434
1337
  }
1435
1338
  }
1436
1339
  }
@@ -1465,12 +1368,10 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1465
1368
  }
1466
1369
  }
1467
1370
 
1468
- _emberMetalCore.default.Debug = {
1469
- _addDeprecationLevel: function (id, level) {
1470
- _emberDebugDeprecationManager.default.setLevel(id, level);
1471
- },
1472
- _deprecationLevels: _emberDebugDeprecationManager.deprecationLevels
1473
- };
1371
+ _emberMetalCore.default.Debug = {};
1372
+
1373
+ _emberMetalCore.default.Debug.registerDeprecationHandler = _emberDebugDeprecate.registerHandler;
1374
+ _emberMetalCore.default.Debug.registerWarnHandler = _emberDebugWarn.registerHandler;
1474
1375
 
1475
1376
  /*
1476
1377
  We are transitioning away from `ember.js` to `ember.debug.js` to make
@@ -1486,35 +1387,216 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1486
1387
  _emberMetalCore.default.warn('Please use `ember.debug.js` instead of `ember.js` for development and debugging.');
1487
1388
  }
1488
1389
  });
1489
- enifed('ember-debug/deprecation-manager', ['exports', 'ember-metal/dictionary', 'ember-metal/utils'], function (exports, _emberMetalDictionary, _emberMetalUtils) {
1390
+ enifed('ember-debug/deprecate', ['exports', 'ember-metal/core', 'ember-metal/error', 'ember-metal/logger', 'ember-debug/handlers'], function (exports, _emberMetalCore, _emberMetalError, _emberMetalLogger, _emberDebugHandlers) {
1391
+ /*global __fail__*/
1392
+
1490
1393
  'use strict';
1491
1394
 
1492
- var deprecationLevels = {
1493
- RAISE: _emberMetalUtils.symbol('RAISE'),
1494
- LOG: _emberMetalUtils.symbol('LOG'),
1495
- SILENCE: _emberMetalUtils.symbol('SILENCE')
1496
- };
1395
+ var _slice = Array.prototype.slice;
1396
+ exports.registerHandler = registerHandler;
1397
+ exports.default = deprecate;
1497
1398
 
1498
- exports.deprecationLevels = deprecationLevels;
1499
- exports.default = {
1500
- defaultLevel: deprecationLevels.LOG,
1501
- individualLevels: _emberMetalDictionary.default(null),
1502
- setDefaultLevel: function (level) {
1503
- this.defaultLevel = level;
1504
- },
1505
- setLevel: function (id, level) {
1506
- this.individualLevels[id] = level;
1507
- },
1508
- getLevel: function (id) {
1509
- var level = this.individualLevels[id];
1510
- if (!level) {
1511
- level = this.defaultLevel;
1399
+ function registerHandler(handler) {
1400
+ _emberDebugHandlers.registerHandler('deprecate', handler);
1401
+ }
1402
+
1403
+ function formatMessage(_message, options) {
1404
+ var message = _message;
1405
+
1406
+ if (options && options.id) {
1407
+ message = message + (' [deprecation id: ' + options.id + ']');
1408
+ }
1409
+
1410
+ if (options && options.url) {
1411
+ message += ' See ' + options.url + ' for more details.';
1412
+ }
1413
+
1414
+ return message;
1415
+ }
1416
+
1417
+ registerHandler(function logDeprecationToConsole(message, options) {
1418
+ var updatedMessage = formatMessage(message, options);
1419
+
1420
+ _emberMetalLogger.default.warn('DEPRECATION: ' + updatedMessage);
1421
+ });
1422
+
1423
+ registerHandler(function logDeprecationStackTrace(message, options, next) {
1424
+ if (_emberMetalCore.default.LOG_STACKTRACE_ON_DEPRECATION) {
1425
+ var stackStr = '';
1426
+ var error = undefined,
1427
+ stack = undefined;
1428
+
1429
+ // When using new Error, we can't do the arguments check for Chrome. Alternatives are welcome
1430
+ try {
1431
+ __fail__.fail();
1432
+ } catch (e) {
1433
+ error = e;
1434
+ }
1435
+
1436
+ if (error.stack) {
1437
+ if (error['arguments']) {
1438
+ // Chrome
1439
+ stack = error.stack.replace(/^\s+at\s+/gm, '').replace(/^([^\(]+?)([\n$])/gm, '{anonymous}($1)$2').replace(/^Object.<anonymous>\s*\(([^\)]+)\)/gm, '{anonymous}($1)').split('\n');
1440
+ stack.shift();
1441
+ } else {
1442
+ // Firefox
1443
+ stack = error.stack.replace(/(?:\n@:0)?\s+$/m, '').replace(/^\(/gm, '{anonymous}(').split('\n');
1444
+ }
1445
+
1446
+ stackStr = '\n ' + stack.slice(2).join('\n ');
1512
1447
  }
1513
- return level;
1448
+
1449
+ var updatedMessage = formatMessage(message, options);
1450
+
1451
+ _emberMetalLogger.default.warn('DEPRECATION: ' + updatedMessage + stackStr);
1452
+ } else {
1453
+ next.apply(undefined, arguments);
1514
1454
  }
1515
- };
1455
+ });
1456
+
1457
+ registerHandler(function raiseOnDeprecation(message, options, next) {
1458
+ if (_emberMetalCore.default.ENV.RAISE_ON_DEPRECATION) {
1459
+ var updatedMessage = formatMessage(message);
1460
+
1461
+ throw new _emberMetalError.default(updatedMessage);
1462
+ } else {
1463
+ next.apply(undefined, arguments);
1464
+ }
1465
+ });
1466
+
1467
+ var missingOptionsDeprecation = 'When calling `Ember.deprecate` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include `id` and `until` properties.';
1468
+ exports.missingOptionsDeprecation = missingOptionsDeprecation;
1469
+ var missingOptionsIdDeprecation = 'When calling `Ember.deprecate` you must provide `id` in options.';
1470
+ exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation;
1471
+ var missingOptionsUntilDeprecation = 'When calling `Ember.deprecate` you must provide `until` in options.';
1472
+
1473
+ exports.missingOptionsUntilDeprecation = missingOptionsUntilDeprecation;
1474
+ /**
1475
+ Display a deprecation warning with the provided message and a stack trace
1476
+ (Chrome and Firefox only). Ember build tools will remove any calls to
1477
+ `Ember.deprecate()` when doing a production build.
1478
+
1479
+ @method deprecate
1480
+ @param {String} message A description of the deprecation.
1481
+ @param {Boolean|Function} test A boolean. If falsy, the deprecation
1482
+ will be displayed. If this is a function, it will be executed and its return
1483
+ value will be used as condition.
1484
+ @param {Object} options An object that can be used to pass
1485
+ in a `url` to the transition guide on the emberjs.com website, and a unique
1486
+ `id` for this deprecation. The `id` can be used by Ember debugging tools
1487
+ to change the behavior (raise, log or silence) for that specific deprecation.
1488
+ The `id` should be namespaced by dots, e.g. "view.helper.select".
1489
+ @public
1490
+ */
1491
+
1492
+ function deprecate(message, test, options) {
1493
+ if (!options || !options.id && !options.until) {
1494
+ deprecate(missingOptionsDeprecation, false, { id: 'ember-debug.deprecate-options-missing', until: '3.0.0' });
1495
+ }
1496
+
1497
+ if (options && !options.id) {
1498
+ deprecate(missingOptionsIdDeprecation, false, { id: 'ember-debug.deprecate-id-missing', until: '3.0.0' });
1499
+ }
1500
+
1501
+ if (options && !options.until) {
1502
+ deprecate(missingOptionsUntilDeprecation, options && options.until, { id: 'ember-debug.deprecate-until-missing', until: '3.0.0' });
1503
+ }
1504
+
1505
+ _emberDebugHandlers.invoke.apply(undefined, ['deprecate'].concat(_slice.call(arguments)));
1506
+ }
1507
+ });
1508
+ enifed('ember-debug/handlers', ['exports', 'ember-debug/is-plain-function'], function (exports, _emberDebugIsPlainFunction) {
1509
+ 'use strict';
1510
+
1511
+ exports.registerHandler = registerHandler;
1512
+ exports.invoke = invoke;
1513
+ var HANDLERS = {};
1514
+
1515
+ exports.HANDLERS = HANDLERS;
1516
+ function normalizeTest(test) {
1517
+ return _emberDebugIsPlainFunction.default(test) ? test() : test;
1518
+ }
1519
+
1520
+ function registerHandler(type, callback) {
1521
+ var nextHandler = HANDLERS[type] || function () {};
1522
+
1523
+ HANDLERS[type] = function (message, options) {
1524
+ callback(message, options, nextHandler);
1525
+ };
1526
+ }
1527
+
1528
+ function invoke(type, message, test, options) {
1529
+ if (normalizeTest(test)) {
1530
+ return;
1531
+ }
1532
+
1533
+ var handlerForType = HANDLERS[type];
1534
+
1535
+ if (!handlerForType) {
1536
+ return;
1537
+ }
1538
+
1539
+ if (handlerForType) {
1540
+ handlerForType(message, options);
1541
+ }
1542
+ }
1543
+ });
1544
+ enifed('ember-debug/is-plain-function', ['exports'], function (exports) {
1545
+ 'use strict';
1546
+
1547
+ exports.default = isPlainFunction;
1548
+
1549
+ function isPlainFunction(test) {
1550
+ return typeof test === 'function' && test.PrototypeMixin === undefined;
1551
+ }
1552
+ });
1553
+ enifed('ember-debug/warn', ['exports', 'ember-metal/core', 'ember-metal/logger', 'ember-debug/handlers'], function (exports, _emberMetalCore, _emberMetalLogger, _emberDebugHandlers) {
1554
+ 'use strict';
1555
+
1556
+ var _slice = Array.prototype.slice;
1557
+ exports.registerHandler = registerHandler;
1558
+ exports.default = warn;
1559
+
1560
+ function registerHandler(handler) {
1561
+ _emberDebugHandlers.registerHandler('warn', handler);
1562
+ }
1563
+
1564
+ registerHandler(function logWarning(message, options) {
1565
+ _emberMetalLogger.default.warn('WARNING: ' + message);
1566
+ if ('trace' in _emberMetalLogger.default) {
1567
+ _emberMetalLogger.default.trace();
1568
+ }
1569
+ });
1570
+
1571
+ var missingOptionsDeprecation = 'When calling `Ember.warn` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include an `id` property.';
1572
+ exports.missingOptionsDeprecation = missingOptionsDeprecation;
1573
+ var missingOptionsIdDeprecation = 'When calling `Ember.warn` you must provide `id` in options.';
1574
+
1575
+ exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation;
1576
+ /**
1577
+ Display a warning with the provided message. Ember build tools will
1578
+ remove any calls to `Ember.warn()` when doing a production build.
1579
+
1580
+ @method warn
1581
+ @param {String} message A warning to display.
1582
+ @param {Boolean} test An optional boolean. If falsy, the warning
1583
+ will be displayed.
1584
+ @public
1585
+ */
1586
+
1587
+ function warn(message, test, options) {
1588
+ if (!options) {
1589
+ _emberMetalCore.default.deprecate(missingOptionsDeprecation, false, { id: 'ember-debug.warn-options-missing', until: '3.0.0' });
1590
+ }
1591
+
1592
+ if (options && !options.id) {
1593
+ _emberMetalCore.default.deprecate(missingOptionsIdDeprecation, false, { id: 'ember-debug.warn-id-missing', until: '3.0.0' });
1594
+ }
1595
+
1596
+ _emberDebugHandlers.invoke.apply(undefined, ['warn'].concat(_slice.call(arguments)));
1597
+ }
1516
1598
  });
1517
- enifed('ember-metal', ['exports', 'ember-metal/core', 'ember-metal/features', 'ember-metal/merge', 'ember-metal/instrumentation', 'ember-metal/utils', 'ember-metal/error', 'ember-metal/cache', 'ember-metal/logger', 'ember-metal/property_get', 'ember-metal/events', 'ember-metal/observer_set', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/property_set', 'ember-metal/map', 'ember-metal/get_properties', 'ember-metal/set_properties', 'ember-metal/watch_key', 'ember-metal/chains', 'ember-metal/watch_path', 'ember-metal/watching', 'ember-metal/expand_properties', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/computed_macros', 'ember-metal/observer', 'ember-metal/mixin', 'ember-metal/binding', 'ember-metal/run_loop', 'ember-metal/libraries', 'ember-metal/is_none', 'ember-metal/is_empty', 'ember-metal/is_blank', 'ember-metal/is_present', 'backburner', 'ember-metal/streams/utils', 'ember-metal/streams/stream'], function (exports, _emberMetalCore, _emberMetalFeatures, _emberMetalMerge, _emberMetalInstrumentation, _emberMetalUtils, _emberMetalError, _emberMetalCache, _emberMetalLogger, _emberMetalProperty_get, _emberMetalEvents, _emberMetalObserver_set, _emberMetalProperty_events, _emberMetalProperties, _emberMetalProperty_set, _emberMetalMap, _emberMetalGet_properties, _emberMetalSet_properties, _emberMetalWatch_key, _emberMetalChains, _emberMetalWatch_path, _emberMetalWatching, _emberMetalExpand_properties, _emberMetalComputed, _emberMetalAlias, _emberMetalComputed_macros, _emberMetalObserver, _emberMetalMixin, _emberMetalBinding, _emberMetalRun_loop, _emberMetalLibraries, _emberMetalIs_none, _emberMetalIs_empty, _emberMetalIs_blank, _emberMetalIs_present, _backburner, _emberMetalStreamsUtils, _emberMetalStreamsStream) {
1599
+ enifed('ember-metal', ['exports', 'ember-metal/core', 'ember-metal/features', 'ember-metal/merge', 'ember-metal/instrumentation', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/error', 'ember-metal/cache', 'ember-metal/logger', 'ember-metal/property_get', 'ember-metal/events', 'ember-metal/observer_set', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/property_set', 'ember-metal/map', 'ember-metal/get_properties', 'ember-metal/set_properties', 'ember-metal/watch_key', 'ember-metal/chains', 'ember-metal/watch_path', 'ember-metal/watching', 'ember-metal/expand_properties', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/computed_macros', 'ember-metal/observer', 'ember-metal/mixin', 'ember-metal/binding', 'ember-metal/run_loop', 'ember-metal/libraries', 'ember-metal/is_none', 'ember-metal/is_empty', 'ember-metal/is_blank', 'ember-metal/is_present', 'backburner'], function (exports, _emberMetalCore, _emberMetalFeatures, _emberMetalMerge, _emberMetalInstrumentation, _emberMetalUtils, _emberMetalMeta, _emberMetalError, _emberMetalCache, _emberMetalLogger, _emberMetalProperty_get, _emberMetalEvents, _emberMetalObserver_set, _emberMetalProperty_events, _emberMetalProperties, _emberMetalProperty_set, _emberMetalMap, _emberMetalGet_properties, _emberMetalSet_properties, _emberMetalWatch_key, _emberMetalChains, _emberMetalWatch_path, _emberMetalWatching, _emberMetalExpand_properties, _emberMetalComputed, _emberMetalAlias, _emberMetalComputed_macros, _emberMetalObserver, _emberMetalMixin, _emberMetalBinding, _emberMetalRun_loop, _emberMetalLibraries, _emberMetalIs_none, _emberMetalIs_empty, _emberMetalIs_blank, _emberMetalIs_present, _backburner) {
1518
1600
  /**
1519
1601
  @module ember
1520
1602
  @submodule ember-metal
@@ -1568,9 +1650,9 @@ enifed('ember-metal', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1568
1650
 
1569
1651
  _emberMetalCore.default.Error = _emberMetalError.default;
1570
1652
  _emberMetalCore.default.guidFor = _emberMetalUtils.guidFor;
1571
- _emberMetalCore.default.META_DESC = _emberMetalUtils.META_DESC;
1572
- _emberMetalCore.default.EMPTY_META = _emberMetalUtils.EMPTY_META;
1573
- _emberMetalCore.default.meta = _emberMetalUtils.meta;
1653
+ _emberMetalCore.default.META_DESC = _emberMetalMeta.META_DESC;
1654
+ _emberMetalCore.default.EMPTY_META = _emberMetalMeta.EMPTY_META;
1655
+ _emberMetalCore.default.meta = _emberMetalMeta.meta;
1574
1656
  _emberMetalCore.default.inspect = _emberMetalUtils.inspect;
1575
1657
  _emberMetalCore.default.tryCatchFinally = _emberMetalUtils.deprecatedTryCatchFinally;
1576
1658
  _emberMetalCore.default.makeArray = _emberMetalUtils.makeArray;
@@ -1715,6 +1797,11 @@ enifed('ember-metal', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1715
1797
  // This needs to be called before any deprecateFunc
1716
1798
  if (_emberMetalCore.default.__loader.registry['ember-debug']) {
1717
1799
  requireModule('ember-debug');
1800
+ } else {
1801
+ _emberMetalCore.default.Debug = {};
1802
+
1803
+ _emberMetalCore.default.Debug.registerDeprecationHandler = function () {};
1804
+ _emberMetalCore.default.Debug.registerWarnHandler = function () {};
1718
1805
  }
1719
1806
 
1720
1807
  _emberMetalCore.default.create = _emberMetalCore.default.deprecateFunc('Ember.create is deprecated in favor of Object.create', { id: 'ember-metal.ember-create', until: '3.0.0' }, Object.create);
@@ -1722,7 +1809,7 @@ enifed('ember-metal', ['exports', 'ember-metal/core', 'ember-metal/features', 'e
1722
1809
 
1723
1810
  exports.default = _emberMetalCore.default;
1724
1811
  });
1725
- enifed('ember-metal/alias', ['exports', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/core', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/utils', 'ember-metal/dependent_keys'], function (exports, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalCore, _emberMetalError, _emberMetalProperties, _emberMetalComputed, _emberMetalUtils, _emberMetalDependent_keys) {
1812
+ enifed('ember-metal/alias', ['exports', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/core', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/dependent_keys'], function (exports, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalCore, _emberMetalError, _emberMetalProperties, _emberMetalComputed, _emberMetalUtils, _emberMetalMeta, _emberMetalDependent_keys) {
1726
1813
  'use strict';
1727
1814
 
1728
1815
  exports.default = alias;
@@ -1749,24 +1836,24 @@ enifed('ember-metal/alias', ['exports', 'ember-metal/property_get', 'ember-metal
1749
1836
  };
1750
1837
 
1751
1838
  AliasedProperty.prototype.willWatch = function (obj, keyName) {
1752
- _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, _emberMetalUtils.meta(obj));
1839
+ _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, _emberMetalMeta.meta(obj));
1753
1840
  };
1754
1841
 
1755
1842
  AliasedProperty.prototype.didUnwatch = function (obj, keyName) {
1756
- _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, _emberMetalUtils.meta(obj));
1843
+ _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, _emberMetalMeta.meta(obj));
1757
1844
  };
1758
1845
 
1759
1846
  AliasedProperty.prototype.setup = function (obj, keyName) {
1760
1847
  _emberMetalCore.default.assert('Setting alias \'' + keyName + '\' on self', this.altKey !== keyName);
1761
- var m = _emberMetalUtils.meta(obj);
1762
- if (m.watching[keyName]) {
1848
+ var m = _emberMetalMeta.meta(obj);
1849
+ if (m.peekWatching(keyName)) {
1763
1850
  _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, m);
1764
1851
  }
1765
1852
  };
1766
1853
 
1767
1854
  AliasedProperty.prototype.teardown = function (obj, keyName) {
1768
- var m = _emberMetalUtils.meta(obj);
1769
- if (m.watching[keyName]) {
1855
+ var m = _emberMetalMeta.meta(obj);
1856
+ if (m.peekWatching(keyName)) {
1770
1857
  _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, m);
1771
1858
  }
1772
1859
  };
@@ -1795,6 +1882,88 @@ enifed('ember-metal/alias', ['exports', 'ember-metal/property_get', 'ember-metal
1795
1882
  AliasedProperty.prototype.meta = _emberMetalComputed.ComputedProperty.prototype.meta;
1796
1883
  });
1797
1884
  // Ember.assert
1885
+ enifed("ember-metal/assert", ["exports"], function (exports) {
1886
+ "use strict";
1887
+
1888
+ exports.registerDebugFunction = registerDebugFunction;
1889
+ exports.assert = assert;
1890
+ exports.warn = warn;
1891
+ exports.debug = debug;
1892
+ exports.deprecate = deprecate;
1893
+ exports.deprecateFunc = deprecateFunc;
1894
+ exports.runInDebug = runInDebug;
1895
+ var debugFunctions = {
1896
+ assert: function () {},
1897
+ warn: function () {},
1898
+ debug: function () {},
1899
+ deprecate: function () {},
1900
+ deprecateFunc: function () {
1901
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
1902
+ args[_key] = arguments[_key];
1903
+ }
1904
+
1905
+ return args[args.length - 1];
1906
+ },
1907
+ runInDebug: function () {}
1908
+ };
1909
+
1910
+ exports.debugFunctions = debugFunctions;
1911
+
1912
+ function registerDebugFunction(name, fn) {
1913
+ debugFunctions[name] = fn;
1914
+ }
1915
+
1916
+ function assert() {
1917
+ return debugFunctions.assert.apply(undefined, arguments);
1918
+ }
1919
+
1920
+ function warn() {
1921
+ return debugFunctions.warn.apply(undefined, arguments);
1922
+ }
1923
+
1924
+ function debug() {
1925
+ return debugFunctions.debug.apply(undefined, arguments);
1926
+ }
1927
+
1928
+ function deprecate() {
1929
+ return debugFunctions.deprecate.apply(undefined, arguments);
1930
+ }
1931
+
1932
+ function deprecateFunc() {
1933
+ return debugFunctions.deprecateFunc.apply(undefined, arguments);
1934
+ }
1935
+
1936
+ function runInDebug() {
1937
+ return debugFunctions.runInDebug.apply(undefined, arguments);
1938
+ }
1939
+ });
1940
+ enifed("ember-metal/assign", ["exports"], function (exports) {
1941
+ "use strict";
1942
+
1943
+ exports.default = assign;
1944
+
1945
+ function assign(original) {
1946
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1947
+ args[_key - 1] = arguments[_key];
1948
+ }
1949
+
1950
+ for (var i = 0, l = args.length; i < l; i++) {
1951
+ var arg = args[i];
1952
+ if (!arg) {
1953
+ continue;
1954
+ }
1955
+
1956
+ var updates = Object.keys(arg);
1957
+
1958
+ for (var _i = 0, _l = updates.length; _i < _l; _i++) {
1959
+ var prop = updates[_i];
1960
+ original[prop] = arg[prop];
1961
+ }
1962
+ }
1963
+
1964
+ return original;
1965
+ }
1966
+ });
1798
1967
  enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/observer', 'ember-metal/run_loop', 'ember-metal/path_cache'], function (exports, _emberMetalCore, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalUtils, _emberMetalObserver, _emberMetalRun_loop, _emberMetalPath_cache) {
1799
1968
  'use strict';
1800
1969
 
@@ -2306,7 +2475,7 @@ enifed('ember-metal/cache', ['exports', 'ember-metal/dictionary'], function (exp
2306
2475
  }
2307
2476
  };
2308
2477
  });
2309
- enifed('ember-metal/chains', ['exports', 'ember-metal/core', 'ember-metal/property_get', 'ember-metal/utils', 'ember-metal/watch_key'], function (exports, _emberMetalCore, _emberMetalProperty_get, _emberMetalUtils, _emberMetalWatch_key) {
2478
+ enifed('ember-metal/chains', ['exports', 'ember-metal/core', 'ember-metal/property_get', 'ember-metal/meta', 'ember-metal/watch_key', 'ember-metal/empty_object'], function (exports, _emberMetalCore, _emberMetalProperty_get, _emberMetalMeta, _emberMetalWatch_key, _emberMetalEmpty_object) {
2310
2479
  'use strict';
2311
2480
 
2312
2481
  exports.flushPendingChains = flushPendingChains;
@@ -2326,17 +2495,13 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/core', 'ember-metal/proper
2326
2495
  return !(isObject(obj) && obj.isDescriptor && obj._volatile === false);
2327
2496
  }
2328
2497
 
2329
- function Chains() {}
2330
-
2331
- Chains.prototype = Object.create(null);
2332
-
2333
2498
  function ChainWatchers(obj) {
2334
2499
  // this obj would be the referencing chain node's parent node's value
2335
2500
  this.obj = obj;
2336
2501
  // chain nodes that reference a key in this obj by key
2337
2502
  // we only create ChainWatchers when we are going to add them
2338
2503
  // so create this upfront
2339
- this.chains = new Chains();
2504
+ this.chains = new _emberMetalEmpty_object.default();
2340
2505
  }
2341
2506
 
2342
2507
  ChainWatchers.prototype = {
@@ -2438,19 +2603,17 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/core', 'ember-metal/proper
2438
2603
  _emberMetalCore.default.warn('Watching an undefined global, Ember expects watched globals to be ' + 'setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0, { id: 'ember-metal.chains-flush-pending-chains' });
2439
2604
  }
2440
2605
 
2606
+ function makeChainWatcher(obj) {
2607
+ return new ChainWatchers(obj);
2608
+ }
2609
+
2441
2610
  function addChainWatcher(obj, keyName, node) {
2442
2611
  if (!isObject(obj)) {
2443
2612
  return;
2444
2613
  }
2445
2614
 
2446
- var m = _emberMetalUtils.meta(obj);
2447
-
2448
- if (m.chainWatchers === undefined || m.chainWatchers.obj !== obj) {
2449
- m.chainWatchers = new ChainWatchers(obj);
2450
- }
2451
-
2452
- m.chainWatchers.add(keyName, node);
2453
-
2615
+ var m = _emberMetalMeta.meta(obj);
2616
+ m.writableChainWatchers(makeChainWatcher).add(keyName, node);
2454
2617
  _emberMetalWatch_key.watchKey(obj, keyName, m);
2455
2618
  }
2456
2619
 
@@ -2461,14 +2624,14 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/core', 'ember-metal/proper
2461
2624
 
2462
2625
  var m = obj.__ember_meta__;
2463
2626
 
2464
- if (!m || m.chainWatchers === undefined || m.chainWatchers.obj !== obj) {
2627
+ if (!m || !m.readableChainWatchers()) {
2465
2628
  return;
2466
2629
  }
2467
2630
 
2468
2631
  // make meta writable
2469
- m = _emberMetalUtils.meta(obj);
2632
+ m = _emberMetalMeta.meta(obj);
2470
2633
 
2471
- m.chainWatchers.remove(keyName, node);
2634
+ m.readableChainWatchers().remove(keyName, node);
2472
2635
 
2473
2636
  _emberMetalWatch_key.unwatchKey(obj, keyName, m);
2474
2637
  }
@@ -2519,8 +2682,9 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/core', 'ember-metal/proper
2519
2682
  return _emberMetalProperty_get.get(obj, key);
2520
2683
  // Otherwise attempt to get the cached value of the computed property
2521
2684
  } else {
2522
- if (meta.cache && key in meta.cache) {
2523
- return meta.cache[key];
2685
+ var cache = meta.readableCache();
2686
+ if (cache && key in cache) {
2687
+ return cache[key];
2524
2688
  }
2525
2689
  }
2526
2690
  }
@@ -2625,7 +2789,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/core', 'ember-metal/proper
2625
2789
  var chains = this._chains;
2626
2790
  var node;
2627
2791
  if (chains === undefined) {
2628
- chains = this._chains = new Chains();
2792
+ chains = this._chains = new _emberMetalEmpty_object.default();
2629
2793
  } else {
2630
2794
  node = chains[key];
2631
2795
  }
@@ -2714,16 +2878,17 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/core', 'ember-metal/proper
2714
2878
  // We only create meta if we really have to
2715
2879
  var m = obj.__ember_meta__;
2716
2880
  if (m) {
2881
+ m = _emberMetalMeta.meta(obj);
2882
+
2717
2883
  // finish any current chains node watchers that reference obj
2718
- var chainWatchers = m.chainWatchers;
2884
+ var chainWatchers = m.readableChainWatchers();
2719
2885
  if (chainWatchers) {
2720
2886
  chainWatchers.revalidateAll();
2721
2887
  }
2722
- // copy chains from prototype
2723
- var chains = m.chains;
2724
- if (chains && chains.value() !== obj) {
2725
- // need to check if meta is writable
2726
- _emberMetalUtils.meta(obj).chains = chains.copy(obj);
2888
+ // ensure that if we have inherited any chains they have been
2889
+ // copied onto our own meta.
2890
+ if (m.readableChains()) {
2891
+ m.writableChains();
2727
2892
  }
2728
2893
  }
2729
2894
  }
@@ -2732,7 +2897,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/core', 'ember-metal/proper
2732
2897
  exports.ChainNode = ChainNode;
2733
2898
  });
2734
2899
  // warn, assert, etc;
2735
- enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/expand_properties', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/property_events', 'ember-metal/dependent_keys'], function (exports, _emberMetalCore, _emberMetalProperty_set, _emberMetalUtils, _emberMetalExpand_properties, _emberMetalError, _emberMetalProperties, _emberMetalProperty_events, _emberMetalDependent_keys) {
2900
+ enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/expand_properties', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/property_events', 'ember-metal/dependent_keys'], function (exports, _emberMetalCore, _emberMetalProperty_set, _emberMetalUtils, _emberMetalMeta, _emberMetalExpand_properties, _emberMetalError, _emberMetalProperties, _emberMetalProperty_events, _emberMetalDependent_keys) {
2736
2901
  'use strict';
2737
2902
 
2738
2903
  exports.default = computed;
@@ -2742,7 +2907,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/prop
2742
2907
  @submodule ember-metal
2743
2908
  */
2744
2909
 
2745
- var metaFor = _emberMetalUtils.meta;
2910
+ var metaFor = _emberMetalMeta.meta;
2746
2911
 
2747
2912
  function UNDEFINED() {}
2748
2913
 
@@ -3000,7 +3165,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/prop
3000
3165
  return;
3001
3166
  }
3002
3167
 
3003
- var cache = meta.cache;
3168
+ var cache = meta.readableCache();
3004
3169
  if (cache && cache[keyName] !== undefined) {
3005
3170
  cache[keyName] = undefined;
3006
3171
  _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, meta);
@@ -3040,10 +3205,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/prop
3040
3205
  }
3041
3206
 
3042
3207
  var meta = metaFor(obj);
3043
- var cache = meta.cache;
3044
- if (!cache) {
3045
- cache = meta.cache = {};
3046
- }
3208
+ var cache = meta.writableCache();
3047
3209
 
3048
3210
  var result = cache[keyName];
3049
3211
  if (result === UNDEFINED) {
@@ -3059,7 +3221,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/prop
3059
3221
  cache[keyName] = ret;
3060
3222
  }
3061
3223
 
3062
- var chainWatchers = meta.chainWatchers;
3224
+ var chainWatchers = meta.readableChainWatchers();
3063
3225
  if (chainWatchers) {
3064
3226
  chainWatchers.revalidate(keyName);
3065
3227
  }
@@ -3162,10 +3324,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/prop
3162
3324
  // cache requires own meta
3163
3325
  var meta = metaFor(obj);
3164
3326
  // either there is a writable cache or we need one to update
3165
- var cache = meta.cache;
3166
- if (!cache) {
3167
- cache = meta.cache = {};
3168
- }
3327
+ var cache = meta.writableCache();
3169
3328
  var hadCachedValue = false;
3170
3329
  var cachedValue = undefined;
3171
3330
  if (cache[keyName] !== undefined) {
@@ -3182,7 +3341,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/prop
3182
3341
  return ret;
3183
3342
  }
3184
3343
 
3185
- var watched = meta.watching && meta.watching[keyName];
3344
+ var watched = meta.peekWatching(keyName);
3186
3345
  if (watched) {
3187
3346
  _emberMetalProperty_events.propertyWillChange(obj, keyName);
3188
3347
  }
@@ -3214,7 +3373,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/prop
3214
3373
  return;
3215
3374
  }
3216
3375
  var meta = metaFor(obj);
3217
- var cache = meta.cache;
3376
+ var cache = meta.readableCache();
3218
3377
  if (cache && cache[keyName] !== undefined) {
3219
3378
  _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, meta);
3220
3379
  cache[keyName] = undefined;
@@ -3309,7 +3468,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/core', 'ember-metal/prop
3309
3468
  */
3310
3469
  function cacheFor(obj, key) {
3311
3470
  var meta = obj.__ember_meta__;
3312
- var cache = meta && meta.source === obj && meta.cache;
3471
+ var cache = meta && meta.source === obj && meta.readableCache();
3313
3472
  var ret = cache && cache[key];
3314
3473
 
3315
3474
  if (ret === UNDEFINED) {
@@ -4036,7 +4195,7 @@ enifed('ember-metal/computed_macros', ['exports', 'ember-metal/core', 'ember-met
4036
4195
  });
4037
4196
  }
4038
4197
  });
4039
- enifed('ember-metal/core', ['exports'], function (exports) {
4198
+ enifed('ember-metal/core', ['exports', 'ember-metal/assert'], function (exports, _emberMetalAssert) {
4040
4199
  /*globals Ember:true,ENV,EmberENV */
4041
4200
 
4042
4201
  /**
@@ -4059,7 +4218,7 @@ enifed('ember-metal/core', ['exports'], function (exports) {
4059
4218
 
4060
4219
  @class Ember
4061
4220
  @static
4062
- @version 2.0.3
4221
+ @version 2.1.0-beta.1
4063
4222
  @public
4064
4223
  */
4065
4224
 
@@ -4093,11 +4252,11 @@ enifed('ember-metal/core', ['exports'], function (exports) {
4093
4252
 
4094
4253
  @property VERSION
4095
4254
  @type String
4096
- @default '2.0.3'
4255
+ @default '2.1.0-beta.1'
4097
4256
  @static
4098
4257
  @public
4099
4258
  */
4100
- Ember.VERSION = '2.0.3';
4259
+ Ember.VERSION = '2.1.0-beta.1';
4101
4260
 
4102
4261
  /**
4103
4262
  The hash of environment variables used to control various configuration
@@ -4206,32 +4365,12 @@ enifed('ember-metal/core', ['exports'], function (exports) {
4206
4365
  Ember.K = K;
4207
4366
  //TODO: ES6 GLOBAL TODO
4208
4367
 
4209
- // Stub out the methods defined by the ember-debug package in case it's not loaded
4210
-
4211
- if ('undefined' === typeof Ember.assert) {
4212
- Ember.assert = K;
4213
- }
4214
- if ('undefined' === typeof Ember.warn) {
4215
- Ember.warn = K;
4216
- }
4217
- if ('undefined' === typeof Ember.debug) {
4218
- Ember.debug = K;
4219
- }
4220
- if ('undefined' === typeof Ember.runInDebug) {
4221
- Ember.runInDebug = K;
4222
- }
4223
- if ('undefined' === typeof Ember.deprecate) {
4224
- Ember.deprecate = K;
4225
- }
4226
- if ('undefined' === typeof Ember.deprecateFunc) {
4227
- Ember.deprecateFunc = function () {
4228
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
4229
- args[_key] = arguments[_key];
4230
- }
4231
-
4232
- return args[args.length - 1];
4233
- };
4234
- }
4368
+ Ember.assert = _emberMetalAssert.assert;
4369
+ Ember.warn = _emberMetalAssert.warn;
4370
+ Ember.debug = _emberMetalAssert.debug;
4371
+ Ember.deprecate = _emberMetalAssert.deprecate;
4372
+ Ember.deprecateFunc = _emberMetalAssert.deprecateFunc;
4373
+ Ember.runInDebug = _emberMetalAssert.runInDebug;
4235
4374
 
4236
4375
  exports.default = Ember;
4237
4376
  });
@@ -4253,50 +4392,19 @@ enifed('ember-metal/dependent_keys', ['exports', 'ember-metal/watching'], functi
4253
4392
  // DEPENDENT KEYS
4254
4393
  //
4255
4394
 
4256
- // data structure:
4257
- // meta.deps = {
4258
- // 'depKey': {
4259
- // 'keyName': count,
4260
- // }
4261
- // }
4262
-
4263
- /*
4264
- This function returns a map of unique dependencies for a
4265
- given object and key.
4266
- */
4267
- function keysForDep(depsMeta, depKey) {
4268
- var keys = depsMeta[depKey];
4269
- if (!keys) {
4270
- // if there are no dependencies yet for a the given key
4271
- // create a new empty list of dependencies for the key
4272
- keys = depsMeta[depKey] = {};
4273
- } else if (!depsMeta.hasOwnProperty(depKey)) {
4274
- // otherwise if the dependency list is inherited from
4275
- // a superclass, clone the hash
4276
- keys = depsMeta[depKey] = Object.create(keys);
4277
- }
4278
- return keys;
4279
- }
4280
-
4281
- function metaForDeps(meta) {
4282
- return keysForDep(meta, 'deps');
4283
- }
4284
-
4285
4395
  function addDependentKeys(desc, obj, keyName, meta) {
4286
4396
  // the descriptor has a list of dependent keys, so
4287
4397
  // add all of its dependent keys.
4288
- var depsMeta, idx, len, depKey, keys;
4398
+ var idx, len, depKey, keys;
4289
4399
  var depKeys = desc._dependentKeys;
4290
4400
  if (!depKeys) {
4291
4401
  return;
4292
4402
  }
4293
4403
 
4294
- depsMeta = metaForDeps(meta);
4295
-
4296
4404
  for (idx = 0, len = depKeys.length; idx < len; idx++) {
4297
4405
  depKey = depKeys[idx];
4298
4406
  // Lookup keys meta for depKey
4299
- keys = keysForDep(depsMeta, depKey);
4407
+ keys = meta.writableDeps(depKey);
4300
4408
  // Increment the number of times depKey depends on keyName.
4301
4409
  keys[keyName] = (keys[keyName] || 0) + 1;
4302
4410
  // Watch the depKey
@@ -4308,17 +4416,15 @@ enifed('ember-metal/dependent_keys', ['exports', 'ember-metal/watching'], functi
4308
4416
  // the descriptor has a list of dependent keys, so
4309
4417
  // remove all of its dependent keys.
4310
4418
  var depKeys = desc._dependentKeys;
4311
- var depsMeta, idx, len, depKey, keys;
4419
+ var idx, len, depKey, keys;
4312
4420
  if (!depKeys) {
4313
4421
  return;
4314
4422
  }
4315
4423
 
4316
- depsMeta = metaForDeps(meta);
4317
-
4318
4424
  for (idx = 0, len = depKeys.length; idx < len; idx++) {
4319
4425
  depKey = depKeys[idx];
4320
4426
  // Lookup keys meta for depKey
4321
- keys = keysForDep(depsMeta, depKey);
4427
+ keys = meta.writableDeps(depKey);
4322
4428
  // Decrement the number of times depKey depends on keyName.
4323
4429
  keys[keyName] = (keys[keyName] || 0) - 1;
4324
4430
  // Unwatch the depKey
@@ -4490,13 +4596,14 @@ enifed('ember-metal/error', ['exports', 'ember-metal/core'], function (exports,
4490
4596
 
4491
4597
  EmberError.prototype = Object.create(Error.prototype);
4492
4598
  });
4493
- enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'], function (exports, _emberMetalCore, _emberMetalUtils) {
4599
+ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/meta_listeners'], function (exports, _emberMetalCore, _emberMetalUtils, _emberMetalMeta, _emberMetalMeta_listeners) {
4494
4600
  // Remove "use strict"; from transpiled module until
4495
4601
  // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
4496
4602
  //
4497
4603
 
4498
4604
  exports.accumulateListeners = accumulateListeners;
4499
4605
  exports.addListener = addListener;
4606
+ exports.removeListener = removeListener;
4500
4607
  exports.suspendListener = suspendListener;
4501
4608
  exports.suspendListeners = suspendListeners;
4502
4609
  exports.watchedEvents = watchedEvents;
@@ -4511,10 +4618,6 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4511
4618
  @submodule ember-metal
4512
4619
  */
4513
4620
 
4514
- /* listener flags */
4515
- var ONCE = 1;
4516
- var SUSPENDED = 2;
4517
-
4518
4621
  /*
4519
4622
  The event system uses a series of nested hashes to store listeners on an
4520
4623
  object. When a listener is registered, or when an event arrives, these
@@ -4547,42 +4650,12 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4547
4650
  return index;
4548
4651
  }
4549
4652
 
4550
- function actionsFor(obj, eventName) {
4551
- var meta = _emberMetalUtils.meta(obj, true);
4552
- var actions;
4553
- var listeners = meta.listeners;
4554
-
4555
- if (!listeners) {
4556
- listeners = meta.listeners = Object.create(null);
4557
- listeners.__source__ = obj;
4558
- } else if (listeners.__source__ !== obj) {
4559
- // setup inherited copy of the listeners object
4560
- listeners = meta.listeners = Object.create(listeners);
4561
- listeners.__source__ = obj;
4562
- }
4563
-
4564
- actions = listeners[eventName];
4565
-
4566
- // if there are actions, but the eventName doesn't exist in our listeners, then copy them from the prototype
4567
- if (actions && actions.__source__ !== obj) {
4568
- actions = listeners[eventName] = listeners[eventName].slice();
4569
- actions.__source__ = obj;
4570
- } else if (!actions) {
4571
- actions = listeners[eventName] = [];
4572
- actions.__source__ = obj;
4573
- }
4574
-
4575
- return actions;
4576
- }
4577
-
4578
4653
  function accumulateListeners(obj, eventName, otherActions) {
4579
4654
  var meta = obj['__ember_meta__'];
4580
- var actions = meta && meta.listeners && meta.listeners[eventName];
4581
-
4582
- if (!actions) {
4655
+ if (!meta) {
4583
4656
  return;
4584
4657
  }
4585
-
4658
+ var actions = meta.matchingListeners(eventName);
4586
4659
  var newActions = [];
4587
4660
 
4588
4661
  for (var i = actions.length - 3; i >= 0; i -= 3) {
@@ -4621,19 +4694,12 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4621
4694
  target = null;
4622
4695
  }
4623
4696
 
4624
- var actions = actionsFor(obj, eventName);
4625
- var actionIndex = indexOf(actions, target, method);
4626
4697
  var flags = 0;
4627
-
4628
4698
  if (once) {
4629
- flags |= ONCE;
4699
+ flags |= _emberMetalMeta_listeners.ONCE;
4630
4700
  }
4631
4701
 
4632
- if (actionIndex !== -1) {
4633
- return;
4634
- }
4635
-
4636
- actions.push(target, method, flags);
4702
+ _emberMetalMeta.meta(obj).addToListeners(eventName, target, method, flags);
4637
4703
 
4638
4704
  if ('function' === typeof obj.didAddListener) {
4639
4705
  obj.didAddListener(eventName, target, method);
@@ -4653,6 +4719,7 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4653
4719
  @param {Function|String} method A function or the name of a function to be called on `target`
4654
4720
  @public
4655
4721
  */
4722
+
4656
4723
  function removeListener(obj, eventName, target, method) {
4657
4724
  _emberMetalCore.default.assert('You must pass at least an object and event name to Ember.removeListener', !!obj && !!eventName);
4658
4725
 
@@ -4661,35 +4728,11 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4661
4728
  target = null;
4662
4729
  }
4663
4730
 
4664
- function _removeListener(target, method) {
4665
- var actions = actionsFor(obj, eventName);
4666
- var actionIndex = indexOf(actions, target, method);
4667
-
4668
- // action doesn't exist, give up silently
4669
- if (actionIndex === -1) {
4670
- return;
4671
- }
4672
-
4673
- actions.splice(actionIndex, 3);
4674
-
4731
+ _emberMetalMeta.meta(obj).removeFromListeners(eventName, target, method, function () {
4675
4732
  if ('function' === typeof obj.didRemoveListener) {
4676
- obj.didRemoveListener(eventName, target, method);
4677
- }
4678
- }
4679
-
4680
- if (method) {
4681
- _removeListener(target, method);
4682
- } else {
4683
- var meta = obj['__ember_meta__'];
4684
- var actions = meta && meta.listeners && meta.listeners[eventName];
4685
-
4686
- if (!actions) {
4687
- return;
4688
- }
4689
- for (var i = actions.length - 3; i >= 0; i -= 3) {
4690
- _removeListener(actions[i], actions[i + 1]);
4733
+ obj.didRemoveListener.apply(obj, arguments);
4691
4734
  }
4692
- }
4735
+ });
4693
4736
  }
4694
4737
 
4695
4738
  /**
@@ -4712,25 +4755,7 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4712
4755
  */
4713
4756
 
4714
4757
  function suspendListener(obj, eventName, target, method, callback) {
4715
- if (!method && 'function' === typeof target) {
4716
- method = target;
4717
- target = null;
4718
- }
4719
-
4720
- var actions = actionsFor(obj, eventName);
4721
- var actionIndex = indexOf(actions, target, method);
4722
-
4723
- if (actionIndex !== -1) {
4724
- actions[actionIndex + 2] |= SUSPENDED; // mark the action as suspended
4725
- }
4726
-
4727
- try {
4728
- return callback.call(target);
4729
- } finally {
4730
- if (actionIndex !== -1) {
4731
- actions[actionIndex + 2] &= ~SUSPENDED;
4732
- }
4733
- }
4758
+ return suspendListeners(obj, [eventName], target, method, callback);
4734
4759
  }
4735
4760
 
4736
4761
  /**
@@ -4752,30 +4777,7 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4752
4777
  method = target;
4753
4778
  target = null;
4754
4779
  }
4755
-
4756
- var suspendedActions = [];
4757
- var actionsList = [];
4758
-
4759
- for (var i = 0, l = eventNames.length; i < l; i++) {
4760
- var eventName = eventNames[i];
4761
- var actions = actionsFor(obj, eventName);
4762
- var actionIndex = indexOf(actions, target, method);
4763
-
4764
- if (actionIndex !== -1) {
4765
- actions[actionIndex + 2] |= SUSPENDED;
4766
- suspendedActions.push(actionIndex);
4767
- actionsList.push(actions);
4768
- }
4769
- }
4770
-
4771
- try {
4772
- return callback.call(target);
4773
- } finally {
4774
- for (var i = 0, l = suspendedActions.length; i < l; i++) {
4775
- var actionIndex = suspendedActions[i];
4776
- actionsList[i][actionIndex + 2] &= ~SUSPENDED;
4777
- }
4778
- }
4780
+ return _emberMetalMeta.meta(obj).suspendListeners(eventNames, target, method, callback);
4779
4781
  }
4780
4782
 
4781
4783
  /**
@@ -4788,17 +4790,7 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4788
4790
  */
4789
4791
 
4790
4792
  function watchedEvents(obj) {
4791
- var listeners = obj['__ember_meta__'].listeners;
4792
- var ret = [];
4793
-
4794
- if (listeners) {
4795
- for (var eventName in listeners) {
4796
- if (eventName !== '__source__' && listeners[eventName]) {
4797
- ret.push(eventName);
4798
- }
4799
- }
4800
- }
4801
- return ret;
4793
+ return _emberMetalMeta.meta(obj).watchedEvents();
4802
4794
  }
4803
4795
 
4804
4796
  /**
@@ -4820,10 +4812,10 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4820
4812
  function sendEvent(obj, eventName, params, actions) {
4821
4813
  if (!actions) {
4822
4814
  var meta = obj['__ember_meta__'];
4823
- actions = meta && meta.listeners && meta.listeners[eventName];
4815
+ actions = meta && meta.matchingListeners(eventName);
4824
4816
  }
4825
4817
 
4826
- if (!actions) {
4818
+ if (!actions || actions.length === 0) {
4827
4819
  return;
4828
4820
  }
4829
4821
 
@@ -4836,10 +4828,10 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4836
4828
  if (!method) {
4837
4829
  continue;
4838
4830
  }
4839
- if (flags & SUSPENDED) {
4831
+ if (flags & _emberMetalMeta_listeners.SUSPENDED) {
4840
4832
  continue;
4841
4833
  }
4842
- if (flags & ONCE) {
4834
+ if (flags & _emberMetalMeta_listeners.ONCE) {
4843
4835
  removeListener(obj, eventName, target, method);
4844
4836
  }
4845
4837
  if (!target) {
@@ -4872,9 +4864,10 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4872
4864
 
4873
4865
  function hasListeners(obj, eventName) {
4874
4866
  var meta = obj['__ember_meta__'];
4875
- var actions = meta && meta.listeners && meta.listeners[eventName];
4876
-
4877
- return !!(actions && actions.length);
4867
+ if (!meta) {
4868
+ return false;
4869
+ }
4870
+ return meta.matchingListeners(eventName).length > 0;
4878
4871
  }
4879
4872
 
4880
4873
  /**
@@ -4888,7 +4881,7 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4888
4881
  function listenersFor(obj, eventName) {
4889
4882
  var ret = [];
4890
4883
  var meta = obj['__ember_meta__'];
4891
- var actions = meta && meta.listeners && meta.listeners[eventName];
4884
+ var actions = meta && meta.matchingListeners(eventName);
4892
4885
 
4893
4886
  if (!actions) {
4894
4887
  return ret;
@@ -4938,8 +4931,6 @@ enifed('ember-metal/events', ['exports', 'ember-metal/core', 'ember-metal/utils'
4938
4931
  func.__ember_listens__ = events;
4939
4932
  return func;
4940
4933
  }
4941
-
4942
- exports.removeListener = removeListener;
4943
4934
  });
4944
4935
  enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], function (exports, _emberMetalError) {
4945
4936
  'use strict';
@@ -4968,7 +4959,7 @@ enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], functi
4968
4959
  Ember.expandProperties('{foo,bar}', echo); //=> 'foo', 'bar'
4969
4960
  Ember.expandProperties('foo.{bar,baz}', echo); //=> 'foo.bar', 'foo.baz'
4970
4961
  Ember.expandProperties('{foo,bar}.baz', echo); //=> 'foo.baz', 'bar.baz'
4971
- Ember.expandProperties('foo.{bar,baz}.[]', echo) //=> 'foo.bar.[]', 'foo.baz.[]'
4962
+ Ember.expandProperties('foo.{bar,baz}.[]', echo) //=> 'foo.bar.[]', 'foo.baz.[]'
4972
4963
  Ember.expandProperties('{foo,bar}.{spam,eggs}', echo) //=> 'foo.spam', 'foo.eggs', 'bar.spam', 'bar.eggs'
4973
4964
  Ember.expandProperties('{foo}.bar.{baz}') //=> 'foo.bar.baz'
4974
4965
  ```
@@ -5018,7 +5009,7 @@ enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], functi
5018
5009
  return all;
5019
5010
  }
5020
5011
  });
5021
- enifed('ember-metal/features', ['exports', 'ember-metal/core'], function (exports, _emberMetalCore) {
5012
+ enifed('ember-metal/features', ['exports', 'ember-metal/core', 'ember-metal/assign'], function (exports, _emberMetalCore, _emberMetalAssign) {
5022
5013
  'use strict';
5023
5014
 
5024
5015
  exports.default = isEnabled;
@@ -5036,9 +5027,9 @@ enifed('ember-metal/features', ['exports', 'ember-metal/core'], function (export
5036
5027
  @since 1.1.0
5037
5028
  @public
5038
5029
  */
5039
- var FEATURES = _emberMetalCore.default.ENV.FEATURES || {};
5030
+ var FEATURES = _emberMetalAssign.default({}, _emberMetalCore.default.ENV.FEATURES);exports.FEATURES = FEATURES;
5031
+ // jshint ignore:line
5040
5032
 
5041
- exports.FEATURES = FEATURES;
5042
5033
  /**
5043
5034
  Determine whether the specified `feature` is enabled. Used by Ember's
5044
5035
  build tools to exclude experimental features from beta/stable builds.
@@ -5836,7 +5827,7 @@ enifed('ember-metal/logger', ['exports', 'ember-metal/core', 'ember-metal/error'
5836
5827
  };
5837
5828
  });
5838
5829
  // Ember.imports
5839
- enifed('ember-metal/map', ['exports', 'ember-metal/core', 'ember-metal/utils'], function (exports, _emberMetalCore, _emberMetalUtils) {
5830
+ enifed('ember-metal/map', ['exports', 'ember-metal/core', 'ember-metal/utils', 'ember-metal/empty_object'], function (exports, _emberMetalCore, _emberMetalUtils, _emberMetalEmpty_object) {
5840
5831
  /**
5841
5832
  @module ember
5842
5833
  @submodule ember-metal
@@ -5871,10 +5862,10 @@ enifed('ember-metal/map', ['exports', 'ember-metal/core', 'ember-metal/utils'],
5871
5862
  }
5872
5863
 
5873
5864
  function copyNull(obj) {
5874
- var output = Object.create(null);
5865
+ var output = new _emberMetalEmpty_object.default();
5875
5866
 
5876
5867
  for (var prop in obj) {
5877
- // hasOwnPropery is not needed because obj is Object.create(null);
5868
+ // hasOwnPropery is not needed because obj is new EmptyObject();
5878
5869
  output[prop] = obj[prop];
5879
5870
  }
5880
5871
 
@@ -5903,7 +5894,6 @@ enifed('ember-metal/map', ['exports', 'ember-metal/core', 'ember-metal/utils'],
5903
5894
  @private
5904
5895
  */
5905
5896
  function OrderedSet() {
5906
-
5907
5897
  if (this instanceof OrderedSet) {
5908
5898
  this.clear();
5909
5899
  this._silenceRemoveDeprecation = false;
@@ -5931,7 +5921,7 @@ enifed('ember-metal/map', ['exports', 'ember-metal/core', 'ember-metal/utils'],
5931
5921
  @private
5932
5922
  */
5933
5923
  clear: function () {
5934
- this.presenceSet = Object.create(null);
5924
+ this.presenceSet = new _emberMetalEmpty_object.default();
5935
5925
  this.list = [];
5936
5926
  this.size = 0;
5937
5927
  },
@@ -6089,7 +6079,7 @@ enifed('ember-metal/map', ['exports', 'ember-metal/core', 'ember-metal/utils'],
6089
6079
  if (this instanceof this.constructor) {
6090
6080
  this._keys = OrderedSet.create();
6091
6081
  this._keys._silenceRemoveDeprecation = true;
6092
- this._values = Object.create(null);
6082
+ this._values = new _emberMetalEmpty_object.default();
6093
6083
  this.size = 0;
6094
6084
  } else {
6095
6085
  missingNew('OrderedSet');
@@ -6247,7 +6237,7 @@ enifed('ember-metal/map', ['exports', 'ember-metal/core', 'ember-metal/utils'],
6247
6237
  */
6248
6238
  clear: function () {
6249
6239
  this._keys.clear();
6250
- this._values = Object.create(null);
6240
+ this._values = new _emberMetalEmpty_object.default();
6251
6241
  this.size = 0;
6252
6242
  },
6253
6243
 
@@ -6354,49 +6344,493 @@ enifed('ember-metal/merge', ['exports'], function (exports) {
6354
6344
  */
6355
6345
  'use strict';
6356
6346
 
6357
- exports.default = merge;
6358
- exports.assign = assign;
6347
+ exports.default = merge;
6348
+
6349
+ function merge(original, updates) {
6350
+ if (!updates || typeof updates !== 'object') {
6351
+ return original;
6352
+ }
6353
+
6354
+ var props = Object.keys(updates);
6355
+ var prop;
6356
+ var length = props.length;
6357
+
6358
+ for (var i = 0; i < length; i++) {
6359
+ prop = props[i];
6360
+ original[prop] = updates[prop];
6361
+ }
6362
+
6363
+ return original;
6364
+ }
6365
+ });
6366
+ enifed('ember-metal/meta', ['exports', 'ember-metal/features', 'ember-metal/meta_listeners', 'ember-metal/empty_object'], function (exports, _emberMetalFeatures, _emberMetalMeta_listeners, _emberMetalEmpty_object) {
6367
+ // Remove "use strict"; from transpiled module until
6368
+ // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
6369
+ //
6370
+
6371
+ exports.meta = meta;
6372
+ 'REMOVE_USE_STRICT: true';
6373
+
6374
+ /**
6375
+ @module ember-metal
6376
+ */
6377
+
6378
+ /*
6379
+ This declares several meta-programmed members on the Meta class. Such
6380
+ meta!
6381
+
6382
+ In general, the `readable` variants will give you an object (if it
6383
+ already exists) that you can read but should not modify. The
6384
+ `writable` variants will give you a mutable object, and they will
6385
+ create it if it didn't already exist.
6386
+
6387
+ The following methods will get generated metaprogrammatically, and
6388
+ I'm including them here for greppability:
6389
+
6390
+ writableCache, readableCache, writableWatching, readableWatching,
6391
+ peekWatching, clearWatching, writableMixins, readableMixins,
6392
+ peekMixins, clearMixins, writableBindings, readableBindings,
6393
+ peekBindings, clearBindings, writableValues, readableValues,
6394
+ peekValues, clearValues, writableDeps, readableDeps, getAllDeps
6395
+ writableChainWatchers, readableChainWatchers, writableChains,
6396
+ readableChains
6397
+
6398
+ */
6399
+ var members = {
6400
+ cache: ownMap,
6401
+ watching: inheritedMap,
6402
+ mixins: inheritedMap,
6403
+ bindings: inheritedMap,
6404
+ values: inheritedMap,
6405
+ deps: inheritedMapOfMaps,
6406
+ chainWatchers: ownCustomObject,
6407
+ chains: inheritedCustomObject
6408
+ };
6409
+
6410
+ var memberNames = Object.keys(members);
6411
+
6412
+ function Meta(obj, parentMeta) {
6413
+ this._cache = undefined;
6414
+ this._watching = undefined;
6415
+ this._mixins = undefined;
6416
+ this._bindings = undefined;
6417
+ this._values = undefined;
6418
+ this._deps = undefined;
6419
+ this._chainWatchers = undefined;
6420
+ this._chains = undefined;
6421
+ // used only internally
6422
+ this.source = obj;
6423
+
6424
+ // when meta(obj).proto === obj, the object is intended to be only a
6425
+ // prototype and doesn't need to actually be observable itself
6426
+ this.proto = undefined;
6427
+
6428
+ // The next meta in our inheritance chain. We (will) track this
6429
+ // explicitly instead of using prototypical inheritance because we
6430
+ // have detailed knowledge of how each property should really be
6431
+ // inherited, and we can optimize it much better than JS runtimes.
6432
+ this.parent = parentMeta;
6433
+
6434
+ this._initializeListeners();
6435
+ }
6436
+
6437
+ for (var _name in _emberMetalMeta_listeners.protoMethods) {
6438
+ Meta.prototype[_name] = _emberMetalMeta_listeners.protoMethods[_name];
6439
+ }
6440
+ memberNames.forEach(function (name) {
6441
+ return members[name](name, Meta);
6442
+ });
6443
+
6444
+ // Implements a member that is a lazily created, non-inheritable
6445
+ // POJO.
6446
+ function ownMap(name, Meta) {
6447
+ var key = memberProperty(name);
6448
+ var capitalized = capitalize(name);
6449
+ Meta.prototype['writable' + capitalized] = function () {
6450
+ return this._getOrCreateOwnMap(key);
6451
+ };
6452
+ Meta.prototype['readable' + capitalized] = function () {
6453
+ return this[key];
6454
+ };
6455
+ }
6456
+
6457
+ Meta.prototype._getOrCreateOwnMap = function (key) {
6458
+ var ret = this[key];
6459
+ if (!ret) {
6460
+ ret = this[key] = new _emberMetalEmpty_object.default();
6461
+ }
6462
+ return ret;
6463
+ };
6464
+
6465
+ // Implements a member that is a lazily created POJO with inheritable
6466
+ // values.
6467
+ function inheritedMap(name, Meta) {
6468
+ var key = memberProperty(name);
6469
+ var capitalized = capitalize(name);
6470
+
6471
+ Meta.prototype['writable' + capitalized] = function () {
6472
+ return this._getOrCreateInheritedMap(key);
6473
+ };
6474
+
6475
+ Meta.prototype['readable' + capitalized] = function () {
6476
+ return this._getInherited(key);
6477
+ };
6478
+
6479
+ Meta.prototype['peek' + capitalized] = function (subkey) {
6480
+ var map = this._getInherited(key);
6481
+ if (map) {
6482
+ return map[subkey];
6483
+ }
6484
+ };
6485
+
6486
+ Meta.prototype['clear' + capitalized] = function () {
6487
+ this[key] = new _emberMetalEmpty_object.default();
6488
+ };
6489
+ }
6490
+
6491
+ Meta.prototype._getOrCreateInheritedMap = function (key) {
6492
+ var ret = this[key];
6493
+ if (!ret) {
6494
+ if (this.parent) {
6495
+ ret = this[key] = Object.create(this.parent._getOrCreateInheritedMap(key));
6496
+ } else {
6497
+ ret = this[key] = new _emberMetalEmpty_object.default();
6498
+ }
6499
+ }
6500
+ return ret;
6501
+ };
6502
+
6503
+ Meta.prototype._getInherited = function (key) {
6504
+ var pointer = this;
6505
+ while (pointer !== undefined) {
6506
+ if (pointer[key]) {
6507
+ return pointer[key];
6508
+ }
6509
+ pointer = pointer.parent;
6510
+ }
6511
+ };
6512
+
6513
+ // Implements a member that provides a lazily created map of maps,
6514
+ // with inheritance at both levels.
6515
+ function inheritedMapOfMaps(name, Meta) {
6516
+ var key = memberProperty(name);
6517
+ var capitalized = capitalize(name);
6518
+
6519
+ Meta.prototype['writable' + capitalized] = function (subkey) {
6520
+ var outerMap = this._getOrCreateInheritedMap(key);
6521
+ var innerMap = outerMap[subkey];
6522
+ if (!innerMap) {
6523
+ innerMap = outerMap[subkey] = new _emberMetalEmpty_object.default();
6524
+ } else if (!Object.hasOwnProperty.call(outerMap, subkey)) {
6525
+ innerMap = outerMap[subkey] = Object.create(innerMap);
6526
+ }
6527
+ return innerMap;
6528
+ };
6529
+
6530
+ Meta.prototype['readable' + capitalized] = function (subkey) {
6531
+ var map = this._getInherited(key);
6532
+ if (map) {
6533
+ return map[subkey];
6534
+ }
6535
+ };
6536
+
6537
+ Meta.prototype['getAll' + capitalized] = function () {
6538
+ return this._getInherited(key);
6539
+ };
6540
+ }
6541
+
6542
+ // Implements a member that provides a non-heritable, lazily-created
6543
+ // object using the method you provide.
6544
+ function ownCustomObject(name, Meta) {
6545
+ var key = memberProperty(name);
6546
+ var capitalized = capitalize(name);
6547
+ Meta.prototype['writable' + capitalized] = function (create) {
6548
+ var ret = this[key];
6549
+ if (!ret) {
6550
+ ret = this[key] = create(this.source);
6551
+ }
6552
+ return ret;
6553
+ };
6554
+ Meta.prototype['readable' + capitalized] = function () {
6555
+ return this[key];
6556
+ };
6557
+ }
6558
+
6559
+ // Implements a member that provides an inheritable, lazily-created
6560
+ // object using the method you provide. We will derived children from
6561
+ // their parents by calling your object's `copy()` method.
6562
+ function inheritedCustomObject(name, Meta) {
6563
+ var key = memberProperty(name);
6564
+ var capitalized = capitalize(name);
6565
+ Meta.prototype['writable' + capitalized] = function (create) {
6566
+ var ret = this[key];
6567
+ if (!ret) {
6568
+ if (this.parent) {
6569
+ ret = this[key] = this.parent['writable' + capitalized](create).copy(this.source);
6570
+ } else {
6571
+ ret = this[key] = create(this.source);
6572
+ }
6573
+ }
6574
+ return ret;
6575
+ };
6576
+ Meta.prototype['readable' + capitalized] = function () {
6577
+ return this._getInherited(key);
6578
+ };
6579
+ }
6580
+
6581
+ function memberProperty(name) {
6582
+ return '_' + name;
6583
+ }
6584
+
6585
+ // there's a more general-purpose capitalize in ember-runtime, but we
6586
+ // don't want to make ember-metal depend on ember-runtime.
6587
+ function capitalize(name) {
6588
+ return name.replace(/^\w/, function (m) {
6589
+ return m.toUpperCase();
6590
+ });
6591
+ }
6592
+
6593
+ var META_DESC = {
6594
+ writable: true,
6595
+ configurable: true,
6596
+ enumerable: false,
6597
+ value: null
6598
+ };
6599
+
6600
+ exports.META_DESC = META_DESC;
6601
+ var EMBER_META_PROPERTY = {
6602
+ name: '__ember_meta__',
6603
+ descriptor: META_DESC
6604
+ };
6605
+
6606
+ // Placeholder for non-writable metas.
6607
+ var EMPTY_META = new Meta(null);
6608
+
6609
+ exports.EMPTY_META = EMPTY_META;
6610
+
6611
+ EMPTY_META.writableValues();
6612
+
6613
+ /**
6614
+ Retrieves the meta hash for an object. If `writable` is true ensures the
6615
+ hash is writable for this object as well.
6616
+
6617
+ The meta object contains information about computed property descriptors as
6618
+ well as any watched properties and other information. You generally will
6619
+ not access this information directly but instead work with higher level
6620
+ methods that manipulate this hash indirectly.
6621
+
6622
+ @method meta
6623
+ @for Ember
6624
+ @private
6625
+
6626
+ @param {Object} obj The object to retrieve meta for
6627
+ @param {Boolean} [writable=true] Pass `false` if you do not intend to modify
6628
+ the meta hash, allowing the method to avoid making an unnecessary copy.
6629
+ @return {Object} the meta hash for an object
6630
+ */
6631
+
6632
+ function meta(obj, writable) {
6633
+ var ret = obj.__ember_meta__;
6634
+ if (writable === false) {
6635
+ return ret || EMPTY_META;
6636
+ }
6637
+
6638
+ if (ret && ret.source === obj) {
6639
+ return ret;
6640
+ }
6641
+
6642
+ if (!ret) {
6643
+ ret = new Meta(obj);
6644
+
6645
+ ret.writableValues();
6646
+ } else {
6647
+ ret = new Meta(obj, ret);
6648
+ }
6649
+
6650
+ if (obj.__defineNonEnumerable) {
6651
+ obj.__defineNonEnumerable(EMBER_META_PROPERTY);
6652
+ } else {
6653
+ Object.defineProperty(obj, '__ember_meta__', META_DESC);
6654
+ }
6655
+ obj.__ember_meta__ = ret;
6656
+
6657
+ return ret;
6658
+ }
6659
+ });
6660
+ enifed('ember-metal/meta_listeners', ['exports'], function (exports) {
6661
+ /*
6662
+ When we render a rich template hierarchy, the set of events that
6663
+ *might* happen tends to be much larger than the set of events that
6664
+ actually happen. This implies that we should make listener creation &
6665
+ destruction cheap, even at the cost of making event dispatch more
6666
+ expensive.
6667
+
6668
+ Thus we store a new listener with a single push and no new
6669
+ allocations, without even bothering to do deduplication -- we can
6670
+ save that for dispatch time, if an event actually happens.
6671
+ */
6672
+
6673
+ /* listener flags */
6674
+ 'use strict';
6359
6675
 
6360
- function merge(original, updates) {
6361
- if (!updates || typeof updates !== 'object') {
6362
- return original;
6363
- }
6676
+ var ONCE = 1;
6677
+ exports.ONCE = ONCE;
6678
+ var SUSPENDED = 2;
6364
6679
 
6365
- var props = Object.keys(updates);
6366
- var prop;
6367
- var length = props.length;
6680
+ exports.SUSPENDED = SUSPENDED;
6681
+ var protoMethods = {
6368
6682
 
6369
- for (var i = 0; i < length; i++) {
6370
- prop = props[i];
6371
- original[prop] = updates[prop];
6372
- }
6683
+ addToListeners: function (eventName, target, method, flags) {
6684
+ if (!this._listeners) {
6685
+ this._listeners = [];
6686
+ }
6687
+ this._listeners.push(eventName, target, method, flags);
6688
+ },
6373
6689
 
6374
- return original;
6375
- }
6690
+ _finalizeListeners: function () {
6691
+ if (this._listenersFinalized) {
6692
+ return;
6693
+ }
6694
+ if (!this._listeners) {
6695
+ this._listeners = [];
6696
+ }
6697
+ var pointer = this.parent;
6698
+ while (pointer) {
6699
+ var listeners = pointer._listeners;
6700
+ if (listeners) {
6701
+ this._listeners = this._listeners.concat(listeners);
6702
+ }
6703
+ if (pointer._listenersFinalized) {
6704
+ break;
6705
+ }
6706
+ pointer = pointer.parent;
6707
+ }
6708
+ this._listenersFinalized = true;
6709
+ },
6376
6710
 
6377
- function assign(original) {
6378
- for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
6379
- args[_key - 1] = arguments[_key];
6380
- }
6711
+ removeFromListeners: function (eventName, target, method, didRemove) {
6712
+ var pointer = this;
6713
+ while (pointer) {
6714
+ var listeners = pointer._listeners;
6715
+ if (listeners) {
6716
+ for (var index = listeners.length - 4; index >= 0; index -= 4) {
6717
+ if (listeners[index] === eventName && (!method || listeners[index + 1] === target && listeners[index + 2] === method)) {
6718
+ if (pointer === this) {
6719
+ // we are modifying our own list, so we edit directly
6720
+ if (typeof didRemove === 'function') {
6721
+ didRemove(eventName, target, listeners[index + 2]);
6722
+ }
6723
+ listeners.splice(index, 4);
6724
+ } else {
6725
+ // we are trying to remove an inherited listener, so we do
6726
+ // just-in-time copying to detach our own listeners from
6727
+ // our inheritance chain.
6728
+ this._finalizeListeners();
6729
+ return this.removeFromListeners(eventName, target, method);
6730
+ }
6731
+ }
6732
+ }
6733
+ }
6734
+ if (pointer._listenersFinalized) {
6735
+ break;
6736
+ }
6737
+ pointer = pointer.parent;
6738
+ }
6739
+ },
6381
6740
 
6382
- for (var i = 0, l = args.length; i < l; i++) {
6383
- var arg = args[i];
6384
- if (!arg) {
6385
- continue;
6741
+ matchingListeners: function (eventName) {
6742
+ var pointer = this;
6743
+ var result = [];
6744
+ while (pointer) {
6745
+ var listeners = pointer._listeners;
6746
+ if (listeners) {
6747
+ for (var index = 0; index < listeners.length - 3; index += 4) {
6748
+ if (listeners[index] === eventName) {
6749
+ pushUniqueListener(result, listeners, index);
6750
+ }
6751
+ }
6752
+ }
6753
+ if (pointer._listenersFinalized) {
6754
+ break;
6755
+ }
6756
+ pointer = pointer.parent;
6757
+ }
6758
+ var sus = this._suspendedListeners;
6759
+ if (sus) {
6760
+ for (var susIndex = 0; susIndex < sus.length - 2; susIndex += 3) {
6761
+ if (eventName === sus[susIndex]) {
6762
+ for (var resultIndex = 0; resultIndex < result.length - 2; resultIndex += 3) {
6763
+ if (result[resultIndex] === sus[susIndex + 1] && result[resultIndex + 1] === sus[susIndex + 2]) {
6764
+ result[resultIndex + 2] |= SUSPENDED;
6765
+ }
6766
+ }
6767
+ }
6768
+ }
6386
6769
  }
6770
+ return result;
6771
+ },
6387
6772
 
6388
- var updates = Object.keys(arg);
6773
+ suspendListeners: function (eventNames, target, method, callback) {
6774
+ var sus = this._suspendedListeners;
6775
+ if (!sus) {
6776
+ sus = this._suspendedListeners = [];
6777
+ }
6778
+ for (var i = 0; i < eventNames.length; i++) {
6779
+ sus.push(eventNames[i], target, method);
6780
+ }
6781
+ try {
6782
+ return callback.call(target);
6783
+ } finally {
6784
+ if (sus.length === eventNames.length) {
6785
+ this._suspendedListeners = undefined;
6786
+ } else {
6787
+ for (var i = sus.length - 3; i >= 0; i -= 3) {
6788
+ if (sus[i + 1] === target && sus[i + 2] === method && eventNames.indexOf(sus[i]) !== -1) {
6789
+ sus.splice(i, 3);
6790
+ }
6791
+ }
6792
+ }
6793
+ }
6794
+ },
6389
6795
 
6390
- for (var _i = 0, _l = updates.length; _i < _l; _i++) {
6391
- var prop = updates[_i];
6392
- original[prop] = arg[prop];
6796
+ watchedEvents: function () {
6797
+ var pointer = this;
6798
+ var names = {};
6799
+ while (pointer) {
6800
+ var listeners = pointer._listeners;
6801
+ if (listeners) {
6802
+ for (var index = 0; index < listeners.length - 3; index += 4) {
6803
+ names[listeners[index]] = true;
6804
+ }
6805
+ }
6806
+ if (pointer._listenersFinalized) {
6807
+ break;
6808
+ }
6809
+ pointer = pointer.parent;
6393
6810
  }
6811
+ return Object.keys(names);
6812
+ },
6813
+
6814
+ _initializeListeners: function () {
6815
+ this._listeners = undefined;
6816
+ this._listenersFinalized = undefined;
6817
+ this._suspendedListeners = undefined;
6394
6818
  }
6819
+ };
6395
6820
 
6396
- return original;
6821
+ exports.protoMethods = protoMethods;
6822
+ function pushUniqueListener(destination, source, index) {
6823
+ var target = source[index + 1];
6824
+ var method = source[index + 2];
6825
+ for (var destinationIndex = 0; destinationIndex < destination.length - 2; destinationIndex += 3) {
6826
+ if (destination[destinationIndex] === target && destination[destinationIndex + 1] === method) {
6827
+ return;
6828
+ }
6829
+ }
6830
+ destination.push(target, method, source[index + 3]);
6397
6831
  }
6398
6832
  });
6399
- enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/expand_properties', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/binding', 'ember-metal/observer', 'ember-metal/events', 'ember-metal/streams/utils'], function (exports, _emberMetalCore, _emberMetalMerge, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalUtils, _emberMetalExpand_properties, _emberMetalProperties, _emberMetalComputed, _emberMetalBinding, _emberMetalObserver, _emberMetalEvents, _emberMetalStreamsUtils) {
6833
+ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge', 'ember-metal/empty_object', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/expand_properties', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/binding', 'ember-metal/observer', 'ember-metal/events', 'ember-metal/streams/utils'], function (exports, _emberMetalCore, _emberMetalMerge, _emberMetalEmpty_object, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalUtils, _emberMetalMeta, _emberMetalExpand_properties, _emberMetalProperties, _emberMetalComputed, _emberMetalBinding, _emberMetalObserver, _emberMetalEvents, _emberMetalStreamsUtils) {
6400
6834
  // Remove "use strict"; from transpiled module until
6401
6835
  // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
6402
6836
  //
@@ -6418,47 +6852,8 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6418
6852
  var REQUIRED;
6419
6853
  var a_slice = [].slice;
6420
6854
 
6421
- function superFunction() {
6422
- var func = this.__nextSuper;
6423
- var ret;
6424
-
6425
- if (func) {
6426
- var length = arguments.length;
6427
- this.__nextSuper = null;
6428
- if (length === 0) {
6429
- ret = func.call(this);
6430
- } else if (length === 1) {
6431
- ret = func.call(this, arguments[0]);
6432
- } else if (length === 2) {
6433
- ret = func.call(this, arguments[0], arguments[1]);
6434
- } else {
6435
- ret = func.apply(this, arguments);
6436
- }
6437
- this.__nextSuper = func;
6438
- return ret;
6439
- }
6440
- }
6441
-
6442
- // ensure we prime superFunction to mitigate
6443
- // v8 bug potentially incorrectly deopts this function: https://code.google.com/p/v8/issues/detail?id=3709
6444
- var primer = {
6445
- __nextSuper: function (a, b, c, d) {}
6446
- };
6447
-
6448
- superFunction.call(primer);
6449
- superFunction.call(primer, 1);
6450
- superFunction.call(primer, 1, 2);
6451
- superFunction.call(primer, 1, 2, 3);
6452
-
6453
6855
  function mixinsMeta(obj) {
6454
- var m = _emberMetalUtils.meta(obj, true);
6455
- var ret = m.mixins;
6456
- if (!ret) {
6457
- ret = m.mixins = {};
6458
- } else if (!m.hasOwnProperty('mixins')) {
6459
- ret = m.mixins = Object.create(ret);
6460
- }
6461
- return ret;
6856
+ return _emberMetalMeta.meta(obj, true).writableMixins();
6462
6857
  }
6463
6858
 
6464
6859
  function isMethod(obj) {
@@ -6532,10 +6927,6 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6532
6927
  return property;
6533
6928
  }
6534
6929
 
6535
- var sourceAvailable = (function () {
6536
- return this;
6537
- }).toString().indexOf('return this;') > -1;
6538
-
6539
6930
  function giveMethodSuper(obj, key, method, values, descs) {
6540
6931
  var superMethod;
6541
6932
 
@@ -6554,21 +6945,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6554
6945
  return method;
6555
6946
  }
6556
6947
 
6557
- var hasSuper;
6558
- if (sourceAvailable) {
6559
- hasSuper = method.__hasSuper;
6560
-
6561
- if (hasSuper === undefined) {
6562
- hasSuper = method.toString().indexOf('_super') > -1;
6563
- method.__hasSuper = hasSuper;
6564
- }
6565
- }
6566
-
6567
- if (sourceAvailable === false || hasSuper) {
6568
- return _emberMetalUtils.wrap(method, superMethod);
6569
- } else {
6570
- return method;
6571
- }
6948
+ return _emberMetalUtils.wrap(method, superMethod);
6572
6949
  }
6573
6950
 
6574
6951
  function applyConcatenatedProperties(obj, key, value, values) {
@@ -6617,7 +6994,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6617
6994
  }
6618
6995
 
6619
6996
  if (hasFunction) {
6620
- newBase._super = superFunction;
6997
+ newBase._super = function () {};
6621
6998
  }
6622
6999
 
6623
7000
  return newBase;
@@ -6630,7 +7007,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6630
7007
  }
6631
7008
 
6632
7009
  // Wrap descriptor function to implement
6633
- // __nextSuper() if needed
7010
+ // _super() if needed
6634
7011
  if (value._getter) {
6635
7012
  value = giveDescriptorSuper(meta, key, value, values, descs, base);
6636
7013
  }
@@ -6669,7 +7046,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6669
7046
  }
6670
7047
 
6671
7048
  if (props) {
6672
- meta = _emberMetalUtils.meta(base);
7049
+ meta = _emberMetalMeta.meta(base);
6673
7050
  if (base.willMergeMixin) {
6674
7051
  base.willMergeMixin(props);
6675
7052
  }
@@ -6701,13 +7078,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6701
7078
 
6702
7079
  function detectBinding(obj, key, value, m) {
6703
7080
  if (IS_BINDING.test(key)) {
6704
- var bindings = m.bindings;
6705
- if (!bindings) {
6706
- bindings = m.bindings = {};
6707
- } else if (!m.hasOwnProperty('bindings')) {
6708
- bindings = m.bindings = Object.create(m.bindings);
6709
- }
6710
- bindings[key] = value;
7081
+ m.writableBindings()[key] = value;
6711
7082
  }
6712
7083
  }
6713
7084
 
@@ -6730,7 +7101,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6730
7101
  stream.subscribe(onNotify);
6731
7102
 
6732
7103
  if (obj._streamBindingSubscriptions === undefined) {
6733
- obj._streamBindingSubscriptions = Object.create(null);
7104
+ obj._streamBindingSubscriptions = new _emberMetalEmpty_object.default();
6734
7105
  }
6735
7106
 
6736
7107
  obj._streamBindingSubscriptions[key] = onNotify;
@@ -6738,7 +7109,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6738
7109
 
6739
7110
  function connectBindings(obj, m) {
6740
7111
  // TODO Mixin.apply(instance) should disconnect binding if exists
6741
- var bindings = m.bindings;
7112
+ var bindings = m.readableBindings();
6742
7113
  var key, binding, to;
6743
7114
  if (bindings) {
6744
7115
  for (key in bindings) {
@@ -6760,12 +7131,12 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6760
7131
  }
6761
7132
  }
6762
7133
  // mark as applied
6763
- m.bindings = {};
7134
+ m.clearBindings();
6764
7135
  }
6765
7136
  }
6766
7137
 
6767
7138
  function finishPartial(obj, m) {
6768
- connectBindings(obj, m || _emberMetalUtils.meta(obj));
7139
+ connectBindings(obj, m || _emberMetalMeta.meta(obj));
6769
7140
  return obj;
6770
7141
  }
6771
7142
 
@@ -6816,11 +7187,11 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
6816
7187
  function applyMixin(obj, mixins, partial) {
6817
7188
  var descs = {};
6818
7189
  var values = {};
6819
- var m = _emberMetalUtils.meta(obj);
7190
+ var m = _emberMetalMeta.meta(obj);
6820
7191
  var keys = [];
6821
7192
  var key, value, desc;
6822
7193
 
6823
- obj._super = superFunction;
7194
+ obj._super = function () {};
6824
7195
 
6825
7196
  // Go through all mixins and hashes passed in, and:
6826
7197
  //
@@ -7079,12 +7450,11 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
7079
7450
  if (obj instanceof Mixin) {
7080
7451
  return _detect(obj, this, {});
7081
7452
  }
7082
- var m = obj['__ember_meta__'];
7083
- var mixins = m && m.mixins;
7084
- if (mixins) {
7085
- return !!mixins[_emberMetalUtils.guidFor(this)];
7453
+ var m = obj.__ember_meta__;
7454
+ if (!m) {
7455
+ return false;
7086
7456
  }
7087
- return false;
7457
+ return !!m.peekMixins(_emberMetalUtils.guidFor(this));
7088
7458
  };
7089
7459
 
7090
7460
  MixinPrototype.without = function () {
@@ -7135,7 +7505,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
7135
7505
  // TODO: Make Ember.mixin
7136
7506
  Mixin.mixins = function (obj) {
7137
7507
  var m = obj['__ember_meta__'];
7138
- var mixins = m && m.mixins;
7508
+ var mixins = m && m.readableMixins();
7139
7509
  var ret = [];
7140
7510
 
7141
7511
  if (!mixins) {
@@ -7199,7 +7569,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/merge',
7199
7569
  @method aliasMethod
7200
7570
  @for Ember
7201
7571
  @param {String} methodName name of the method to alias
7202
- @public
7572
+ @private
7203
7573
  */
7204
7574
 
7205
7575
  function aliasMethod(methodName) {
@@ -7652,7 +8022,7 @@ enifed('ember-metal/path_cache', ['exports', 'ember-metal/cache'], function (exp
7652
8022
  return tailPathCache.get(path);
7653
8023
  }
7654
8024
  });
7655
- enifed('ember-metal/properties', ['exports', 'ember-metal/core', 'ember-metal/features', 'ember-metal/utils', 'ember-metal/property_events'], function (exports, _emberMetalCore, _emberMetalFeatures, _emberMetalUtils, _emberMetalProperty_events) {
8025
+ enifed('ember-metal/properties', ['exports', 'ember-metal/core', 'ember-metal/features', 'ember-metal/meta', 'ember-metal/property_events'], function (exports, _emberMetalCore, _emberMetalFeatures, _emberMetalMeta, _emberMetalProperty_events) {
7656
8026
  /**
7657
8027
  @module ember-metal
7658
8028
  */
@@ -7693,7 +8063,7 @@ enifed('ember-metal/properties', ['exports', 'ember-metal/core', 'ember-metal/fe
7693
8063
  function DEFAULT_GETTER_FUNCTION(name) {
7694
8064
  return function GETTER_FUNCTION() {
7695
8065
  var meta = this['__ember_meta__'];
7696
- return meta && meta.values[name];
8066
+ return meta && meta.peekValues(name);
7697
8067
  };
7698
8068
  }
7699
8069
 
@@ -7747,9 +8117,9 @@ enifed('ember-metal/properties', ['exports', 'ember-metal/core', 'ember-metal/fe
7747
8117
  var possibleDesc, existingDesc, watching, value;
7748
8118
 
7749
8119
  if (!meta) {
7750
- meta = _emberMetalUtils.meta(obj);
8120
+ meta = _emberMetalMeta.meta(obj);
7751
8121
  }
7752
- var watchEntry = meta.watching[keyName];
8122
+ var watchEntry = meta.peekWatching(keyName);
7753
8123
  possibleDesc = obj[keyName];
7754
8124
  existingDesc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
7755
8125
 
@@ -7781,7 +8151,7 @@ enifed('ember-metal/properties', ['exports', 'ember-metal/core', 'ember-metal/fe
7781
8151
  value = data;
7782
8152
 
7783
8153
  if (watching) {
7784
- meta.values[keyName] = data;
8154
+ meta.writableValues()[keyName] = data;
7785
8155
  Object.defineProperty(obj, keyName, {
7786
8156
  configurable: true,
7787
8157
  enumerable: true,
@@ -7846,7 +8216,7 @@ enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-me
7846
8216
  */
7847
8217
  function propertyWillChange(obj, keyName) {
7848
8218
  var m = obj['__ember_meta__'];
7849
- var watching = m && m.watching[keyName] > 0 || keyName === 'length';
8219
+ var watching = m && m.peekWatching(keyName) > 0 || keyName === 'length';
7850
8220
  var proto = m && m.proto;
7851
8221
  var possibleDesc = obj[keyName];
7852
8222
  var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
@@ -7886,7 +8256,7 @@ enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-me
7886
8256
  */
7887
8257
  function propertyDidChange(obj, keyName) {
7888
8258
  var m = obj['__ember_meta__'];
7889
- var watching = m && m.watching[keyName] > 0 || keyName === 'length';
8259
+ var watching = m && m.peekWatching(keyName) > 0 || keyName === 'length';
7890
8260
  var proto = m && m.proto;
7891
8261
  var possibleDesc = obj[keyName];
7892
8262
  var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
@@ -7908,7 +8278,7 @@ enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-me
7908
8278
  return;
7909
8279
  }
7910
8280
 
7911
- if (m && m.deps && m.deps[keyName]) {
8281
+ if (m && m.readableDeps(keyName)) {
7912
8282
  dependentKeysDidChange(obj, keyName, m);
7913
8283
  }
7914
8284
 
@@ -7924,7 +8294,7 @@ enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-me
7924
8294
  }
7925
8295
 
7926
8296
  var deps;
7927
- if (meta && meta.deps && (deps = meta.deps[depKey])) {
8297
+ if (meta && (deps = meta.readableDeps(depKey))) {
7928
8298
  var seen = WILL_SEEN;
7929
8299
  var top = !seen;
7930
8300
 
@@ -7947,7 +8317,7 @@ enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-me
7947
8317
  }
7948
8318
 
7949
8319
  var deps;
7950
- if (meta && meta.deps && (deps = meta.deps[depKey])) {
8320
+ if (meta && (deps = meta.readableDeps(depKey))) {
7951
8321
  var seen = DID_SEEN;
7952
8322
  var top = !seen;
7953
8323
 
@@ -8010,26 +8380,24 @@ enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-me
8010
8380
  }
8011
8381
 
8012
8382
  function chainsWillChange(obj, keyName, m) {
8013
- if (m.chainWatchers === undefined || m.chainWatchers.obj !== obj) {
8014
- return;
8383
+ var c = m.readableChainWatchers();
8384
+ if (c) {
8385
+ c.notify(keyName, false, propertyWillChange);
8015
8386
  }
8016
-
8017
- m.chainWatchers.notify(keyName, false, propertyWillChange);
8018
8387
  }
8019
8388
 
8020
8389
  function chainsDidChange(obj, keyName, m) {
8021
- if (m.chainWatchers === undefined || m.chainWatchers.obj !== obj) {
8022
- return;
8390
+ var c = m.readableChainWatchers();
8391
+ if (c) {
8392
+ c.notify(keyName, true, propertyDidChange);
8023
8393
  }
8024
-
8025
- m.chainWatchers.notify(keyName, true, propertyDidChange);
8026
8394
  }
8027
8395
 
8028
8396
  function overrideChains(obj, keyName, m) {
8029
- if (m.chainWatchers === undefined || m.chainWatchers.obj !== obj) {
8030
- return;
8397
+ var c = m.readableChainWatchers();
8398
+ if (c) {
8399
+ c.revalidate(keyName);
8031
8400
  }
8032
- m.chainWatchers.revalidate(keyName);
8033
8401
  }
8034
8402
 
8035
8403
  /**
@@ -8186,8 +8554,8 @@ enifed('ember-metal/property_get', ['exports', 'ember-metal/core', 'ember-metal/
8186
8554
  if (desc) {
8187
8555
  return desc.get(obj, keyName);
8188
8556
  } else {
8189
- if (meta && meta.watching[keyName] > 0) {
8190
- ret = meta.values[keyName];
8557
+ if (meta && meta.peekWatching(keyName) > 0) {
8558
+ ret = meta.peekValues(keyName);
8191
8559
  } else {
8192
8560
  ret = obj[keyName];
8193
8561
  }
@@ -8339,9 +8707,9 @@ enifed('ember-metal/property_set', ['exports', 'ember-metal/core', 'ember-metal/
8339
8707
  // `setUnknownProperty` method exists on the object
8340
8708
  if (isUnknown && 'function' === typeof obj.setUnknownProperty) {
8341
8709
  obj.setUnknownProperty(keyName, value);
8342
- } else if (meta && meta.watching[keyName] > 0) {
8710
+ } else if (meta && meta.peekWatching(keyName) > 0) {
8343
8711
  if (meta.proto !== obj) {
8344
- currentValue = meta.values[keyName];
8712
+ currentValue = meta.peekValues(keyName);
8345
8713
  }
8346
8714
  // only trigger a change if the value has changed
8347
8715
  if (value !== currentValue) {
@@ -8350,7 +8718,7 @@ enifed('ember-metal/property_set', ['exports', 'ember-metal/core', 'ember-metal/
8350
8718
  if (currentValue === undefined && !(keyName in obj) || !Object.prototype.propertyIsEnumerable.call(obj, keyName)) {
8351
8719
  _emberMetalProperties.defineProperty(obj, keyName, null, value); // setup mandatory setter
8352
8720
  } else {
8353
- meta.values[keyName] = value;
8721
+ meta.writableValues()[keyName] = value;
8354
8722
  }
8355
8723
 
8356
8724
  _emberMetalProperty_events.propertyDidChange(obj, keyName);
@@ -9435,7 +9803,7 @@ enifed('ember-metal/streams/proxy-stream', ['exports', 'ember-metal/merge', 'emb
9435
9803
 
9436
9804
  exports.default = ProxyStream;
9437
9805
  });
9438
- enifed('ember-metal/streams/stream', ['exports', 'ember-metal/core', 'ember-metal/path_cache', 'ember-metal/observer', 'ember-metal/streams/utils', 'ember-metal/streams/subscriber', 'ember-metal/streams/dependency'], function (exports, _emberMetalCore, _emberMetalPath_cache, _emberMetalObserver, _emberMetalStreamsUtils, _emberMetalStreamsSubscriber, _emberMetalStreamsDependency) {
9806
+ enifed('ember-metal/streams/stream', ['exports', 'ember-metal/core', 'ember-metal/path_cache', 'ember-metal/observer', 'ember-metal/streams/utils', 'ember-metal/empty_object', 'ember-metal/streams/subscriber', 'ember-metal/streams/dependency'], function (exports, _emberMetalCore, _emberMetalPath_cache, _emberMetalObserver, _emberMetalStreamsUtils, _emberMetalEmpty_object, _emberMetalStreamsSubscriber, _emberMetalStreamsDependency) {
9439
9807
  'use strict';
9440
9808
 
9441
9809
  /**
@@ -9484,7 +9852,7 @@ enifed('ember-metal/streams/stream', ['exports', 'ember-metal/core', 'ember-meta
9484
9852
 
9485
9853
  getKey: function (key) {
9486
9854
  if (this.children === undefined) {
9487
- this.children = Object.create(null);
9855
+ this.children = new _emberMetalEmpty_object.default();
9488
9856
  }
9489
9857
 
9490
9858
  var keyStream = this.children[key];
@@ -9502,7 +9870,7 @@ enifed('ember-metal/streams/stream', ['exports', 'ember-metal/core', 'ember-meta
9502
9870
  var tailPath = _emberMetalPath_cache.getTailPath(path);
9503
9871
 
9504
9872
  if (this.children === undefined) {
9505
- this.children = Object.create(null);
9873
+ this.children = new _emberMetalEmpty_object.default();
9506
9874
  }
9507
9875
 
9508
9876
  var keyStream = this.children[firstKey];
@@ -9823,7 +10191,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
9823
10191
  /*
9824
10192
  Check whether an object is a stream or not
9825
10193
 
9826
- @public
10194
+ @private
9827
10195
  @for Ember.stream
9828
10196
  @function isStream
9829
10197
  @param {Object|Stream} object object to check whether it is a stream
@@ -9857,7 +10225,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
9857
10225
  A method of unsubscribing from a stream which is safe for use with a non-stream
9858
10226
  object. If a non-stream object is passed, the function does nothing.
9859
10227
 
9860
- @public
10228
+ @private
9861
10229
  @for Ember.stream
9862
10230
  @function unsubscribe
9863
10231
  @param {Object|Stream} object object or stream to potentially unsubscribe from
@@ -9875,7 +10243,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
9875
10243
  Retrieve the value of a stream, or in the case a non-stream object is passed,
9876
10244
  return the object itself.
9877
10245
 
9878
- @public
10246
+ @private
9879
10247
  @for Ember.stream
9880
10248
  @function read
9881
10249
  @param {Object|Stream} object object to return the value of
@@ -9893,7 +10261,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
9893
10261
  /*
9894
10262
  Map an array, replacing any streams with their values.
9895
10263
 
9896
- @public
10264
+ @private
9897
10265
  @for Ember.stream
9898
10266
  @function readArray
9899
10267
  @param {Array} array The array to read values from
@@ -9916,7 +10284,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
9916
10284
  Map a hash, replacing any stream property values with the current value of that
9917
10285
  stream.
9918
10286
 
9919
- @public
10287
+ @private
9920
10288
  @for Ember.stream
9921
10289
  @function readHash
9922
10290
  @param {Object} object The hash to read keys and values from
@@ -9937,7 +10305,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
9937
10305
  /*
9938
10306
  Check whether an array contains any stream values
9939
10307
 
9940
- @public
10308
+ @private
9941
10309
  @for Ember.stream
9942
10310
  @function scanArray
9943
10311
  @param {Array} array array given to a handlebars helper
@@ -9962,7 +10330,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
9962
10330
  /*
9963
10331
  Check whether a hash has any stream property values
9964
10332
 
9965
- @public
10333
+ @private
9966
10334
  @for Ember.stream
9967
10335
  @function scanHash
9968
10336
  @param {Object} hash "hash" argument given to a handlebars helper
@@ -9986,7 +10354,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
9986
10354
  /*
9987
10355
  Join an array, with any streams replaced by their current values
9988
10356
 
9989
- @public
10357
+ @private
9990
10358
  @for Ember.stream
9991
10359
  @function concat
9992
10360
  @param {Array} array An array containing zero or more stream objects and
@@ -10011,7 +10379,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
10011
10379
  });
10012
10380
 
10013
10381
  for (i = 0, l = array.length; i < l; i++) {
10014
- stream.addDependency(array[i]);
10382
+ subscribe(array[i], stream.notify, stream);
10015
10383
  }
10016
10384
 
10017
10385
  // used by angle bracket components to detect an attribute was provided
@@ -10140,7 +10508,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
10140
10508
  In the example, result is a stream if source is a stream, or a number of
10141
10509
  source was numeric.
10142
10510
 
10143
- @public
10511
+ @private
10144
10512
  @for Ember.stream
10145
10513
  @function chain
10146
10514
  @param {Object|Stream} value A stream or non-stream object
@@ -10175,21 +10543,11 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/core', './stream'],
10175
10543
  enifed("ember-metal/symbol", ["exports"], function (exports) {
10176
10544
  "use strict";
10177
10545
  });
10178
- enifed('ember-metal/utils', ['exports', 'ember-metal/features'], function (exports, _emberMetalFeatures) {
10546
+ enifed('ember-metal/utils', ['exports'], function (exports) {
10179
10547
  // Remove "use strict"; from transpiled module until
10180
10548
  // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
10181
10549
  //
10182
10550
 
10183
- exports.uuid = uuid;
10184
- exports.symbol = symbol;
10185
- exports.generateGuid = generateGuid;
10186
- exports.guidFor = guidFor;
10187
- exports.wrap = wrap;
10188
- exports.tryInvoke = tryInvoke;
10189
- exports.makeArray = makeArray;
10190
- exports.inspect = inspect;
10191
- exports.apply = apply;
10192
- exports.applyStr = applyStr;
10193
10551
  'REMOVE_USE_STRICT: true';
10194
10552
 
10195
10553
  /**
@@ -10203,6 +10561,16 @@ enifed('ember-metal/utils', ['exports', 'ember-metal/features'], function (expor
10203
10561
  @private
10204
10562
  @return {Number} the uuid
10205
10563
  */
10564
+ exports.uuid = uuid;
10565
+ exports.symbol = symbol;
10566
+ exports.generateGuid = generateGuid;
10567
+ exports.guidFor = guidFor;
10568
+ exports.wrap = wrap;
10569
+ exports.tryInvoke = tryInvoke;
10570
+ exports.makeArray = makeArray;
10571
+ exports.inspect = inspect;
10572
+ exports.apply = apply;
10573
+ exports.applyStr = applyStr;
10206
10574
  var _uuid = 0;
10207
10575
 
10208
10576
  /**
@@ -10314,13 +10682,6 @@ enifed('ember-metal/utils', ['exports', 'ember-metal/features'], function (expor
10314
10682
  };
10315
10683
 
10316
10684
  exports.GUID_DESC = GUID_DESC;
10317
- var undefinedDescriptor = {
10318
- configurable: true,
10319
- writable: true,
10320
- enumerable: false,
10321
- value: undefined
10322
- };
10323
-
10324
10685
  var nullDescriptor = {
10325
10686
  configurable: true,
10326
10687
  writable: true,
@@ -10328,31 +10689,12 @@ enifed('ember-metal/utils', ['exports', 'ember-metal/features'], function (expor
10328
10689
  value: null
10329
10690
  };
10330
10691
 
10331
- var META_DESC = {
10332
- writable: true,
10333
- configurable: true,
10334
- enumerable: false,
10335
- value: null
10336
- };
10337
-
10338
- var EMBER_META_PROPERTY = {
10339
- name: '__ember_meta__',
10340
- descriptor: META_DESC
10341
- };
10342
-
10343
- exports.EMBER_META_PROPERTY = EMBER_META_PROPERTY;
10344
10692
  var GUID_KEY_PROPERTY = {
10345
10693
  name: GUID_KEY,
10346
10694
  descriptor: nullDescriptor
10347
10695
  };
10348
10696
 
10349
10697
  exports.GUID_KEY_PROPERTY = GUID_KEY_PROPERTY;
10350
- var NEXT_SUPER_PROPERTY = {
10351
- name: '__nextSuper',
10352
- descriptor: undefinedDescriptor
10353
- };
10354
-
10355
- exports.NEXT_SUPER_PROPERTY = NEXT_SUPER_PROPERTY;
10356
10698
  /**
10357
10699
  Generates a new guid, optionally saving the guid to the object that you
10358
10700
  pass in. You will rarely need to use this method. Instead you should
@@ -10435,121 +10777,48 @@ enifed('ember-metal/utils', ['exports', 'ember-metal/features'], function (expor
10435
10777
 
10436
10778
  return ret;
10437
10779
 
10438
- case 'string':
10439
- ret = stringCache[obj];
10440
-
10441
- if (!ret) {
10442
- ret = stringCache[obj] = 'st' + uuid();
10443
- }
10444
-
10445
- return ret;
10446
-
10447
- case 'boolean':
10448
- return obj ? '(true)' : '(false)';
10449
-
10450
- default:
10451
- if (obj === Object) {
10452
- return '(Object)';
10453
- }
10454
-
10455
- if (obj === Array) {
10456
- return '(Array)';
10457
- }
10458
-
10459
- ret = GUID_PREFIX + uuid();
10460
-
10461
- if (obj[GUID_KEY] === null) {
10462
- obj[GUID_KEY] = ret;
10463
- } else {
10464
- GUID_DESC.value = ret;
10465
-
10466
- if (obj.__defineNonEnumerable) {
10467
- obj.__defineNonEnumerable(GUID_KEY_PROPERTY);
10468
- } else {
10469
- Object.defineProperty(obj, GUID_KEY, GUID_DESC);
10470
- }
10471
- }
10472
- return ret;
10473
- }
10474
- }
10475
-
10476
- // ..........................................................
10477
- // META
10478
- //
10479
- function Meta(obj) {
10480
- this.watching = {};
10481
- this.cache = undefined;
10482
- this.source = obj;
10483
- this.deps = undefined;
10484
- this.listeners = undefined;
10485
- this.mixins = undefined;
10486
- this.bindings = undefined;
10487
- this.chains = undefined;
10488
- this.chainWatchers = undefined;
10489
- this.values = undefined;
10490
- this.proto = undefined;
10491
- }
10492
-
10493
- // Placeholder for non-writable metas.
10494
- var EMPTY_META = new Meta(null);
10495
-
10496
- EMPTY_META.values = {};
10497
-
10498
- /**
10499
- Retrieves the meta hash for an object. If `writable` is true ensures the
10500
- hash is writable for this object as well.
10501
-
10502
- The meta object contains information about computed property descriptors as
10503
- well as any watched properties and other information. You generally will
10504
- not access this information directly but instead work with higher level
10505
- methods that manipulate this hash indirectly.
10506
-
10507
- @method meta
10508
- @for Ember
10509
- @private
10510
-
10511
- @param {Object} obj The object to retrieve meta for
10512
- @param {Boolean} [writable=true] Pass `false` if you do not intend to modify
10513
- the meta hash, allowing the method to avoid making an unnecessary copy.
10514
- @return {Object} the meta hash for an object
10515
- */
10516
- function meta(obj, writable) {
10517
- var ret = obj.__ember_meta__;
10518
- if (writable === false) {
10519
- return ret || EMPTY_META;
10520
- }
10780
+ case 'string':
10781
+ ret = stringCache[obj];
10521
10782
 
10522
- if (!ret) {
10523
- if (obj.__defineNonEnumerable) {
10524
- obj.__defineNonEnumerable(EMBER_META_PROPERTY);
10525
- } else {
10526
- Object.defineProperty(obj, '__ember_meta__', META_DESC);
10527
- }
10783
+ if (!ret) {
10784
+ ret = stringCache[obj] = 'st' + uuid();
10785
+ }
10528
10786
 
10529
- ret = new Meta(obj);
10787
+ return ret;
10530
10788
 
10531
- ret.values = {};
10789
+ case 'boolean':
10790
+ return obj ? '(true)' : '(false)';
10532
10791
 
10533
- obj.__ember_meta__ = ret;
10534
- } else if (ret.source !== obj) {
10535
- if (obj.__defineNonEnumerable) {
10536
- obj.__defineNonEnumerable(EMBER_META_PROPERTY);
10537
- } else {
10538
- Object.defineProperty(obj, '__ember_meta__', META_DESC);
10539
- }
10792
+ default:
10793
+ if (obj === Object) {
10794
+ return '(Object)';
10795
+ }
10796
+
10797
+ if (obj === Array) {
10798
+ return '(Array)';
10799
+ }
10540
10800
 
10541
- ret = Object.create(ret);
10542
- ret.watching = Object.create(ret.watching);
10543
- ret.cache = undefined;
10544
- ret.source = obj;
10801
+ ret = GUID_PREFIX + uuid();
10545
10802
 
10546
- ret.values = Object.create(ret.values);
10803
+ if (obj[GUID_KEY] === null) {
10804
+ obj[GUID_KEY] = ret;
10805
+ } else {
10806
+ GUID_DESC.value = ret;
10547
10807
 
10548
- obj['__ember_meta__'] = ret;
10808
+ if (obj.__defineNonEnumerable) {
10809
+ obj.__defineNonEnumerable(GUID_KEY_PROPERTY);
10810
+ } else {
10811
+ Object.defineProperty(obj, GUID_KEY, GUID_DESC);
10812
+ }
10813
+ }
10814
+ return ret;
10549
10815
  }
10550
- return ret;
10551
10816
  }
10552
10817
 
10818
+ var sourceAvailable = (function () {
10819
+ return this;
10820
+ }).toString().indexOf('return this;') > -1;
10821
+
10553
10822
  /**
10554
10823
  Wraps the passed function so that `this._super` will point to the superFunc
10555
10824
  when the function is invoked. This is the primitive we use to implement
@@ -10563,34 +10832,52 @@ enifed('ember-metal/utils', ['exports', 'ember-metal/features'], function (expor
10563
10832
  @return {Function} wrapped function.
10564
10833
  */
10565
10834
 
10566
- function wrap(func, superFunc) {
10567
- function superWrapper() {
10568
- var ret;
10569
- var sup = this && this.__nextSuper;
10570
- var length = arguments.length;
10835
+ function wrap(func, _superFunc) {
10836
+ var superFunc = _superFunc;
10837
+ var hasSuper;
10838
+ if (sourceAvailable) {
10839
+ hasSuper = func.__hasSuper;
10571
10840
 
10572
- if (this) {
10573
- this.__nextSuper = superFunc;
10841
+ if (hasSuper === undefined) {
10842
+ hasSuper = func.toString().indexOf('_super') > -1;
10843
+ func.__hasSuper = hasSuper;
10574
10844
  }
10575
10845
 
10576
- if (length === 0) {
10577
- ret = func.call(this);
10578
- } else if (length === 1) {
10579
- ret = func.call(this, arguments[0]);
10580
- } else if (length === 2) {
10581
- ret = func.call(this, arguments[0], arguments[1]);
10582
- } else {
10583
- var args = new Array(length);
10584
- for (var i = 0; i < length; i++) {
10585
- args[i] = arguments[i];
10586
- }
10587
- ret = apply(this, func, args);
10846
+ if (!hasSuper) {
10847
+ return func;
10588
10848
  }
10849
+ }
10589
10850
 
10590
- if (this) {
10591
- this.__nextSuper = sup;
10592
- }
10851
+ if (superFunc.wrappedFunction === undefined) {
10852
+ // terminate _super to prevent infinite recursion
10853
+ superFunc = wrap(superFunc, function () {});
10854
+ }
10855
+
10856
+ return _wrap(func, superFunc);
10857
+ }
10593
10858
 
10859
+ function _wrap(func, superFunc) {
10860
+ function superWrapper() {
10861
+ var ret;
10862
+ var orig = this._super;
10863
+ this._super = superFunc;
10864
+ switch (arguments.length) {
10865
+ case 0:
10866
+ ret = func.call(this);break;
10867
+ case 1:
10868
+ ret = func.call(this, arguments[0]);break;
10869
+ case 2:
10870
+ ret = func.call(this, arguments[0], arguments[1]);break;
10871
+ case 3:
10872
+ ret = func.call(this, arguments[0], arguments[1], arguments[2]);break;
10873
+ case 4:
10874
+ ret = func.call(this, arguments[0], arguments[1], arguments[2], arguments[3]);break;
10875
+ case 5:
10876
+ ret = func.call(this, arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);break;
10877
+ default:
10878
+ ret = func.apply(this, arguments);break;
10879
+ }
10880
+ this._super = orig;
10594
10881
  return ret;
10595
10882
  }
10596
10883
 
@@ -10805,13 +11092,10 @@ enifed('ember-metal/utils', ['exports', 'ember-metal/features'], function (expor
10805
11092
  }
10806
11093
 
10807
11094
  exports.GUID_KEY = GUID_KEY;
10808
- exports.META_DESC = META_DESC;
10809
- exports.EMPTY_META = EMPTY_META;
10810
- exports.meta = meta;
10811
11095
  exports.makeArray = makeArray;
10812
11096
  exports.canInvoke = canInvoke;
10813
11097
  });
10814
- enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal/utils', 'ember-metal/properties'], function (exports, _emberMetalFeatures, _emberMetalUtils, _emberMetalProperties) {
11098
+ enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal/meta', 'ember-metal/properties'], function (exports, _emberMetalFeatures, _emberMetalMeta, _emberMetalProperties) {
10815
11099
  'use strict';
10816
11100
 
10817
11101
  exports.watchKey = watchKey;
@@ -10823,8 +11107,8 @@ enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal
10823
11107
  return;
10824
11108
  }
10825
11109
 
10826
- var m = meta || _emberMetalUtils.meta(obj);
10827
- var watching = m.watching;
11110
+ var m = meta || _emberMetalMeta.meta(obj);
11111
+ var watching = m.writableWatching();
10828
11112
 
10829
11113
  // activate watching first time
10830
11114
  if (!watching[keyName]) {
@@ -10860,7 +11144,7 @@ enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal
10860
11144
 
10861
11145
  // this x in Y deopts, so keeping it in this function is better;
10862
11146
  if (configurable && isWritable && hasValue && keyName in obj) {
10863
- m.values[keyName] = obj[keyName];
11147
+ m.writableValues()[keyName] = obj[keyName];
10864
11148
  Object.defineProperty(obj, keyName, {
10865
11149
  configurable: true,
10866
11150
  enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName),
@@ -10875,8 +11159,8 @@ enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal
10875
11159
  ; // jshint ignore:line
10876
11160
 
10877
11161
  function unwatchKey(obj, keyName, meta) {
10878
- var m = meta || _emberMetalUtils.meta(obj);
10879
- var watching = m.watching;
11162
+ var m = meta || _emberMetalMeta.meta(obj);
11163
+ var watching = m.writableWatching();
10880
11164
 
10881
11165
  if (watching[keyName] === 1) {
10882
11166
  watching[keyName] = 0;
@@ -10903,7 +11187,7 @@ enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal
10903
11187
  enumerable: true,
10904
11188
  value: val
10905
11189
  });
10906
- delete m.values[keyName];
11190
+ delete m.writableValues()[keyName];
10907
11191
  },
10908
11192
  get: _emberMetalProperties.DEFAULT_GETTER_FUNCTION(keyName)
10909
11193
  });
@@ -10913,7 +11197,7 @@ enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal
10913
11197
  }
10914
11198
  }
10915
11199
  });
10916
- enifed('ember-metal/watch_path', ['exports', 'ember-metal/utils', 'ember-metal/chains'], function (exports, _emberMetalUtils, _emberMetalChains) {
11200
+ enifed('ember-metal/watch_path', ['exports', 'ember-metal/meta', 'ember-metal/chains'], function (exports, _emberMetalMeta, _emberMetalChains) {
10917
11201
  'use strict';
10918
11202
 
10919
11203
  exports.watchPath = watchPath;
@@ -10923,14 +11207,11 @@ enifed('ember-metal/watch_path', ['exports', 'ember-metal/utils', 'ember-metal/c
10923
11207
  // chains inherited from the proto they will be cloned and reconfigured for
10924
11208
  // the current object.
10925
11209
  function chainsFor(obj, meta) {
10926
- var m = meta || _emberMetalUtils.meta(obj);
10927
- var ret = m.chains;
10928
- if (!ret) {
10929
- ret = m.chains = new _emberMetalChains.ChainNode(null, null, obj);
10930
- } else if (ret.value() !== obj) {
10931
- ret = m.chains = ret.copy(obj);
10932
- }
10933
- return ret;
11210
+ return (meta || _emberMetalMeta.meta(obj)).writableChains(makeChainNode);
11211
+ }
11212
+
11213
+ function makeChainNode(obj) {
11214
+ return new _emberMetalChains.ChainNode(null, null, obj);
10934
11215
  }
10935
11216
 
10936
11217
  function watchPath(obj, keyPath, meta) {
@@ -10939,8 +11220,8 @@ enifed('ember-metal/watch_path', ['exports', 'ember-metal/utils', 'ember-metal/c
10939
11220
  return;
10940
11221
  }
10941
11222
 
10942
- var m = meta || _emberMetalUtils.meta(obj);
10943
- var watching = m.watching;
11223
+ var m = meta || _emberMetalMeta.meta(obj);
11224
+ var watching = m.writableWatching();
10944
11225
 
10945
11226
  if (!watching[keyPath]) {
10946
11227
  // activate watching first time
@@ -10952,8 +11233,8 @@ enifed('ember-metal/watch_path', ['exports', 'ember-metal/utils', 'ember-metal/c
10952
11233
  }
10953
11234
 
10954
11235
  function unwatchPath(obj, keyPath, meta) {
10955
- var m = meta || _emberMetalUtils.meta(obj);
10956
- var watching = m.watching;
11236
+ var m = meta || _emberMetalMeta.meta(obj);
11237
+ var watching = m.writableWatching();
10957
11238
 
10958
11239
  if (watching[keyPath] === 1) {
10959
11240
  watching[keyPath] = 0;
@@ -11004,7 +11285,7 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa
11004
11285
 
11005
11286
  function isWatching(obj, key) {
11006
11287
  var meta = obj['__ember_meta__'];
11007
- return (meta && meta.watching[key]) > 0;
11288
+ return (meta && meta.peekWatching(key)) > 0;
11008
11289
  }
11009
11290
 
11010
11291
  watch.flushPending = _emberMetalChains.flushPendingChains;
@@ -11042,7 +11323,7 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa
11042
11323
  if (meta) {
11043
11324
  obj['__ember_meta__'] = null;
11044
11325
  // remove chainWatchers to remove circular references that would prevent GC
11045
- node = meta.chains;
11326
+ node = meta.readableChains();
11046
11327
  if (node) {
11047
11328
  NODE_STACK.push(node);
11048
11329
  // process tree
@@ -11069,7 +11350,7 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa
11069
11350
  }
11070
11351
  }
11071
11352
  });
11072
- enifed('ember-template-compiler', ['exports', 'ember-metal', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/template', 'ember-template-compiler/plugins', 'ember-template-compiler/plugins/transform-old-binding-syntax', 'ember-template-compiler/plugins/transform-old-class-binding-syntax', 'ember-template-compiler/plugins/transform-item-class', 'ember-template-compiler/plugins/transform-component-attrs-into-mut', 'ember-template-compiler/plugins/transform-component-curly-to-readonly', 'ember-template-compiler/plugins/transform-angle-bracket-components', 'ember-template-compiler/plugins/transform-input-on-to-onEvent', 'ember-template-compiler/plugins/transform-each-into-collection', 'ember-template-compiler/plugins/assert-no-view-and-controller-paths', 'ember-template-compiler/plugins/assert-no-view-helper', 'ember-template-compiler/compat'], function (exports, _emberMetal, _emberTemplateCompilerSystemPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemTemplate, _emberTemplateCompilerPlugins, _emberTemplateCompilerPluginsTransformOldBindingSyntax, _emberTemplateCompilerPluginsTransformOldClassBindingSyntax, _emberTemplateCompilerPluginsTransformItemClass, _emberTemplateCompilerPluginsTransformComponentAttrsIntoMut, _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly, _emberTemplateCompilerPluginsTransformAngleBracketComponents, _emberTemplateCompilerPluginsTransformInputOnToOnEvent, _emberTemplateCompilerPluginsTransformEachIntoCollection, _emberTemplateCompilerPluginsAssertNoViewAndControllerPaths, _emberTemplateCompilerPluginsAssertNoViewHelper, _emberTemplateCompilerCompat) {
11353
+ enifed('ember-template-compiler', ['exports', 'ember-metal', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/template', 'ember-template-compiler/plugins', 'ember-template-compiler/plugins/transform-old-binding-syntax', 'ember-template-compiler/plugins/transform-old-class-binding-syntax', 'ember-template-compiler/plugins/transform-item-class', 'ember-template-compiler/plugins/transform-component-attrs-into-mut', 'ember-template-compiler/plugins/transform-component-curly-to-readonly', 'ember-template-compiler/plugins/transform-angle-bracket-components', 'ember-template-compiler/plugins/transform-input-on-to-onEvent', 'ember-template-compiler/plugins/transform-top-level-components', 'ember-template-compiler/plugins/transform-each-into-collection', 'ember-template-compiler/plugins/assert-no-view-and-controller-paths', 'ember-template-compiler/plugins/assert-no-view-helper', 'ember-template-compiler/compat'], function (exports, _emberMetal, _emberTemplateCompilerSystemPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemTemplate, _emberTemplateCompilerPlugins, _emberTemplateCompilerPluginsTransformOldBindingSyntax, _emberTemplateCompilerPluginsTransformOldClassBindingSyntax, _emberTemplateCompilerPluginsTransformItemClass, _emberTemplateCompilerPluginsTransformComponentAttrsIntoMut, _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly, _emberTemplateCompilerPluginsTransformAngleBracketComponents, _emberTemplateCompilerPluginsTransformInputOnToOnEvent, _emberTemplateCompilerPluginsTransformTopLevelComponents, _emberTemplateCompilerPluginsTransformEachIntoCollection, _emberTemplateCompilerPluginsAssertNoViewAndControllerPaths, _emberTemplateCompilerPluginsAssertNoViewHelper, _emberTemplateCompilerCompat) {
11073
11354
  'use strict';
11074
11355
 
11075
11356
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformOldBindingSyntax.default);
@@ -11079,6 +11360,7 @@ enifed('ember-template-compiler', ['exports', 'ember-metal', 'ember-template-com
11079
11360
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly.default);
11080
11361
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformAngleBracketComponents.default);
11081
11362
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformInputOnToOnEvent.default);
11363
+ _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformTopLevelComponents.default);
11082
11364
 
11083
11365
  if (_emberMetal.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT) {
11084
11366
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformEachIntoCollection.default);
@@ -11463,7 +11745,6 @@ enifed('ember-template-compiler/plugins/transform-each-in-to-hash', ['exports'],
11463
11745
 
11464
11746
  walker.visit(ast, function (node) {
11465
11747
  if (pluginContext.validate(node)) {
11466
-
11467
11748
  if (node.program && node.program.blockParams.length) {
11468
11749
  throw new Error('You cannot use keyword (`{{each foo in bar}}`) and block params (`{{each bar as |foo|}}`) at the same time.');
11469
11750
  }
@@ -11512,7 +11793,7 @@ enifed('ember-template-compiler/plugins/transform-each-into-collection', ['expor
11512
11793
 
11513
11794
  var moduleInfo = _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, legacyHashKey.loc);
11514
11795
 
11515
- _emberMetalCore.default.deprecate('Using \'' + legacyHashKey.key + '\' with \'{{each}}\' ' + moduleInfo + 'is deprecated. Please refactor to a component.');
11796
+ _emberMetalCore.default.deprecate('Using \'' + legacyHashKey.key + '\' with \'{{each}}\' ' + moduleInfo + 'is deprecated. Please refactor to a component.', false, { id: 'ember-template-compiler.transform-each-into-collection', until: '2.0.0' });
11516
11797
 
11517
11798
  var list = node.params.shift();
11518
11799
  node.path = b.path('collection');
@@ -11533,7 +11814,6 @@ enifed('ember-template-compiler/plugins/transform-each-into-collection', ['expor
11533
11814
 
11534
11815
  function validate(node) {
11535
11816
  if ((node.type === 'BlockStatement' || node.type === 'MustacheStatement') && node.path.original === 'each') {
11536
-
11537
11817
  return any(node.hash.pairs, function (pair) {
11538
11818
  var key = pair.key;
11539
11819
  return key === 'itemController' || key === 'itemView' || key === 'itemViewClass' || key === 'tagName' || key === 'emptyView' || key === 'emptyViewClass';
@@ -11605,7 +11885,7 @@ enifed('ember-template-compiler/plugins/transform-input-on-to-onEvent', ['export
11605
11885
  var moduleInfo = _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, node.loc);
11606
11886
 
11607
11887
  if (normalizedOn && normalizedOn.value.type !== 'StringLiteral') {
11608
- _emberMetalCore.default.deprecate('Using a dynamic value for \'#{normalizedOn.key}=\' with the \'{{input}}\' helper ' + moduleInfo + 'is deprecated.');
11888
+ _emberMetalCore.default.deprecate('Using a dynamic value for \'#{normalizedOn.key}=\' with the \'{{input}}\' helper ' + moduleInfo + 'is deprecated.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.dynamic-value', until: '3.0.0' });
11609
11889
 
11610
11890
  normalizedOn.key = 'onEvent';
11611
11891
  return; // exit early, as we cannot transform further
@@ -11615,7 +11895,7 @@ enifed('ember-template-compiler/plugins/transform-input-on-to-onEvent', ['export
11615
11895
  removeFromHash(node.hash, action);
11616
11896
 
11617
11897
  if (!action) {
11618
- _emberMetalCore.default.deprecate('Using \'{{input ' + normalizedOn.key + '="' + normalizedOn.value.value + '" ...}}\' without specifying an action ' + moduleInfo + 'will do nothing.');
11898
+ _emberMetalCore.default.deprecate('Using \'{{input ' + normalizedOn.key + '="' + normalizedOn.value.value + '" ...}}\' without specifying an action ' + moduleInfo + 'will do nothing.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.no-action', until: '3.0.0' });
11619
11899
 
11620
11900
  return; // exit early, if no action was available there is nothing to do
11621
11901
  }
@@ -11629,7 +11909,7 @@ enifed('ember-template-compiler/plugins/transform-input-on-to-onEvent', ['export
11629
11909
 
11630
11910
  var expected = (normalizedOn ? normalizedOn.value.value : 'enter') + '="' + action.value.original + '"';
11631
11911
 
11632
- _emberMetalCore.default.deprecate('Using \'{{input ' + specifiedOn + 'action="' + action.value.original + '"}}\' ' + moduleInfo + 'is deprecated. Please use \'{{input ' + expected + '}}\' instead.');
11912
+ _emberMetalCore.default.deprecate('Using \'{{input ' + specifiedOn + 'action="' + action.value.original + '"}}\' ' + moduleInfo + 'is deprecated. Please use \'{{input ' + expected + '}}\' instead.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.normalized-on', until: '3.0.0' });
11633
11913
  if (!normalizedOn) {
11634
11914
  normalizedOn = b.pair('onEvent', b.string('enter'));
11635
11915
  }
@@ -11759,7 +12039,7 @@ enifed('ember-template-compiler/plugins/transform-old-binding-syntax', ['exports
11759
12039
  if (key.substr(-7) === 'Binding') {
11760
12040
  var newKey = key.slice(0, -7);
11761
12041
 
11762
- _emberMetalCore.default.deprecate('You\'re using legacy binding syntax: ' + key + '=' + exprToString(value) + ' ' + sourceInformation + '. Please replace with ' + newKey + '=' + value.original);
12042
+ _emberMetalCore.default.deprecate('You\'re using legacy binding syntax: ' + key + '=' + exprToString(value) + ' ' + sourceInformation + '. Please replace with ' + newKey + '=' + value.original, false, { id: 'ember-template-compiler.transform-old-binding-syntax', until: '3.0.0' });
11763
12043
 
11764
12044
  pair.key = newKey;
11765
12045
  if (value.type === 'StringLiteral') {
@@ -11931,6 +12211,62 @@ enifed('ember-template-compiler/plugins/transform-old-class-binding-syntax', ['e
11931
12211
  return segments;
11932
12212
  }
11933
12213
  });
12214
+ enifed('ember-template-compiler/plugins/transform-top-level-components', ['exports'], function (exports) {
12215
+ 'use strict';
12216
+
12217
+ function TransformTopLevelComponents() {
12218
+ // set later within HTMLBars to the syntax package
12219
+ this.syntax = null;
12220
+ }
12221
+
12222
+ /**
12223
+ @private
12224
+ @method transform
12225
+ @param {AST} The AST to be transformed.
12226
+ */
12227
+ TransformTopLevelComponents.prototype.transform = function TransformTopLevelComponents_transform(ast) {
12228
+ hasSingleComponentNode(ast.body, function (component) {
12229
+ component.tag = '@' + component.tag;
12230
+ });
12231
+
12232
+ return ast;
12233
+ };
12234
+
12235
+ function hasSingleComponentNode(body, callback) {
12236
+ var lastComponentNode = undefined;
12237
+ var lastIndex = undefined;
12238
+ var nodeCount = 0;
12239
+
12240
+ for (var i = 0, l = body.length; i < l; i++) {
12241
+ var curr = body[i];
12242
+
12243
+ // text node with whitespace only
12244
+ if (curr.type === 'TextNode' && /^[\s]*$/.test(curr.chars)) {
12245
+ continue;
12246
+ }
12247
+
12248
+ // has multiple root elements if we've been here before
12249
+ if (nodeCount++ > 0) {
12250
+ return false;
12251
+ }
12252
+
12253
+ if (curr.type === 'ComponentNode' || curr.type === 'ElementNode') {
12254
+ lastComponentNode = curr;
12255
+ lastIndex = i;
12256
+ }
12257
+ }
12258
+
12259
+ if (!lastComponentNode) {
12260
+ return;
12261
+ }
12262
+
12263
+ if (lastComponentNode.type === 'ComponentNode') {
12264
+ callback(lastComponentNode);
12265
+ }
12266
+ }
12267
+
12268
+ exports.default = TransformTopLevelComponents;
12269
+ });
11934
12270
  enifed('ember-template-compiler/system/calculate-location-display', ['exports'], function (exports) {
11935
12271
  'use strict';
11936
12272
 
@@ -11999,7 +12335,7 @@ enifed('ember-template-compiler/system/compile', ['exports', 'ember-metal/core',
11999
12335
  return _emberTemplateCompilerSystemTemplate.default(templateSpec);
12000
12336
  };
12001
12337
  });
12002
- enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-metal/features', 'ember-metal/merge', 'ember-template-compiler/plugins'], function (exports, _emberMetalFeatures, _emberMetalMerge, _emberTemplateCompilerPlugins) {
12338
+ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-metal/features', 'ember-metal/assign', 'ember-template-compiler/plugins'], function (exports, _emberMetalFeatures, _emberMetalAssign, _emberTemplateCompilerPlugins) {
12003
12339
  /**
12004
12340
  @module ember
12005
12341
  @submodule ember-template-compiler
@@ -12022,7 +12358,7 @@ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-meta
12022
12358
  if (_options === true) {
12023
12359
  options = {};
12024
12360
  } else {
12025
- options = _emberMetalMerge.assign({}, _options);
12361
+ options = _emberMetalAssign.default({}, _options);
12026
12362
  }
12027
12363
 
12028
12364
  options.disableComponentGeneration = disableComponentGeneration;
@@ -12038,7 +12374,8 @@ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-meta
12038
12374
 
12039
12375
  options.buildMeta = function buildMeta(program) {
12040
12376
  return {
12041
- revision: 'Ember@2.0.3',
12377
+ topLevel: detectTopLevel(program),
12378
+ revision: 'Ember@2.1.0-beta.1',
12042
12379
  loc: program.loc,
12043
12380
  moduleName: options.moduleName
12044
12381
  };
@@ -12046,6 +12383,52 @@ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-meta
12046
12383
 
12047
12384
  return options;
12048
12385
  };
12386
+
12387
+ function detectTopLevel(program) {
12388
+ var loc = program.loc;
12389
+ var body = program.body;
12390
+
12391
+ if (!loc || loc.start.line !== 1 || loc.start.column !== 0) {
12392
+ return null;
12393
+ }
12394
+
12395
+ var lastComponentNode = undefined;
12396
+ var lastIndex = undefined;
12397
+ var nodeCount = 0;
12398
+
12399
+ for (var i = 0, l = body.length; i < l; i++) {
12400
+ var curr = body[i];
12401
+
12402
+ // text node with whitespace only
12403
+ if (curr.type === 'TextNode' && /^[\s]*$/.test(curr.chars)) {
12404
+ continue;
12405
+ }
12406
+
12407
+ // has multiple root elements if we've been here before
12408
+ if (nodeCount++ > 0) {
12409
+ return false;
12410
+ }
12411
+
12412
+ if (curr.type === 'ComponentNode' || curr.type === 'ElementNode') {
12413
+ lastComponentNode = curr;
12414
+ lastIndex = i;
12415
+ }
12416
+ }
12417
+
12418
+ if (!lastComponentNode) {
12419
+ return null;
12420
+ }
12421
+
12422
+ if (lastComponentNode.type === 'ComponentNode') {
12423
+ var tag = lastComponentNode.tag;
12424
+ if (tag.charAt(0) !== '<') {
12425
+ return null;
12426
+ }
12427
+ return tag.slice(1, -1);
12428
+ }
12429
+
12430
+ return null;
12431
+ }
12049
12432
  });
12050
12433
  enifed('ember-template-compiler/system/precompile', ['exports', 'ember-metal/core', 'ember-template-compiler/system/compile_options'], function (exports, _emberMetalCore, _emberTemplateCompilerSystemCompile_options) {
12051
12434
  /**
@@ -12782,7 +13165,7 @@ enifed("htmlbars-compiler/hydration-opcode-compiler", ["exports", "./template-vi
12782
13165
  };
12783
13166
 
12784
13167
  HydrationOpcodeCompiler.prototype.component = function (component, childIndex, childCount) {
12785
- this.pushMorphPlaceholderNode(childIndex, childCount);
13168
+ this.pushMorphPlaceholderNode(childIndex, childCount, component.isStatic);
12786
13169
 
12787
13170
  var program = component.program || {};
12788
13171
  var blockParams = program.blockParams || [];
@@ -12857,15 +13240,18 @@ enifed("htmlbars-compiler/hydration-opcode-compiler", ["exports", "./template-vi
12857
13240
  this.opcode('printElementHook', meta(modifier));
12858
13241
  };
12859
13242
 
12860
- HydrationOpcodeCompiler.prototype.pushMorphPlaceholderNode = function (childIndex, childCount) {
12861
- if (this.paths.length === 0) {
12862
- if (childIndex === 0) {
12863
- this.opcode('openBoundary');
12864
- }
12865
- if (childIndex === childCount - 1) {
12866
- this.opcode('closeBoundary');
13243
+ HydrationOpcodeCompiler.prototype.pushMorphPlaceholderNode = function (childIndex, childCount, skipBoundaryNodes) {
13244
+ if (!skipBoundaryNodes) {
13245
+ if (this.paths.length === 0) {
13246
+ if (childIndex === 0) {
13247
+ this.opcode('openBoundary');
13248
+ }
13249
+ if (childIndex === childCount - 1) {
13250
+ this.opcode('closeBoundary');
13251
+ }
12867
13252
  }
12868
13253
  }
13254
+
12869
13255
  this.comment();
12870
13256
  };
12871
13257
 
@@ -12982,37 +13368,11 @@ enifed('htmlbars-compiler/template-compiler', ['exports', './fragment-opcode-com
12982
13368
 
12983
13369
  exports.default = TemplateCompiler;
12984
13370
 
12985
- var dynamicNodes = {
12986
- mustache: true,
12987
- block: true,
12988
- component: true
12989
- };
12990
-
12991
13371
  TemplateCompiler.prototype.compile = function (ast) {
12992
13372
  var templateVisitor = new _templateVisitor.default();
12993
13373
  templateVisitor.visit(ast);
12994
13374
 
12995
- var normalizedActions = [];
12996
- var actions = templateVisitor.actions;
12997
-
12998
- for (var i = 0, l = actions.length - 1; i < l; i++) {
12999
- var action = actions[i];
13000
- var nextAction = actions[i + 1];
13001
-
13002
- normalizedActions.push(action);
13003
-
13004
- if (action[0] === "startProgram" && nextAction[0] in dynamicNodes) {
13005
- normalizedActions.push(['insertBoundary', [true]]);
13006
- }
13007
-
13008
- if (nextAction[0] === "endProgram" && action[0] in dynamicNodes) {
13009
- normalizedActions.push(['insertBoundary', [false]]);
13010
- }
13011
- }
13012
-
13013
- normalizedActions.push(actions[actions.length - 1]);
13014
-
13015
- _utils.processOpcodes(this, normalizedActions);
13375
+ _utils.processOpcodes(this, templateVisitor.actions);
13016
13376
 
13017
13377
  return this.templates.pop();
13018
13378
  };
@@ -13086,7 +13446,7 @@ enifed('htmlbars-compiler/template-compiler', ['exports', './fragment-opcode-com
13086
13446
  return 'child' + index;
13087
13447
  }).join(', ');
13088
13448
 
13089
- var template = '(function() {\n' + this.getChildTemplateVars(indent + ' ') + indent + ' return {\n' + this.buildMeta(indent + ' ', program) + indent + ' arity: ' + blockParams.length + ',\n' + indent + ' cachedFragment: null,\n' + indent + ' hasRendered: false,\n' + indent + ' buildFragment: ' + fragmentProgram + ',\n' + indent + ' buildRenderNodes: ' + hydrationPrograms.createMorphsProgram + ',\n' + indent + ' statements: [\n' + statements + '\n' + indent + ' ],\n' + indent + ' locals: ' + locals + ',\n' + indent + ' templates: [' + templates + ']\n' + indent + ' };\n' + indent + '}())';
13449
+ var template = '(function() {\n' + this.getChildTemplateVars(indent + ' ') + indent + ' return {\n' + this.buildMeta(indent + ' ', program) + indent + ' isEmpty: ' + (program.body.length ? 'false' : 'true') + ',\n' + indent + ' arity: ' + blockParams.length + ',\n' + indent + ' cachedFragment: null,\n' + indent + ' hasRendered: false,\n' + indent + ' buildFragment: ' + fragmentProgram + ',\n' + indent + ' buildRenderNodes: ' + hydrationPrograms.createMorphsProgram + ',\n' + indent + ' statements: [\n' + statements + '\n' + indent + ' ],\n' + indent + ' locals: ' + locals + ',\n' + indent + ' templates: [' + templates + ']\n' + indent + ' };\n' + indent + '}())';
13090
13450
 
13091
13451
  this.templates.push(template);
13092
13452
  };
@@ -13393,7 +13753,7 @@ enifed("htmlbars-compiler/utils", ["exports"], function (exports) {
13393
13753
  }
13394
13754
  }
13395
13755
  });
13396
- enifed('htmlbars-runtime', ['exports', './htmlbars-runtime/hooks', './htmlbars-runtime/render', '../htmlbars-util/morph-utils', '../htmlbars-util/template-utils', './htmlbars-runtime/expression-visitor', 'htmlbars-runtime/hooks'], function (exports, _htmlbarsRuntimeHooks, _htmlbarsRuntimeRender, _htmlbarsUtilMorphUtils, _htmlbarsUtilTemplateUtils, _htmlbarsRuntimeExpressionVisitor, _htmlbarsRuntimeHooks2) {
13756
+ enifed('htmlbars-runtime', ['exports', './htmlbars-runtime/hooks', './htmlbars-runtime/render', '../htmlbars-util/morph-utils', '../htmlbars-util/template-utils', 'htmlbars-runtime/hooks'], function (exports, _htmlbarsRuntimeHooks, _htmlbarsRuntimeRender, _htmlbarsUtilMorphUtils, _htmlbarsUtilTemplateUtils, _htmlbarsRuntimeHooks2) {
13397
13757
  'use strict';
13398
13758
 
13399
13759
  var internal = {
@@ -13403,7 +13763,7 @@ enifed('htmlbars-runtime', ['exports', './htmlbars-runtime/hooks', './htmlbars-r
13403
13763
  continueBlock: _htmlbarsRuntimeHooks2.continueBlock,
13404
13764
  hostYieldWithShadowTemplate: _htmlbarsRuntimeHooks2.hostYieldWithShadowTemplate,
13405
13765
  visitChildren: _htmlbarsUtilMorphUtils.visitChildren,
13406
- validateChildMorphs: _htmlbarsRuntimeExpressionVisitor.validateChildMorphs,
13766
+ validateChildMorphs: _htmlbarsUtilMorphUtils.validateChildMorphs,
13407
13767
  clearMorph: _htmlbarsUtilTemplateUtils.clearMorph
13408
13768
  };
13409
13769
 
@@ -13411,28 +13771,8 @@ enifed('htmlbars-runtime', ['exports', './htmlbars-runtime/hooks', './htmlbars-r
13411
13771
  exports.render = _htmlbarsRuntimeRender.default;
13412
13772
  exports.internal = internal;
13413
13773
  });
13414
- enifed("htmlbars-runtime/expression-visitor", ["exports", "../htmlbars-util/object-utils", "../htmlbars-util/morph-utils"], function (exports, _htmlbarsUtilObjectUtils, _htmlbarsUtilMorphUtils) {
13415
- "use strict";
13416
-
13774
+ enifed('htmlbars-runtime/expression-visitor', ['exports'], function (exports) {
13417
13775
  /**
13418
- Node classification:
13419
-
13420
- # Primary Statement Nodes:
13421
-
13422
- These nodes are responsible for a render node that represents a morph-range.
13423
-
13424
- * block
13425
- * inline
13426
- * content
13427
- * element
13428
- * component
13429
-
13430
- # Leaf Statement Nodes:
13431
-
13432
- This node is responsible for a render node that represents a morph-attr.
13433
-
13434
- * attribute
13435
-
13436
13776
  # Expression Nodes:
13437
13777
 
13438
13778
  These nodes are not directly responsible for any part of the DOM, but are
@@ -13441,251 +13781,86 @@ enifed("htmlbars-runtime/expression-visitor", ["exports", "../htmlbars-util/obje
13441
13781
  * get
13442
13782
  * subexpr
13443
13783
  * concat
13444
- */
13445
-
13446
- var base = {
13447
- acceptExpression: function (node, env, scope) {
13448
- var ret = { value: null };
13449
-
13450
- // Primitive literals are unambiguously non-array representations of
13451
- // themselves.
13452
- if (typeof node !== 'object' || node === null) {
13453
- ret.value = node;
13454
- return ret;
13455
- }
13456
-
13457
- switch (node[0]) {
13458
- // can be used by manualElement
13459
- case 'value':
13460
- ret.value = node[1];break;
13461
- case 'get':
13462
- ret.value = this.get(node, env, scope);break;
13463
- case 'subexpr':
13464
- ret.value = this.subexpr(node, env, scope);break;
13465
- case 'concat':
13466
- ret.value = this.concat(node, env, scope);break;
13467
- }
13468
-
13469
- return ret;
13470
- },
13471
-
13472
- acceptParams: function (nodes, env, scope) {
13473
- var arr = new Array(nodes.length);
13474
-
13475
- for (var i = 0, l = nodes.length; i < l; i++) {
13476
- arr[i] = this.acceptExpression(nodes[i], env, scope).value;
13477
- }
13478
-
13479
- return arr;
13480
- },
13481
-
13482
- acceptHash: function (pairs, env, scope) {
13483
- var object = {};
13484
-
13485
- for (var i = 0, l = pairs.length; i < l; i += 2) {
13486
- object[pairs[i]] = this.acceptExpression(pairs[i + 1], env, scope).value;
13487
- }
13488
-
13489
- return object;
13490
- },
13491
-
13492
- // [ 'get', path ]
13493
- get: function (node, env, scope) {
13494
- return env.hooks.get(env, scope, node[1]);
13495
- },
13496
-
13497
- // [ 'subexpr', path, params, hash ]
13498
- subexpr: function (node, env, scope) {
13499
- var path = node[1],
13500
- params = node[2],
13501
- hash = node[3];
13502
- return env.hooks.subexpr(env, scope, path, this.acceptParams(params, env, scope), this.acceptHash(hash, env, scope));
13503
- },
13504
-
13505
- // [ 'concat', parts ]
13506
- concat: function (node, env, scope) {
13507
- return env.hooks.concat(env, this.acceptParams(node[1], env, scope));
13508
- },
13509
-
13510
- linkParamsAndHash: function (env, scope, morph, path, params, hash) {
13511
- if (morph.linkedParams) {
13512
- params = morph.linkedParams.params;
13513
- hash = morph.linkedParams.hash;
13514
- } else {
13515
- params = params && this.acceptParams(params, env, scope);
13516
- hash = hash && this.acceptHash(hash, env, scope);
13517
- }
13518
-
13519
- _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, path, params, hash);
13520
- return [params, hash];
13521
- }
13522
- };
13523
-
13524
- var AlwaysDirtyVisitor = _htmlbarsUtilObjectUtils.merge(Object.create(base), {
13525
- // [ 'block', path, params, hash, templateId, inverseId ]
13526
- block: function (node, morph, env, scope, template, visitor) {
13527
- var path = node[1],
13528
- params = node[2],
13529
- hash = node[3],
13530
- templateId = node[4],
13531
- inverseId = node[5];
13532
- var paramsAndHash = this.linkParamsAndHash(env, scope, morph, path, params, hash);
13533
-
13534
- morph.isDirty = morph.isSubtreeDirty = false;
13535
- env.hooks.block(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], templateId === null ? null : template.templates[templateId], inverseId === null ? null : template.templates[inverseId], visitor);
13536
- },
13537
-
13538
- // [ 'inline', path, params, hash ]
13539
- inline: function (node, morph, env, scope, visitor) {
13540
- var path = node[1],
13541
- params = node[2],
13542
- hash = node[3];
13543
- var paramsAndHash = this.linkParamsAndHash(env, scope, morph, path, params, hash);
13544
-
13545
- morph.isDirty = morph.isSubtreeDirty = false;
13546
- env.hooks.inline(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], visitor);
13547
- },
13548
-
13549
- // [ 'content', path ]
13550
- content: function (node, morph, env, scope, visitor) {
13551
- var path = node[1];
13552
-
13553
- morph.isDirty = morph.isSubtreeDirty = false;
13554
-
13555
- if (isHelper(env, scope, path)) {
13556
- env.hooks.inline(morph, env, scope, path, [], {}, visitor);
13557
- if (morph.linkedResult) {
13558
- _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@content-helper', [morph.linkedResult], null);
13559
- }
13560
- return;
13561
- }
13562
-
13563
- var params;
13564
- if (morph.linkedParams) {
13565
- params = morph.linkedParams.params;
13566
- } else {
13567
- params = [env.hooks.get(env, scope, path)];
13568
- }
13569
-
13570
- _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@range', params, null);
13571
- env.hooks.range(morph, env, scope, path, params[0], visitor);
13572
- },
13573
-
13574
- // [ 'element', path, params, hash ]
13575
- element: function (node, morph, env, scope, visitor) {
13576
- var path = node[1],
13577
- params = node[2],
13578
- hash = node[3];
13579
- var paramsAndHash = this.linkParamsAndHash(env, scope, morph, path, params, hash);
13580
-
13581
- morph.isDirty = morph.isSubtreeDirty = false;
13582
- env.hooks.element(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], visitor);
13583
- },
13584
-
13585
- // [ 'attribute', name, value ]
13586
- attribute: function (node, morph, env, scope) {
13587
- var name = node[1],
13588
- value = node[2];
13589
- var paramsAndHash = this.linkParamsAndHash(env, scope, morph, '@attribute', [value], null);
13590
-
13591
- morph.isDirty = morph.isSubtreeDirty = false;
13592
- env.hooks.attribute(morph, env, scope, name, paramsAndHash[0][0]);
13593
- },
13594
-
13595
- // [ 'component', path, attrs, templateId, inverseId ]
13596
- component: function (node, morph, env, scope, template, visitor) {
13597
- var path = node[1],
13598
- attrs = node[2],
13599
- templateId = node[3],
13600
- inverseId = node[4];
13601
- var paramsAndHash = this.linkParamsAndHash(env, scope, morph, path, [], attrs);
13602
- var templates = {
13603
- default: template.templates[templateId],
13604
- inverse: template.templates[inverseId]
13605
- };
13784
+ */
13606
13785
 
13607
- morph.isDirty = morph.isSubtreeDirty = false;
13608
- env.hooks.component(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], templates, visitor);
13609
- },
13786
+ 'use strict';
13610
13787
 
13611
- // [ 'attributes', template ]
13612
- attributes: function (node, morph, env, scope, parentMorph, visitor) {
13613
- var template = node[1];
13614
- env.hooks.attributes(morph, env, scope, template, parentMorph, visitor);
13615
- }
13616
- });
13788
+ exports.acceptParams = acceptParams;
13789
+ exports.acceptHash = acceptHash;
13617
13790
 
13618
- exports.AlwaysDirtyVisitor = AlwaysDirtyVisitor;
13619
- exports.default = _htmlbarsUtilObjectUtils.merge(Object.create(base), {
13620
- // [ 'block', path, params, hash, templateId, inverseId ]
13621
- block: function (node, morph, env, scope, template, visitor) {
13622
- dirtyCheck(env, morph, visitor, function (visitor) {
13623
- AlwaysDirtyVisitor.block(node, morph, env, scope, template, visitor);
13624
- });
13625
- },
13791
+ function acceptParams(nodes, env, scope) {
13792
+ var array = [];
13626
13793
 
13627
- // [ 'inline', path, params, hash ]
13628
- inline: function (node, morph, env, scope, visitor) {
13629
- dirtyCheck(env, morph, visitor, function (visitor) {
13630
- AlwaysDirtyVisitor.inline(node, morph, env, scope, visitor);
13631
- });
13632
- },
13794
+ for (var i = 0, l = nodes.length; i < l; i++) {
13795
+ array.push(acceptExpression(nodes[i], env, scope).value);
13796
+ }
13633
13797
 
13634
- // [ 'content', path ]
13635
- content: function (node, morph, env, scope, visitor) {
13636
- dirtyCheck(env, morph, visitor, function (visitor) {
13637
- AlwaysDirtyVisitor.content(node, morph, env, scope, visitor);
13638
- });
13639
- },
13798
+ return array;
13799
+ }
13640
13800
 
13641
- // [ 'element', path, params, hash ]
13642
- element: function (node, morph, env, scope, template, visitor) {
13643
- dirtyCheck(env, morph, visitor, function (visitor) {
13644
- AlwaysDirtyVisitor.element(node, morph, env, scope, template, visitor);
13645
- });
13646
- },
13801
+ function acceptHash(pairs, env, scope) {
13802
+ var object = {};
13647
13803
 
13648
- // [ 'attribute', name, value ]
13649
- attribute: function (node, morph, env, scope, template) {
13650
- dirtyCheck(env, morph, null, function () {
13651
- AlwaysDirtyVisitor.attribute(node, morph, env, scope, template);
13652
- });
13653
- },
13804
+ for (var i = 0, l = pairs.length; i < l; i += 2) {
13805
+ var key = pairs[i];
13806
+ var value = pairs[i + 1];
13807
+ object[key] = acceptExpression(value, env, scope).value;
13808
+ }
13654
13809
 
13655
- // [ 'component', path, attrs, templateId ]
13656
- component: function (node, morph, env, scope, template, visitor) {
13657
- dirtyCheck(env, morph, visitor, function (visitor) {
13658
- AlwaysDirtyVisitor.component(node, morph, env, scope, template, visitor);
13659
- });
13660
- },
13810
+ return object;
13811
+ }
13661
13812
 
13662
- // [ 'attributes', template ]
13663
- attributes: function (node, morph, env, scope, parentMorph, visitor) {
13664
- AlwaysDirtyVisitor.attributes(node, morph, env, scope, parentMorph, visitor);
13813
+ function acceptExpression(node, env, scope) {
13814
+ var ret = { value: null };
13815
+
13816
+ // Primitive literals are unambiguously non-array representations of
13817
+ // themselves.
13818
+ if (typeof node !== 'object' || node === null) {
13819
+ ret.value = node;
13820
+ } else {
13821
+ ret.value = evaluateNode(node, env, scope);
13665
13822
  }
13666
- });
13667
13823
 
13668
- function dirtyCheck(_env, morph, visitor, callback) {
13669
- var isDirty = morph.isDirty;
13670
- var isSubtreeDirty = morph.isSubtreeDirty;
13671
- var env = _env;
13824
+ return ret;
13825
+ }
13672
13826
 
13673
- if (isSubtreeDirty) {
13674
- visitor = AlwaysDirtyVisitor;
13827
+ function evaluateNode(node, env, scope) {
13828
+ switch (node[0]) {
13829
+ // can be used by manualElement
13830
+ case 'value':
13831
+ return node[1];
13832
+ case 'get':
13833
+ return evaluateGet(node, env, scope);
13834
+ case 'subexpr':
13835
+ return evaluateSubexpr(node, env, scope);
13836
+ case 'concat':
13837
+ return evaluateConcat(node, env, scope);
13675
13838
  }
13839
+ }
13676
13840
 
13677
- if (isDirty || isSubtreeDirty) {
13678
- callback(visitor);
13679
- } else {
13680
- if (morph.buildChildEnv) {
13681
- env = morph.buildChildEnv(morph.state, env);
13682
- }
13683
- _htmlbarsUtilMorphUtils.validateChildMorphs(env, morph, visitor);
13684
- }
13841
+ function evaluateGet(node, env, scope) {
13842
+ var path = node[1];
13843
+
13844
+ return env.hooks.get(env, scope, path);
13685
13845
  }
13686
13846
 
13687
- function isHelper(env, scope, path) {
13688
- return env.hooks.keywords[path] !== undefined || env.hooks.hasHelper(env, scope, path);
13847
+ function evaluateSubexpr(node, env, scope) {
13848
+ var path = node[1];
13849
+ var rawParams = node[2];
13850
+ var rawHash = node[3];
13851
+
13852
+ var params = acceptParams(rawParams, env, scope);
13853
+ var hash = acceptHash(rawHash, env, scope);
13854
+
13855
+ return env.hooks.subexpr(env, scope, path, params, hash);
13856
+ }
13857
+
13858
+ function evaluateConcat(node, env, scope) {
13859
+ var rawParts = node[1];
13860
+
13861
+ var parts = acceptParams(rawParts, env, scope);
13862
+
13863
+ return env.hooks.concat(env, parts);
13689
13864
  }
13690
13865
  });
13691
13866
  enifed("htmlbars-runtime/hooks", ["exports", "./render", "../morph-range/morph-list", "../htmlbars-util/object-utils", "../htmlbars-util/morph-utils", "../htmlbars-util/template-utils"], function (exports, _render, _morphRangeMorphList, _htmlbarsUtilObjectUtils, _htmlbarsUtilMorphUtils, _htmlbarsUtilTemplateUtils) {
@@ -14179,6 +14354,8 @@ enifed("htmlbars-runtime/hooks", ["exports", "./render", "../morph-range/morph-l
14179
14354
  function createChildScope(parent) {
14180
14355
  var scope = Object.create(parent);
14181
14356
  scope.locals = Object.create(parent.locals);
14357
+ scope.localPresent = Object.create(parent.localPresent);
14358
+ scope.blocks = Object.create(parent.blocks);
14182
14359
  return scope;
14183
14360
  }
14184
14361
 
@@ -14927,7 +15104,204 @@ enifed("htmlbars-runtime/morph", ["exports", "../morph-range"], function (export
14927
15104
 
14928
15105
  exports.default = HTMLBarsMorph;
14929
15106
  });
14930
- enifed("htmlbars-runtime/render", ["exports", "../htmlbars-util/array-utils", "../htmlbars-util/morph-utils", "./expression-visitor", "./morph", "../htmlbars-util/template-utils", "../htmlbars-util/void-tag-names"], function (exports, _htmlbarsUtilArrayUtils, _htmlbarsUtilMorphUtils, _expressionVisitor, _morph, _htmlbarsUtilTemplateUtils, _htmlbarsUtilVoidTagNames) {
15107
+ enifed("htmlbars-runtime/node-visitor", ["exports", "../htmlbars-util/morph-utils", "./expression-visitor"], function (exports, _htmlbarsUtilMorphUtils, _expressionVisitor) {
15108
+ "use strict";
15109
+
15110
+ /**
15111
+ Node classification:
15112
+
15113
+ # Primary Statement Nodes:
15114
+
15115
+ These nodes are responsible for a render node that represents a morph-range.
15116
+
15117
+ * block
15118
+ * inline
15119
+ * content
15120
+ * element
15121
+ * component
15122
+
15123
+ # Leaf Statement Nodes:
15124
+
15125
+ This node is responsible for a render node that represents a morph-attr.
15126
+
15127
+ * attribute
15128
+ */
15129
+
15130
+ function linkParamsAndHash(env, scope, morph, path, params, hash) {
15131
+ if (morph.linkedParams) {
15132
+ params = morph.linkedParams.params;
15133
+ hash = morph.linkedParams.hash;
15134
+ } else {
15135
+ params = params && _expressionVisitor.acceptParams(params, env, scope);
15136
+ hash = hash && _expressionVisitor.acceptHash(hash, env, scope);
15137
+ }
15138
+
15139
+ _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, path, params, hash);
15140
+ return [params, hash];
15141
+ }
15142
+
15143
+ var AlwaysDirtyVisitor = {
15144
+
15145
+ block: function (node, morph, env, scope, template, visitor) {
15146
+ var path = node[1];
15147
+ var params = node[2];
15148
+ var hash = node[3];
15149
+ var templateId = node[4];
15150
+ var inverseId = node[5];
15151
+
15152
+ var paramsAndHash = linkParamsAndHash(env, scope, morph, path, params, hash);
15153
+
15154
+ morph.isDirty = morph.isSubtreeDirty = false;
15155
+ env.hooks.block(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], templateId === null ? null : template.templates[templateId], inverseId === null ? null : template.templates[inverseId], visitor);
15156
+ },
15157
+
15158
+ inline: function (node, morph, env, scope, visitor) {
15159
+ var path = node[1];
15160
+ var params = node[2];
15161
+ var hash = node[3];
15162
+
15163
+ var paramsAndHash = linkParamsAndHash(env, scope, morph, path, params, hash);
15164
+
15165
+ morph.isDirty = morph.isSubtreeDirty = false;
15166
+ env.hooks.inline(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], visitor);
15167
+ },
15168
+
15169
+ content: function (node, morph, env, scope, visitor) {
15170
+ var path = node[1];
15171
+
15172
+ morph.isDirty = morph.isSubtreeDirty = false;
15173
+
15174
+ if (isHelper(env, scope, path)) {
15175
+ env.hooks.inline(morph, env, scope, path, [], {}, visitor);
15176
+ if (morph.linkedResult) {
15177
+ _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@content-helper', [morph.linkedResult], null);
15178
+ }
15179
+ return;
15180
+ }
15181
+
15182
+ var params = undefined;
15183
+ if (morph.linkedParams) {
15184
+ params = morph.linkedParams.params;
15185
+ } else {
15186
+ params = [env.hooks.get(env, scope, path)];
15187
+ }
15188
+
15189
+ _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@range', params, null);
15190
+ env.hooks.range(morph, env, scope, path, params[0], visitor);
15191
+ },
15192
+
15193
+ element: function (node, morph, env, scope, visitor) {
15194
+ var path = node[1];
15195
+ var params = node[2];
15196
+ var hash = node[3];
15197
+
15198
+ var paramsAndHash = linkParamsAndHash(env, scope, morph, path, params, hash);
15199
+
15200
+ morph.isDirty = morph.isSubtreeDirty = false;
15201
+ env.hooks.element(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], visitor);
15202
+ },
15203
+
15204
+ attribute: function (node, morph, env, scope) {
15205
+ var name = node[1];
15206
+ var value = node[2];
15207
+
15208
+ var paramsAndHash = linkParamsAndHash(env, scope, morph, '@attribute', [value], null);
15209
+
15210
+ morph.isDirty = morph.isSubtreeDirty = false;
15211
+ env.hooks.attribute(morph, env, scope, name, paramsAndHash[0][0]);
15212
+ },
15213
+
15214
+ component: function (node, morph, env, scope, template, visitor) {
15215
+ var path = node[1];
15216
+ var attrs = node[2];
15217
+ var templateId = node[3];
15218
+ var inverseId = node[4];
15219
+
15220
+ var paramsAndHash = linkParamsAndHash(env, scope, morph, path, [], attrs);
15221
+ var templates = {
15222
+ default: template.templates[templateId],
15223
+ inverse: template.templates[inverseId]
15224
+ };
15225
+
15226
+ morph.isDirty = morph.isSubtreeDirty = false;
15227
+ env.hooks.component(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], templates, visitor);
15228
+ },
15229
+
15230
+ attributes: function (node, morph, env, scope, parentMorph, visitor) {
15231
+ var template = node[1];
15232
+
15233
+ env.hooks.attributes(morph, env, scope, template, parentMorph, visitor);
15234
+ }
15235
+
15236
+ };
15237
+
15238
+ exports.AlwaysDirtyVisitor = AlwaysDirtyVisitor;
15239
+ exports.default = {
15240
+ block: function (node, morph, env, scope, template, visitor) {
15241
+ dirtyCheck(env, morph, visitor, function (visitor) {
15242
+ AlwaysDirtyVisitor.block(node, morph, env, scope, template, visitor);
15243
+ });
15244
+ },
15245
+
15246
+ inline: function (node, morph, env, scope, visitor) {
15247
+ dirtyCheck(env, morph, visitor, function (visitor) {
15248
+ AlwaysDirtyVisitor.inline(node, morph, env, scope, visitor);
15249
+ });
15250
+ },
15251
+
15252
+ content: function (node, morph, env, scope, visitor) {
15253
+ dirtyCheck(env, morph, visitor, function (visitor) {
15254
+ AlwaysDirtyVisitor.content(node, morph, env, scope, visitor);
15255
+ });
15256
+ },
15257
+
15258
+ element: function (node, morph, env, scope, template, visitor) {
15259
+ dirtyCheck(env, morph, visitor, function (visitor) {
15260
+ AlwaysDirtyVisitor.element(node, morph, env, scope, template, visitor);
15261
+ });
15262
+ },
15263
+
15264
+ attribute: function (node, morph, env, scope, template) {
15265
+ dirtyCheck(env, morph, null, function () {
15266
+ AlwaysDirtyVisitor.attribute(node, morph, env, scope, template);
15267
+ });
15268
+ },
15269
+
15270
+ component: function (node, morph, env, scope, template, visitor) {
15271
+ dirtyCheck(env, morph, visitor, function (visitor) {
15272
+ AlwaysDirtyVisitor.component(node, morph, env, scope, template, visitor);
15273
+ });
15274
+ },
15275
+
15276
+ attributes: function (node, morph, env, scope, parentMorph, visitor) {
15277
+ AlwaysDirtyVisitor.attributes(node, morph, env, scope, parentMorph, visitor);
15278
+ }
15279
+ };
15280
+
15281
+ function dirtyCheck(_env, morph, visitor, callback) {
15282
+ var isDirty = morph.isDirty;
15283
+ var isSubtreeDirty = morph.isSubtreeDirty;
15284
+ var env = _env;
15285
+
15286
+ if (isSubtreeDirty) {
15287
+ visitor = AlwaysDirtyVisitor;
15288
+ }
15289
+
15290
+ if (isDirty || isSubtreeDirty) {
15291
+ callback(visitor);
15292
+ } else {
15293
+ if (morph.buildChildEnv) {
15294
+ env = morph.buildChildEnv(morph.state, env);
15295
+ }
15296
+ _htmlbarsUtilMorphUtils.validateChildMorphs(env, morph, visitor);
15297
+ }
15298
+ }
15299
+
15300
+ function isHelper(env, scope, path) {
15301
+ return env.hooks.keywords[path] !== undefined || env.hooks.hasHelper(env, scope, path);
15302
+ }
15303
+ });
15304
+ enifed("htmlbars-runtime/render", ["exports", "../htmlbars-util/array-utils", "../htmlbars-util/morph-utils", "./node-visitor", "./morph", "../htmlbars-util/template-utils", "../htmlbars-util/void-tag-names"], function (exports, _htmlbarsUtilArrayUtils, _htmlbarsUtilMorphUtils, _nodeVisitor, _morph, _htmlbarsUtilTemplateUtils, _htmlbarsUtilVoidTagNames) {
14931
15305
  "use strict";
14932
15306
 
14933
15307
  exports.default = render;
@@ -15014,7 +15388,7 @@ enifed("htmlbars-runtime/render", ["exports", "../htmlbars-util/array-utils", ".
15014
15388
  return new RenderResult(env, scope, options, rootNode, ownerNode, nodes, fragment, template, shouldSetContent);
15015
15389
  };
15016
15390
 
15017
- function manualElement(tagName, attributes) {
15391
+ function manualElement(tagName, attributes, _isEmpty) {
15018
15392
  var statements = [];
15019
15393
 
15020
15394
  for (var key in attributes) {
@@ -15024,7 +15398,11 @@ enifed("htmlbars-runtime/render", ["exports", "../htmlbars-util/array-utils", ".
15024
15398
  statements.push(["attribute", key, attributes[key]]);
15025
15399
  }
15026
15400
 
15027
- statements.push(['content', 'yield']);
15401
+ var isEmpty = _isEmpty || _htmlbarsUtilVoidTagNames.default[tagName];
15402
+
15403
+ if (!isEmpty) {
15404
+ statements.push(['content', 'yield']);
15405
+ }
15028
15406
 
15029
15407
  var template = {
15030
15408
  arity: 0,
@@ -15044,7 +15422,7 @@ enifed("htmlbars-runtime/render", ["exports", "../htmlbars-util/array-utils", ".
15044
15422
  dom.setAttribute(el1, key, attributes[key]);
15045
15423
  }
15046
15424
 
15047
- if (!_htmlbarsUtilVoidTagNames.default[tagName]) {
15425
+ if (!isEmpty) {
15048
15426
  var el2 = dom.createComment("");
15049
15427
  dom.appendChild(el1, el2);
15050
15428
  }
@@ -15064,7 +15442,10 @@ enifed("htmlbars-runtime/render", ["exports", "../htmlbars-util/array-utils", ".
15064
15442
  morphs.push(dom.createAttrMorph(element, key));
15065
15443
  }
15066
15444
 
15067
- morphs.push(dom.createMorphAt(element, 0, 0));
15445
+ if (!isEmpty) {
15446
+ morphs.push(dom.createMorphAt(element, 0, 0));
15447
+ }
15448
+
15068
15449
  return morphs;
15069
15450
  },
15070
15451
  statements: statements,
@@ -15134,7 +15515,7 @@ enifed("htmlbars-runtime/render", ["exports", "../htmlbars-util/array-utils", ".
15134
15515
  RenderResult.prototype.render = function () {
15135
15516
  this.root.lastResult = this;
15136
15517
  this.root.rendered = true;
15137
- this.populateNodes(_expressionVisitor.AlwaysDirtyVisitor);
15518
+ this.populateNodes(_nodeVisitor.AlwaysDirtyVisitor);
15138
15519
 
15139
15520
  if (this.shouldSetContent && this.root.setContent) {
15140
15521
  this.root.setContent(this.fragment);
@@ -15148,11 +15529,11 @@ enifed("htmlbars-runtime/render", ["exports", "../htmlbars-util/array-utils", ".
15148
15529
  };
15149
15530
 
15150
15531
  RenderResult.prototype.revalidate = function (env, self, blockArguments, scope) {
15151
- this.revalidateWith(env, scope, self, blockArguments, _expressionVisitor.default);
15532
+ this.revalidateWith(env, scope, self, blockArguments, _nodeVisitor.default);
15152
15533
  };
15153
15534
 
15154
15535
  RenderResult.prototype.rerender = function (env, self, blockArguments, scope) {
15155
- this.revalidateWith(env, scope, self, blockArguments, _expressionVisitor.AlwaysDirtyVisitor);
15536
+ this.revalidateWith(env, scope, self, blockArguments, _nodeVisitor.AlwaysDirtyVisitor);
15156
15537
  };
15157
15538
 
15158
15539
  RenderResult.prototype.revalidateWith = function (env, scope, self, blockArguments, visitor) {
@@ -15393,7 +15774,14 @@ enifed("htmlbars-syntax/builders", ["exports"], function (exports) {
15393
15774
  tag: tag,
15394
15775
  attributes: attributes,
15395
15776
  program: program,
15396
- loc: buildLoc(loc)
15777
+ loc: buildLoc(loc),
15778
+
15779
+ // this should be true only if this component node is guaranteed
15780
+ // to produce start and end points that can never change after the
15781
+ // initial render, regardless of changes to dynamic inputs. If
15782
+ // a component represents a "fragment" (any number of top-level nodes),
15783
+ // this will usually not be true.
15784
+ isStatic: false
15397
15785
  };
15398
15786
  }
15399
15787
 
@@ -18455,12 +18843,7 @@ enifed("htmlbars-util/morph-utils", ["exports"], function (exports) {
18455
18843
  current = current.nextMorph;
18456
18844
  }
18457
18845
  } else if (node.morphList) {
18458
- var current = node.morphList.firstChildMorph;
18459
-
18460
- while (current) {
18461
- nodes.push(current);
18462
- current = current.nextMorph;
18463
- }
18846
+ nodes.push(node.morphList);
18464
18847
  }
18465
18848
  }
18466
18849
  }
@@ -18899,8 +19282,8 @@ enifed('morph-range', ['exports', './morph-range/utils'], function (exports, _mo
18899
19282
  return this.setNode(content);
18900
19283
  }
18901
19284
  /* Handlebars.SafeString */
18902
- if (typeof content.toHTML === 'function') {
18903
- return this.setHTML(content.toHTML());
19285
+ if (typeof content.string === 'string') {
19286
+ return this.setHTML(content.string);
18904
19287
  }
18905
19288
  if (this.parseTextAsHTML) {
18906
19289
  return this.setHTML(content.toString());