Skip to content

Commit

Permalink
[SVELTE] Transforms & remove Date.parse polyfill (#4936)
Browse files Browse the repository at this point in the history
* cleanup Date.parse

* more cleanup of PR

* fix tests

* fix phantom

* fix phantom
  • Loading branch information
runspired authored and stefanpenner committed Apr 26, 2017
1 parent 92e48c4 commit 05e9528
Show file tree
Hide file tree
Showing 14 changed files with 171 additions and 194 deletions.
90 changes: 0 additions & 90 deletions addon/-private/ext/date.js

This file was deleted.

8 changes: 0 additions & 8 deletions addon/-private/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,11 @@ export { getOwner, modelHasAttributeOrRelationshipNamedType } from './utils';
export { default as coerceId } from './system/coerce-id';
export { default as parseResponseHeaders } from './utils/parse-response-headers';

// should be moved into public ?
export { default as Transform } from './transforms/transform';
export { default as NumberTransform } from './transforms/number';
export { default as DateTransform } from './transforms/date';
export { default as StringTransform } from './transforms/string';
export { default as BooleanTransform } from './transforms/boolean';

// should be private ?
export { default as RootState } from './system/model/states';
export { default as global } from './global';
export { default as isEnabled } from './features';
export { default as InternalModel } from './system/model/internal-model';
export { parseDate } from './ext/date';

export {
PromiseArray,
Expand Down
50 changes: 0 additions & 50 deletions addon/-private/transforms/date.js

This file was deleted.

11 changes: 6 additions & 5 deletions addon/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,6 @@ import {
Model,
Store,
normalizeModelName,
Transform,
DateTransform,
NumberTransform,
StringTransform,
BooleanTransform,
PromiseArray,
PromiseObject,
PromiseManyArray,
Expand All @@ -59,6 +54,12 @@ import "ember-inflector";
import setupContainer from "./setup-container";
import initializeStoreService from './instance-initializers/initialize-store-service';

import Transform from './transforms/transform';
import NumberTransform from './transforms/number';
import DateTransform from './transforms/date';
import StringTransform from './transforms/string';
import BooleanTransform from './transforms/boolean';

import Adapter from "./adapter";
import JSONAPIAdapter from './adapters/json-api';
import RESTAdapter from './adapters/rest';
Expand Down
11 changes: 6 additions & 5 deletions addon/setup-container.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import {
DebugAdapter,
Store,
NumberTransform,
DateTransform,
StringTransform,
BooleanTransform
Store
} from './-private';
import JSONAPISerializer from './serializers/json-api';
import JSONSerializer from './serializers/json';
import RESTSerializer from './serializers/rest';
import JSONAPIAdapter from './adapters/json-api';
import RESTAdapter from './adapters/rest';

import NumberTransform from './transforms/number';
import DateTransform from './transforms/date';
import StringTransform from './transforms/string';
import BooleanTransform from './transforms/boolean';

function has(applicationOrRegistry, fullName) {
if (applicationOrRegistry.has) {
// < 2.1.0
Expand Down
File renamed without changes.
99 changes: 99 additions & 0 deletions addon/transforms/date.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import Transform from './transform';
import Ember from 'ember';
import { deprecate } from 'ember-data/-debug';

Ember.Date = Ember.Date || {};

/**
Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>
© 2011 Colin Snover <http://zetafleet.com>
Released under MIT license.
@class Date
@namespace Ember
@static
@deprecated
*/
Ember.Date.parse = function(date) {
// throw deprecation
deprecate(`Ember.Date.parse is deprecated because Safari 5-, IE8-, and
Firefox 3.6- are no longer supported (see
https://github.com/csnover/js-iso8601 for the history of this issue).
Please use Date.parse instead`,
false,
{
id: 'ds.ember.date.parse-deprecate',
until: '3.0.0'
});

return Date.parse(date);
};


/**
The `DS.DateTransform` class is used to serialize and deserialize
date attributes on Ember Data record objects. This transform is used
when `date` is passed as the type parameter to the
[DS.attr](../../data#method_attr) function. It uses the [`ISO 8601`](https://en.wikipedia.org/wiki/ISO_8601)
standard.
```app/models/score.js
import DS from 'ember-data';
export default DS.Model.extend({
value: DS.attr('number'),
player: DS.belongsTo('player'),
date: DS.attr('date')
});
```
@class DateTransform
@extends DS.Transform
@namespace DS
*/

export default Transform.extend({
deserialize(serialized) {
let type = typeof serialized;

if (type === "string") {
let offset = serialized.indexOf('+');

if (offset !== -1 && serialized.length - 3 === offset) {
deprecate(`The ECMA2015 Spec for ISO 8601 dates does not allow for shorthand timezone offsets such as +00.
Ember Data's normalization of date's allowing for this shorthand has been deprecated, please update your API to return
UTC dates formatted with ±hh:mm timezone offsets or implement a custom UTC transform.`,
false,
{
id: 'ds.attr.date.normalize-utc',
until: '3.0.0'
});
return new Date(`${serialized}:00`);

// this is a phantom specific bug fix in which +0000 is not supported
} else if (offset !== -1 && serialized.length - 5 === offset) {
offset += 3;
return new Date(serialized.slice(0, offset) + ':' + serialized.slice(offset));
}
return new Date(serialized);
} else if (type === "number") {
return new Date(serialized)
} else if (serialized === null || serialized === undefined) {
// if the value is null return null
// if the value is not present in the data return undefined
return serialized;
} else {
return null;
}
},

serialize(date) {
if (date instanceof Date && !isNaN(date)) {
return date.toISOString();
} else {
return null;
}
}
});
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@
"inflection": "^1.8.0",
"npm-git-info": "^1.0.0",
"semver": "^5.1.0",
"silent-error": "^1.0.0"
"silent-error": "^1.0.0",
"testem": "1.15.0"
},
"devDependencies": {
"babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/model-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Ember from 'ember';
import testInDebug from 'dummy/tests/helpers/test-in-debug';
import {module, test} from 'qunit';
import DS from 'ember-data';
import { isEnabled, parseDate } from 'ember-data/-private';
import { isEnabled } from 'ember-data/-private';

const { get, set, run } = Ember;

Expand Down Expand Up @@ -1099,7 +1099,7 @@ test('a DS.Model can describe Date attributes', function(assert) {
converts(assert, 'date', undefined, undefined);

let dateString = '2011-12-31T00:08:16.000Z';
let date = new Date(parseDate(dateString));
let date = new Date(dateString);

const Person = DS.Model.extend({
updatedAt: DS.attr('date')
Expand Down
29 changes: 11 additions & 18 deletions tests/unit/transform/date-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@ import DS from 'ember-data';
import Ember from 'ember';

import testInDebug from 'dummy/tests/helpers/test-in-debug';
import { parseDate } from 'ember-data/-private';

module('unit/transform - DS.DateTransform');

let dateString = '2015-01-01T00:00:00.000Z';
let dateInMillis = parseDate(dateString);
let date = new Date(dateInMillis);
let dateInMillis = Date.parse(dateString);
let date = new Date(dateString);

test('#serialize', function(assert) {
let transform = new DS.DateTransform();
Expand Down Expand Up @@ -39,28 +38,22 @@ test('#deserialize', function(assert) {
assert.equal(transform.deserialize(undefined), null);
});

test('#deserialize with different offset formats', function(assert) {
testInDebug('#deserialize with different offset formats', function(assert) {
let transform = new DS.DateTransform();
let dateString = '2003-05-24T23:00:00.000+0000';
let dateStringColon = '2013-03-15T23:22:00.000+00:00';
let dateStringShortOffset = '2016-12-02T17:30:00.000+00';

assert.expect(6);
assert.expect(4);

let _dateUTC = Date.UTC;

try {
Date.UTC = function () {
assert.equal(arguments.length, 7);
return _dateUTC.apply(this, [].slice.call(arguments));
};
let deserialized;
assert.expectDeprecation(() => {
deserialized = transform.deserialize(dateStringShortOffset).getTime();
}, /The ECMA2015 Spec for ISO 8601 dates does not allow for shorthand timezone offsets such as \+00/);

assert.equal(transform.deserialize(dateString).getTime(), 1053817200000);
assert.equal(transform.deserialize(dateStringShortOffset).getTime(), 1480699800000);
assert.equal(transform.deserialize(dateStringColon).getTime(), 1363389720000);
} finally {
Date.UTC = _dateUTC;
}
assert.equal(transform.deserialize(dateString).getTime(), 1053817200000, 'date-strings with no-colon offsets are ok');
assert.equal(deserialized, 1480699800000, 'This test can be removed once the deprecation is removed');
assert.equal(transform.deserialize(dateStringColon).getTime(), 1363389720000, 'date-strings with colon offsets are ok');
});

testInDebug('Ember.Date.parse has been deprecated', function(assert) {
Expand Down
Loading

0 comments on commit 05e9528

Please sign in to comment.