{"id":17242765,"url":"https://github.com/imcuttle/babel-plugin-transform-proto-to-assign-robust","last_synced_at":"2025-09-09T11:39:22.913Z","repository":{"id":32888889,"uuid":"145236321","full_name":"imcuttle/babel-plugin-transform-proto-to-assign-robust","owner":"imcuttle","description":"This plugin allows Babel to transform all **proto** assignments to a method that will do a shallow copy of all properties with symbol","archived":false,"fork":false,"pushed_at":"2022-01-07T14:07:44.000Z","size":16,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-23T02:33:59.157Z","etag":null,"topics":["proto-to-assign","symbol"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imcuttle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"License","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-08-18T16:42:50.000Z","updated_at":"2018-08-21T14:41:07.000Z","dependencies_parsed_at":"2022-08-07T18:15:58.477Z","dependency_job_id":null,"html_url":"https://github.com/imcuttle/babel-plugin-transform-proto-to-assign-robust","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcuttle%2Fbabel-plugin-transform-proto-to-assign-robust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcuttle%2Fbabel-plugin-transform-proto-to-assign-robust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcuttle%2Fbabel-plugin-transform-proto-to-assign-robust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imcuttle%2Fbabel-plugin-transform-proto-to-assign-robust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imcuttle","download_url":"https://codeload.github.com/imcuttle/babel-plugin-transform-proto-to-assign-robust/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245585797,"owners_count":20639671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["proto-to-assign","symbol"],"created_at":"2024-10-15T06:14:00.921Z","updated_at":"2025-03-26T03:44:24.177Z","avatar_url":"https://github.com/imcuttle.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# babel-plugin-transform-proto-to-assign-robust\n\n\u003c!--[![build status](https://img.shields.io/travis/imcuttle/babel-plugin-transform-proto-to-assign-robust/master.svg?style=flat-square)](https://travis-ci.org/imcuttle/babel-plugin-transform-proto-to-assign-robust)--\u003e\n\n[![NPM version](https://img.shields.io/npm/v/babel-plugin-transform-proto-to-assign-robust.svg?style=flat-square)](https://www.npmjs.com/package/babel-plugin-transform-proto-to-assign-robust)\n[![NPM Downloads](https://img.shields.io/npm/dm/babel-plugin-transform-proto-to-assign-robust.svg?style=flat-square\u0026maxAge=43200)](https://www.npmjs.com/package/babel-plugin-transform-proto-to-assign-robust)\n\nThis plugin allows Babel to transform all **proto** assignments to a method that will do a shallow copy of all properties **with symbol**.\n\nInspired by [`babel-plugin-transform-proto-to-assign`](https://github.com/babel/babel/tree/6.x/packages/babel-plugin-transform-proto-to-assign)\n\n## Why?\n\nWhen we using es6 class extend syntax in IE\u003c=10 which has not `Object.setPrototypeOf` and `__proto__`, so We need use `babel-plugin-transform-proto-to-assign` to transforming.\n\n- In\n\n```javascript\nbar.__proto__ = foo\n```\n\n- Out\n\n```javascript\nvar _defaults = function(obj, defaults) {\n  var keys = Object.getOwnPropertyNames(defaults)\n  for (var i = 0; i \u003c keys.length; i++) {\n    var key = keys[i]\n    var value = Object.getOwnPropertyDescriptor(defaults, key)\n    if (value \u0026\u0026 value.configurable \u0026\u0026 obj[key] === undefined) {\n      Object.defineProperty(obj, key, value)\n    }\n  }\n  return obj\n}\n\n_defaults(bar, foo)\n```\n\nThe above transform are worked by `babel-plugin-transform-proto-to-assign`.\n\nHowever the `_default` function **DO NOT assign the `Symbol` static value**, but `babel-plugin-transform-proto-to-assign-robust` do it!\n\n## Transform\n- In\n```javascript\nbar.__proto__ = foo\n```\n\n- Out\n```javascript\n;(function (obj, defaults) {\n  var keys = Object.getOwnPropertyNames(defaults)\n  for (var i = 0; i \u003c keys.length; i++) {\n    var key = keys[i]\n    var value = Object.getOwnPropertyDescriptor(defaults, key)\n    if (value \u0026\u0026 value.configurable \u0026\u0026 obj[key] === undefined) {\n      Object.defineProperty(obj, key, value)\n    }\n  }\n  return obj\n})(bar, foo);\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimcuttle%2Fbabel-plugin-transform-proto-to-assign-robust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimcuttle%2Fbabel-plugin-transform-proto-to-assign-robust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimcuttle%2Fbabel-plugin-transform-proto-to-assign-robust/lists"}