diff --git a/index.tsx b/index.tsx index 51460e7..0949589 100644 --- a/index.tsx +++ b/index.tsx @@ -1,9 +1,14 @@ import { IAugmentedJQuery, IComponentOptions } from 'angular' -import fromPairs = require('lodash.frompairs') +// import fromPairs = require('lodash.frompairs') import NgComponent from 'ngcomponent' import * as React from 'react' import { render, unmountComponentAtNode } from 'react-dom' +const fromPairs = (x: any) => x.reduce( + (a: any, [k, v]: [string, any]) => (Object as any).assign({}, a, {[k]: v}), + {} +) + /** * Wraps a React component in Angular. Returns a new Angular component. * diff --git a/package.json b/package.json index 8cd3905..ac257fe 100644 --- a/package.json +++ b/package.json @@ -6,11 +6,10 @@ "main:esnext": "index.es2015.js", "typings": "index.d.ts", "scripts": { - "build": "npm run clean; tsc -d -t es2015 && mv ./index.js ./index.es2015.js && tsc -t es5", + "build": "npm run clean; ./node_modules/.bin/tsc -d -t es2015 && mv ./index.js ./index.es2015.js && ./node_modules/.bin/tsc -t es5", "clean": "rm ./*.d.ts; rm ./*.map; exit 0", - "pretest": "npm run build", - "prepare": "npm test", - "test": "karma start --single-run", + "precommit": "npm run build", + "test": "./node_modules/.bin/karma start --single-run", "tdd": "npm-run-all -pr watch:*", "watch:ts": "tsc -w", "watch:test": "karma start" @@ -29,19 +28,19 @@ "peerDependencies": { "prop-types": ">=15", "react": ">=15", - "react-dom": ">=15", - "@types/angular-mocks": ">=1.5", - "@types/angular": ">=1.5", + "react-dom": ">=15" + }, + "devDependencies": { "@types/jasmine": "^2.5.53", "@types/jquery": "^3.2.10", "@types/lodash.frompairs": "^4.0.3", + "@types/prop-types": "^15.5.2", "@types/react-dom": ">=15", - "@types/react": ">=15" - }, - "devDependencies": { "angular-mocks": ">=1.5", + "expect": "^21.2.1", "jasmine": "^2.8.0", - "karma": "^1.7.0", + "jasmine-core": "^2.8.0", + "karma": "^1.7.1", "karma-browserify": "^5.1.1", "karma-chrome-launcher": "^2.2.0", "karma-jasmine": "^1.1.0", @@ -54,12 +53,13 @@ "react-dom": "^15.6.1", "rollupify": "^0.4.0", "tslint": "^5.7.0", - "typescript": "^2.5.2", + "typescript": "^2.6.1", "watchify": "^3.9.0" }, "dependencies": { "angular": ">=1.5.11", + "husky": "^0.14.3", "lodash.frompairs": "^4.0.1", - "ngcomponent": "^4.0.1" + "ngcomponent": "^4.1.0" } } diff --git a/test.tsx b/test.tsx index 3310094..2950be5 100644 --- a/test.tsx +++ b/test.tsx @@ -1,6 +1,7 @@ import { bootstrap, element as $, ICompileService, mock, module } from 'angular' import 'angular-mocks' import { $rootScope } from 'ngimport' +import * as PropTypes from 'prop-types' import * as React from 'react' import { Simulate } from 'react-dom/test-utils' import { react2angular } from './' @@ -36,9 +37,9 @@ class TestFour extends React.Component { class TestFive extends React.Component { static propTypes = { - bar: React.PropTypes.array.isRequired, - baz: React.PropTypes.func.isRequired, - foo: React.PropTypes.number.isRequired + bar: PropTypes.array.isRequired, + baz: PropTypes.func.isRequired, + foo: PropTypes.number.isRequired } render() { diff --git a/tsconfig.json b/tsconfig.json index a7d97e3..231c8c6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,21 @@ "es2015", "es2016.array.include" ], + "types": [ + "angular-mocks", + "jasmine", + "jquery", + "lodash.frompairs", + "react", + "react-dom" + ], + "paths": { + "*" : [ + "./node_modules/@types/*", + "*" + ] + }, + "baseUrl": "./", "module": "commonjs", "moduleResolution": "node", "noImplicitAny": true, @@ -18,10 +33,14 @@ "pretty": true, "sourceMap": true, "strictNullChecks": true, - "target": "es2015" + "target": "es6" }, + "exclude": [ + "node_modules/@types/angular-mocks/node_modules/@types", + "node_modules/@types/react-dom/node_modules/@types" + ], "files": [ "index.tsx", "test.tsx" ] -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index 82dbd23..944fdcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@types/angular-mocks@>=1.5", "@types/angular-mocks@^1.5.9": +"@types/angular-mocks@^1.5.9": version "1.5.11" resolved "https://registry.yarnpkg.com/@types/angular-mocks/-/angular-mocks-1.5.11.tgz#d5bbefbf742f2196071bda0fe051878b6f4fd72c" dependencies: @@ -14,17 +14,21 @@ dependencies: "@types/angular" "*" -"@types/angular@*", "@types/angular@>=1.5", "@types/angular@^1.6.18", "@types/angular@^1.6.32": +"@types/angular@*", "@types/angular@^1.6.18": version "1.6.32" resolved "https://registry.yarnpkg.com/@types/angular/-/angular-1.6.32.tgz#fc791aad038227d9413eb5e552993e1076f8a509" +"@types/angular@^1.6.39": + version "1.6.39" + resolved "https://registry.yarnpkg.com/@types/angular/-/angular-1.6.39.tgz#0c34938fc546f360c14817686f2e453ebf22312f" + "@types/jasmine@^2.5.53": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.6.0.tgz#997b41a27752b4850af2683bc4a8d8222c25bd02" + version "2.8.2" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.2.tgz#6ae4d8740c0da5d5a627df725b4eed71b8e36668" "@types/jquery@^3.2.10": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.2.12.tgz#f496823108c3874c97c9a822e675a3926ee64b46" + version "3.2.16" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.2.16.tgz#04419c404a3194350e7d3f339a90e72c88db3111" "@types/lodash.frompairs@^4.0.3": version "4.0.3" @@ -32,24 +36,28 @@ dependencies: "@types/lodash" "*" -"@types/lodash@*", "@types/lodash@^4.14.76": - version "4.14.76" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.76.tgz#87874f766774d54e89589697340be9496fb8bf70" +"@types/lodash@*", "@types/lodash@^4.14.85": + version "4.14.85" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.85.tgz#a16fbf942422f6eca5622b6910492c496c35069b" "@types/node@*": - version "8.0.34" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.34.tgz#55f801fa2ddb2a40dd6dfc15ecfe1dde9c129fe9" + version "8.0.53" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8" + +"@types/prop-types@^15.5.2": + version "15.5.2" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.2.tgz#3c6b8dceb2906cc87fe4358e809f9d20c8d59be1" "@types/react-dom@>=15": - version "16.0.1" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.1.tgz#de159d00dd70050000f462e8bcff0c08ef803dee" + version "16.0.3" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.3.tgz#8accad7eabdab4cca3e1a56f5ccb57de2da0ff64" dependencies: "@types/node" "*" "@types/react" "*" -"@types/react@*", "@types/react@>=15": - version "16.0.10" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.10.tgz#a24b630f5f1f170866a148a147d4fc8636ea88e0" +"@types/react@*": + version "16.0.23" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.23.tgz#f0f713b07912c6fd8e10c9ccc539443ceb06dbca" JSONStream@^1.0.3: version "1.3.1" @@ -518,6 +526,10 @@ chokidar@^1.0.0, chokidar@^1.4.1: optionalDependencies: fsevents "^1.0.0" +ci-info@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -1009,6 +1021,17 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expect@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^21.2.1" + jest-get-type "^21.2.0" + jest-matcher-utils "^21.2.1" + jest-message-util "^21.2.1" + jest-regex-util "^21.2.0" + extend@^3.0.0, extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -1298,6 +1321,14 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + iconv-lite@0.4.19, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -1372,6 +1403,12 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" @@ -1481,7 +1518,7 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -jasmine-core@~2.8.0: +jasmine-core@^2.8.0, jasmine-core@~2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" @@ -1493,6 +1530,39 @@ jasmine@^2.8.0: glob "^7.0.6" jasmine-core "~2.8.0" +jest-diff@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" + +jest-get-type@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" + +jest-matcher-utils@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64" + dependencies: + chalk "^2.0.1" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" + +jest-message-util@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe" + dependencies: + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-regex-util@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530" + js-string-escape@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" @@ -1582,7 +1652,7 @@ karma-source-map-support@^1.2.0: dependencies: source-map-support "^0.4.1" -karma@^1.7.0: +karma@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/karma/-/karma-1.7.1.tgz#85cc08e9e0a22d7ce9cca37c4a1be824f6a2b1ae" dependencies: @@ -1716,7 +1786,7 @@ memory-streams@^0.1.2: dependencies: readable-stream "~1.0.2" -micromatch@^2.1.5: +micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -1827,12 +1897,12 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" -ngcomponent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/ngcomponent/-/ngcomponent-4.0.1.tgz#05a729860a1d7a0ec0fdcab291296eb1a0e2183e" +ngcomponent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ngcomponent/-/ngcomponent-4.1.0.tgz#793e379138f552ea0cd2c767ad0aa7057678e228" dependencies: - "@types/angular" "^1.6.32" - "@types/lodash" "^4.14.76" + "@types/angular" "^1.6.39" + "@types/lodash" "^4.14.85" angular ">=1.5.0" lodash "^4.17.4" @@ -1888,6 +1958,10 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + normalize-path@^2.0.0, normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -2111,6 +2185,13 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +pretty-format@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" @@ -2448,6 +2529,10 @@ signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -2629,6 +2714,10 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -2769,9 +2858,9 @@ typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -typescript@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.5.2.tgz#038a95f7d9bbb420b1bf35ba31d4c5c1dd3ffe34" +typescript@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.1.tgz#ef39cdea27abac0b500242d6726ab90e0c846631" ua-parser-js@^0.7.9: version "0.7.14"