{ "id": "171876", "key": "TIMOB-26179", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "20238", "description": "", "name": "Release 7.5.0", "archived": false, "released": true, "releaseDate": "2018-11-15" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2018-08-24T17:24:12.000+0000", "created": "2018-07-03T12:23:29.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [], "versions": [ { "id": "20099", "name": "Release 7.2.0", "archived": false, "released": true, "releaseDate": "2018-06-14" } ], "issuelinks": [ { "id": "56666", "type": { "id": "10000", "name": "Blocks", "inward": "is blocked by", "outward": "blocks" }, "outwardIssue": { "id": "171739", "key": "TIMOB-26093", "fields": { "summary": "Integrate Karma unit test runner into SDK", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Medium", "id": "3" }, "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } }, { "id": "56679", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "171652", "key": "TIMOB-26038", "fields": { "summary": "iOS: Move from legacy JavaScriptCore C Api to Obj-C API", "status": { "description": "This issue is being actively worked on at the moment by the assignee.", "name": "In Progress", "id": "3", "statusCategory": { "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "6", "description": "gh.issue.epic.desc", "name": "Epic", "subtask": false } } } }, { "id": "56681", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "99720", "key": "TIMOB-10829", "fields": { "summary": "Android: Case of infinite loop", "status": { "description": "This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.", "name": "Reopened", "id": "4", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "Low", "id": "4" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "56680", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "81773", "key": "TIMOB-5818", "fields": { "summary": "Ti API: View proxies should behave like real JS objects - or they should be wrapped", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "Medium", "id": "3" }, "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } }, { "id": "56678", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "161046", "key": "TIMOB-23504", "fields": { "summary": "iOS: Titanium proxies don't extend Object.prototype properly", "status": { "description": "This issue is being actively worked on at the moment by the assignee.", "name": "In Progress", "id": "3", "statusCategory": { "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "57602", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "143672", "key": "TIMOB-18465", "fields": { "summary": "Globals are not (over)writable", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "None", "id": "6" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2019-04-26T19:03:53.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "Checking for property existence on Titanium proxy objects always returns true, ignoring if a property really exists or not. Various aspects of Vue/Angular and module bundling with Rollup/Webpack rely on proper existence checks for properties on our proxies.\r\n\r\n*Steps to reproduce the behavior*\r\nRun the following example code in a Titanium app which compares the behavior to a plain JavaScript object.\r\n{code}\r\nconst win = Ti.UI.createWindow();\r\nconst plainObject = {\r\n\tprop: 'bar',\r\n\tfunc: () => {}\r\n};\r\n\r\nTi.API.debug('### hasProperty check ###');\r\nTi.API.debug('non-existing property');\r\nTi.API.debug(`proxy: ${'foo' in win}`);\r\nTi.API.debug(`plain: ${'foo' in plainObject}`);\r\nTi.API.debug('existing property');\r\nTi.API.debug(`proxy: ${'children' in win}`);\r\nTi.API.debug(`plain: ${'prop' in plainObject}`);\r\n{code}\r\n\r\n*Actual behavior*\r\nThe property check returns true for non-existing properties on the Ti.UI.Window object.\r\n\r\n*Expected behavior*\r\nThe property check should return true only for existing properties and false otherwise.", "attachment": [], "flagged": false, "summary": "iOS: Property check on proxy always returns true", "creator": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "subtasks": [], "reporter": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "environment": null, "closedSprints": [ { "id": 1050, "state": "closed", "name": "2018 Sprint 14 SDK", "startDate": "2018-07-01T18:40:57.193Z", "endDate": "2018-07-15T18:40:00.000Z", "completeDate": "2018-07-16T03:27:08.720Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "438967", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR: https://github.com/appcelerator/titanium_mobile/pull/10150", "updateAuthor": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-07-03T12:31:35.000+0000", "updated": "2018-07-03T12:31:35.000+0000" }, { "id": "439311", "author": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "body": "*Closing ticket*, Verified fix in SDK Version: {{7.4.0.v20180717131401}}\r\n\r\n*FR Passed (Test Steps):*\r\n# Created a titanium Application \r\n# Added the following code in the description in to the {{app.js}}\r\n# Ran the program \r\n# Following was seen in the console (Proxy for non-existing property no longer always set to true):\r\n{code:java}\r\n[DEBUG] : ### hasProperty check ###\r\n[DEBUG] : non-existing property\r\n[DEBUG] : proxy: false\r\n[DEBUG] : plain: false\r\n[DEBUG] : existing property\r\n[DEBUG] : proxy: true\r\n[DEBUG] : plain: true\r\n{code}\r\n\r\n*Test Environment*\r\n{code:java}\r\nAPPC Studio: 5.0.0.201712081732\r\nAPPC CLI: 7.0.4\r\niPhone 6 simulator (11.2)\r\nOperating System Name: Mac OS High Sierra\r\nOperating System Version: 10.13\r\nNode.js Version: 8.9.1\r\nXcode 9.2\r\n{code}\r\n", "updateAuthor": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-07-18T18:49:54.000+0000", "updated": "2018-07-18T18:49:54.000+0000" } ], "maxResults": 2, "total": 2, "startAt": 0 } } }