From 4b6efe3fc4f3df538dc068a164e4d10821b5a311 Mon Sep 17 00:00:00 2001 From: Nelson Menezes Date: Tue, 16 Aug 2022 14:38:00 +0200 Subject: [PATCH 1/3] Fix build to generate browser-friendly code --- package.json | 13 ++- tsconfig.json | 3 +- yarn.lock | 220 ++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 206 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 0367d68..40c321b 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,11 @@ "main": "index.js", "main:esnext": "index.es2015.js", "typings": "index.d.ts", + "browser": "index.browser.js", "scripts": { + "prebuild": "npm run clean; tsc -d -t es6 -m es6 && mv ./index.js ./index.es6.js", "build": "npm run clean && npm run lint && tsc -d -t es2015 && mv ./index.js ./index.es2015.js && tsc -t es5", + "postbuild": "rollup -c", "clean": "rimraf ./*.d.ts && rimraf ./*.map", "lint": "tslint --fix -p ./tsconfig.json index.tsx test.tsx", "pretest": "npm run build", @@ -69,15 +72,19 @@ "react": "^16.8.3", "react-dom": "^16.8.3", "rimraf": "^2.6.3", + "rollup": "^0.45.1", + "rollup-plugin-commonjs": "^8.0.2", + "rollup-plugin-node-resolve": "^3.0.0", + "rollup-plugin-replace": "^1.1.1", "rollupify": "^0.5.1", "tslint": "^5.13.1", "typescript": "^3.3.3333", "watchify": "^3.11.1" }, "dependencies": { - "@types/lodash.frompairs": "^4.0.5", + "@types/lodash-es": "^4.17.6", "angular": ">=1.5", - "lodash.frompairs": "^4.0.1", - "ngcomponent": "^4.1.0" + "lodash-es": "^4.17.21", + "tlvince-ngcomponent": "3.0.7" } } diff --git a/tsconfig.json b/tsconfig.json index d8b4904..afb8a9e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,8 +12,9 @@ ], "module": "commonjs", "moduleResolution": "node", + "noImplicitAny": false, "noUnusedLocals": true, - "noUnusedParameters": true, + "noUnusedParameters": false, "preserveConstEnums": true, "pretty": true, "sourceMap": true, diff --git a/yarn.lock b/yarn.lock index 15f265b..3deab1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,11 +9,18 @@ dependencies: "@types/angular" "*" -"@types/angular@*", "@types/angular@^1.6.34", "@types/angular@^1.6.39": +"@types/angular@*", "@types/angular@^1.6.34": version "1.6.53" resolved "https://registry.yarnpkg.com/@types/angular/-/angular-1.6.53.tgz#0c73ce13ff245e0b9ad23bf0091f3de572d4de87" integrity sha512-46op53S8hnDl9o6VOmMAXBv3laK8i2OyXOfriDwe6VRfh8wVFilIniLaNsz2pPpAM4oUwsBYFt7ZThe+IMnIeA== +"@types/angular@1.6.16": + version "1.6.16" + resolved "https://registry.yarnpkg.com/@types/angular/-/angular-1.6.16.tgz#f649ef28dd56311a7d8c10be19af879a2a3a9151" + integrity sha512-iAfG/wSW5jQ1vpf4SVC4fyFID9qjtWCkHnHEgs+78IDrrIM1Hg5lGnsxcINlA2s5iLVt9+r1bQcAwx0O0EvKpA== + dependencies: + "@types/jquery" "*" + "@types/angular@^1.6.54": version "1.6.54" resolved "https://registry.yarnpkg.com/@types/angular/-/angular-1.6.54.tgz#f9d5a03e4da7b021a6dabe5d63e899ed4567a5bd" @@ -24,6 +31,13 @@ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.3.9.tgz#ee886a9113db567e722a8a0c37f0e6283f2cefa3" integrity sha512-vw3VyFPa9mlba6NZPBZC3q2Zrnkgy5xuCVI43/tTLX6umdYrYvcFtQUKi2zH3PjFZQ9XCxNM/NMrM9uk8TPOzg== +"@types/jquery@*": + version "3.5.14" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.14.tgz#ac8e11ee591e94d4d58da602cb3a5a8320dee577" + integrity sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg== + dependencies: + "@types/sizzle" "*" + "@types/jquery@^3.3.29": version "3.3.29" resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.29.tgz#680a2219ce3c9250483722fccf5570d1e2d08abd" @@ -31,17 +45,38 @@ dependencies: "@types/sizzle" "*" -"@types/lodash.frompairs@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/lodash.frompairs/-/lodash.frompairs-4.0.5.tgz#406358e8deff235fccfa5dc6d6ef90809aeccbf2" - integrity sha512-7ewlRQxR/HSyp/Ed3cKZN3WrKwiYOo5OVbdTm5N4iAuiFlavvwBaIt6V7Q/Ml/Ozqz2AtQj81RUyekzKn0oC+Q== +"@types/lodash-es@4.14.5": + version "4.14.5" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.14.5.tgz#57c11845eaf6a7d2a9095e9533fed4980f3d5784" + integrity sha512-UVvykBpBUlRgdaCZo0hlimTd8sLNfdBq3K7wrpmfTm1BrGKqIZcfhC3AzkkVz9N1bxNm1EE8n0NoAd1ggQS7xg== + dependencies: + "@types/lodash" "*" + +"@types/lodash-es@^4.17.6": + version "4.17.6" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" + integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== + dependencies: + "@types/lodash" "*" + +"@types/lodash.mapvalues@4.6.2": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@types/lodash.mapvalues/-/lodash.mapvalues-4.6.2.tgz#01cbebde5b588d0bd732e7ef93fa57ea717a6420" + integrity sha512-y/NSWCzQjQ7sMILImcpLQBDtyLJAC+6ci1NFIlZMTzJ9yRbMw9FE60eHLqWnzhmBIWJ7p+lcrmC95x0K9ZiBZg== dependencies: "@types/lodash" "*" -"@types/lodash@*", "@types/lodash@^4.14.85": - version "4.14.120" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.120.tgz#cf265d06f6c7a710db087ed07523ab8c1a24047b" - integrity sha512-jQ21kQ120mo+IrDs1nFNVm/AsdFxIx2+vZ347DbogHJPd/JzKNMOqU6HCYin1W6v8l5R9XSO2/e9cxmn7HAnVw== +"@types/lodash.some@4.6.2": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@types/lodash.some/-/lodash.some-4.6.2.tgz#d0d167ab83417cf4d574cdf4caa218ffba32ca00" + integrity sha512-vtp8w7HZKfDWzGGFAIml3Owy7cdoId15huf9cgbe1u+lB7eE7/9ZQnxeFZZ8zC4fj2k2io4UAF8/uVoQH0e4AA== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.182" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" + integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== "@types/prop-types@*": version "15.5.8" @@ -122,6 +157,11 @@ acorn-walk@^6.1.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== +acorn@^5.2.1: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + acorn@^6.0.2: version "6.0.6" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.6.tgz#cd75181670d5b99bdb1b1c993941d3a239ab1f56" @@ -142,7 +182,12 @@ angular-resource@^1.7.7: resolved "https://registry.yarnpkg.com/angular-resource/-/angular-resource-1.7.7.tgz#f1961d650c1a9ec625b119274e29068e0e372ae0" integrity sha512-158EpvkX2K64yDdlYHaIRxY52M+xcTyvmnSXEDBl6vuMf/DBjLVheoXqXNJzKzbUSfp+rugYIUfj91VblBltPQ== -angular@>=1.5, angular@>=1.5.0: +angular@1.6.5: + version "1.6.5" + resolved "https://registry.yarnpkg.com/angular/-/angular-1.6.5.tgz#37f788eebec5ce2e3fa02b17bbcb2a231576a0d6" + integrity sha512-aOuG92a70gRoRiWm34vHu9zSMDAfJ+miB0wVHmhmcxCwI/of3tK2ntl6brSWfpDgwkF4/broiixI6uRxhNBhHQ== + +angular@>=1.5: version "1.7.6" resolved "https://registry.yarnpkg.com/angular/-/angular-1.7.6.tgz#db3bd96e3305c870f6227b9b32a4d761880473da" integrity sha512-QELpvuMIe1FTGniAkRz93O6A+di0yu88niDwcdzrSqtUHNtZMgtgFS4f7W/6Gugbuwej8Kyswlmymwdp8iPCWg== @@ -572,6 +617,11 @@ builtin-modules@^1.0.0, builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= +builtin-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" + integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -1171,6 +1221,16 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +estree-walker@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" + integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -1634,6 +1694,13 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -1714,6 +1781,11 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -1970,22 +2042,27 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +lodash-es@4.17.4: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" + integrity sha512-IFCS4mLMmGqejkFwanRvT2DgWWhXlz8qxC6HGQb38brKwxX+o2ic8VFPeOlY8AwCzGY4BjSO5P3UDFCSEy6PVw== + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.frompairs@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.frompairs/-/lodash.frompairs-4.0.1.tgz#bc4e5207fa2757c136e573614e9664506b2b1bd2" - integrity sha1-vE5SB/onV8E25XNhTpZkUGsrG9I= - lodash.memoize@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4: +lodash@^4.17.10, lodash@^4.17.11: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -2023,6 +2100,13 @@ lru-cache@4.1.x: pseudomap "^1.0.2" yallist "^2.1.2" +magic-string@^0.22.4: + version "0.22.5" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== + dependencies: + vlq "^0.2.2" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -2227,16 +2311,6 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= -ngcomponent@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ngcomponent/-/ngcomponent-4.1.0.tgz#793e379138f552ea0cd2c767ad0aa7057678e228" - integrity sha512-cGL3iVoqMWTpCfaIwgRKhdaGqiy2Z+CCG0cVfjlBvdqE8saj8xap9B4OTf+qwObxLVZmDTJPDgx3bN6Q/lZ7BQ== - dependencies: - "@types/angular" "^1.6.39" - "@types/lodash" "^4.14.85" - angular ">=1.5.0" - lodash "^4.17.4" - ngimport@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ngimport/-/ngimport-1.0.0.tgz#2c3be7ede69599a0c79af3aec8d6413bf20f4ff1" @@ -2524,6 +2598,11 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-platform@~0.11.15: version "0.11.15" resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" @@ -2784,6 +2863,15 @@ resolve@^1.1.4, resolve@^1.3.2, resolve@^1.4.0: dependencies: path-parse "^1.0.6" +resolve@^1.1.6: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -2809,6 +2897,56 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rollup-plugin-commonjs@^8.0.2: + version "8.4.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.4.1.tgz#5c9cea2b2c3de322f5fbccd147e07ed5e502d7a0" + integrity sha512-mg+WuD+jlwoo8bJtW3Mvx7Tz6TsIdMsdhuvCnDMoyjh0oxsVgsjB/N0X984RJCWwc5IIiqNVJhXeeITcc73++A== + dependencies: + acorn "^5.2.1" + estree-walker "^0.5.0" + magic-string "^0.22.4" + resolve "^1.4.0" + rollup-pluginutils "^2.0.1" + +rollup-plugin-node-resolve@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" + integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== + dependencies: + builtin-modules "^2.0.0" + is-module "^1.0.0" + resolve "^1.1.6" + +rollup-plugin-replace@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-1.2.1.tgz#6307ee15f223aa1fd3207cd3c08052468f180daf" + integrity sha512-l9Pgb7bh5Wx18+qM9iOWZ/CKcwyKJETLAwCh6bjKwTOgTzNH3KmKDWI/X/ToNA7fA/68chhFyvISvreRxWFVtw== + dependencies: + magic-string "^0.22.4" + minimatch "^3.0.2" + rollup-pluginutils "^2.0.1" + +rollup-pluginutils@^2.0.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@0.45.1: + version "0.45.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.45.1.tgz#af67ded79974079095b5fede8817b4ec26d610e1" + integrity sha512-uAARayLMSESiUdpwkcDgUky4TwPBQhvpZmz3UuMtNoyeq79iHEM9IyBTB/5TWEBtzz4D/j2x0KAGMOVq6MhO7g== + dependencies: + source-map-support "^0.4.0" + +rollup@^0.45.1: + version "0.45.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.45.2.tgz#63a284c2b31234656f24e9e9717fabb6a7f0fa43" + integrity sha512-2+bq5GQSrocdhr+M92mOQRmF1evtLRzv9NdmEC2wo7BILvTG8irHCtD0q+zg8ikNu63iJicdN5IzyxAXRTFKOQ== + dependencies: + source-map-support "^0.4.0" + rollup@^0.50.0: version "0.50.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.50.1.tgz#e4dafcbf8d2bb0d9f5589d0cc6f64d76b8815730" @@ -3024,6 +3162,13 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.4.0: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + source-map-support@^0.5.5: version "0.5.10" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" @@ -3232,6 +3377,11 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + syntax-error@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" @@ -3272,6 +3422,19 @@ timers-browserify@^1.0.1: dependencies: process "~0.11.0" +tlvince-ngcomponent@3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/tlvince-ngcomponent/-/tlvince-ngcomponent-3.0.7.tgz#e8e7251215e43ce5fae5cf968f56ad70621e1744" + integrity sha512-5sGRBZ9S6VvSnjZd6I5twnSc0En218EFAL1cis2DH5SkEDHwsxEJZBtREeP72oNhSeAO/bUUQjl61tyK4qX0FA== + dependencies: + "@types/angular" "1.6.16" + "@types/lodash-es" "4.14.5" + "@types/lodash.mapvalues" "4.6.2" + "@types/lodash.some" "4.6.2" + angular "1.6.5" + lodash-es "4.17.4" + rollup "0.45.1" + tmp@0.0.33, tmp@0.0.x: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -3479,6 +3642,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +vlq@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== + vm-browserify@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" From 8a864f3a046152631301ad9d2b74abb0c5a8958d Mon Sep 17 00:00:00 2001 From: Nelson Menezes Date: Tue, 16 Aug 2022 14:38:45 +0200 Subject: [PATCH 2/3] Inject child nodes from Angular into React --- index.tsx | 50 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/index.tsx b/index.tsx index 5cee831..99ed852 100644 --- a/index.tsx +++ b/index.tsx @@ -1,8 +1,46 @@ import { IAugmentedJQuery, IComponentOptions } from 'angular' -import fromPairs = require('lodash.frompairs') -import NgComponent from 'ngcomponent' +import fromPairs from 'lodash-es/fromPairs' import * as React from 'react' +import { ComponentType, ElementType, useEffect, useRef } from 'react' import { render, unmountComponentAtNode } from 'react-dom' +import NgComponent from 'tlvince-ngcomponent' + +/** + * Appends DOM nodes to a `
`, tracking lifecycle. + * To be used by R2AComponent only + */ +const R2AChildrenWrapper = ({ domChildren }: { domChildren: HTMLElement[] }) => { + const childrenWrapperRef = useRef(null) + + useEffect(() => { + if (childrenWrapperRef.current) { + childrenWrapperRef.current.append(...domChildren) + } + + return () => { + if (childrenWrapperRef.current) { + // TS Lint doesn't like replaceChildren() + (childrenWrapperRef.current as any).replaceChildren() + } + } + }, [domChildren, childrenWrapperRef.current]) + + return
+} + +/** + * Renders a React component with existing DOM nodes as children. + * The DOM nodes are injected into a child "R2AChildrenWrapper" component so that the original React component can control its display of child nodes transparently + */ +const R2AComponent = ({ domChildren, component, props }: { domChildren: HTMLElement[], component: ElementType, props: any}) => { + const Component = component + + return ( + + + + ) +} /** * Wraps a React component in Angular. Returns a new Angular component. @@ -16,17 +54,16 @@ import { render, unmountComponentAtNode } from 'react-dom' * ``` */ export function react2angular( - Class: React.ComponentType, + Class: ComponentType, bindingNames: (keyof Props)[] | null = null, injectNames: string[] = [] ): IComponentOptions { const names = bindingNames || (Class.propTypes && Object.keys(Class.propTypes) as (keyof Props)[]) || [] - return { bindings: fromPairs(names.map(_ => [_, '<'])), - controller: ['$element', ...injectNames, class extends NgComponent { + controller: ['$element', ...injectNames, class extends NgComponent { static get $$ngIsClass() { return true } @@ -41,8 +78,9 @@ export function react2angular( } render() { if (!this.isDestroyed) { + const domChildren = this.$element.children().toArray() render( - , + , this.$element[0] ) } From b5a9e91404f51f3e7eff987cb927140c5cddece0 Mon Sep 17 00:00:00 2001 From: Nelson Menezes Date: Mon, 22 Aug 2022 10:13:49 +0200 Subject: [PATCH 3/3] Include missing rollup config --- .gitignore | 3 ++- rollup.config.js | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 rollup.config.js diff --git a/.gitignore b/.gitignore index f1c3561..f4b1b39 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ node_modules *.d.ts *.js *.map -!karma.conf.js \ No newline at end of file +!karma.conf.js +!rollup.config.js diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..d2da0a9 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,24 @@ +import replace from "rollup-plugin-replace"; +import commonjs from "rollup-plugin-commonjs"; +import nodeResolve from "rollup-plugin-node-resolve"; + +export default { + entry: "index.es6.js", + dest: "index.browser.js", + format: "iife", + moduleName: "react2angular", + plugins: [ + nodeResolve({ + browser: true, + }), + replace({ + "process.env.NODE_ENV": JSON.stringify("production"), + }), + commonjs(), + ], + external: ["react", "react-dom"], + globals: { + react: "React", + "react-dom": "ReactDOM", + }, +};