From c3bd48e0397b81632c5ef2c117b3775f3492c02a Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Thu, 28 Oct 2021 19:36:44 +0300 Subject: [PATCH 01/56] Ignore node_modules --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 470b86d68c4..a4e3722acb2 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ /platform/ios/platform/ios/benchmark/assets/glyphs/Roboto Condensed Italic,Noto Sans Italic /platform/ios/platform/ios/benchmark/assets/glyphs/Noto Sans Regular /platform/android/key.json +node_modules From 98c5145981fc7817ff33d3562f719c94eeecbe26 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Thu, 28 Oct 2021 19:36:59 +0300 Subject: [PATCH 02/56] Add a package lock --- package-lock.json | 2954 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2954 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000000..01fdba8b7e0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2954 @@ +{ + "name": "@mapbox/mapbox-gl-native", + "version": "5.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@mapbox/cmake-node-module": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/cmake-node-module/-/cmake-node-module-1.2.0.tgz", + "integrity": "sha512-kmpkNQH7hR4d5bD/T+8KITE3xzYF2PgVB3VrSGEC3JxNtH2KdfqXbBA9xu+L2ODkEDQkg9GnD/SSnkeKkEBsYg==" + }, + "@mapbox/flow-remove-types": { + "version": "1.3.0-await.upstream.2", + "resolved": "https://registry.npmjs.org/@mapbox/flow-remove-types/-/flow-remove-types-1.3.0-await.upstream.2.tgz", + "integrity": "sha512-OYVWXwkluP+9Jz2uenNSeum7U2Hp6RncPAS8iz3qnJ37kE/acae5dD1207BFqWsJ2JsBqULG8g2wB+hUQzPeYg==", + "dev": true, + "requires": { + "babylon": "^7.0.0-beta.41", + "node-modules-regexp": "^1.0.0", + "pirates": "^3.0.2", + "vlq": "^0.2.1" + } + }, + "@mapbox/mvt-fixtures": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@mapbox/mvt-fixtures/-/mvt-fixtures-3.5.1.tgz", + "integrity": "sha512-BhhvvDp9O4uhRpHTgIS7Omngq+F9C611G34vcfL4ybGWSUmZho/WpckvJZVU1Au9MaQ20ile/+6PkKSOLX2gZA==", + "dev": true, + "requires": { + "@mapbox/sphericalmercator": "^1.0.5", + "@mapbox/vector-tile": "^1.3.0", + "d3-queue": "^3.0.7", + "pbf": "^3.0.5", + "protocol-buffers-schema": "^3.3.2" + } + }, + "@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=", + "dev": true + }, + "@mapbox/sphericalmercator": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/sphericalmercator/-/sphericalmercator-1.2.0.tgz", + "integrity": "sha512-ZTOuuwGuMOJN+HEmG/68bSEw15HHaMWmQ5gdTsWdWsjDe56K1kGvLOK6bOSC8gWgIvEO0w6un/2Gvv1q5hJSkQ==", + "dev": true + }, + "@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "dev": true, + "requires": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + } + } + }, + "@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz", + "integrity": "sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.1" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", + "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz", + "integrity": "sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.1", + "deprecation": "^2.3.1" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", + "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, + "@octokit/plugin-retry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-2.2.0.tgz", + "integrity": "sha512-x5Kd8Lke+a4hTDCe5akZxpGmVwu1eeVt2FJX0jeo3CxHGbfHbXb4zhN5quKfGL9oBLV/EdHQIJ6zwIMjuzxOlw==", + "dev": true, + "requires": { + "bottleneck": "^2.15.3" + } + }, + "@octokit/request": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", + "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.1", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + } + } + }, + "@octokit/request-error": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz", + "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", + "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, + "@octokit/rest": { + "version": "16.43.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.2.tgz", + "integrity": "sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.0", + "@octokit/plugin-paginate-rest": "^1.1.1", + "@octokit/plugin-request-log": "^1.0.0", + "@octokit/plugin-rest-endpoint-methods": "2.4.0", + "@octokit/request": "^5.2.0", + "@octokit/request-error": "^1.0.2", + "atob-lite": "^2.0.0", + "before-after-hook": "^2.0.0", + "btoa-lite": "^1.0.0", + "deprecation": "^2.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "once": "^1.4.0", + "universal-user-agent": "^4.0.0" + } + }, + "@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "@types/node": { + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "async-cache": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/async-cache/-/async-cache-1.1.0.tgz", + "integrity": "sha1-SppaidBl7F2OUlS9nulrp2xTK1o=", + "dev": true, + "requires": { + "lru-cache": "^4.0.0" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob-lite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", + "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", + "dev": true + }, + "aws-sdk": { + "version": "2.1015.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1015.0.tgz", + "integrity": "sha512-jSM955n08r+kzCMMhOu1Dbua8SRZQKgGO1nAoUwBSlXjnLtN+F81P93h4yNBtWsxUg1mAMTP3DKJjXFFrRToPw==", + "dev": true, + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "dependencies": { + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", + "dev": true + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "babylon": { + "version": "7.0.0-beta.47", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz", + "integrity": "sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, + "big-integer": { + "version": "1.6.50", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz", + "integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ==", + "dev": true + }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "dev": true + }, + "bplist-creator": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", + "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=", + "dev": true, + "requires": { + "stream-buffers": "~2.2.0" + } + }, + "bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", + "dev": true, + "requires": { + "big-integer": "^1.6.7" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs=", + "dev": true + }, + "d3-queue": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", + "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "dev": true + }, + "dotignore": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", + "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fd": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/fd/-/fd-0.0.3.tgz", + "integrity": "sha512-iAHrIslQb3U68OcMSP0kkNWabp7sSN6d2TBSb2JO3gcLJVDd4owr/hKM4SFJovFOUeeXeItjYgouEDTMWiVAnA==", + "dev": true + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "requires": { + "call-bind": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-pretty-compact": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "dev": true + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + }, + "dependencies": { + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "macos-release": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", + "dev": true + }, + "mapbox-gl-styles": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mapbox-gl-styles/-/mapbox-gl-styles-2.0.2.tgz", + "integrity": "sha1-u1Jbd+oNwrBBu4BRZFF283g+KUo=", + "dev": true, + "requires": { + "glob": "^5.0.14" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "dev": true + }, + "mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "dev": true, + "requires": { + "mime-db": "1.50.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-pre-gyp": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", + "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "octokit-pagination-methods": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", + "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", + "dev": true, + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dev": true, + "requires": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pirates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", + "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "dev": true, + "requires": { + "pngjs": "^3.0.0" + } + }, + "plist": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz", + "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=", + "dev": true, + "requires": { + "base64-js": "1.1.2", + "xmlbuilder": "8.2.2", + "xmldom": "0.1.x" + }, + "dependencies": { + "base64-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz", + "integrity": "sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg=", + "dev": true + }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", + "dev": true + } + } + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dev": true, + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "requires": { + "through": "~2.3.4" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "seedrandom": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", + "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + }, + "shuffle-seed": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/shuffle-seed/-/shuffle-seed-1.1.6.tgz", + "integrity": "sha1-UzwSaDurO0+j6HUfxOViFGdEJgs=", + "dev": true, + "requires": { + "seedrandom": "^2.4.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + }, + "simple-plist": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz", + "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=", + "dev": true, + "requires": { + "bplist-creator": "0.0.7", + "bplist-parser": "0.1.1", + "plist": "2.0.1" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "st": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/st/-/st-1.2.2.tgz", + "integrity": "sha512-goKkumvz0BMLs6KjjPf5Fub/3T34tRVQxInUI5lqtbaKD+s4HcRlJYP2GPJ8RgAmrsnYOPGmOFEP6ho0KJ+E8g==", + "dev": true, + "requires": { + "async-cache": "~1.1.0", + "bl": "~1.2.1", + "fd": "~0.0.2", + "graceful-fs": "~4.1.11", + "mime": "~1.4.1", + "negotiator": "~0.6.1" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true, + "optional": true + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.padend": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "string.prototype.trim": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", + "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tape": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.14.0.tgz", + "integrity": "sha512-z0+WrUUJuG6wIdWrl4W3rTte2CR26G6qcPOj3w1hfRdcmhF3kHBhOBW9VHsPVAkz08ZmGzp7phVpDupbLzrYKQ==", + "dev": true, + "requires": { + "call-bind": "~1.0.2", + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "glob": "~7.1.7", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.1.3", + "minimist": "~1.2.5", + "object-inspect": "~1.11.0", + "resolve": "~1.20.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.4", + "through": "~2.3.8" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "universal-user-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz", + "integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==", + "dev": true, + "requires": { + "os-name": "^3.1.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + } + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "windows-release": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz", + "integrity": "sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==", + "dev": true, + "requires": { + "execa": "^1.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xcode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-1.1.0.tgz", + "integrity": "sha512-hllHFtfsNu5WbVzj8KbGNdI3NgOYmTLZqyF4a9c9J1aGMhAdxmLLsXlpG0Bz8fEtKh6I3pyargRXN0ZlLpcF5w==", + "dev": true, + "requires": { + "simple-plist": "^0.2.1", + "uuid": "^3.3.2" + } + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + }, + "xmldom": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", + "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } +} From e07fa147f3998018b416329b71bd4521af623ef2 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Fri, 14 Jan 2022 14:15:38 +0000 Subject: [PATCH 03/56] Update CMake to build platform loop w/ libuv --- benchmark/CMakeLists.txt | 2 +- bin/CMakeLists.txt | 5 +++-- expression-test/CMakeLists.txt | 1 + platform/glfw/CMakeLists.txt | 1 + platform/linux/linux.cmake | 32 ++++++++++++++++++++++---- platform/macos/macos.cmake | 41 +++++++++++++++++++++++++++++----- platform/node/CMakeLists.txt | 26 +++++++++++++++++++++ render-test/CMakeLists.txt | 1 + test/CMakeLists.txt | 3 ++- 9 files changed, 99 insertions(+), 13 deletions(-) diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 8b6d28f5940..e864e2c1b5d 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -56,7 +56,7 @@ get_target_property(MBGL_CORE_PRIVATE_LIBRARIES mbgl-core LINK_LIBRARIES) target_link_libraries( mbgl-benchmark - PRIVATE ${MBGL_CORE_PRIVATE_LIBRARIES} mbgl-vendor-benchmark mbgl-compiler-options + PRIVATE ${MBGL_CORE_PRIVATE_LIBRARIES} mbgl-vendor-benchmark mbgl-compiler-options mbgl-platform-loop PUBLIC mbgl-core ) diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index 842a91e7292..31daffe799e 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -9,6 +9,7 @@ target_link_libraries( Mapbox::Base Mapbox::Base::Extras::args mbgl-compiler-options + mbgl-platform-loop mbgl-core ) @@ -19,7 +20,7 @@ add_executable( target_link_libraries( mbgl-offline - PRIVATE Mapbox::Base::Extras::args mbgl-compiler-options mbgl-core + PRIVATE Mapbox::Base::Extras::args mbgl-compiler-options mbgl-platform-loop mbgl-core ) add_executable( @@ -29,7 +30,7 @@ add_executable( target_link_libraries( mbgl-render - PRIVATE Mapbox::Base::Extras::args mbgl-compiler-options mbgl-core + PRIVATE Mapbox::Base::Extras::args mbgl-compiler-options mbgl-platform-loop mbgl-core ) install(TARGETS mbgl-offline mbgl-render RUNTIME DESTINATION bin) diff --git a/expression-test/CMakeLists.txt b/expression-test/CMakeLists.txt index f9120ac7c22..27954ffde64 100644 --- a/expression-test/CMakeLists.txt +++ b/expression-test/CMakeLists.txt @@ -28,6 +28,7 @@ target_link_libraries( Mapbox::Base Mapbox::Base::Extras::args Mapbox::Base::Extras::filesystem + mbgl-platform-loop mbgl-core ) diff --git a/platform/glfw/CMakeLists.txt b/platform/glfw/CMakeLists.txt index d2eeac92535..5382fcac845 100644 --- a/platform/glfw/CMakeLists.txt +++ b/platform/glfw/CMakeLists.txt @@ -53,6 +53,7 @@ target_link_libraries( target_link_libraries( mbgl-glfw PRIVATE + mbgl-platform-loop ${GLFW_LIBRARIES} Mapbox::Base::Extras::args Mapbox::Base::Extras::filesystem diff --git a/platform/linux/linux.cmake b/platform/linux/linux.cmake index 2bd26ae7bfe..6400c318a13 100644 --- a/platform/linux/linux.cmake +++ b/platform/linux/linux.cmake @@ -8,6 +8,34 @@ find_package(X11 REQUIRED) pkg_search_module(LIBUV libuv REQUIRED) +add_library(mbgl-platform-loop STATIC) + +target_sources( + mbgl-platform-loop + PRIVATE + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/async_task.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/run_loop.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/timer.cpp +) + +target_include_directories( + mbgl-platform-loop + PRIVATE + ${PROJECT_SOURCE_DIR}/platform/linux/include + ${PROJECT_SOURCE_DIR}/platform/default/include + ${PROJECT_SOURCE_DIR}/include + ${PROJECT_SOURCE_DIR}/src + ${LIBUV_INCLUDE_DIRS} +) + +target_link_libraries( + mbgl-platform-loop + PUBLIC + Mapbox::Base + PRIVATE + ${LIBUV_LIBRARIES} +) + target_sources( mbgl-core PRIVATE @@ -34,7 +62,6 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/sqlite3.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/bidi.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/local_glyph_rasterizer.cpp - ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/async_task.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/compression.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/image.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/jpeg_reader.cpp @@ -42,7 +69,6 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/monotonic_timer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_reader.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_writer.cpp - ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/run_loop.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/string_stdlib.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp @@ -84,7 +110,6 @@ target_include_directories( PRIVATE ${CURL_INCLUDE_DIRS} ${JPEG_INCLUDE_DIRS} - ${LIBUV_INCLUDE_DIRS} ${X11_INCLUDE_DIRS} ) @@ -110,7 +135,6 @@ target_link_libraries( PRIVATE ${CURL_LIBRARIES} ${JPEG_LIBRARIES} - ${LIBUV_LIBRARIES} ${X11_LIBRARIES} $<$>:ICU::i18n> $<$>:ICU::uc> diff --git a/platform/macos/macos.cmake b/platform/macos/macos.cmake index f2dec742e16..8c1393e5005 100644 --- a/platform/macos/macos.cmake +++ b/platform/macos/macos.cmake @@ -9,6 +9,9 @@ set_target_properties(mbgl-core PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[vari set_target_properties(mbgl-core PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) +find_package(PkgConfig REQUIRED) +pkg_search_module(LIBUV libuv REQUIRED STATIC) + if(MBGL_WITH_OPENGL) find_package(OpenGL REQUIRED) @@ -20,7 +23,8 @@ if(MBGL_WITH_OPENGL) mbgl-core PRIVATE ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gl/headless_backend.cpp - ${PROJECT_SOURCE_DIR}/platform/darwin/src/gl_functions.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/headless_backend_cgl.mm + ${PROJECT_SOURCE_DIR}/platform/darwin/src/gl_functions.cpp + ${PROJECT_SOURCE_DIR}/platform/darwin/src/headless_backend_cgl.mm ) target_link_libraries( mbgl-core @@ -28,10 +32,37 @@ if(MBGL_WITH_OPENGL) ) endif() +add_library(mbgl-platform-loop STATIC) + target_sources( - mbgl-core + mbgl-platform-loop PRIVATE ${PROJECT_SOURCE_DIR}/platform/darwin/src/async_task.cpp + ${PROJECT_SOURCE_DIR}/platform/darwin/src/run_loop.cpp + ${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp +) + +target_compile_options(mbgl-platform-loop PRIVATE -fobjc-arc) + +target_include_directories( + mbgl-platform-loop + PRIVATE + ${PROJECT_SOURCE_DIR}/platform/darwin/include + ${PROJECT_SOURCE_DIR}/platform/darwin/src + ${PROJECT_SOURCE_DIR}/platform/macos/src + ${PROJECT_SOURCE_DIR}/platform/default/include + ${PROJECT_SOURCE_DIR}/include +) + +target_link_libraries( + mbgl-platform-loop + PUBLIC + Mapbox::Base +) + +target_sources( + mbgl-core + PRIVATE ${PROJECT_SOURCE_DIR}/platform/darwin/src/collator.mm $<$:${PROJECT_SOURCE_DIR}/platform/darwin/src/http_file_source.mm> ${PROJECT_SOURCE_DIR}/platform/darwin/src/image.mm @@ -40,9 +71,7 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/nsthread.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/number_format.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/run_loop.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/string_nsstring.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_backend.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp @@ -80,7 +109,9 @@ target_include_directories( target_include_directories( mbgl-core PRIVATE - ${PROJECT_SOURCE_DIR}/platform/darwin/include ${PROJECT_SOURCE_DIR}/platform/darwin/src ${PROJECT_SOURCE_DIR}/platform/macos/src + ${PROJECT_SOURCE_DIR}/platform/darwin/include + ${PROJECT_SOURCE_DIR}/platform/darwin/src + ${PROJECT_SOURCE_DIR}/platform/macos/src ) include(${PROJECT_SOURCE_DIR}/vendor/icu.cmake) diff --git a/platform/node/CMakeLists.txt b/platform/node/CMakeLists.txt index 7288bb0d538..7baf7e7e855 100644 --- a/platform/node/CMakeLists.txt +++ b/platform/node/CMakeLists.txt @@ -22,6 +22,31 @@ add_node_module( 83 ) +add_library(mbgl-node-loop STATIC) + +target_sources( + mbgl-node-loop + PRIVATE + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/async_task.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/run_loop.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/timer.cpp +) + +target_include_directories( + mbgl-node-loop + PUBLIC + ${PROJECT_SOURCE_DIR}/include + ${PROJECT_SOURCE_DIR}/platform/default/include + ${PROJECT_SOURCE_DIR}/src + PRIVATE ${LIBUV_INCLUDE_DIRS} +) + +target_link_libraries( + mbgl-node-loop + PUBLIC + Mapbox::Base +) + target_sources( mbgl-node INTERFACE @@ -42,6 +67,7 @@ target_sources( target_link_libraries( mbgl-node + INTERFACE mbgl-node-loop INTERFACE Mapbox::Map ) diff --git a/render-test/CMakeLists.txt b/render-test/CMakeLists.txt index cb00f19e17a..7c8483a1023 100644 --- a/render-test/CMakeLists.txt +++ b/render-test/CMakeLists.txt @@ -56,6 +56,7 @@ target_link_libraries( Mapbox::Base::pixelmatch-cpp mbgl-compiler-options mbgl-vendor-boost + mbgl-platform-loop PUBLIC mbgl-core ) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9bde3916f10..b68c6e5d5c2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -106,7 +106,7 @@ add_library( ${PROJECT_SOURCE_DIR}/test/util/timer.test.cpp ${PROJECT_SOURCE_DIR}/test/util/token.test.cpp ${PROJECT_SOURCE_DIR}/test/util/url.test.cpp - ${PROJECT_SOURCE_DIR}/test/util/tile_server_options.test.cpp + ${PROJECT_SOURCE_DIR}/test/util/tile_server_options.test.cpp ) # MapSnapshotter uses headless backend that is rendering image on a background thread. QT / macOS adaptation for headless backend creates @@ -219,6 +219,7 @@ target_link_libraries( Mapbox::Base::pixelmatch-cpp mbgl-compiler-options mbgl-vendor-cpp-httplib + mbgl-platform-loop PUBLIC mbgl-core ) From b905fcff47a244a010ea4e5c2911bf95815e4dff Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Fri, 14 Jan 2022 14:18:00 +0000 Subject: [PATCH 04/56] Support new NAN version as well as node v10 --- .../include/mbgl/gl/headless_backend.hpp | 1 + .../src/mbgl/gfx/headless_frontend.cpp | 3 +- .../default/src/mbgl/gl/headless_backend.cpp | 4 +- .../default/src/mbgl/map/map_snapshotter.cpp | 8 +- platform/node/CMakeLists.txt | 5 +- platform/node/src/node_conversion.hpp | 18 +-- platform/node/src/node_expression.cpp | 28 ++-- platform/node/src/node_feature.cpp | 2 +- platform/node/src/node_map.cpp | 135 ++++++++++-------- platform/node/src/node_map.hpp | 4 + platform/node/src/node_mapbox_gl_native.cpp | 3 +- platform/node/src/node_request.cpp | 13 +- platform/node/src/node_request.hpp | 2 +- src/mbgl/actor/mailbox.cpp | 2 +- src/mbgl/renderer/renderer_impl.cpp | 2 +- src/mbgl/tile/tile.cpp | 9 +- 16 files changed, 137 insertions(+), 102 deletions(-) diff --git a/platform/default/include/mbgl/gl/headless_backend.hpp b/platform/default/include/mbgl/gl/headless_backend.hpp index b77f1b756fc..c16dcc3559d 100644 --- a/platform/default/include/mbgl/gl/headless_backend.hpp +++ b/platform/default/include/mbgl/gl/headless_backend.hpp @@ -27,6 +27,7 @@ class HeadlessBackend final : public gl::RendererBackend, public gfx::HeadlessBa virtual gl::ProcAddress getExtensionFunctionPointer(const char*) = 0; virtual void activateContext() = 0; virtual void deactivateContext() {} + virtual void getContext() {} }; private: diff --git a/platform/default/src/mbgl/gfx/headless_frontend.cpp b/platform/default/src/mbgl/gfx/headless_frontend.cpp index 9cdc5941a1b..e98e2694c82 100644 --- a/platform/default/src/mbgl/gfx/headless_frontend.cpp +++ b/platform/default/src/mbgl/gfx/headless_frontend.cpp @@ -32,7 +32,7 @@ HeadlessFrontend::HeadlessFrontend(Size size_, asyncInvalidate([this] { if (renderer && updateParameters) { auto startTime = mbgl::util::MonotonicTimer::now(); - gfx::BackendScope guard{*getBackend()}; + gfx::BackendScope guard {*getBackend()}; // onStyleImageMissing might be called during a render. The user implemented method // could trigger a call to MGLRenderFrontend#update which overwrites `updateParameters`. @@ -143,6 +143,7 @@ PremultipliedImage HeadlessFrontend::readStillImage() { HeadlessFrontend::RenderResult HeadlessFrontend::render(Map& map) { HeadlessFrontend::RenderResult result; std::exception_ptr error; + gfx::BackendScope guard { *getBackend() }; map.renderStill([&](const std::exception_ptr& e) { if (e) { diff --git a/platform/default/src/mbgl/gl/headless_backend.cpp b/platform/default/src/mbgl/gl/headless_backend.cpp index 61cb2fa8da9..f8882c47bbc 100644 --- a/platform/default/src/mbgl/gl/headless_backend.cpp +++ b/platform/default/src/mbgl/gl/headless_backend.cpp @@ -42,7 +42,7 @@ HeadlessBackend::HeadlessBackend(const Size size_, : mbgl::gl::RendererBackend(contextMode_), mbgl::gfx::HeadlessBackend(size_), swapBehaviour(swapBehaviour_) {} HeadlessBackend::~HeadlessBackend() { - gfx::BackendScope guard{*this}; + gfx::BackendScope guard{ *this, gfx::BackendScope::ScopeType::Implicit }; resource.reset(); // Explicitly reset the context so that it is destructed and cleaned up before we destruct // the impl object. @@ -106,5 +106,3 @@ std::unique_ptr Backend::Createclose(); } - void onInvalidate() override { delegate.invoke(&RendererObserver::onInvalidate); } + void onInvalidate() override { + delegate.invoke(&RendererObserver::onInvalidate); + } void onResourceError(std::exception_ptr err) override { delegate.invoke(&RendererObserver::onResourceError, err); } @@ -62,7 +64,9 @@ class SnapshotterRenderer final : public RendererObserver { frontend.reset(); } - void onInvalidate() override { rendererObserver->onInvalidate(); } + void onInvalidate() override { + rendererObserver->onInvalidate(); + } void onResourceError(std::exception_ptr err) override { hasPendingStillImageRequest = false; diff --git a/platform/node/CMakeLists.txt b/platform/node/CMakeLists.txt index 7baf7e7e855..b70e26ab5e3 100644 --- a/platform/node/CMakeLists.txt +++ b/platform/node/CMakeLists.txt @@ -9,7 +9,7 @@ include(${PROJECT_SOURCE_DIR}/node_modules/@mapbox/cmake-node-module/module.cmak add_node_module( mbgl-node INSTALL_PATH ${PROJECT_SOURCE_DIR}/lib/{node_abi}/mbgl.node - NAN_VERSION 2.10.0 + NAN_VERSION 2.14.2 EXCLUDE_NODE_ABIS 46 47 @@ -20,6 +20,9 @@ add_node_module( 72 79 83 + 88 + 93 + 102 ) add_library(mbgl-node-loop STATIC) diff --git a/platform/node/src/node_conversion.hpp b/platform/node/src/node_conversion.hpp index 7f6625c6df7..5096c2695b7 100644 --- a/platform/node/src/node_conversion.hpp +++ b/platform/node/src/node_conversion.hpp @@ -79,7 +79,7 @@ class ConversionTraits> { if (!value->IsBoolean()) { return {}; } - return value->BooleanValue(); + return Nan::To(value).ToChecked(); } static optional toNumber(const v8::Local& value) { @@ -87,7 +87,7 @@ class ConversionTraits> { if (!value->IsNumber()) { return {}; } - return value->NumberValue(); + return (float)Nan::To(value).ToChecked(); } static optional toDouble(const v8::Local& value) { @@ -95,7 +95,7 @@ class ConversionTraits> { if (!value->IsNumber()) { return {}; } - return value->NumberValue(); + return Nan::To(value).ToChecked(); } static optional toString(const v8::Local& value) { @@ -114,11 +114,11 @@ class ConversionTraits> { } else if (value->IsString()) { return { std::string(*Nan::Utf8String(value)) }; } else if (value->IsUint32()) { - return { std::uint64_t(value->Uint32Value()) }; + return { Nan::To(value).ToChecked() }; } else if (value->IsInt32()) { - return { std::int64_t(value->Int32Value()) }; + return { Nan::To(value).ToChecked() }; } else if (value->IsNumber()) { - return { value->NumberValue() }; + return { Nan::To(value).ToChecked() }; } else { return {}; } @@ -126,8 +126,10 @@ class ConversionTraits> { static optional toGeoJSON(const v8::Local& value, Error& error) { try { - Nan::JSON JSON; - std::string string = *Nan::Utf8String(JSON.Stringify(value->ToObject()).ToLocalChecked()); + Nan::JSON NanJSON; + v8::Local obj = Nan::To(value).ToLocalChecked(); + v8::Local stringified = NanJSON.Stringify(obj).ToLocalChecked(); + std::string string = *Nan::Utf8String(stringified); return parseGeoJSON(string, error); } catch (const std::exception& ex) { error = { ex.what() }; diff --git a/platform/node/src/node_expression.cpp b/platform/node/src/node_expression.cpp index b5e1b7d461a..401c991e98f 100644 --- a/platform/node/src/node_expression.cpp +++ b/platform/node/src/node_expression.cpp @@ -17,6 +17,7 @@ namespace node_mbgl { Nan::Persistent NodeExpression::constructor; void NodeExpression::Init(v8::Local target) { + v8::Local context = target->CreationContext(); v8::Local tpl = Nan::New(New); tpl->SetClassName(Nan::New("Expression").ToLocalChecked()); tpl->InstanceTemplate()->SetInternalFieldCount(1); // what is this doing? @@ -30,8 +31,8 @@ void NodeExpression::Init(v8::Local target) { Nan::SetMethod(tpl, "parse", Parse); - constructor.Reset(tpl->GetFunction()); // what is this doing? - Nan::Set(target, Nan::New("Expression").ToLocalChecked(), tpl->GetFunction()); + constructor.Reset(tpl->GetFunction(context).ToLocalChecked()); // what is this doing? + Nan::Set(target, Nan::New("Expression").ToLocalChecked(), tpl->GetFunction(context).ToLocalChecked()); } type::Type parseType(v8::Local type) { @@ -46,10 +47,11 @@ type::Type parseType(v8::Local type) { {"resolvedImage", type::Image}}; v8::Local v8kind = Nan::Get(type, Nan::New("kind").ToLocalChecked()).ToLocalChecked(); - std::string kind(*v8::String::Utf8Value(v8kind)); + std::string kind(*v8::String::Utf8Value(v8::Isolate::GetCurrent(), v8kind)); if (kind == "array") { - type::Type itemType = parseType(Nan::Get(type, Nan::New("itemType").ToLocalChecked()).ToLocalChecked()->ToObject()); + v8::Local context = type->CreationContext(); + type::Type itemType = parseType(Nan::Get(type, Nan::New("itemType").ToLocalChecked()).ToLocalChecked()->ToObject(context).ToLocalChecked()); mbgl::optional N; v8::Local Nkey = Nan::New("N").ToLocalChecked(); @@ -64,6 +66,7 @@ type::Type parseType(v8::Local type) { void NodeExpression::Parse(const Nan::FunctionCallbackInfo& info) { v8::Local cons = Nan::New(constructor); + v8::Local context = info.GetIsolate()->GetCurrentContext(); if (info.Length() < 1 || info[0]->IsUndefined()) { return Nan::ThrowTypeError("Requires a JSON style expression argument."); @@ -71,7 +74,7 @@ void NodeExpression::Parse(const Nan::FunctionCallbackInfo& info) { mbgl::optional expected; if (info.Length() > 1 && info[1]->IsObject()) { - expected = parseType(info[1]->ToObject()); + expected = parseType(info[1]->ToObject(context).ToLocalChecked()); } auto success = [&cons, &info](std::unique_ptr result) { @@ -157,8 +160,8 @@ struct ToValue { v8::Local operator()(const std::vector& array) { Nan::EscapableHandleScope scope; v8::Local result = Nan::New(); - for (std::size_t i = 0; i < array.size(); i++) { - result->Set(i, toJS(array[i])); + for (std::uint32_t i = 0; i < array.size(); i++) { + Nan::Set(result, i, toJS(array[i])); } return scope.Escape(result); } @@ -170,7 +173,7 @@ struct ToValue { Nan::EscapableHandleScope scope; return scope.Escape(Nan::Null()); } - + v8::Local operator()(const Formatted& formatted) { // This mimics the internal structure of the Formatted class in formatted.js // A better approach might be to use the explicit serialized form @@ -230,6 +233,7 @@ v8::Local toJS(const Value& value) { } void NodeExpression::Evaluate(const Nan::FunctionCallbackInfo& info) { + v8::Local context = info.GetIsolate()->GetCurrentContext(); auto* nodeExpr = ObjectWrap::Unwrap(info.Holder()); const std::unique_ptr& expression = nodeExpr->expression; @@ -238,12 +242,12 @@ void NodeExpression::Evaluate(const Nan::FunctionCallbackInfo& info) } mbgl::optional zoom; - v8::Local v8zoom = Nan::Get(info[0]->ToObject(), Nan::New("zoom").ToLocalChecked()).ToLocalChecked(); - if (v8zoom->IsNumber()) zoom = v8zoom->NumberValue(); + v8::Local v8zoom = Nan::Get(info[0]->ToObject(context).ToLocalChecked(), Nan::New("zoom").ToLocalChecked()).ToLocalChecked(); + if (v8zoom->IsNumber()) zoom = Nan::To(v8zoom).FromJust(); mbgl::optional heatmapDensity; - v8::Local v8heatmapDensity = Nan::Get(info[0]->ToObject(), Nan::New("heatmapDensity").ToLocalChecked()).ToLocalChecked(); - if (v8heatmapDensity->IsNumber()) heatmapDensity = v8heatmapDensity->NumberValue(); + v8::Local v8heatmapDensity = Nan::Get(info[0]->ToObject(context).ToLocalChecked(), Nan::New("heatmapDensity").ToLocalChecked()).ToLocalChecked(); + if (v8heatmapDensity->IsNumber()) heatmapDensity = Nan::To(v8heatmapDensity).FromJust(); Nan::JSON NanJSON; conversion::Error conversionError; diff --git a/platform/node/src/node_feature.cpp b/platform/node/src/node_feature.cpp index 594c732b144..528164380c5 100644 --- a/platform/node/src/node_feature.cpp +++ b/platform/node/src/node_feature.cpp @@ -113,7 +113,7 @@ struct ToValue { Nan::EscapableHandleScope scope; v8::Local result = Nan::New(); for (std::size_t i = 0; i < array.size(); i++) { - result->Set(i, toJS(array[i])); + Nan::Set(result, i, toJS(array[i])); } return scope.Escape(result); } diff --git a/platform/node/src/node_map.cpp b/platform/node/src/node_map.cpp index d9dbdaf018a..0c9f2238159 100644 --- a/platform/node/src/node_map.cpp +++ b/platform/node/src/node_map.cpp @@ -118,9 +118,10 @@ ParseError)JS").ToLocalChecked()).ToLocalChecked(); Nan::SetPrototypeMethod(tpl, "dumpDebugLogs", DumpDebugLogs); Nan::SetPrototypeMethod(tpl, "queryRenderedFeatures", QueryRenderedFeatures); + v8::Local context = target->CreationContext(); - constructor.Reset(tpl->GetFunction()); - Nan::Set(target, Nan::New("Map").ToLocalChecked(), tpl->GetFunction()); + constructor.Reset(tpl->GetFunction(context).ToLocalChecked()); + Nan::Set(target, Nan::New("Map").ToLocalChecked(), tpl->GetFunction(context).ToLocalChecked()); } /** @@ -227,6 +228,7 @@ void NodeMap::New(const Nan::FunctionCallbackInfo& info) { * map.load(fs.readFileSync('./test/fixtures/style.json', 'utf8')); */ void NodeMap::Load(const Nan::FunctionCallbackInfo& info) { + v8::Local context = info.GetIsolate()->GetCurrentContext(); auto nodeMap = Nan::ObjectWrap::Unwrap(info.Holder()); if (!nodeMap->map) return Nan::ThrowError(releasedMessage()); @@ -242,7 +244,7 @@ void NodeMap::Load(const Nan::FunctionCallbackInfo& info) { if (info[0]->IsObject()) { Nan::JSON JSON; - style = *Nan::Utf8String(JSON.Stringify(info[0]->ToObject()).ToLocalChecked()); + style = *Nan::Utf8String(JSON.Stringify(info[0]->ToObject(context).ToLocalChecked()).ToLocalChecked()); } else if (info[0]->IsString()) { style = *Nan::Utf8String(info[0]); } else { @@ -266,7 +268,7 @@ void NodeMap::Load(const Nan::FunctionCallbackInfo& info) { if (!Nan::Get(options, Nan::New("defaultStyleCamera").ToLocalChecked()).ToLocalChecked()->IsBoolean()) { return Nan::ThrowError("Options object 'defaultStyleCamera' property must be a boolean"); } - if (Nan::Get(options, Nan::New("cameraMutated").ToLocalChecked()).ToLocalChecked()->BooleanValue()) { + if (Nan::To(Nan::Get(options, Nan::New("cameraMutated").ToLocalChecked()).ToLocalChecked()).ToChecked()) { nodeMap->map->jumpTo(nodeMap->map->getStyle().getDefaultCamera()); } } @@ -298,15 +300,15 @@ NodeMap::RenderOptions NodeMap::ParseOptions(v8::Local obj) { NodeMap::RenderOptions options; if (Nan::Has(obj, Nan::New("zoom").ToLocalChecked()).FromJust()) { - options.zoom = Nan::Get(obj, Nan::New("zoom").ToLocalChecked()).ToLocalChecked()->NumberValue(); + options.zoom = Nan::To(Nan::Get(obj, Nan::New("zoom").ToLocalChecked()).ToLocalChecked()).ToChecked(); } if (Nan::Has(obj, Nan::New("bearing").ToLocalChecked()).FromJust()) { - options.bearing = Nan::Get(obj, Nan::New("bearing").ToLocalChecked()).ToLocalChecked()->NumberValue(); + options.bearing = Nan::To(Nan::Get(obj, Nan::New("bearing").ToLocalChecked()).ToLocalChecked()).ToChecked(); } if (Nan::Has(obj, Nan::New("pitch").ToLocalChecked()).FromJust()) { - options.pitch = Nan::Get(obj, Nan::New("pitch").ToLocalChecked()).ToLocalChecked()->NumberValue(); + options.pitch = Nan::To(Nan::Get(obj, Nan::New("pitch").ToLocalChecked()).ToLocalChecked()).ToChecked(); } if (Nan::Has(obj, Nan::New("light").ToLocalChecked()).FromJust()) { @@ -320,15 +322,15 @@ NodeMap::RenderOptions NodeMap::ParseOptions(v8::Local obj) { } if (Nan::Has(obj, Nan::New("axonometric").ToLocalChecked()).FromJust()) { - options.axonometric = Nan::Get(obj, Nan::New("axonometric").ToLocalChecked()).ToLocalChecked()->BooleanValue(); + options.axonometric = Nan::To(Nan::Get(obj, Nan::New("axonometric").ToLocalChecked()).ToLocalChecked()).ToChecked(); } if (Nan::Has(obj, Nan::New("skew").ToLocalChecked()).FromJust()) { auto skewObj = Nan::Get(obj, Nan::New("skew").ToLocalChecked()).ToLocalChecked(); if (skewObj->IsArray()) { auto skew = skewObj.As(); - if (skew->Length() > 0) { options.xSkew = Nan::Get(skew, 0).ToLocalChecked()->NumberValue(); } - if (skew->Length() > 1) { options.ySkew = Nan::Get(skew, 1).ToLocalChecked()->NumberValue(); } + if (skew->Length() > 0) { options.xSkew = Nan::To(Nan::Get(skew, 0).ToLocalChecked()).ToChecked(); } + if (skew->Length() > 1) { options.ySkew = Nan::To(Nan::Get(skew, 1).ToLocalChecked()).ToChecked(); } } } @@ -336,17 +338,17 @@ NodeMap::RenderOptions NodeMap::ParseOptions(v8::Local obj) { auto centerObj = Nan::Get(obj, Nan::New("center").ToLocalChecked()).ToLocalChecked(); if (centerObj->IsArray()) { auto center = centerObj.As(); - if (center->Length() > 0) { options.longitude = Nan::Get(center, 0).ToLocalChecked()->NumberValue(); } - if (center->Length() > 1) { options.latitude = Nan::Get(center, 1).ToLocalChecked()->NumberValue(); } + if (center->Length() > 0) { options.longitude = Nan::To(Nan::Get(center, 0).ToLocalChecked()).ToChecked(); } + if (center->Length() > 1) { options.latitude = Nan::To(Nan::Get(center, 1).ToLocalChecked()).ToChecked(); } } } if (Nan::Has(obj, Nan::New("width").ToLocalChecked()).FromJust()) { - options.size.width = Nan::Get(obj, Nan::New("width").ToLocalChecked()).ToLocalChecked()->IntegerValue(); + options.size.width = Nan::To(Nan::Get(obj, Nan::New("width").ToLocalChecked()).ToLocalChecked()).ToChecked(); } if (Nan::Has(obj, Nan::New("height").ToLocalChecked()).FromJust()) { - options.size.height = Nan::Get(obj, Nan::New("height").ToLocalChecked()).ToLocalChecked()->IntegerValue(); + options.size.height = Nan::To(Nan::Get(obj, Nan::New("height").ToLocalChecked()).ToLocalChecked()).ToChecked(); } if (Nan::Has(obj, Nan::New("classes").ToLocalChecked()).FromJust()) { @@ -361,27 +363,27 @@ NodeMap::RenderOptions NodeMap::ParseOptions(v8::Local obj) { if (Nan::Has(obj, Nan::New("debug").ToLocalChecked()).FromJust()) { auto debug = Nan::To(Nan::Get(obj, Nan::New("debug").ToLocalChecked()).ToLocalChecked()).ToLocalChecked(); if (Nan::Has(debug, Nan::New("tileBorders").ToLocalChecked()).FromJust()) { - if (Nan::Get(debug, Nan::New("tileBorders").ToLocalChecked()).ToLocalChecked()->BooleanValue()) { + if (Nan::To(Nan::Get(debug, Nan::New("tileBorders").ToLocalChecked()).ToLocalChecked()).ToChecked()) { options.debugOptions = options.debugOptions | mbgl::MapDebugOptions::TileBorders; } } if (Nan::Has(debug, Nan::New("parseStatus").ToLocalChecked()).FromJust()) { - if (Nan::Get(debug, Nan::New("parseStatus").ToLocalChecked()).ToLocalChecked()->BooleanValue()) { + if (Nan::To(Nan::Get(debug, Nan::New("parseStatus").ToLocalChecked()).ToLocalChecked()).ToChecked()) { options.debugOptions = options.debugOptions | mbgl::MapDebugOptions::ParseStatus; } } if (Nan::Has(debug, Nan::New("timestamps").ToLocalChecked()).FromJust()) { - if (Nan::Get(debug, Nan::New("timestamps").ToLocalChecked()).ToLocalChecked()->BooleanValue()) { + if (Nan::To(Nan::Get(debug, Nan::New("timestamps").ToLocalChecked()).ToLocalChecked()).ToChecked()) { options.debugOptions = options.debugOptions | mbgl::MapDebugOptions::Timestamps; } } if (Nan::Has(debug, Nan::New("collision").ToLocalChecked()).FromJust()) { - if (Nan::Get(debug, Nan::New("collision").ToLocalChecked()).ToLocalChecked()->BooleanValue()) { + if (Nan::To(Nan::Get(debug, Nan::New("collision").ToLocalChecked()).ToLocalChecked()).ToChecked()) { options.debugOptions = options.debugOptions | mbgl::MapDebugOptions::Collision; } } if (Nan::Has(debug, Nan::New("overdraw").ToLocalChecked()).FromJust()) { - if (Nan::Get(debug, Nan::New("overdraw").ToLocalChecked()).ToLocalChecked()->BooleanValue()) { + if (Nan::To(Nan::Get(debug, Nan::New("overdraw").ToLocalChecked()).ToLocalChecked()).ToChecked()) { options.debugOptions = mbgl::MapDebugOptions::Overdraw; } } @@ -593,7 +595,7 @@ void NodeMap::release() { uv_close(reinterpret_cast(async), [] (uv_handle_t *h) { delete reinterpret_cast(h); }); - + map.reset(); frontend.reset(); } @@ -621,7 +623,7 @@ void NodeMap::Cancel(const Nan::FunctionCallbackInfo& info) { void NodeMap::cancel() { auto style = map->getStyle().getJSON(); - + // Reset map explicitly as it resets the renderer frontend map.reset(); @@ -640,7 +642,7 @@ void NodeMap::cancel() { map = std::make_unique(*frontend, mapObserver, mbgl::MapOptions().withSize(frontend->getSize()) .withPixelRatio(pixelRatio) - .withMapMode(mode) + .withMapMode(mbgl::MapMode::Static) .withCrossSourceCollisions(crossSourceCollisions), mbgl::ResourceOptions().withPlatformContext(reinterpret_cast(this))); @@ -743,6 +745,8 @@ void NodeMap::AddImage(const Nan::FunctionCallbackInfo& info) { using namespace mbgl::style; using namespace mbgl::style::conversion; + v8::Local context = info.GetIsolate()->GetCurrentContext(); + auto nodeMap = Nan::ObjectWrap::Unwrap(info.Holder()); if (!nodeMap->map) return Nan::ThrowError(releasedMessage()); @@ -776,8 +780,8 @@ void NodeMap::AddImage(const Nan::FunctionCallbackInfo& info) { return Nan::ThrowTypeError("pixelRatio parameter required"); } - uint32_t imageHeight = Nan::Get(optionObject, Nan::New("height").ToLocalChecked()).ToLocalChecked()->Uint32Value(); - uint32_t imageWidth = Nan::Get(optionObject, Nan::New("width").ToLocalChecked()).ToLocalChecked()->Uint32Value(); + uint32_t imageHeight = Nan::To(Nan::Get(optionObject, Nan::New("height").ToLocalChecked()).ToLocalChecked()).ToChecked(); + uint32_t imageWidth = Nan::To(Nan::Get(optionObject, Nan::New("width").ToLocalChecked()).ToLocalChecked()).ToChecked(); if (imageWidth > 1024 || imageHeight > 1024) { return Nan::ThrowTypeError("Max height and width is 1024"); @@ -785,12 +789,12 @@ void NodeMap::AddImage(const Nan::FunctionCallbackInfo& info) { bool sdf = false; if (Nan::Get(optionObject, Nan::New("sdf").ToLocalChecked()).ToLocalChecked()->IsBoolean()) { - sdf = Nan::Get(optionObject, Nan::New("sdf").ToLocalChecked()).ToLocalChecked()->BooleanValue(); + sdf = Nan::To(Nan::Get(optionObject, Nan::New("sdf").ToLocalChecked()).ToLocalChecked()).ToChecked(); } - float pixelRatio = Nan::Get(optionObject, Nan::New("pixelRatio").ToLocalChecked()).ToLocalChecked()->NumberValue(); - auto imageBuffer = Nan::To(info[1]).ToLocalChecked()->ToObject(); - + float pixelRatio = (float)Nan::To(Nan::Get(optionObject, Nan::New("pixelRatio").ToLocalChecked()).ToLocalChecked()).ToChecked(); + auto imageBuffer = Nan::To(info[1]).ToLocalChecked()->ToObject(context).ToLocalChecked(); + char * imageDataBuffer = node::Buffer::Data(imageBuffer); size_t imageLength = node::Buffer::Length(imageBuffer); @@ -800,7 +804,7 @@ void NodeMap::AddImage(const Nan::FunctionCallbackInfo& info) { std::unique_ptr data = std::make_unique(imageLength); std::copy(imageDataBuffer, imageDataBuffer + imageLength, data.get()); - + mbgl::UnassociatedImage cImage({ imageWidth, imageHeight}, std::move(data)); mbgl::PremultipliedImage cPremultipliedImage = mbgl::util::premultiply(std::move(cImage)); nodeMap->map->getStyle().addImage(std::make_unique(*Nan::Utf8String(info[0]), std::move(cPremultipliedImage), pixelRatio, sdf)); @@ -823,32 +827,32 @@ void NodeMap::RemoveImage(const Nan::FunctionCallbackInfo& info) { nodeMap->map->getStyle().removeImage(*Nan::Utf8String(info[0])); } - + void NodeMap::SetLayerZoomRange(const Nan::FunctionCallbackInfo& info) { using namespace mbgl::style; auto nodeMap = Nan::ObjectWrap::Unwrap(info.Holder()); if (!nodeMap->map) return Nan::ThrowError(releasedMessage()); - + if (info.Length() != 3) { return Nan::ThrowTypeError("Three arguments required"); } - + if (!info[0]->IsString()) { return Nan::ThrowTypeError("First argument must be a string"); } - + if (!info[1]->IsNumber() || !info[2]->IsNumber()) { return Nan::ThrowTypeError("Second and third arguments must be numbers"); } - + mbgl::style::Layer* layer = nodeMap->map->getStyle().getLayer(*Nan::Utf8String(info[0])); if (!layer) { return Nan::ThrowTypeError("layer not found"); } - layer->setMinZoom(info[1]->NumberValue()); - layer->setMaxZoom(info[2]->NumberValue()); + layer->setMinZoom(Nan::To(info[1]).ToChecked()); + layer->setMaxZoom(Nan::To(info[2]).ToChecked()); } void NodeMap::SetLayerProperty(const Nan::FunctionCallbackInfo& info) { @@ -929,8 +933,8 @@ void NodeMap::SetCenter(const Nan::FunctionCallbackInfo& info) { auto center = info[0].As(); double latitude = 0; double longitude = 0; - if (center->Length() > 0) { longitude = Nan::Get(center, 0).ToLocalChecked()->NumberValue(); } - if (center->Length() > 1) { latitude = Nan::Get(center, 1).ToLocalChecked()->NumberValue(); } + if (center->Length() > 0) { longitude = Nan::To(Nan::Get(center, 0).ToLocalChecked()).ToChecked(); } + if (center->Length() > 1) { latitude = Nan::To(Nan::Get(center, 1).ToLocalChecked()).ToChecked(); } try { nodeMap->map->jumpTo(mbgl::CameraOptions().withCenter(mbgl::LatLng { latitude, longitude })); @@ -950,7 +954,7 @@ void NodeMap::SetZoom(const Nan::FunctionCallbackInfo& info) { } try { - nodeMap->map->jumpTo(mbgl::CameraOptions().withZoom(info[0]->NumberValue())); + nodeMap->map->jumpTo(mbgl::CameraOptions().withZoom(Nan::To(info[0]).ToChecked())); } catch (const std::exception &ex) { return Nan::ThrowError(ex.what()); } @@ -967,7 +971,7 @@ void NodeMap::SetBearing(const Nan::FunctionCallbackInfo& info) { } try { - nodeMap->map->jumpTo(mbgl::CameraOptions().withBearing(info[0]->NumberValue())); + nodeMap->map->jumpTo(mbgl::CameraOptions().withBearing(Nan::To(info[0]).ToChecked())); } catch (const std::exception &ex) { return Nan::ThrowError(ex.what()); } @@ -984,7 +988,7 @@ void NodeMap::SetPitch(const Nan::FunctionCallbackInfo& info) { } try { - nodeMap->map->jumpTo(mbgl::CameraOptions().withPitch(info[0]->NumberValue())); + nodeMap->map->jumpTo(mbgl::CameraOptions().withPitch(Nan::To(info[0]).ToChecked())); } catch (const std::exception &ex) { return Nan::ThrowError(ex.what()); } @@ -1027,7 +1031,7 @@ void NodeMap::SetAxonometric(const Nan::FunctionCallbackInfo& info) { try { nodeMap->map->setProjectionMode(mbgl::ProjectionMode() - .withAxonometric(info[0]->BooleanValue())); + .withAxonometric(Nan::To(info[0]).ToChecked())); } catch (const std::exception &ex) { return Nan::ThrowError(ex.what()); } @@ -1045,7 +1049,7 @@ void NodeMap::SetXSkew(const Nan::FunctionCallbackInfo& info) { try { nodeMap->map->setProjectionMode(mbgl::ProjectionMode() - .withXSkew(info[0]->NumberValue())); + .withXSkew(Nan::To(info[0]).ToChecked())); } catch (const std::exception &ex) { return Nan::ThrowError(ex.what()); } @@ -1063,7 +1067,7 @@ void NodeMap::SetYSkew(const Nan::FunctionCallbackInfo& info) { try { nodeMap->map->setProjectionMode(mbgl::ProjectionMode() - .withYSkew(info[0]->NumberValue())); + .withYSkew(Nan::To(info[0]).ToChecked())); } catch (const std::exception &ex) { return Nan::ThrowError(ex.what()); } @@ -1324,9 +1328,9 @@ void NodeMap::QueryRenderedFeatures(const Nan::FunctionCallbackInfo& if (!info[1]->IsObject()) { return Nan::ThrowTypeError("options argument must be an object"); } - + auto options = Nan::To(info[1]).ToLocalChecked(); - + //Check if layers is set. If provided, it must be an array of strings if (Nan::Has(options, Nan::New("layers").ToLocalChecked()).FromJust()) { auto layersOption = Nan::Get(options, Nan::New("layers").ToLocalChecked()).ToLocalChecked(); @@ -1340,7 +1344,7 @@ void NodeMap::QueryRenderedFeatures(const Nan::FunctionCallbackInfo& } queryOptions.layerIDs = layersVec; } - + //Check if filter is provided. If set it must be a valid Filter object if (Nan::Has(options, Nan::New("filter").ToLocalChecked()).FromJust()) { auto filterOption = Nan::Get(options, Nan::New("filter").ToLocalChecked()).ToLocalChecked(); @@ -1363,24 +1367,24 @@ void NodeMap::QueryRenderedFeatures(const Nan::FunctionCallbackInfo& optional = nodeMap->frontend->getRenderer()->queryRenderedFeatures(mbgl::ScreenBox { { - Nan::Get(pos0, 0).ToLocalChecked()->NumberValue(), - Nan::Get(pos0, 1).ToLocalChecked()->NumberValue() + Nan::To(Nan::Get(pos0, 0).ToLocalChecked()).ToChecked(), + Nan::To(Nan::Get(pos0, 1).ToLocalChecked()).ToChecked() }, { - Nan::Get(pos1, 0).ToLocalChecked()->NumberValue(), - Nan::Get(pos1, 1).ToLocalChecked()->NumberValue() + Nan::To(Nan::Get(pos1, 0).ToLocalChecked()).ToChecked(), + Nan::To(Nan::Get(pos1, 1).ToLocalChecked()).ToChecked() } }, queryOptions); } else { optional = nodeMap->frontend->getRenderer()->queryRenderedFeatures(mbgl::ScreenCoordinate { - Nan::Get(posOrBox, 0).ToLocalChecked()->NumberValue(), - Nan::Get(posOrBox, 1).ToLocalChecked()->NumberValue() + Nan::To(Nan::Get(posOrBox, 0).ToLocalChecked()).ToChecked(), + Nan::To(Nan::Get(posOrBox, 1).ToLocalChecked()).ToChecked() }, queryOptions); } auto array = Nan::New(); for (std::size_t i = 0; i < optional.size(); i++) { - array->Set(i, toJS(optional[i])); + Nan::Set(array, i, toJS(optional[i])); } info.GetReturnValue().Set(array); } catch (const std::exception &ex) { @@ -1392,15 +1396,13 @@ NodeMap::NodeMap(v8::Local options) : pixelRatio([&] { Nan::HandleScope scope; return Nan::Has(options, Nan::New("ratio").ToLocalChecked()).FromJust() - ? Nan::Get(options, Nan::New("ratio").ToLocalChecked()) - .ToLocalChecked() - ->NumberValue() + ? Nan::To(Nan::Get(options, Nan::New("ratio").ToLocalChecked()) + .ToLocalChecked()).ToChecked() : 1.0; }()) , mode([&] { Nan::HandleScope scope; - if (Nan::Has(options, Nan::New("mode").ToLocalChecked()).FromJust() && - std::string(*v8::String::Utf8Value(Nan::Get(options, Nan::New("mode").ToLocalChecked()).ToLocalChecked()->ToString())) == "tile") { + if (std::string(*v8::String::Utf8Value(v8::Isolate::GetCurrent(), Nan::Get(options, Nan::New("mode").ToLocalChecked()).ToLocalChecked())) == "tile") { return mbgl::MapMode::Tile; } else { return mbgl::MapMode::Static; @@ -1409,9 +1411,8 @@ NodeMap::NodeMap(v8::Local options) , crossSourceCollisions([&] { Nan::HandleScope scope; return Nan::Has(options, Nan::New("crossSourceCollisions").ToLocalChecked()).FromJust() - ? Nan::Get(options, Nan::New("crossSourceCollisions").ToLocalChecked()) - .ToLocalChecked() - ->BooleanValue() + ? Nan::To(Nan::Get(options, Nan::New("crossSourceCollisions").ToLocalChecked()) + .ToLocalChecked()).ToChecked() : true; }()) , mapObserver(NodeMapObserver()) @@ -1419,7 +1420,7 @@ NodeMap::NodeMap(v8::Local options) , map(std::make_unique(*frontend, mapObserver, mbgl::MapOptions().withSize(frontend->getSize()) .withPixelRatio(pixelRatio) - .withMapMode(mode) + .withMapMode(mbgl::MapMode::Static) .withCrossSourceCollisions(crossSourceCollisions), mbgl::ResourceOptions().withPlatformContext(reinterpret_cast(this)))) , async(new uv_async_t) { @@ -1468,4 +1469,12 @@ bool NodeFileSource::canRequest(const mbgl::Resource&) const { return true; } +void NodeFileSource::setResourceOptions(mbgl::ResourceOptions options) { + this->_resourceOptions = std::move(options); +} + +mbgl::ResourceOptions NodeFileSource::getResourceOptions() { + return this->_resourceOptions.clone(); +} + } // namespace node_mbgl diff --git a/platform/node/src/node_map.hpp b/platform/node/src/node_map.hpp index 2c7aa253903..5872296a4ee 100644 --- a/platform/node/src/node_map.hpp +++ b/platform/node/src/node_map.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -100,7 +101,10 @@ struct NodeFileSource : public mbgl::FileSource { ~NodeFileSource() override = default; std::unique_ptr request(const mbgl::Resource&, mbgl::FileSource::Callback) final; bool canRequest(const mbgl::Resource&) const override; + void setResourceOptions(mbgl::ResourceOptions) override; + mbgl::ResourceOptions getResourceOptions() override; NodeMap* nodeMap; + mbgl::ResourceOptions _resourceOptions; }; } // namespace node_mbgl diff --git a/platform/node/src/node_mapbox_gl_native.cpp b/platform/node/src/node_mapbox_gl_native.cpp index 9b4437b0aae..425dd2b8aa5 100644 --- a/platform/node/src/node_mapbox_gl_native.cpp +++ b/platform/node/src/node_mapbox_gl_native.cpp @@ -7,6 +7,7 @@ #include #include +#include #include "node_map.hpp" #include "node_logging.hpp" @@ -33,7 +34,7 @@ void RegisterModule(v8::Local target, v8::Local module) Nan::SetMethod(target, "setBackendType", SetBackendType); node_mbgl::NodeMap::Init(target); - node_mbgl::NodeRequest::Init(); + node_mbgl::NodeRequest::Init(target); node_mbgl::NodeExpression::Init(target); // Exports Resource constants. diff --git a/platform/node/src/node_request.cpp b/platform/node/src/node_request.cpp index 981f9d1e818..c4e52cebe79 100644 --- a/platform/node/src/node_request.cpp +++ b/platform/node/src/node_request.cpp @@ -2,6 +2,7 @@ #include "node_map.hpp" #include #include +#include #include @@ -26,7 +27,8 @@ NodeRequest::~NodeRequest() { Nan::Persistent NodeRequest::constructor; -void NodeRequest::Init() { +void NodeRequest::Init(v8::Local target) { + v8::Local context = target->CreationContext(); v8::Local tpl = Nan::New(New); tpl->InstanceTemplate()->SetInternalFieldCount(1); @@ -34,7 +36,7 @@ void NodeRequest::Init() { Nan::SetPrototypeMethod(tpl, "respond", HandleCallback); - constructor.Reset(tpl->GetFunction()); + constructor.Reset(tpl->GetFunction(context).ToLocalChecked()); } void NodeRequest::New(const Nan::FunctionCallbackInfo& info) { @@ -49,7 +51,12 @@ void NodeRequest::New(const Nan::FunctionCallbackInfo& info) { Nan::Set(info.This(), Nan::New("url").ToLocalChecked(), info[3]); Nan::Set(info.This(), Nan::New("kind").ToLocalChecked(), info[4]); v8::Local argv[] = { info.This() }; - request->asyncResource->runInAsyncScope(Nan::To(target->handle()->GetInternalField(1)).ToLocalChecked(), "request", 1, argv); + request->asyncResource->runInAsyncScope( + Nan::To(target->handle()->GetInternalField(1)).ToLocalChecked(), + "request", + 1, + argv + ); info.GetReturnValue().Set(info.This()); } diff --git a/platform/node/src/node_request.hpp b/platform/node/src/node_request.hpp index f958700b054..71cccfe9ddb 100644 --- a/platform/node/src/node_request.hpp +++ b/platform/node/src/node_request.hpp @@ -29,7 +29,7 @@ class NodeRequest : public Nan::ObjectWrap { static Nan::Persistent constructor; - static void Init(); + static void Init(v8::Local); static void New(const Nan::FunctionCallbackInfo&); static void HandleCallback(const Nan::FunctionCallbackInfo&); diff --git a/src/mbgl/actor/mailbox.cpp b/src/mbgl/actor/mailbox.cpp index 095a5cc4978..e53584efef3 100644 --- a/src/mbgl/actor/mailbox.cpp +++ b/src/mbgl/actor/mailbox.cpp @@ -23,7 +23,7 @@ void Mailbox::open(Scheduler& scheduler_) { if (closed) { return; } - + if (!queue.empty()) { auto guard = weakScheduler.lock(); if (weakScheduler) weakScheduler->schedule(makeClosure(shared_from_this())); diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index e76ab742584..dd850d9bf4d 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -179,7 +179,7 @@ void Renderer::Impl::render(const RenderTree& renderTree) { // This guarantees that we have at least one function per tile called. // When only rendering layers via the stylesheet, it's possible that we don't // ever visit a tile during rendering. - for (const RenderItem& renderItem : sourceRenderItems) { + for (const RenderItem& renderItem : sourceRenderItems) { renderItem.render(parameters); } } diff --git a/src/mbgl/tile/tile.cpp b/src/mbgl/tile/tile.cpp index 441f0424aae..ca1b94fa992 100644 --- a/src/mbgl/tile/tile.cpp +++ b/src/mbgl/tile/tile.cpp @@ -27,15 +27,16 @@ void Tile::setTriedCache() { void Tile::dumpDebugLogs() const { std::string kindString; switch (kind) { - case Kind::Geometry: kindString = "Geometry"; break; - case Kind::Raster: kindString = "Raster"; break; - case Kind::RasterDEM: kindString = "RasterDEM"; break; - default: kindString = "Unknown"; break; + case Kind::Geometry: kindString = "Geometry"; break; + case Kind::Raster: kindString = "Raster"; break; + case Kind::RasterDEM: kindString = "RasterDEM"; break; + default: kindString = "Unknown"; break; } Log::Info(Event::General, "Tile::Kind: %s", kindString.c_str()); Log::Info(Event::General, "Tile::id: %s", util::toString(id).c_str()); Log::Info(Event::General, "Tile::renderable: %s", isRenderable() ? "yes" : "no"); Log::Info(Event::General, "Tile::complete: %s", isComplete() ? "yes" : "no"); + Log::Info(Event::General, "Tile::loaded: %s", isLoaded() ? "yes" : "no"); } void Tile::queryRenderedFeatures(std::unordered_map>&, const GeometryCoordinates&, From 423eebc6cae0a4a2db286e498f4be6c0a1b097df Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Fri, 14 Jan 2022 14:22:33 +0000 Subject: [PATCH 05/56] Support node 14, 16, 17 --- platform/node/CMakeLists.txt | 8 -------- 1 file changed, 8 deletions(-) diff --git a/platform/node/CMakeLists.txt b/platform/node/CMakeLists.txt index b70e26ab5e3..c38b01e3fb5 100644 --- a/platform/node/CMakeLists.txt +++ b/platform/node/CMakeLists.txt @@ -15,14 +15,6 @@ add_node_module( 47 48 51 - 59 - 67 - 72 - 79 - 83 - 88 - 93 - 102 ) add_library(mbgl-node-loop STATIC) From 3e85ac0c62b4d235af5b8cf90c5d38e4c78f8ba0 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Fri, 14 Jan 2022 14:34:44 +0000 Subject: [PATCH 06/56] Update the docs --- platform/node/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/node/README.md b/platform/node/README.md index 859172108b1..a1ce9b92c0a 100644 --- a/platform/node/README.md +++ b/platform/node/README.md @@ -36,9 +36,9 @@ var mbgl = require('@mapbox/mapbox-gl-native'); var sharp = require('sharp'); var options = { - request: function(req, callback) { + request: function(req) { fs.readFile(path.join(__dirname, 'test', req.url), function(err, data) { - callback(err, { data: data }); + req.respond(err, { data }); }); }, ratio: 1 From 96aeceecf75d52774b9f9a5bceb3038a600f1aa0 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 16 Jan 2022 11:20:09 +0000 Subject: [PATCH 07/56] Revert Readme changes --- platform/node/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/node/README.md b/platform/node/README.md index a1ce9b92c0a..859172108b1 100644 --- a/platform/node/README.md +++ b/platform/node/README.md @@ -36,9 +36,9 @@ var mbgl = require('@mapbox/mapbox-gl-native'); var sharp = require('sharp'); var options = { - request: function(req) { + request: function(req, callback) { fs.readFile(path.join(__dirname, 'test', req.url), function(err, data) { - req.respond(err, { data }); + callback(err, { data: data }); }); }, ratio: 1 From ab40da3a06aa542a3fe96a372c299923092531e9 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Thu, 20 Jan 2022 17:03:48 +0000 Subject: [PATCH 08/56] Install libuv --- circle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circle.yml b/circle.yml index 62f9963b93c..830c667a20d 100644 --- a/circle.yml +++ b/circle.yml @@ -283,7 +283,7 @@ commands: - run: name: Prepare macOS command: | - brew install cmake ccache glfw ninja pkgconfig qt chargepoint/xcparse/xcparse + brew install cmake ccache glfw ninja pkgconfig qt chargepoint/xcparse/xcparse libuv brew cask install google-cloud-sdk pip install ansi2html scipy config: From ef3497e06a90e1ef6bc31aaf884545c5280d93e9 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Thu, 20 Jan 2022 18:41:46 +0000 Subject: [PATCH 09/56] _actually_ add libuv Previously added to CircleCI, which is no longer in use --- .github/workflows/macos-ci.yml | 1 + .github/workflows/macos-release.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/macos-ci.yml b/.github/workflows/macos-ci.yml index 0b3679201a9..bb2d56c5881 100644 --- a/.github/workflows/macos-ci.yml +++ b/.github/workflows/macos-ci.yml @@ -46,6 +46,7 @@ jobs: brew list ccache || brew install ccache brew list pkg-config || brew install pkg-config brew list glfw3 || brew install glfw3 + brew list libuv || brew install libuv - name: Cache node modules uses: actions/cache@v2 diff --git a/.github/workflows/macos-release.yml b/.github/workflows/macos-release.yml index dd117a72e65..110205cec20 100644 --- a/.github/workflows/macos-release.yml +++ b/.github/workflows/macos-release.yml @@ -29,6 +29,7 @@ jobs: brew list ccache || brew install ccache brew list pkg-config || brew install pkg-config brew list glfw3 || brew install glfw3 + brew list libuv || brew install libuv - name: Cache node modules uses: actions/cache@v2 From 0ec78dc761dc0642bf907d1f422dba0eceec63e6 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Thu, 20 Jan 2022 21:02:25 +0000 Subject: [PATCH 10/56] Link platform loop --- platform/ios/platform/macos/macos.xcodeproj/project.pbxproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/platform/ios/platform/macos/macos.xcodeproj/project.pbxproj b/platform/ios/platform/macos/macos.xcodeproj/project.pbxproj index ddc2edba441..aeb178ede7d 100644 --- a/platform/ios/platform/macos/macos.xcodeproj/project.pbxproj +++ b/platform/ios/platform/macos/macos.xcodeproj/project.pbxproj @@ -99,6 +99,7 @@ 55CAF6342294409B00F17770 /* MGLMapView+OpenGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55CAF6332294409B00F17770 /* MGLMapView+OpenGL.mm */; }; 55CF7533213EDADF00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */; }; 55E2AD111E5B0A6900E8C587 /* MGLOfflineStorageTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */; }; + 567E3E2F279A031800E53E53 /* libmbgl-platform-loop.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 567E3E2E279A031800E53E53 /* libmbgl-platform-loop.a */; }; 747ABE59219B2BDB00523B67 /* MGLFillExtrusionStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */; }; 747ABE5A219B2BDB00523B67 /* MGLCircleStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */; }; 747ABE5B219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */; }; @@ -435,6 +436,8 @@ 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-vendor-icu.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 55D9B4B01D005D3900C1CCE2 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLOfflineStorageTests.mm; path = ../../darwin/test/MGLOfflineStorageTests.mm; sourceTree = ""; }; + 567E3E2C279A009B00E53E53 /* libmbgl-node-loop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-node-loop.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 567E3E2E279A031800E53E53 /* libmbgl-platform-loop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-platform-loop.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillExtrusionStyleLayer_Private.h; sourceTree = ""; }; 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCircleStyleLayer_Private.h; sourceTree = ""; }; 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLBackgroundStyleLayer_Private.h; sourceTree = ""; }; @@ -757,6 +760,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 567E3E2F279A031800E53E53 /* libmbgl-platform-loop.a in Frameworks */, 5548BE781D09E718005DDE81 /* libmbgl-core.a in Frameworks */, DA35D9C92409205B0013ECB0 /* libmbgl-vendor-csscolorparser.a in Frameworks */, 55CF7533213EDADF00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */, @@ -1180,6 +1184,8 @@ DAE6C31E1CC308BC00DB3429 /* Frameworks */ = { isa = PBXGroup; children = ( + 567E3E2E279A031800E53E53 /* libmbgl-platform-loop.a */, + 567E3E2C279A009B00E53E53 /* libmbgl-node-loop.a */, DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */, DA35D9C82409205B0013ECB0 /* libmbgl-vendor-csscolorparser.a */, 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */, From c996193650b7949c34fe1a8104717d8f6cf8f59b Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 14:31:42 +0000 Subject: [PATCH 11/56] Add Darwin build script --- .github/workflows/node-darwin-ci.yml | 87 ++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 .github/workflows/node-darwin-ci.yml diff --git a/.github/workflows/node-darwin-ci.yml b/.github/workflows/node-darwin-ci.yml new file mode 100644 index 00000000000..1a80a5b5f02 --- /dev/null +++ b/.github/workflows/node-darwin-ci.yml @@ -0,0 +1,87 @@ +name: node-darwin-ci + +on: + workflow_dispatch: + push: + tags-ignore: + - '**' + paths-ignore: + - "platform/android/**" + - "platform/ios/**" + - ".gitignore" + branches: + - master + pull_request: + branches: + - master + paths-ignore: + - "platform/android/**" + - "platform/ios/**" + - ".gitignore" + +jobs: + build: + runs-on: macos-10.15 + env: + BUILDTYPE: Debug + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + + defaults: + run: + working-directory: ./ + shell: bash + + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + fetch-depth: 0 + + - name: Install macos dependencies + run: | + brew list cmake || brew install cmake + brew list ccache || brew install ccache + brew list ninja || brew install ninja + brew list pkgconfig || brew install pkgconfig + brew list qt || brew install qt + brew list chargepoint/xcparse/xcparse || brew install chargepoint/xcparse/xcparse + brew list pkg-config || brew install pkg-config + brew list google-cloud-sdk || brew cask install google-cloud-sdk + brew list glfw3 || brew install glfw3 + brew list libuv || brew install libuv + pip install ansi2html scipy + + - name: npm ci + run: npm ci --ignore-scripts + + - name: Prepare ccache + run: ccache --clear + + - name: Cache ccache + uses: actions/cache@v2 + env: + cache-name: ccache-v1 + with: + path: ~/.ccache' + key: ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} + restore-keys: | + ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} + ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }} + ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }} + + - name: Clear ccache statistics + run: | + ccache --zero-stats + ccache --max-size=2G + ccache --show-stats + + - name: CMake + run: | + cmake . -B build -G Ninja -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON + sed -i -e 's/$(ARCHS_STANDARD)/x86_64/g' build/build.ninja + sed -i -e 's/-arch arm64e/-arch x86_64/g' build/build.ninja + + - name: Build + run: | + cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) From 7271b39fe614d0c8a13d64ad151bbd136148cd70 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 14:39:21 +0000 Subject: [PATCH 12/56] Small fix --- .github/workflows/node-darwin-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-darwin-ci.yml b/.github/workflows/node-darwin-ci.yml index 1a80a5b5f02..ba131ea03a8 100644 --- a/.github/workflows/node-darwin-ci.yml +++ b/.github/workflows/node-darwin-ci.yml @@ -47,7 +47,7 @@ jobs: brew list qt || brew install qt brew list chargepoint/xcparse/xcparse || brew install chargepoint/xcparse/xcparse brew list pkg-config || brew install pkg-config - brew list google-cloud-sdk || brew cask install google-cloud-sdk + brew list google-cloud-sdk || brew install --cask google-cloud-sdk brew list glfw3 || brew install glfw3 brew list libuv || brew install libuv pip install ansi2html scipy From f8f8ac8172084a4242c7e067152aca5cb60562bc Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 15:02:36 +0000 Subject: [PATCH 13/56] use a generic workflow name --- .github/workflows/{node-darwin-ci.yml => node-ci.yml} | 4 ++++ 1 file changed, 4 insertions(+) rename .github/workflows/{node-darwin-ci.yml => node-ci.yml} (97%) diff --git a/.github/workflows/node-darwin-ci.yml b/.github/workflows/node-ci.yml similarity index 97% rename from .github/workflows/node-darwin-ci.yml rename to .github/workflows/node-ci.yml index ba131ea03a8..c7705d052de 100644 --- a/.github/workflows/node-darwin-ci.yml +++ b/.github/workflows/node-ci.yml @@ -85,3 +85,7 @@ jobs: - name: Build run: | cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) + + - name: test + run: | + npm test From e0652699efedd1717c04528a64f67029862e4029 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 15:02:47 +0000 Subject: [PATCH 14/56] Fix some mock names --- platform/node/test/mockfs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/node/test/mockfs.js b/platform/node/test/mockfs.js index 2d27f3bbbe8..e5ce4c19a75 100644 --- a/platform/node/test/mockfs.js +++ b/platform/node/test/mockfs.js @@ -24,13 +24,13 @@ function dataForRequest(req) { return sprite_json; } else if (req.url.indexOf('sprite') > -1 && req.url.endsWith('png')) { return sprite_png; - } else if (req.url.indexOf('fonts') > -1 && req.url.endsWith('pbf')) { + } else if ((req.url.includes('fonts') || req.url.includes('tiles/tiles')) && req.url.endsWith('pbf')) { return glyph; } else if (req.url.endsWith('mapbox.satellite')) { return source_raster; } else if (req.url.indexOf('satellite') > -1 && (req.url.endsWith('png') || req.url.endsWith('webp'))) { return tile_raster; - } else if (req.url.endsWith('mapbox.mapbox-streets-v7')) { + } else if (req.url.endsWith('tiles.json?key=uwvyvzaF2P7UWbyOEvjU')) { return source_vector; } else if (req.url.indexOf('streets') > -1 && req.url.endsWith('pbf')) { return tile_vector; From 7b3afb697bf1cf4c6d2383749bf50c0d2bf93890 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 15:30:23 +0000 Subject: [PATCH 15/56] Fix tests --- platform/node/test/js/request.test.js | 9 +++++++-- platform/node/test/mockfs.js | 17 ++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/platform/node/test/js/request.test.js b/platform/node/test/js/request.test.js index 4f8d1cabb07..feb5c25e6ea 100644 --- a/platform/node/test/js/request.test.js +++ b/platform/node/test/js/request.test.js @@ -4,7 +4,7 @@ var mockfs = require('../mockfs'); var mbgl = require('../../index'); var test = require('tape'); -[ 'sprite_png', 'sprite_json', 'source_vector', 'glyph' ].forEach(function (resource) { +[ 'sprite_png', 'sprite_json', 'source_vector' ].forEach(function (resource) { test(`render reports an error when the request function responds with an error (${resource})`, function(t) { var map = new mbgl.Map({ request: function(req, callback) { @@ -144,7 +144,12 @@ test(`render does not report an error from rendering a previous style`, function var map = new mbgl.Map({ request: function(req, callback) { var data = mockfs.dataForRequest(req); - if (mockfs.source_vector === data) { + if ( + mockfs.source_vector === data && + // By default tiles load sources/v3 as well, which is vector tile, + // messing things up. + req.url !== 'maptiler://sources/v3' + ) { callback(new Error('message')); } else { callback(null, { data: data }); diff --git a/platform/node/test/mockfs.js b/platform/node/test/mockfs.js index e5ce4c19a75..55d802ecbee 100644 --- a/platform/node/test/mockfs.js +++ b/platform/node/test/mockfs.js @@ -20,19 +20,22 @@ var tile_vector = readFixture('vector.tile'); function dataForRequest(req) { if (req.url === null) { return null; - } else if (req.url.indexOf('sprite') > -1 && req.url.endsWith('json')) { + } else if (req.url.includes('sprite') && req.url.endsWith('.json')) { return sprite_json; - } else if (req.url.indexOf('sprite') > -1 && req.url.endsWith('png')) { + } else if (req.url.includes('sprite') && req.url.endsWith('.png')) { return sprite_png; - } else if ((req.url.includes('fonts') || req.url.includes('tiles/tiles')) && req.url.endsWith('pbf')) { + } else if (req.url.includes('fonts/') && req.url.endsWith('.pbf')) { return glyph; - } else if (req.url.endsWith('mapbox.satellite')) { + } else if (req.url.includes('sources/satellite')) { return source_raster; - } else if (req.url.indexOf('satellite') > -1 && (req.url.endsWith('png') || req.url.endsWith('webp'))) { + } else if (req.url.includes('tiles/satellite') && (req.url.endsWith('png') || req.url.endsWith('webp') || req.url.endsWith('jpg'))) { return tile_raster; - } else if (req.url.endsWith('tiles.json?key=uwvyvzaF2P7UWbyOEvjU')) { + } else if ( + req.url === 'https://api.maptiler.com/tiles/v3/tiles.json?key=uwvyvzaF2P7UWbyOEvjU' || + req.url === 'maptiler://sources/v3' + ) { return source_vector; - } else if (req.url.indexOf('streets') > -1 && req.url.endsWith('pbf')) { + } else if (req.url.includes('tiles/tiles') && req.url.endsWith('pbf')) { return tile_vector; } else { return null; From 5d0145c040c7e8843484aab718d03a6df11a12bb Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 15:32:06 +0000 Subject: [PATCH 16/56] rename --- .github/workflows/node-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index c7705d052de..dc9944fe4cc 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -1,4 +1,4 @@ -name: node-darwin-ci +name: node-ci on: workflow_dispatch: @@ -39,6 +39,7 @@ jobs: fetch-depth: 0 - name: Install macos dependencies + if: runner.os == 'macOS' run: | brew list cmake || brew install cmake brew list ccache || brew install ccache From f4b8f8b199b24b8b1067e8810312f0beb1f5c5c9 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 15:57:50 +0000 Subject: [PATCH 17/56] Run multiple macos versions, cache homebrew --- .github/workflows/node-ci.yml | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index dc9944fe4cc..f49c63edb82 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -21,7 +21,11 @@ on: jobs: build: - runs-on: macos-10.15 + strategy: + matrix: + os: + - macos-11.0 + - macos-10.15 env: BUILDTYPE: Debug HOMEBREW_NO_AUTO_UPDATE: 1 @@ -38,6 +42,20 @@ jobs: submodules: recursive fetch-depth: 0 + - name: Cache homebrew + uses: actions/cache@v2 + if: runner.os == 'macOS' + env: + cache-name: homebrew-v1 + with: + path: /usr/local/Cellar + key: ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} + restore-keys: | + ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} + ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }} + ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }} + + - name: Install macos dependencies if: runner.os == 'macOS' run: | @@ -87,6 +105,18 @@ jobs: run: | cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) - - name: test + - name: Test run: | npm test + + # On PRs make sure that the npm package can be packaged. + - name: Pack + working-directory: ./platform/node + if: github.ref != 'refs/heads/master' + run: | + npm pack + + - name: Publish package + if: github.ref == 'refs/heads/master' + run: | + npm publish From eebce07aacdded55c7b3a982d49d280d0243ae80 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 16:00:13 +0000 Subject: [PATCH 18/56] Update package name, ignore rest of files for the package --- .npmignore | 3 +++ package.json | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 .npmignore diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000000..fc835a428d7 --- /dev/null +++ b/.npmignore @@ -0,0 +1,3 @@ +* +platform/node/src +platform/node/test diff --git a/package.json b/package.json index 4df91191309..b222f83b1bd 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,21 @@ { - "name": "@mapbox/mapbox-gl-native", + "name": "@maplibre/maplibre-gl-native", "version": "5.0.0", - "description": "Renders map tiles with Mapbox GL", + "description": "Renders map tiles with Maplibre GL", "keywords": [ - "mapbox", + "maplibre", "gl" ], + "directories": { + "lib": "lib" + }, + "files": [ + "lib" + ], "main": "platform/node/index.js", "repository": { "type": "git", - "url": "git://github.com/mapbox/mapbox-gl-native.git" + "url": "git://github.com/maplibre/maplibre-gl-native.git" }, "license": "BSD-2-Clause", "dependencies": { From 1dab828a3e39b3c23c076079767d9dd0b554dc6b Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 16:02:06 +0000 Subject: [PATCH 19/56] needs runs-on, duh --- .github/workflows/node-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index f49c63edb82..761bc49697f 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -26,6 +26,7 @@ jobs: os: - macos-11.0 - macos-10.15 + runs-on: ${{ matrix.os }} env: BUILDTYPE: Debug HOMEBREW_NO_AUTO_UPDATE: 1 From 627688505536e0cda32120eaf7361502f0c52e9d Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 16:27:15 +0000 Subject: [PATCH 20/56] Run on Linux --- .github/workflows/node-ci.yml | 44 ++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 761bc49697f..c68dd426c8c 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -26,11 +26,11 @@ jobs: os: - macos-11.0 - macos-10.15 + - ubuntu-20.04 + - ubuntu-18.04 runs-on: ${{ matrix.os }} env: BUILDTYPE: Debug - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 defaults: run: @@ -50,15 +50,18 @@ jobs: cache-name: homebrew-v1 with: path: /usr/local/Cellar - key: ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} + key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} restore-keys: | - ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} - ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }} - ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} - name: Install macos dependencies if: runner.os == 'macOS' + env: + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 run: | brew list cmake || brew install cmake brew list ccache || brew install ccache @@ -72,6 +75,20 @@ jobs: brew list libuv || brew install libuv pip install ansi2html scipy + - name: Install linux dependencies + if: runner.os == 'Linux' + env: + DEBIAN_FRONTEND: noninteractive + run: | + apt-get update && apt-get dist-upgrade -y + apt-get install -y ca-certificates git gzip ssh tar colorized-logs python3-scipy + apt-get install -y awscli ccache clang-9 clang-format-9 clang-tidy-9 cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build nodejs npm pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip + pip3 install cmake-format==0.5.5 + apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg62-turbo-dev libpng-dev libuv1-dev zlib1g-dev + git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache + apt-get install -y g++-10 + /usr/sbin/update-ccache-symlinks + - name: npm ci run: npm ci --ignore-scripts @@ -84,11 +101,11 @@ jobs: cache-name: ccache-v1 with: path: ~/.ccache' - key: ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} + key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} restore-keys: | - ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} - ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }}-${{ github.ref }} - ${{ env.cache-name }}-${{ runner.macos }}-${{ github.job }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} - name: Clear ccache statistics run: | @@ -97,11 +114,17 @@ jobs: ccache --show-stats - name: CMake + if: runner.os == 'macOS' run: | cmake . -B build -G Ninja -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON sed -i -e 's/$(ARCHS_STANDARD)/x86_64/g' build/build.ninja sed -i -e 's/-arch arm64e/-arch x86_64/g' build/build.ninja + - name: CMake + if: runner.os == 'Linux' + run: | + cmake . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 + - name: Build run: | cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) @@ -112,7 +135,6 @@ jobs: # On PRs make sure that the npm package can be packaged. - name: Pack - working-directory: ./platform/node if: github.ref != 'refs/heads/master' run: | npm pack From 92efcd3e7957284c74fc7a043d942c396542719e Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 16:31:45 +0000 Subject: [PATCH 21/56] sudo! --- .github/workflows/node-ci.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index c68dd426c8c..4391b8293d4 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -80,13 +80,14 @@ jobs: env: DEBIAN_FRONTEND: noninteractive run: | - apt-get update && apt-get dist-upgrade -y - apt-get install -y ca-certificates git gzip ssh tar colorized-logs python3-scipy - apt-get install -y awscli ccache clang-9 clang-format-9 clang-tidy-9 cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build nodejs npm pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip + sudo apt-get update + sudo apt-get dist-upgrade -y + sudo apt-get install -y ca-certificates git gzip ssh tar colorized-logs python3-scipy + sudo apt-get install -y awscli ccache clang-9 clang-format-9 clang-tidy-9 cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build nodejs npm pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip pip3 install cmake-format==0.5.5 - apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg62-turbo-dev libpng-dev libuv1-dev zlib1g-dev + sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg62-turbo-dev libpng-dev libuv1-dev zlib1g-dev git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache - apt-get install -y g++-10 + sudo apt-get install -y g++-10 /usr/sbin/update-ccache-symlinks - name: npm ci From c137081ca419ecc6f9f33344fb4339a5d74914da Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 16:38:54 +0000 Subject: [PATCH 22/56] use libjpeg --- .github/workflows/node-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 4391b8293d4..bff9982f827 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -57,7 +57,7 @@ jobs: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} - - name: Install macos dependencies + - name: Install dependencies if: runner.os == 'macOS' env: HOMEBREW_NO_AUTO_UPDATE: 1 @@ -75,7 +75,7 @@ jobs: brew list libuv || brew install libuv pip install ansi2html scipy - - name: Install linux dependencies + - name: Install dependencies if: runner.os == 'Linux' env: DEBIAN_FRONTEND: noninteractive @@ -85,7 +85,7 @@ jobs: sudo apt-get install -y ca-certificates git gzip ssh tar colorized-logs python3-scipy sudo apt-get install -y awscli ccache clang-9 clang-format-9 clang-tidy-9 cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build nodejs npm pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip pip3 install cmake-format==0.5.5 - sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg62-turbo-dev libpng-dev libuv1-dev zlib1g-dev + sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache sudo apt-get install -y g++-10 /usr/sbin/update-ccache-symlinks From b1fc0d3725898add204ddcc29d53fd8623e171f1 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 17:12:17 +0000 Subject: [PATCH 23/56] Run in Headless mode on Linux (duh) --- .github/workflows/node-ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index bff9982f827..9ed386ccf88 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -131,8 +131,9 @@ jobs: cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) - name: Test - run: | - npm test + uses: GabrielBB/xvfb-action@v1 + with: + run: npm test # On PRs make sure that the npm package can be packaged. - name: Pack From 3e3d07721672d78a1dbc65ecbc1d8e1dabf380c0 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 17:43:24 +0000 Subject: [PATCH 24/56] try xvfb --- .github/workflows/node-ci.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 9ed386ccf88..2f590be166f 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -89,6 +89,7 @@ jobs: git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache sudo apt-get install -y g++-10 /usr/sbin/update-ccache-symlinks + sudo apt-get install xvfb - name: npm ci run: npm ci --ignore-scripts @@ -131,7 +132,12 @@ jobs: cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) - name: Test - uses: GabrielBB/xvfb-action@v1 + if: runner.os == 'Linux' + with: + run: xvfb-run --auto-servernum npm test + + - name: Test + if: runner.os == 'macOS' with: run: npm test From 7bf6df570d3025f24da891c65ac40a9cb4351b87 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 17:44:12 +0000 Subject: [PATCH 25/56] Whooops --- .github/workflows/node-ci.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 2f590be166f..62631a18b88 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -133,13 +133,11 @@ jobs: - name: Test if: runner.os == 'Linux' - with: - run: xvfb-run --auto-servernum npm test + run: xvfb-run --auto-servernum npm test - name: Test if: runner.os == 'macOS' - with: - run: npm test + run: npm test # On PRs make sure that the npm package can be packaged. - name: Pack From e5769e0dcc14e1013ee4ed907821cd9ff6819b75 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 22:35:33 +0000 Subject: [PATCH 26/56] Ignore Qt too --- .github/workflows/node-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 62631a18b88..4d9f48b7264 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -8,6 +8,7 @@ on: paths-ignore: - "platform/android/**" - "platform/ios/**" + - "platform/qt/**" - ".gitignore" branches: - master From 51a1215970c075ea984c6b41504cfe876ea99145 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 22:47:19 +0000 Subject: [PATCH 27/56] Simplify dependencies, remove osx deployment target --- .github/workflows/node-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 4d9f48b7264..29046effd38 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -84,7 +84,7 @@ jobs: sudo apt-get update sudo apt-get dist-upgrade -y sudo apt-get install -y ca-certificates git gzip ssh tar colorized-logs python3-scipy - sudo apt-get install -y awscli ccache clang-9 clang-format-9 clang-tidy-9 cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build nodejs npm pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip + sudo apt-get install -y awscli ccache cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build nodejs npm pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip pip3 install cmake-format==0.5.5 sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache @@ -119,7 +119,7 @@ jobs: - name: CMake if: runner.os == 'macOS' run: | - cmake . -B build -G Ninja -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON + cmake . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON sed -i -e 's/$(ARCHS_STANDARD)/x86_64/g' build/build.ninja sed -i -e 's/-arch arm64e/-arch x86_64/g' build/build.ninja From 4a9168286130d4a330943651fcccb900ea0c2ea6 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 23:02:06 +0000 Subject: [PATCH 28/56] Remove brew cache --- .github/workflows/node-ci.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 29046effd38..44c1d1ad196 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -44,20 +44,6 @@ jobs: submodules: recursive fetch-depth: 0 - - name: Cache homebrew - uses: actions/cache@v2 - if: runner.os == 'macOS' - env: - cache-name: homebrew-v1 - with: - path: /usr/local/Cellar - key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} - restore-keys: | - ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} - ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }} - ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} - - - name: Install dependencies if: runner.os == 'macOS' env: From 9fd8244de492e00fc1d052bafa768fc51edb82dd Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sat, 22 Jan 2022 23:34:10 +0000 Subject: [PATCH 29/56] Remove more deps --- .github/workflows/node-ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 44c1d1ad196..1597afbebce 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -54,10 +54,8 @@ jobs: brew list ccache || brew install ccache brew list ninja || brew install ninja brew list pkgconfig || brew install pkgconfig - brew list qt || brew install qt brew list chargepoint/xcparse/xcparse || brew install chargepoint/xcparse/xcparse brew list pkg-config || brew install pkg-config - brew list google-cloud-sdk || brew install --cask google-cloud-sdk brew list glfw3 || brew install glfw3 brew list libuv || brew install libuv pip install ansi2html scipy @@ -69,7 +67,7 @@ jobs: run: | sudo apt-get update sudo apt-get dist-upgrade -y - sudo apt-get install -y ca-certificates git gzip ssh tar colorized-logs python3-scipy + sudo apt-get install -y ca-certificates git gzip ssh tar python3-scipy sudo apt-get install -y awscli ccache cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build nodejs npm pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip pip3 install cmake-format==0.5.5 sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev From 0a817746bd042d2090c212342497d3d8cd813ace Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 00:03:26 +0000 Subject: [PATCH 30/56] Purge more deps --- .github/workflows/node-ci.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 1597afbebce..e9339b3b1e5 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -67,14 +67,12 @@ jobs: run: | sudo apt-get update sudo apt-get dist-upgrade -y - sudo apt-get install -y ca-certificates git gzip ssh tar python3-scipy - sudo apt-get install -y awscli ccache cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build nodejs npm pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip + sudo apt-get install -y ca-certificates git gzip tar python3-scipy + sudo apt-get install -y ccache cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip pip3 install cmake-format==0.5.5 - sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev + sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev g++-10 git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache - sudo apt-get install -y g++-10 /usr/sbin/update-ccache-symlinks - sudo apt-get install xvfb - name: npm ci run: npm ci --ignore-scripts From d877808a6a443cf13351a98c2d3f7566f7dc4a29 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 00:04:47 +0000 Subject: [PATCH 31/56] Revert circleCI changes --- circle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circle.yml b/circle.yml index 830c667a20d..62f9963b93c 100644 --- a/circle.yml +++ b/circle.yml @@ -283,7 +283,7 @@ commands: - run: name: Prepare macOS command: | - brew install cmake ccache glfw ninja pkgconfig qt chargepoint/xcparse/xcparse libuv + brew install cmake ccache glfw ninja pkgconfig qt chargepoint/xcparse/xcparse brew cask install google-cloud-sdk pip install ansi2html scipy config: From 0cc23a2e1cc0bf7577773e2c2c6f5f23ee999b94 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 00:05:54 +0000 Subject: [PATCH 32/56] Remove iostream include --- platform/node/src/node_request.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/platform/node/src/node_request.cpp b/platform/node/src/node_request.cpp index c4e52cebe79..c763b8da661 100644 --- a/platform/node/src/node_request.cpp +++ b/platform/node/src/node_request.cpp @@ -2,7 +2,6 @@ #include "node_map.hpp" #include #include -#include #include From 61d82d124c77272dfab9b124f53134e1d56ce26d Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 00:34:24 +0000 Subject: [PATCH 33/56] Ignore node binaries --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index a4e3722acb2..c5227e86896 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,5 @@ /platform/ios/platform/ios/benchmark/assets/glyphs/Noto Sans Regular /platform/android/key.json node_modules +# Node binaries. +/lib From 9c85518425bd821fd2c23aec6ca194169cfbecc7 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 12:49:38 +0000 Subject: [PATCH 34/56] Simplify node loop --- benchmark/CMakeLists.txt | 2 +- bin/CMakeLists.txt | 5 ++--- build-macos.sh | 18 +++++++++++++++ expression-test/CMakeLists.txt | 1 - platform/glfw/CMakeLists.txt | 1 - platform/linux/linux.cmake | 32 ++++---------------------- platform/macos/macos.cmake | 41 +++++----------------------------- platform/node/CMakeLists.txt | 2 ++ render-test/CMakeLists.txt | 1 - test/CMakeLists.txt | 3 +-- 10 files changed, 33 insertions(+), 73 deletions(-) create mode 100755 build-macos.sh diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index e864e2c1b5d..8b6d28f5940 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -56,7 +56,7 @@ get_target_property(MBGL_CORE_PRIVATE_LIBRARIES mbgl-core LINK_LIBRARIES) target_link_libraries( mbgl-benchmark - PRIVATE ${MBGL_CORE_PRIVATE_LIBRARIES} mbgl-vendor-benchmark mbgl-compiler-options mbgl-platform-loop + PRIVATE ${MBGL_CORE_PRIVATE_LIBRARIES} mbgl-vendor-benchmark mbgl-compiler-options PUBLIC mbgl-core ) diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index 31daffe799e..842a91e7292 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -9,7 +9,6 @@ target_link_libraries( Mapbox::Base Mapbox::Base::Extras::args mbgl-compiler-options - mbgl-platform-loop mbgl-core ) @@ -20,7 +19,7 @@ add_executable( target_link_libraries( mbgl-offline - PRIVATE Mapbox::Base::Extras::args mbgl-compiler-options mbgl-platform-loop mbgl-core + PRIVATE Mapbox::Base::Extras::args mbgl-compiler-options mbgl-core ) add_executable( @@ -30,7 +29,7 @@ add_executable( target_link_libraries( mbgl-render - PRIVATE Mapbox::Base::Extras::args mbgl-compiler-options mbgl-platform-loop mbgl-core + PRIVATE Mapbox::Base::Extras::args mbgl-compiler-options mbgl-core ) install(TARGETS mbgl-offline mbgl-render RUNTIME DESTINATION bin) diff --git a/build-macos.sh b/build-macos.sh new file mode 100755 index 00000000000..ce7c8065095 --- /dev/null +++ b/build-macos.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +rm -rf ./build + +# Install these dependencies, if they aren't there already. +# brew install cmake ccache glfw ninja pkgconfig qt chargepoint/xcparse/xcparse libuv +# brew cask install google-cloud-sdk +# pip install ansi2html scipy + +cmake . -B build -G Ninja -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON + +sed -i -e 's/$(ARCHS_STANDARD)/x86_64/g' build/build.ninja +sed -i -e 's/-arch arm64e/-arch x86_64/g' build/build.ninja + +cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) diff --git a/expression-test/CMakeLists.txt b/expression-test/CMakeLists.txt index 27954ffde64..f9120ac7c22 100644 --- a/expression-test/CMakeLists.txt +++ b/expression-test/CMakeLists.txt @@ -28,7 +28,6 @@ target_link_libraries( Mapbox::Base Mapbox::Base::Extras::args Mapbox::Base::Extras::filesystem - mbgl-platform-loop mbgl-core ) diff --git a/platform/glfw/CMakeLists.txt b/platform/glfw/CMakeLists.txt index 5382fcac845..d2eeac92535 100644 --- a/platform/glfw/CMakeLists.txt +++ b/platform/glfw/CMakeLists.txt @@ -53,7 +53,6 @@ target_link_libraries( target_link_libraries( mbgl-glfw PRIVATE - mbgl-platform-loop ${GLFW_LIBRARIES} Mapbox::Base::Extras::args Mapbox::Base::Extras::filesystem diff --git a/platform/linux/linux.cmake b/platform/linux/linux.cmake index 6400c318a13..2bd26ae7bfe 100644 --- a/platform/linux/linux.cmake +++ b/platform/linux/linux.cmake @@ -8,34 +8,6 @@ find_package(X11 REQUIRED) pkg_search_module(LIBUV libuv REQUIRED) -add_library(mbgl-platform-loop STATIC) - -target_sources( - mbgl-platform-loop - PRIVATE - ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/async_task.cpp - ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/run_loop.cpp - ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/timer.cpp -) - -target_include_directories( - mbgl-platform-loop - PRIVATE - ${PROJECT_SOURCE_DIR}/platform/linux/include - ${PROJECT_SOURCE_DIR}/platform/default/include - ${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/src - ${LIBUV_INCLUDE_DIRS} -) - -target_link_libraries( - mbgl-platform-loop - PUBLIC - Mapbox::Base - PRIVATE - ${LIBUV_LIBRARIES} -) - target_sources( mbgl-core PRIVATE @@ -62,6 +34,7 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/sqlite3.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/bidi.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/local_glyph_rasterizer.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/async_task.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/compression.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/image.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/jpeg_reader.cpp @@ -69,6 +42,7 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/monotonic_timer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_reader.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_writer.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/run_loop.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/string_stdlib.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp @@ -110,6 +84,7 @@ target_include_directories( PRIVATE ${CURL_INCLUDE_DIRS} ${JPEG_INCLUDE_DIRS} + ${LIBUV_INCLUDE_DIRS} ${X11_INCLUDE_DIRS} ) @@ -135,6 +110,7 @@ target_link_libraries( PRIVATE ${CURL_LIBRARIES} ${JPEG_LIBRARIES} + ${LIBUV_LIBRARIES} ${X11_LIBRARIES} $<$>:ICU::i18n> $<$>:ICU::uc> diff --git a/platform/macos/macos.cmake b/platform/macos/macos.cmake index 8c1393e5005..f2dec742e16 100644 --- a/platform/macos/macos.cmake +++ b/platform/macos/macos.cmake @@ -9,9 +9,6 @@ set_target_properties(mbgl-core PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[vari set_target_properties(mbgl-core PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) -find_package(PkgConfig REQUIRED) -pkg_search_module(LIBUV libuv REQUIRED STATIC) - if(MBGL_WITH_OPENGL) find_package(OpenGL REQUIRED) @@ -23,8 +20,7 @@ if(MBGL_WITH_OPENGL) mbgl-core PRIVATE ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gl/headless_backend.cpp - ${PROJECT_SOURCE_DIR}/platform/darwin/src/gl_functions.cpp - ${PROJECT_SOURCE_DIR}/platform/darwin/src/headless_backend_cgl.mm + ${PROJECT_SOURCE_DIR}/platform/darwin/src/gl_functions.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/headless_backend_cgl.mm ) target_link_libraries( mbgl-core @@ -32,37 +28,10 @@ if(MBGL_WITH_OPENGL) ) endif() -add_library(mbgl-platform-loop STATIC) - -target_sources( - mbgl-platform-loop - PRIVATE - ${PROJECT_SOURCE_DIR}/platform/darwin/src/async_task.cpp - ${PROJECT_SOURCE_DIR}/platform/darwin/src/run_loop.cpp - ${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp -) - -target_compile_options(mbgl-platform-loop PRIVATE -fobjc-arc) - -target_include_directories( - mbgl-platform-loop - PRIVATE - ${PROJECT_SOURCE_DIR}/platform/darwin/include - ${PROJECT_SOURCE_DIR}/platform/darwin/src - ${PROJECT_SOURCE_DIR}/platform/macos/src - ${PROJECT_SOURCE_DIR}/platform/default/include - ${PROJECT_SOURCE_DIR}/include -) - -target_link_libraries( - mbgl-platform-loop - PUBLIC - Mapbox::Base -) - target_sources( mbgl-core PRIVATE + ${PROJECT_SOURCE_DIR}/platform/darwin/src/async_task.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/collator.mm $<$:${PROJECT_SOURCE_DIR}/platform/darwin/src/http_file_source.mm> ${PROJECT_SOURCE_DIR}/platform/darwin/src/image.mm @@ -71,7 +40,9 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/nsthread.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/number_format.mm + ${PROJECT_SOURCE_DIR}/platform/darwin/src/run_loop.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/string_nsstring.mm + ${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_backend.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp @@ -109,9 +80,7 @@ target_include_directories( target_include_directories( mbgl-core PRIVATE - ${PROJECT_SOURCE_DIR}/platform/darwin/include - ${PROJECT_SOURCE_DIR}/platform/darwin/src - ${PROJECT_SOURCE_DIR}/platform/macos/src + ${PROJECT_SOURCE_DIR}/platform/darwin/include ${PROJECT_SOURCE_DIR}/platform/darwin/src ${PROJECT_SOURCE_DIR}/platform/macos/src ) include(${PROJECT_SOURCE_DIR}/vendor/icu.cmake) diff --git a/platform/node/CMakeLists.txt b/platform/node/CMakeLists.txt index c38b01e3fb5..3292038b131 100644 --- a/platform/node/CMakeLists.txt +++ b/platform/node/CMakeLists.txt @@ -16,6 +16,8 @@ add_node_module( 48 51 ) +find_package(PkgConfig REQUIRED) +pkg_search_module(LIBUV libuv REQUIRED) add_library(mbgl-node-loop STATIC) diff --git a/render-test/CMakeLists.txt b/render-test/CMakeLists.txt index 7c8483a1023..cb00f19e17a 100644 --- a/render-test/CMakeLists.txt +++ b/render-test/CMakeLists.txt @@ -56,7 +56,6 @@ target_link_libraries( Mapbox::Base::pixelmatch-cpp mbgl-compiler-options mbgl-vendor-boost - mbgl-platform-loop PUBLIC mbgl-core ) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b68c6e5d5c2..9bde3916f10 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -106,7 +106,7 @@ add_library( ${PROJECT_SOURCE_DIR}/test/util/timer.test.cpp ${PROJECT_SOURCE_DIR}/test/util/token.test.cpp ${PROJECT_SOURCE_DIR}/test/util/url.test.cpp - ${PROJECT_SOURCE_DIR}/test/util/tile_server_options.test.cpp + ${PROJECT_SOURCE_DIR}/test/util/tile_server_options.test.cpp ) # MapSnapshotter uses headless backend that is rendering image on a background thread. QT / macOS adaptation for headless backend creates @@ -219,7 +219,6 @@ target_link_libraries( Mapbox::Base::pixelmatch-cpp mbgl-compiler-options mbgl-vendor-cpp-httplib - mbgl-platform-loop PUBLIC mbgl-core ) From 7939bdee9c118a68eae0748c12943df323fce30d Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 12:52:17 +0000 Subject: [PATCH 35/56] Small cleanup --- build-macos.sh | 18 ------------------ .../macos/macos.xcodeproj/project.pbxproj | 6 ------ 2 files changed, 24 deletions(-) delete mode 100755 build-macos.sh diff --git a/build-macos.sh b/build-macos.sh deleted file mode 100755 index ce7c8065095..00000000000 --- a/build-macos.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail - -rm -rf ./build - -# Install these dependencies, if they aren't there already. -# brew install cmake ccache glfw ninja pkgconfig qt chargepoint/xcparse/xcparse libuv -# brew cask install google-cloud-sdk -# pip install ansi2html scipy - -cmake . -B build -G Ninja -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON - -sed -i -e 's/$(ARCHS_STANDARD)/x86_64/g' build/build.ninja -sed -i -e 's/-arch arm64e/-arch x86_64/g' build/build.ninja - -cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) diff --git a/platform/ios/platform/macos/macos.xcodeproj/project.pbxproj b/platform/ios/platform/macos/macos.xcodeproj/project.pbxproj index aeb178ede7d..ddc2edba441 100644 --- a/platform/ios/platform/macos/macos.xcodeproj/project.pbxproj +++ b/platform/ios/platform/macos/macos.xcodeproj/project.pbxproj @@ -99,7 +99,6 @@ 55CAF6342294409B00F17770 /* MGLMapView+OpenGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55CAF6332294409B00F17770 /* MGLMapView+OpenGL.mm */; }; 55CF7533213EDADF00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */; }; 55E2AD111E5B0A6900E8C587 /* MGLOfflineStorageTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */; }; - 567E3E2F279A031800E53E53 /* libmbgl-platform-loop.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 567E3E2E279A031800E53E53 /* libmbgl-platform-loop.a */; }; 747ABE59219B2BDB00523B67 /* MGLFillExtrusionStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */; }; 747ABE5A219B2BDB00523B67 /* MGLCircleStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */; }; 747ABE5B219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */; }; @@ -436,8 +435,6 @@ 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-vendor-icu.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 55D9B4B01D005D3900C1CCE2 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLOfflineStorageTests.mm; path = ../../darwin/test/MGLOfflineStorageTests.mm; sourceTree = ""; }; - 567E3E2C279A009B00E53E53 /* libmbgl-node-loop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-node-loop.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 567E3E2E279A031800E53E53 /* libmbgl-platform-loop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-platform-loop.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillExtrusionStyleLayer_Private.h; sourceTree = ""; }; 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCircleStyleLayer_Private.h; sourceTree = ""; }; 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLBackgroundStyleLayer_Private.h; sourceTree = ""; }; @@ -760,7 +757,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 567E3E2F279A031800E53E53 /* libmbgl-platform-loop.a in Frameworks */, 5548BE781D09E718005DDE81 /* libmbgl-core.a in Frameworks */, DA35D9C92409205B0013ECB0 /* libmbgl-vendor-csscolorparser.a in Frameworks */, 55CF7533213EDADF00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */, @@ -1184,8 +1180,6 @@ DAE6C31E1CC308BC00DB3429 /* Frameworks */ = { isa = PBXGroup; children = ( - 567E3E2E279A031800E53E53 /* libmbgl-platform-loop.a */, - 567E3E2C279A009B00E53E53 /* libmbgl-node-loop.a */, DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */, DA35D9C82409205B0013ECB0 /* libmbgl-vendor-csscolorparser.a */, 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */, From 8104d836b75f1fedf0f2188c9c4b4e8778affda9 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 12:59:13 +0000 Subject: [PATCH 36/56] No need for libuv for regular builds now. --- .github/workflows/macos-ci.yml | 1 - .github/workflows/macos-release.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/workflows/macos-ci.yml b/.github/workflows/macos-ci.yml index bb2d56c5881..0b3679201a9 100644 --- a/.github/workflows/macos-ci.yml +++ b/.github/workflows/macos-ci.yml @@ -46,7 +46,6 @@ jobs: brew list ccache || brew install ccache brew list pkg-config || brew install pkg-config brew list glfw3 || brew install glfw3 - brew list libuv || brew install libuv - name: Cache node modules uses: actions/cache@v2 diff --git a/.github/workflows/macos-release.yml b/.github/workflows/macos-release.yml index 110205cec20..dd117a72e65 100644 --- a/.github/workflows/macos-release.yml +++ b/.github/workflows/macos-release.yml @@ -29,7 +29,6 @@ jobs: brew list ccache || brew install ccache brew list pkg-config || brew install pkg-config brew list glfw3 || brew install glfw3 - brew list libuv || brew install libuv - name: Cache node modules uses: actions/cache@v2 From 92ce170c6d56d3f7deaf94c0147c92d2d776a89a Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 13:26:29 +0000 Subject: [PATCH 37/56] Rename package lock as well --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 01fdba8b7e0..71417a32704 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "@mapbox/mapbox-gl-native", + "name": "@maplibre/maplibre-gl-native", "version": "5.0.0", "lockfileVersion": 1, "requires": true, From 3b858510efae3b5355b1d45c2e0cd23219e31aeb Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 13:38:48 +0000 Subject: [PATCH 38/56] Update docs --- platform/node/DEVELOPING.md | 58 +++++++++++++++++++++++++++++++++++-- platform/node/README.md | 16 +++++----- 2 files changed, 63 insertions(+), 11 deletions(-) diff --git a/platform/node/DEVELOPING.md b/platform/node/DEVELOPING.md index 14660521557..dc42e91a83b 100644 --- a/platform/node/DEVELOPING.md +++ b/platform/node/DEVELOPING.md @@ -1,6 +1,6 @@ -# Developing the Mapbox GL Native Node.js module +# Developing the Maplibre GL Native Node.js module -This document explains how to build the [Node.js](https://nodejs.org/) bindings for [Mapbox GL Native](../../README.md) for contributing to the development of the bindings themselves. If you just want to use the module, you can simply install it via `npm`; see [README.md](README.md) for installation and usage instructions. +This document explains how to build the [Node.js](https://nodejs.org/) bindings for [Maplibre GL Native](../../README.md) for contributing to the development of the bindings themselves. If you just want to use the module, you can simply install it via `npm`; see [README.md](README.md) for installation and usage instructions. ## Building @@ -8,12 +8,64 @@ To develop these bindings, you’ll need to build them from source. Building req the [macOS](../macos/INSTALL.md#requirements) or [Linux](../linux/README.md#prerequisites) install documentation, depending on the target platform. +First you'll need to install dependencies: + + +#### MacOS + +```bash +brew list cmake || brew install cmake +brew list ccache || brew install ccache +brew list ninja || brew install ninja +brew list pkgconfig || brew install pkgconfig +brew list chargepoint/xcparse/xcparse || brew install chargepoint/xcparse/xcparse +brew list pkg-config || brew install pkg-config +brew list glfw3 || brew install glfw3 +brew list libuv || brew install libuv +pip install ansi2html scipy +``` + +#### Linux + +```bash +sudo apt-get install -y ca-certificates git gzip tar python3-scipy +sudo apt-get install -y ccache cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip +pip3 install cmake-format==0.5.5 +sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev g++-10 +git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache +/usr/sbin/update-ccache-symlinks +``` + +### Compiling + To compile the Node.js bindings and install module dependencies, from the repository root directory, first run: +#### MacOS + +```bash +cmake . -B build -G Ninja -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON +``` + +Then, as a temporary step until build system is changed, run: +```bash +sed -i -e 's/$(ARCHS_STANDARD)/x86_64/g' build/build.ninja +sed -i -e 's/-arch arm64e/-arch x86_64/g' build/build.ninja +``` + +#### Linux + +```bash +cmake . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 ``` -make distclean + +### Building + +Finally, build: +```bash +cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) ``` + If you are rebuilding after time has passed. Then do: diff --git a/platform/node/README.md b/platform/node/README.md index 859172108b1..7bf7efe2ccb 100644 --- a/platform/node/README.md +++ b/platform/node/README.md @@ -1,6 +1,6 @@ -# node-mapbox-gl-native +# @maplibre/maplibre-gl-native -[![NPM](https://nodei.co/npm/@mapbox/mapbox-gl-native.png)](https://npmjs.org/package/@mapbox/mapbox-gl-native) +[![NPM](https://nodei.co/npm/@maplibre/maplibre-gl-native.png)](https://npmjs.org/package/@maplibre/maplibre-gl-native) ## Installing @@ -14,7 +14,7 @@ By default, installs binaries. On these platforms no additional dependencies are Run: ``` -npm install @mapbox/mapbox-gl-native +npm install @maplibre/maplibre-gl-native ``` Other platforms will fall back to a source compile with `make node`; see [DEVELOPING.md](DEVELOPING.md) for details on @@ -32,7 +32,7 @@ npm run test-suite ```js var fs = require('fs'); var path = require('path'); -var mbgl = require('@mapbox/mapbox-gl-native'); +var mbgl = require('@maplibre/maplibre-gl-native'); var sharp = require('sharp'); var options = { @@ -106,7 +106,7 @@ The `request()` method handles a request for a resource. The `ratio` sets the sc } ``` -The `kind` is an enum and defined in [`mbgl.Resource`](https://github.com/mapbox/mapbox-gl-native/blob/master/include/mbgl/storage/resource.hpp): +The `kind` is an enum and defined in [`mbgl.Resource`](https://github.com/maplibre/maplibre-gl-native/blob/master/include/mbgl/storage/resource.hpp): ```json { @@ -150,7 +150,7 @@ This is a very barebones implementation and you'll probably want a better implem A sample implementation that uses [`request`](https://github.com/request/request) to fetch data from a remote source: ```js -var mbgl = require('mapbox-gl-native'); +var mbgl = require('@maplibre/maplibre-gl-native'); var request = require('request'); var map = new mbgl.Map({ @@ -184,10 +184,10 @@ Stylesheets are free to use any protocols, but your implementation of `request` ## Listening for log events -The module imported with `require('mapbox-gl-native')` inherits from [`EventEmitter`](https://nodejs.org/api/events.html), and the `NodeLogObserver` will push log events to this. Log messages can have [`class`](https://github.com/mapbox/mapbox-gl-native/blob/node-v2.1.0/include/mbgl/platform/event.hpp#L43-L60), [`severity`](https://github.com/mapbox/mapbox-gl-native/blob/node-v2.1.0/include/mbgl/platform/event.hpp#L17-L23), `code` ([HTTP status codes](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)), and `text` parameters. +The module imported with `require('maplibre-gl-native')` inherits from [`EventEmitter`](https://nodejs.org/api/events.html), and the `NodeLogObserver` will push log events to this. Log messages can have [`class`](https://github.com/maplibre/maplibre-gl-native/blob/node-v2.1.0/include/mbgl/platform/event.hpp#L43-L60), [`severity`](https://github.com/maplibre/maplibre-gl-native/blob/node-v2.1.0/include/mbgl/platform/event.hpp#L17-L23), `code` ([HTTP status codes](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)), and `text` parameters. ```js -var mbgl = require('mapbox-gl-native'); +var mbgl = require('@maplibre/maplibre-gl-native'); mbgl.on('message', function(msg) { t.ok(msg, 'emits error'); t.equal(msg.class, 'Style'); From b6ba0a47e45823570f0f4b77164033466be05ee4 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 17:41:36 +0000 Subject: [PATCH 39/56] Fix typo --- .github/workflows/node-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index e9339b3b1e5..c07f89377df 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -85,7 +85,7 @@ jobs: env: cache-name: ccache-v1 with: - path: ~/.ccache' + path: ~/.ccache key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} restore-keys: | ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} From 8e14f86f88c6e78b138eb94584b966a78b76b99d Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 19:21:55 +0000 Subject: [PATCH 40/56] Use static_cast --- platform/node/src/node_conversion.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/node/src/node_conversion.hpp b/platform/node/src/node_conversion.hpp index 5096c2695b7..93ecdd57832 100644 --- a/platform/node/src/node_conversion.hpp +++ b/platform/node/src/node_conversion.hpp @@ -87,7 +87,7 @@ class ConversionTraits> { if (!value->IsNumber()) { return {}; } - return (float)Nan::To(value).ToChecked(); + return static_cast(Nan::To(value).ToChecked()); } static optional toDouble(const v8::Local& value) { From a1426d5d31be2e467d08693537cafcd8fd369514 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 19:51:42 +0000 Subject: [PATCH 41/56] Few build tweaks --- .github/workflows/node-ci.yml | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index e9339b3b1e5..37efbef2f33 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -78,7 +78,7 @@ jobs: run: npm ci --ignore-scripts - name: Prepare ccache - run: ccache --clear + run: ccache --clear --set-config cache_dir=~/.ccache - name: Cache ccache uses: actions/cache@v2 @@ -94,9 +94,9 @@ jobs: - name: Clear ccache statistics run: | - ccache --zero-stats - ccache --max-size=2G - ccache --show-stats + ccache --zero-stats --set-config cache_dir=~/.ccache + ccache --max-size=2G --set-config cache_dir=~/.ccache + ccache --show-stats --set-config cache_dir=~/.ccache - name: CMake if: runner.os == 'macOS' @@ -126,9 +126,11 @@ jobs: - name: Pack if: github.ref != 'refs/heads/master' run: | - npm pack - - - name: Publish package - if: github.ref == 'refs/heads/master' - run: | - npm publish + npm pack --dry-run + + # Uncomment to start publishing the package + # @TODO: Figure out the binary distribution method. + # - name: Publish package + # if: github.ref == 'refs/heads/master' + # run: | + # npm publish From 57df26b1f3b7ecfbd1a842c11296fec5deae3150 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 20:34:08 +0000 Subject: [PATCH 42/56] Add a CI badge --- platform/node/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/node/README.md b/platform/node/README.md index 7bf7efe2ccb..7147c3aa34c 100644 --- a/platform/node/README.md +++ b/platform/node/README.md @@ -1,6 +1,7 @@ # @maplibre/maplibre-gl-native [![NPM](https://nodei.co/npm/@maplibre/maplibre-gl-native.png)](https://npmjs.org/package/@maplibre/maplibre-gl-native) +[![node-ci](https://github.com/maplibre/maplibre-gl-native/actions/workflows/node-ci.yml/badge.svg)](https://github.com/maplibre/maplibre-gl-native/actions/workflows/node-ci.yml) ## Installing From 237f7e72f37bd3feaacb319d478bc2296b1e6f5b Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Sun, 23 Jan 2022 21:01:45 +0000 Subject: [PATCH 43/56] Switch Debug/Release based on branch --- .github/workflows/node-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 2043583efae..9c4da39f413 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -31,7 +31,7 @@ jobs: - ubuntu-18.04 runs-on: ${{ matrix.os }} env: - BUILDTYPE: Debug + BUILDTYPE: ${{github.ref == 'refs/heads/master' && 'Release' || 'Debug'}} defaults: run: @@ -101,7 +101,7 @@ jobs: - name: CMake if: runner.os == 'macOS' run: | - cmake . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON + cmake . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=${{github.ref == 'refs/heads/master' && 'Release' || 'Debug'}} -DMBGL_WITH_COVERAGE=ON sed -i -e 's/$(ARCHS_STANDARD)/x86_64/g' build/build.ninja sed -i -e 's/-arch arm64e/-arch x86_64/g' build/build.ninja From ab69c6f676f459166eb11c76e1354485ab53e849 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 10:43:05 +0000 Subject: [PATCH 44/56] Remove python deps --- .github/workflows/node-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 9c4da39f413..4125e4a6abb 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -58,7 +58,6 @@ jobs: brew list pkg-config || brew install pkg-config brew list glfw3 || brew install glfw3 brew list libuv || brew install libuv - pip install ansi2html scipy - name: Install dependencies if: runner.os == 'Linux' From d57758a3cafad66457191ec074938ff9b7b0c6a5 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 10:55:24 +0000 Subject: [PATCH 45/56] Remove few more deps --- .github/workflows/node-ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 4125e4a6abb..e85f765181f 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -54,7 +54,6 @@ jobs: brew list ccache || brew install ccache brew list ninja || brew install ninja brew list pkgconfig || brew install pkgconfig - brew list chargepoint/xcparse/xcparse || brew install chargepoint/xcparse/xcparse brew list pkg-config || brew install pkg-config brew list glfw3 || brew install glfw3 brew list libuv || brew install libuv @@ -68,7 +67,6 @@ jobs: sudo apt-get dist-upgrade -y sudo apt-get install -y ca-certificates git gzip tar python3-scipy sudo apt-get install -y ccache cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip - pip3 install cmake-format==0.5.5 sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev g++-10 git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache /usr/sbin/update-ccache-symlinks From 827f39f5b30e92d6d5b131e159082cb449fafdda Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 11:11:11 +0000 Subject: [PATCH 46/56] rm more deps --- .github/workflows/node-ci.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index e85f765181f..9151f37d2cb 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -53,7 +53,6 @@ jobs: brew list cmake || brew install cmake brew list ccache || brew install ccache brew list ninja || brew install ninja - brew list pkgconfig || brew install pkgconfig brew list pkg-config || brew install pkg-config brew list glfw3 || brew install glfw3 brew list libuv || brew install libuv @@ -63,12 +62,8 @@ jobs: env: DEBIAN_FRONTEND: noninteractive run: | - sudo apt-get update - sudo apt-get dist-upgrade -y - sudo apt-get install -y ca-certificates git gzip tar python3-scipy sudo apt-get install -y ccache cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev g++-10 - git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache /usr/sbin/update-ccache-symlinks - name: npm ci From 6d41d3c9b5a3c5d9bc36a06d5121817b3f709972 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 11:21:59 +0000 Subject: [PATCH 47/56] Remove m0ar stuff --- .github/workflows/node-ci.yml | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 9151f37d2cb..fb783a47328 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -62,8 +62,30 @@ jobs: env: DEBIAN_FRONTEND: noninteractive run: | - sudo apt-get install -y ccache cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip - sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev g++-10 + sudo apt-get install -y + ccache \ + cmake \ + doxygen \ + fonts-noto \ + mesa-common-dev \ + ninja-build \ + pkg-config \ + software-properties-common \ + valgrind \ + xvfb \ + zip \ + libcurl4-openssl-dev \ + libgl1-mesa-dev \ + libgles2-mesa-dev \ + libglfw3-dev \ + libicu-dev \ + libjpeg-turbo8-dev \ + libpng-dev \ + libuv1-dev \ + zlib1g-dev \ + g++-10 \ + libc++-9-dev \ + libc++abi-9-dev /usr/sbin/update-ccache-symlinks - name: npm ci From 5bc523867b0e169c091658829b7a8988df5b6fb3 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 11:23:59 +0000 Subject: [PATCH 48/56] Missing \ --- .github/workflows/node-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index fb783a47328..0304b9e55ea 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -62,7 +62,7 @@ jobs: env: DEBIAN_FRONTEND: noninteractive run: | - sudo apt-get install -y + sudo apt-get install -y \ ccache \ cmake \ doxygen \ From f0d2b18f9dfc41f55a67b0b8d94a721084f66755 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 11:31:13 +0000 Subject: [PATCH 49/56] Cache based on matrix.os --- .github/workflows/node-ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 0304b9e55ea..e31afdf9dc2 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -100,11 +100,11 @@ jobs: cache-name: ccache-v1 with: path: ~/.ccache - key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} + key: ${{ env.cache-name }}-${{ matrix.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }}-${{ github.head_ref }} restore-keys: | - ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} - ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }}-${{ github.ref }} - ${{ env.cache-name }}-${{ runner.os }}-${{ github.job }} + ${{ env.cache-name }}-${{ matrix.os }}-${{ github.job }}-${{ github.ref }}-${{ github.sha }} + ${{ env.cache-name }}-${{ matrix.os }}-${{ github.job }}-${{ github.ref }} + ${{ env.cache-name }}-${{ matrix.os }}-${{ github.job }} - name: Clear ccache statistics run: | From 099b2d458bbc14b94d76980c006e2e1ae598153f Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 12:41:12 +0000 Subject: [PATCH 50/56] Use env for build type var --- .github/workflows/node-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index e31afdf9dc2..2fb42575803 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -115,7 +115,7 @@ jobs: - name: CMake if: runner.os == 'macOS' run: | - cmake . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=${{github.ref == 'refs/heads/master' && 'Release' || 'Debug'}} -DMBGL_WITH_COVERAGE=ON + cmake . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=${{ env.BUILDTYPE }} -DMBGL_WITH_COVERAGE=ON sed -i -e 's/$(ARCHS_STANDARD)/x86_64/g' build/build.ninja sed -i -e 's/-arch arm64e/-arch x86_64/g' build/build.ninja From 459a09a4293f2fdd1e81d9bb211ee1c5cc55f1cf Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 12:49:59 +0000 Subject: [PATCH 51/56] Remove zip, valgrind, fonts and doxygen --- .github/workflows/node-ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 2fb42575803..02403a8d768 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -65,15 +65,11 @@ jobs: sudo apt-get install -y \ ccache \ cmake \ - doxygen \ - fonts-noto \ mesa-common-dev \ ninja-build \ pkg-config \ software-properties-common \ - valgrind \ xvfb \ - zip \ libcurl4-openssl-dev \ libgl1-mesa-dev \ libgles2-mesa-dev \ From 84715ee1dde1d915220602d4fad1441cce5a1215 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 13:00:30 +0000 Subject: [PATCH 52/56] Remove more deps, yay --- .github/workflows/node-ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 02403a8d768..5a356627de5 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -65,16 +65,12 @@ jobs: sudo apt-get install -y \ ccache \ cmake \ - mesa-common-dev \ ninja-build \ pkg-config \ - software-properties-common \ xvfb \ - libcurl4-openssl-dev \ libgl1-mesa-dev \ libgles2-mesa-dev \ libglfw3-dev \ - libicu-dev \ libjpeg-turbo8-dev \ libpng-dev \ libuv1-dev \ From 067cfc1f6915d31f67d60fc31b5b2c0caa064595 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 13:03:49 +0000 Subject: [PATCH 53/56] We need curl --- .github/workflows/node-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 5a356627de5..4a319955e4a 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -68,6 +68,7 @@ jobs: ninja-build \ pkg-config \ xvfb \ + libcurl4-openssl-dev \ libgl1-mesa-dev \ libgles2-mesa-dev \ libglfw3-dev \ From acb8cc9fecd31d774591e4e7fb3ce1907030c967 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 13:08:50 +0000 Subject: [PATCH 54/56] Remove some gfx deps --- .github/workflows/node-ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 4a319955e4a..7248f2acc30 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -72,8 +72,6 @@ jobs: libgl1-mesa-dev \ libgles2-mesa-dev \ libglfw3-dev \ - libjpeg-turbo8-dev \ - libpng-dev \ libuv1-dev \ zlib1g-dev \ g++-10 \ From d40b2c9ca66836b227afcdb627140aff348407da Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 13:12:40 +0000 Subject: [PATCH 55/56] No more mesa and zlib --- .github/workflows/node-ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 7248f2acc30..29442631d88 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -69,11 +69,8 @@ jobs: pkg-config \ xvfb \ libcurl4-openssl-dev \ - libgl1-mesa-dev \ - libgles2-mesa-dev \ libglfw3-dev \ libuv1-dev \ - zlib1g-dev \ g++-10 \ libc++-9-dev \ libc++abi-9-dev From 711f72f50dc1217f6b17c32b9d33212098aa41b2 Mon Sep 17 00:00:00 2001 From: Justas Brazauskas Date: Wed, 26 Jan 2022 13:17:59 +0000 Subject: [PATCH 56/56] Update instructions --- platform/node/DEVELOPING.md | 37 +++++++++++++++++++++---------------- platform/node/README.md | 2 ++ 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/platform/node/DEVELOPING.md b/platform/node/DEVELOPING.md index dc42e91a83b..33bd7adba9f 100644 --- a/platform/node/DEVELOPING.md +++ b/platform/node/DEVELOPING.md @@ -14,25 +14,30 @@ First you'll need to install dependencies: #### MacOS ```bash -brew list cmake || brew install cmake -brew list ccache || brew install ccache -brew list ninja || brew install ninja -brew list pkgconfig || brew install pkgconfig -brew list chargepoint/xcparse/xcparse || brew install chargepoint/xcparse/xcparse -brew list pkg-config || brew install pkg-config -brew list glfw3 || brew install glfw3 -brew list libuv || brew install libuv -pip install ansi2html scipy +brew install \ + cmake \ + ccache \ + ninja \ + pkg-config \ + glfw3 \ + libuv ``` -#### Linux +#### Linux (Ubuntu) ```bash -sudo apt-get install -y ca-certificates git gzip tar python3-scipy -sudo apt-get install -y ccache cmake doxygen fonts-noto g++-10 libc++-9-dev libc++abi-9-dev mesa-common-dev ninja-build pkg-config python3-bs4 python3-pip python3-requests python3-git python3-github software-properties-common valgrind xvfb zip -pip3 install cmake-format==0.5.5 -sudo apt-get install -y libcurl4-openssl-dev libgl1-mesa-dev libgles2-mesa-dev libglfw3-dev libicu-dev libjpeg-turbo8-dev libpng-dev libuv1-dev zlib1g-dev g++-10 -git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty && cd /tmp/bloaty && git checkout 3cf5c3feca15 && cmake . && make -j $(nproc) bloaty && cp bloaty /usr/local/bin/ && rm -rf /tmp/bloaty && rm -rf ~/.ccache +sudo apt-get install -y \ + ccache \ + cmake \ + ninja-build \ + pkg-config \ + xvfb \ + libcurl4-openssl-dev \ + libglfw3-dev \ + libuv1-dev \ + g++-10 \ + libc++-9-dev \ + libc++abi-9-dev /usr/sbin/update-ccache-symlinks ``` @@ -43,7 +48,7 @@ To compile the Node.js bindings and install module dependencies, from the reposi #### MacOS ```bash -cmake . -B build -G Ninja -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON +cmake . -B build -G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -DMBGL_WITH_COVERAGE=ON ``` Then, as a temporary step until build system is changed, run: diff --git a/platform/node/README.md b/platform/node/README.md index 7147c3aa34c..327a3dd6143 100644 --- a/platform/node/README.md +++ b/platform/node/README.md @@ -5,6 +5,8 @@ ## Installing +#### :warn: This package isn't live yet. + Requires a modern C++ runtime that supports C++14. By default, installs binaries. On these platforms no additional dependencies are needed.