@@ -207,11 +209,16 @@ export const IndexView = observer(
@@ -250,8 +257,11 @@ export const IndexView = observer(
program_data={data}
onUpdate={(id, data) => store.updateProgram(id, data)}
onCreate={(new_program_data) => store.saveNewProgram(new_program_data)}
- sectorOptions={sectorFilterOptions}
+ idaaSectorOptions={idaaSectorFilterOptions}
+ idaaOutcomeThemesOptions={idaaOutcomeThemesOptions}
countryOptions={allCountryOptions}
+ fundingStatusOptions={fundingStatusOptions}
+ isLoading={store.saving}
errors={store.editing_errors} />
)}
diff --git a/js/pages/tola_management_pages/user/components/edit_user_profile.js b/js/pages/tola_management_pages/user/components/edit_user_profile.js
index 030055f1e..73451333e 100644
--- a/js/pages/tola_management_pages/user/components/edit_user_profile.js
+++ b/js/pages/tola_management_pages/user/components/edit_user_profile.js
@@ -121,7 +121,8 @@ export default class EditUserProfile extends React.Component {
}
resetForm() {
- const selected_organization = this.state.organization_listing.find(o => o.value == this.state.original_user_data.organization_id)
+ // For ticket #1445 reseting the organization_id to null will display the placeholder for react-select
+ const selected_organization = this.state.original_user_data.organization_id == null ? null : this.state.organization_listing.find(o => o.value == this.state.original_user_data.organization_id);
this.setState({
managed_user_data: this.state.original_user_data,
selected_organization
diff --git a/package-lock.json b/package-lock.json
index 39013fa11..94ab63246 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,6 +4,15 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
"@babel/code-frame": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
@@ -13,137 +22,142 @@
}
},
"@babel/compat-data": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.5.tgz",
- "integrity": "sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg=="
+ "version": "7.18.8",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz",
+ "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ=="
},
"@babel/core": {
- "version": "7.12.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz",
- "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.1",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.1",
- "@babel/parser": "^7.12.3",
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.12.1",
- "@babel/types": "^7.12.1",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz",
+ "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==",
+ "requires": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@babel/helper-compilation-targets": "^7.18.9",
+ "@babel/helper-module-transforms": "^7.18.9",
+ "@babel/helpers": "^7.18.9",
+ "@babel/parser": "^7.18.9",
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.1",
+ "semver": "^6.3.0"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/highlight": "^7.18.6"
}
},
"@babel/generator": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
- "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz",
+ "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==",
"requires": {
- "@babel/types": "^7.12.5",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
+ "@babel/types": "^7.18.9",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
}
},
"@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
- "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
"requires": {
- "@babel/types": "^7.11.0"
+ "@babel/types": "^7.18.6"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
},
"@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
"requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
}
},
"@babel/traverse": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
- "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/parser": "^7.12.5",
- "@babel/types": "^7.12.5",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz",
+ "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==",
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.18.9",
+ "@babel/types": "^7.18.9",
"debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
+ "globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
},
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "json5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA=="
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
}
}
},
@@ -178,361 +192,212 @@
}
},
"@babel/helper-annotate-as-pure": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
- "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+ "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
"requires": {
- "@babel/types": "^7.10.4"
+ "@babel/types": "^7.18.6"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
- "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
- "requires": {
- "@babel/helper-explode-assignable-expression": "^7.10.4",
- "@babel/types": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
- },
- "@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
- "to-fast-properties": "^2.0.0"
- }
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
- }
- }
- },
- "@babel/helper-builder-react-jsx": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz",
- "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz",
+ "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/helper-explode-assignable-expression": "^7.18.6",
+ "@babel/types": "^7.18.9"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
- "@babel/helper-builder-react-jsx-experimental": {
- "version": "7.12.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz",
- "integrity": "sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==",
+ "@babel/helper-compilation-targets": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
+ "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.10.4",
- "@babel/helper-module-imports": "^7.12.1",
- "@babel/types": "^7.12.1"
+ "@babel/compat-data": "^7.18.8",
+ "@babel/helper-validator-option": "^7.18.6",
+ "browserslist": "^4.20.2",
+ "semver": "^6.3.0"
},
"dependencies": {
- "@babel/helper-module-imports": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
- "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
- "requires": {
- "@babel/types": "^7.12.5"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
- },
- "@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
- "to-fast-properties": "^2.0.0"
- }
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
}
}
},
- "@babel/helper-compilation-targets": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz",
- "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==",
- "requires": {
- "@babel/compat-data": "^7.12.5",
- "@babel/helper-validator-option": "^7.12.1",
- "browserslist": "^4.14.5",
- "semver": "^5.5.0"
- }
- },
"@babel/helper-create-class-features-plugin": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz",
- "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz",
+ "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==",
"requires": {
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-member-expression-to-functions": "^7.12.1",
- "@babel/helper-optimise-call-expression": "^7.10.4",
- "@babel/helper-replace-supers": "^7.12.1",
- "@babel/helper-split-export-declaration": "^7.10.4"
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-member-expression-to-functions": "^7.18.9",
+ "@babel/helper-optimise-call-expression": "^7.18.6",
+ "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-split-export-declaration": "^7.18.6"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/highlight": "^7.18.6"
}
},
"@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
"requires": {
- "@babel/types": "^7.10.4"
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
- "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
"requires": {
- "@babel/types": "^7.11.0"
+ "@babel/types": "^7.18.6"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
},
"@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
"requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
}
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
"@babel/helper-create-regexp-features-plugin": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz",
- "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
+ "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.10.4",
- "@babel/helper-regex": "^7.10.4",
- "regexpu-core": "^4.7.1"
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "regexpu-core": "^5.1.0"
}
},
- "@babel/helper-define-map": {
- "version": "7.10.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz",
- "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==",
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz",
+ "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==",
"requires": {
- "@babel/helper-function-name": "^7.10.4",
- "@babel/types": "^7.10.5",
- "lodash": "^4.17.19"
+ "@babel/helper-compilation-targets": "^7.17.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ=="
- },
- "@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
- "to-fast-properties": "^2.0.0"
- }
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
},
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
}
}
},
+ "@babel/helper-environment-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg=="
+ },
"@babel/helper-explode-assignable-expression": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz",
- "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
+ "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
"requires": {
- "@babel/types": "^7.12.1"
+ "@babel/types": "^7.18.6"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
@@ -632,62 +497,50 @@
}
},
"@babel/helper-hoist-variables": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
- "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
"requires": {
- "@babel/types": "^7.10.4"
+ "@babel/types": "^7.18.6"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz",
- "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz",
+ "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==",
"requires": {
- "@babel/types": "^7.12.1"
+ "@babel/types": "^7.18.9"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
@@ -700,163 +553,152 @@
}
},
"@babel/helper-module-transforms": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz",
- "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
+ "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
"requires": {
- "@babel/helper-module-imports": "^7.12.1",
- "@babel/helper-replace-supers": "^7.12.1",
- "@babel/helper-simple-access": "^7.12.1",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/helper-validator-identifier": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.12.1",
- "@babel/types": "^7.12.1",
- "lodash": "^4.17.19"
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-simple-access": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/highlight": "^7.18.6"
}
},
"@babel/generator": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
- "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz",
+ "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==",
"requires": {
- "@babel/types": "^7.12.5",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
+ "@babel/types": "^7.18.9",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
}
},
"@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
"requires": {
- "@babel/types": "^7.10.4"
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
}
},
"@babel/helper-module-imports": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
- "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
"requires": {
- "@babel/types": "^7.12.5"
+ "@babel/types": "^7.18.6"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
- "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
"requires": {
- "@babel/types": "^7.11.0"
+ "@babel/types": "^7.18.6"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
},
"@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
"requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
}
},
"@babel/traverse": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
- "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/parser": "^7.12.5",
- "@babel/types": "^7.12.5",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz",
+ "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==",
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.18.9",
+ "@babel/types": "^7.18.9",
"debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
+ "globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
},
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
}
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
- "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
+ "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
"requires": {
- "@babel/types": "^7.10.4"
+ "@babel/types": "^7.18.6"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
@@ -865,228 +707,193 @@
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
"integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
},
- "@babel/helper-regex": {
- "version": "7.10.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz",
- "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==",
- "requires": {
- "lodash": "^4.17.19"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
- }
- }
- },
"@babel/helper-remap-async-to-generator": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz",
- "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
+ "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.10.4",
- "@babel/helper-wrap-function": "^7.10.4",
- "@babel/types": "^7.12.1"
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-wrap-function": "^7.18.9",
+ "@babel/types": "^7.18.9"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
"@babel/helper-replace-supers": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
- "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
+ "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.12.1",
- "@babel/helper-optimise-call-expression": "^7.10.4",
- "@babel/traverse": "^7.12.5",
- "@babel/types": "^7.12.5"
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-member-expression-to-functions": "^7.18.9",
+ "@babel/helper-optimise-call-expression": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/highlight": "^7.18.6"
}
},
"@babel/generator": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
- "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz",
+ "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==",
"requires": {
- "@babel/types": "^7.12.5",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
+ "@babel/types": "^7.18.9",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
}
},
"@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
"requires": {
- "@babel/types": "^7.10.4"
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
- "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
"requires": {
- "@babel/types": "^7.11.0"
+ "@babel/types": "^7.18.6"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
},
"@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
"requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
}
},
"@babel/traverse": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
- "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/parser": "^7.12.5",
- "@babel/types": "^7.12.5",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz",
+ "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==",
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.18.9",
+ "@babel/types": "^7.18.9",
"debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
+ "globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
},
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
}
}
},
"@babel/helper-simple-access": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz",
- "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
+ "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
"requires": {
- "@babel/types": "^7.12.1"
+ "@babel/types": "^7.18.6"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
"@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz",
- "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
+ "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
"requires": {
- "@babel/types": "^7.12.1"
+ "@babel/types": "^7.18.9"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
@@ -1124,242 +931,234 @@
"integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/helper-validator-option": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz",
- "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
+ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw=="
},
"@babel/helper-wrap-function": {
- "version": "7.12.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz",
- "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz",
+ "integrity": "sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ==",
"requires": {
- "@babel/helper-function-name": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/highlight": "^7.18.6"
}
},
"@babel/generator": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
- "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz",
+ "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==",
"requires": {
- "@babel/types": "^7.12.5",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
+ "@babel/types": "^7.18.9",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
}
},
"@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
- "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
"requires": {
- "@babel/types": "^7.11.0"
+ "@babel/types": "^7.18.6"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
},
"@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
"requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
}
},
"@babel/traverse": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
- "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/parser": "^7.12.5",
- "@babel/types": "^7.12.5",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz",
+ "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==",
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.18.9",
+ "@babel/types": "^7.18.9",
"debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
+ "globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
},
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
}
}
},
"@babel/helpers": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz",
- "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
+ "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
"requires": {
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.12.5",
- "@babel/types": "^7.12.5"
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/highlight": "^7.18.6"
}
},
"@babel/generator": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
- "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
- "requires": {
- "@babel/types": "^7.12.5",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz",
+ "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/types": "^7.18.9",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
}
},
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
+ "@babel/helper-function-name": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
"requires": {
- "@babel/types": "^7.10.4"
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
- "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
"requires": {
- "@babel/types": "^7.11.0"
+ "@babel/types": "^7.18.6"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
},
"@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
"requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
}
},
"@babel/traverse": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
- "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/parser": "^7.12.5",
- "@babel/types": "^7.12.5",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz",
+ "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==",
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.18.9",
+ "@babel/types": "^7.18.9",
"debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
+ "globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
},
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
}
}
},
@@ -1379,247 +1178,325 @@
"integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==",
"dev": true
},
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
+ "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ }
+ }
+ },
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz",
+ "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9",
+ "@babel/plugin-proposal-optional-chaining": "^7.18.9"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ }
+ }
+ },
"@babel/plugin-proposal-async-generator-functions": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz",
- "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz",
+ "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-remap-async-to-generator": "^7.12.1",
- "@babel/plugin-syntax-async-generators": "^7.8.0"
+ "@babel/helper-environment-visitor": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-remap-async-to-generator": "^7.18.6",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-class-properties": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz",
- "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
+ "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-create-class-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ }
+ }
+ },
+ "@babel/plugin-proposal-class-static-block": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz",
+ "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==",
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-decorators": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz",
- "integrity": "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.9.tgz",
+ "integrity": "sha512-KD7zDNaD14CRpjQjVbV4EnH9lsKYlcpUrhZH37ei2IY+AlXrfAPy5pTmRUE4X6X1k8EsKXPraykxeaogqQvSGA==",
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-decorators": "^7.12.1"
+ "@babel/helper-create-class-features-plugin": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/plugin-syntax-decorators": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
+ },
+ "@babel/types": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "to-fast-properties": "^2.0.0"
+ }
}
}
},
"@babel/plugin-proposal-dynamic-import": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz",
- "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
+ "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-dynamic-import": "^7.8.0"
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-export-namespace-from": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz",
- "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz",
+ "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.18.9",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-json-strings": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz",
- "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
+ "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-json-strings": "^7.8.0"
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz",
- "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz",
+ "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.18.9",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz",
- "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
+ "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-numeric-separator": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.5.tgz",
- "integrity": "sha512-UiAnkKuOrCyjZ3sYNHlRlfuZJbBHknMQ9VMwVeX97Ofwx7RpD6gS2HfqTCh8KNUQgcOm8IKt103oR4KIjh7Q8g==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
+ "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.18.6",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
- "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
+ "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "@babel/plugin-transform-parameters": "^7.12.1"
+ "@babel/compat-data": "^7.18.8",
+ "@babel/helper-compilation-targets": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.18.8"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz",
- "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
+ "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-optional-chaining": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz",
- "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz",
+ "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
- "@babel/plugin-syntax-optional-chaining": "^7.8.0"
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-private-methods": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz",
- "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
+ "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-create-class-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ }
+ }
+ },
+ "@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
+ "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-create-class-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz",
- "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
@@ -1657,18 +1534,33 @@
}
}
},
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ }
+ }
+ },
"@babel/plugin-syntax-decorators": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz",
- "integrity": "sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz",
+ "integrity": "sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
@@ -1688,6 +1580,21 @@
"@babel/helper-plugin-utils": "^7.8.3"
}
},
+ "@babel/plugin-syntax-import-assertions": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
+ "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ }
+ }
+ },
"@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
@@ -1714,17 +1621,17 @@
}
},
"@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
+ "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
@@ -1732,7 +1639,6 @@
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -1740,8 +1646,7 @@
"@babel/helper-plugin-utils": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
}
}
},
@@ -1757,7 +1662,6 @@
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -1765,8 +1669,7 @@
"@babel/helper-plugin-utils": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
}
}
},
@@ -1794,10 +1697,26 @@
"@babel/helper-plugin-utils": "^7.8.0"
}
},
+ "@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ }
+ }
+ },
"@babel/plugin-syntax-top-level-await": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz",
"integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==",
+ "dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -1805,778 +1724,743 @@
"@babel/helper-plugin-utils": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
+ "dev": true
}
}
},
"@babel/plugin-transform-arrow-functions": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz",
- "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz",
+ "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-async-to-generator": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz",
- "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz",
+ "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==",
"requires": {
- "@babel/helper-module-imports": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-remap-async-to-generator": "^7.12.1"
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-remap-async-to-generator": "^7.18.6"
},
"dependencies": {
"@babel/helper-module-imports": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
- "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
"requires": {
- "@babel/types": "^7.12.5"
+ "@babel/types": "^7.18.6"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
"@babel/plugin-transform-block-scoped-functions": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz",
- "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
+ "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz",
- "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
+ "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.9"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-classes": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz",
- "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.10.4",
- "@babel/helper-define-map": "^7.10.4",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-optimise-call-expression": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-replace-supers": "^7.12.1",
- "@babel/helper-split-export-declaration": "^7.10.4",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
+ "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-optimise-call-expression": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-split-export-declaration": "^7.18.6",
"globals": "^11.1.0"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/highlight": "^7.18.6"
}
},
"@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
"requires": {
- "@babel/types": "^7.10.4"
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
},
"@babel/helper-split-export-declaration": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
- "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
"requires": {
- "@babel/types": "^7.11.0"
+ "@babel/types": "^7.18.6"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
},
"@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
"requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
}
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
"@babel/plugin-transform-computed-properties": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz",
- "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz",
+ "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.9"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz",
- "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz",
+ "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.9"
},
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-dotall-regex": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz",
- "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
+ "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-duplicate-keys": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz",
- "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
+ "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.9"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-exponentiation-operator": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz",
- "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
+ "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
"requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz",
- "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==",
+ "version": "7.18.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz",
+ "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz",
- "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
+ "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
"requires": {
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-compilation-targets": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.18.9"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/highlight": "^7.18.6"
}
},
"@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
"requires": {
- "@babel/types": "^7.10.4"
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
},
"@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
"requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
}
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
}
}
},
"@babel/plugin-transform-literals": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz",
- "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
+ "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.9"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-member-expression-literals": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz",
- "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
+ "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-modules-amd": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz",
- "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
+ "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
"requires": {
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-module-transforms": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz",
- "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
+ "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
"requires": {
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-simple-access": "^7.12.1",
+ "@babel/helper-module-transforms": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-simple-access": "^7.18.6",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz",
- "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==",
- "requires": {
- "@babel/helper-hoist-variables": "^7.10.4",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-validator-identifier": "^7.10.4",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
+ "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-module-transforms": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-validator-identifier": "^7.18.6",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
}
}
},
"@babel/plugin-transform-modules-umd": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz",
- "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
+ "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
"requires": {
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-module-transforms": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz",
- "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
+ "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.12.1"
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ }
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz",
- "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
+ "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-object-super": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz",
- "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
+ "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-replace-supers": "^7.12.1"
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-replace-supers": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz",
- "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==",
+ "version": "7.18.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
+ "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-property-literals": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz",
- "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
+ "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-react-display-name": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz",
- "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz",
+ "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-react-jsx": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.5.tgz",
- "integrity": "sha512-2xkcPqqrYiOQgSlM/iwto1paPijjsDbUynN13tI6bosDz/jOW3CRzYguIE8wKX32h+msbBM22Dv5fwrFkUOZjQ==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz",
+ "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==",
"requires": {
- "@babel/helper-builder-react-jsx": "^7.10.4",
- "@babel/helper-builder-react-jsx-experimental": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-jsx": "^7.12.1"
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-jsx": "^7.18.6",
+ "@babel/types": "^7.18.6"
},
"dependencies": {
+ "@babel/helper-module-imports": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
+ },
+ "@babel/types": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "to-fast-properties": "^2.0.0"
+ }
}
}
},
"@babel/plugin-transform-react-jsx-development": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.5.tgz",
- "integrity": "sha512-1JJusg3iPgsZDthyWiCr3KQiGs31ikU/mSf2N2dSYEAO0GEImmVUbWf0VoSDGDFTAn5Dj4DUiR6SdIXHY7tELA==",
- "requires": {
- "@babel/helper-builder-react-jsx-experimental": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-jsx": "^7.12.1"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-transform-react-jsx-self": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz",
- "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
+ "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
+ "@babel/plugin-transform-react-jsx": "^7.18.6"
}
},
- "@babel/plugin-transform-react-jsx-source": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz",
- "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==",
+ "@babel/plugin-transform-react-pure-annotations": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
+ "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
- "@babel/plugin-transform-react-pure-annotations": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz",
- "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==",
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
+ "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "regenerator-transform": "^0.15.0"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
- "@babel/plugin-transform-regenerator": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz",
- "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==",
- "requires": {
- "regenerator-transform": "^0.14.2"
- }
- },
"@babel/plugin-transform-reserved-words": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz",
- "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
+ "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-shorthand-properties": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz",
- "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
+ "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-spread": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz",
- "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
+ "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-sticky-regex": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz",
- "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
+ "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-regex": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz",
- "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
+ "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.9"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-typeof-symbol": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz",
- "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
+ "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.9"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-unicode-escapes": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz",
- "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz",
+ "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz",
- "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
+ "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
@@ -2590,141 +2474,133 @@
}
},
"@babel/preset-env": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz",
- "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==",
- "requires": {
- "@babel/compat-data": "^7.12.1",
- "@babel/helper-compilation-targets": "^7.12.1",
- "@babel/helper-module-imports": "^7.12.1",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-validator-option": "^7.12.1",
- "@babel/plugin-proposal-async-generator-functions": "^7.12.1",
- "@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-dynamic-import": "^7.12.1",
- "@babel/plugin-proposal-export-namespace-from": "^7.12.1",
- "@babel/plugin-proposal-json-strings": "^7.12.1",
- "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
- "@babel/plugin-proposal-numeric-separator": "^7.12.1",
- "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
- "@babel/plugin-proposal-optional-catch-binding": "^7.12.1",
- "@babel/plugin-proposal-optional-chaining": "^7.12.1",
- "@babel/plugin-proposal-private-methods": "^7.12.1",
- "@babel/plugin-proposal-unicode-property-regex": "^7.12.1",
- "@babel/plugin-syntax-async-generators": "^7.8.0",
- "@babel/plugin-syntax-class-properties": "^7.12.1",
- "@babel/plugin-syntax-dynamic-import": "^7.8.0",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.9.tgz",
+ "integrity": "sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg==",
+ "requires": {
+ "@babel/compat-data": "^7.18.8",
+ "@babel/helper-compilation-targets": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-validator-option": "^7.18.6",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
+ "@babel/plugin-proposal-async-generator-functions": "^7.18.6",
+ "@babel/plugin-proposal-class-properties": "^7.18.6",
+ "@babel/plugin-proposal-class-static-block": "^7.18.6",
+ "@babel/plugin-proposal-dynamic-import": "^7.18.6",
+ "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
+ "@babel/plugin-proposal-json-strings": "^7.18.6",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
+ "@babel/plugin-proposal-numeric-separator": "^7.18.6",
+ "@babel/plugin-proposal-object-rest-spread": "^7.18.9",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
+ "@babel/plugin-proposal-optional-chaining": "^7.18.9",
+ "@babel/plugin-proposal-private-methods": "^7.18.6",
+ "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.0",
+ "@babel/plugin-syntax-import-assertions": "^7.18.6",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
"@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
- "@babel/plugin-syntax-optional-chaining": "^7.8.0",
- "@babel/plugin-syntax-top-level-await": "^7.12.1",
- "@babel/plugin-transform-arrow-functions": "^7.12.1",
- "@babel/plugin-transform-async-to-generator": "^7.12.1",
- "@babel/plugin-transform-block-scoped-functions": "^7.12.1",
- "@babel/plugin-transform-block-scoping": "^7.12.1",
- "@babel/plugin-transform-classes": "^7.12.1",
- "@babel/plugin-transform-computed-properties": "^7.12.1",
- "@babel/plugin-transform-destructuring": "^7.12.1",
- "@babel/plugin-transform-dotall-regex": "^7.12.1",
- "@babel/plugin-transform-duplicate-keys": "^7.12.1",
- "@babel/plugin-transform-exponentiation-operator": "^7.12.1",
- "@babel/plugin-transform-for-of": "^7.12.1",
- "@babel/plugin-transform-function-name": "^7.12.1",
- "@babel/plugin-transform-literals": "^7.12.1",
- "@babel/plugin-transform-member-expression-literals": "^7.12.1",
- "@babel/plugin-transform-modules-amd": "^7.12.1",
- "@babel/plugin-transform-modules-commonjs": "^7.12.1",
- "@babel/plugin-transform-modules-systemjs": "^7.12.1",
- "@babel/plugin-transform-modules-umd": "^7.12.1",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1",
- "@babel/plugin-transform-new-target": "^7.12.1",
- "@babel/plugin-transform-object-super": "^7.12.1",
- "@babel/plugin-transform-parameters": "^7.12.1",
- "@babel/plugin-transform-property-literals": "^7.12.1",
- "@babel/plugin-transform-regenerator": "^7.12.1",
- "@babel/plugin-transform-reserved-words": "^7.12.1",
- "@babel/plugin-transform-shorthand-properties": "^7.12.1",
- "@babel/plugin-transform-spread": "^7.12.1",
- "@babel/plugin-transform-sticky-regex": "^7.12.1",
- "@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/plugin-transform-typeof-symbol": "^7.12.1",
- "@babel/plugin-transform-unicode-escapes": "^7.12.1",
- "@babel/plugin-transform-unicode-regex": "^7.12.1",
- "@babel/preset-modules": "^0.1.3",
- "@babel/types": "^7.12.1",
- "core-js-compat": "^3.6.2",
- "semver": "^5.5.0"
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-transform-arrow-functions": "^7.18.6",
+ "@babel/plugin-transform-async-to-generator": "^7.18.6",
+ "@babel/plugin-transform-block-scoped-functions": "^7.18.6",
+ "@babel/plugin-transform-block-scoping": "^7.18.9",
+ "@babel/plugin-transform-classes": "^7.18.9",
+ "@babel/plugin-transform-computed-properties": "^7.18.9",
+ "@babel/plugin-transform-destructuring": "^7.18.9",
+ "@babel/plugin-transform-dotall-regex": "^7.18.6",
+ "@babel/plugin-transform-duplicate-keys": "^7.18.9",
+ "@babel/plugin-transform-exponentiation-operator": "^7.18.6",
+ "@babel/plugin-transform-for-of": "^7.18.8",
+ "@babel/plugin-transform-function-name": "^7.18.9",
+ "@babel/plugin-transform-literals": "^7.18.9",
+ "@babel/plugin-transform-member-expression-literals": "^7.18.6",
+ "@babel/plugin-transform-modules-amd": "^7.18.6",
+ "@babel/plugin-transform-modules-commonjs": "^7.18.6",
+ "@babel/plugin-transform-modules-systemjs": "^7.18.9",
+ "@babel/plugin-transform-modules-umd": "^7.18.6",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6",
+ "@babel/plugin-transform-new-target": "^7.18.6",
+ "@babel/plugin-transform-object-super": "^7.18.6",
+ "@babel/plugin-transform-parameters": "^7.18.8",
+ "@babel/plugin-transform-property-literals": "^7.18.6",
+ "@babel/plugin-transform-regenerator": "^7.18.6",
+ "@babel/plugin-transform-reserved-words": "^7.18.6",
+ "@babel/plugin-transform-shorthand-properties": "^7.18.6",
+ "@babel/plugin-transform-spread": "^7.18.9",
+ "@babel/plugin-transform-sticky-regex": "^7.18.6",
+ "@babel/plugin-transform-template-literals": "^7.18.9",
+ "@babel/plugin-transform-typeof-symbol": "^7.18.9",
+ "@babel/plugin-transform-unicode-escapes": "^7.18.6",
+ "@babel/plugin-transform-unicode-regex": "^7.18.6",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.18.9",
+ "babel-plugin-polyfill-corejs2": "^0.3.1",
+ "babel-plugin-polyfill-corejs3": "^0.5.2",
+ "babel-plugin-polyfill-regenerator": "^0.3.1",
+ "core-js-compat": "^3.22.1",
+ "semver": "^6.3.0"
},
"dependencies": {
- "@babel/helper-module-imports": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
- "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
- "requires": {
- "@babel/types": "^7.12.5"
- }
- },
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
},
"@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
},
"@babel/plugin-syntax-class-properties": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz",
- "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.12.13"
}
},
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.14.5"
}
},
"@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
}
},
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
}
}
},
"@babel/preset-modules": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
- "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
@@ -2734,23 +2610,22 @@
}
},
"@babel/preset-react": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.5.tgz",
- "integrity": "sha512-jcs++VPrgyFehkMezHtezS2BpnUlR7tQFAyesJn1vGTO9aTFZrgIQrA5YydlTwxbcjMwkFY6i04flCigRRr3GA==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz",
+ "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-transform-react-display-name": "^7.12.1",
- "@babel/plugin-transform-react-jsx": "^7.12.5",
- "@babel/plugin-transform-react-jsx-development": "^7.12.5",
- "@babel/plugin-transform-react-jsx-self": "^7.12.1",
- "@babel/plugin-transform-react-jsx-source": "^7.12.1",
- "@babel/plugin-transform-react-pure-annotations": "^7.12.1"
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-validator-option": "^7.18.6",
+ "@babel/plugin-transform-react-display-name": "^7.18.6",
+ "@babel/plugin-transform-react-jsx": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-development": "^7.18.6",
+ "@babel/plugin-transform-react-pure-annotations": "^7.18.6"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
}
}
},
@@ -2914,9 +2789,9 @@
}
},
"@emotion/core": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.1.1.tgz",
- "integrity": "sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA==",
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.3.1.tgz",
+ "integrity": "sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==",
"requires": {
"@babel/runtime": "^7.5.5",
"@emotion/cache": "^10.0.27",
@@ -3003,9 +2878,9 @@
"integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw=="
},
"babel-plugin-emotion": {
- "version": "10.0.33",
- "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz",
- "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz",
+ "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==",
"requires": {
"@babel/helper-module-imports": "^7.0.0",
"@emotion/hash": "0.8.0",
@@ -3068,33 +2943,50 @@
"integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
},
"@fortawesome/fontawesome-common-types": {
- "version": "0.2.32",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.32.tgz",
- "integrity": "sha512-ux2EDjKMpcdHBVLi/eWZynnPxs0BtFVXJkgHIxXRl+9ZFaHPvYamAfCzeeQFqHRjuJtX90wVnMRaMQAAlctz3w=="
+ "version": "0.2.36",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz",
+ "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg=="
},
"@fortawesome/fontawesome-svg-core": {
- "version": "1.2.32",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.32.tgz",
- "integrity": "sha512-XjqyeLCsR/c/usUpdWcOdVtWFVjPbDFBTQkn2fQRrWhhUoxriQohO2RWDxLyUM8XpD+Zzg5xwJ8gqTYGDLeGaQ==",
+ "version": "1.2.36",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz",
+ "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==",
"requires": {
- "@fortawesome/fontawesome-common-types": "^0.2.32"
+ "@fortawesome/fontawesome-common-types": "^0.2.36"
}
},
"@fortawesome/free-solid-svg-icons": {
- "version": "5.15.1",
- "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.1.tgz",
- "integrity": "sha512-EFMuKtzRMNbvjab/SvJBaOOpaqJfdSap/Nl6hst7CgrJxwfORR1drdTV6q1Ib/JVzq4xObdTDcT6sqTaXMqfdg==",
+ "version": "5.15.4",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz",
+ "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "^0.2.36"
+ }
+ },
+ "@fortawesome/react-fontawesome": {
+ "version": "0.1.19",
+ "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.19.tgz",
+ "integrity": "sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ==",
"requires": {
- "@fortawesome/fontawesome-common-types": "^0.2.32"
+ "prop-types": "^15.8.1"
+ },
+ "dependencies": {
+ "prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ }
}
},
- "@fortawesome/react-fontawesome": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.12.tgz",
- "integrity": "sha512-kV6HtqotM3K4YIXlTVvomuIi6QgGCvYm++ImyEx2wwgmSppZ6kbbA29ASwjAUBD63j2OFU0yoxeXpZkjrrX0qQ==",
- "requires": {
- "prop-types": "^15.7.2"
- }
+ "@gar/promisify": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="
},
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",
@@ -3600,11 +3492,81 @@
}
}
},
- "@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
- "dev": true
+ "@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
+ "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@npmcli/fs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+ "requires": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "requires": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "dependencies": {
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
},
"@sinonjs/commons": {
"version": "1.8.1",
@@ -3624,20 +3586,15 @@
"@sinonjs/commons": "^1.7.0"
}
},
- "@szmarczak/http-timer": {
+ "@tootallnate/once": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
- "dev": true,
- "requires": {
- "defer-to-connect": "^1.0.1"
- }
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
},
"@types/anymatch": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
- "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==",
- "dev": true
+ "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA=="
},
"@types/babel__core": {
"version": "7.1.12",
@@ -3732,6 +3689,11 @@
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
},
+ "@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ=="
+ },
"@types/node": {
"version": "14.0.14",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz",
@@ -3740,8 +3702,7 @@
"@types/normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
- "dev": true
+ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA=="
},
"@types/parse-json": {
"version": "4.0.0",
@@ -3757,8 +3718,7 @@
"@types/source-list-map": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
- "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
- "dev": true
+ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA=="
},
"@types/stack-utils": {
"version": "2.0.0",
@@ -3769,14 +3729,12 @@
"@types/tapable": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz",
- "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==",
- "dev": true
+ "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA=="
},
"@types/uglify-js": {
"version": "3.11.1",
"resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.1.tgz",
"integrity": "sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q==",
- "dev": true,
"requires": {
"source-map": "^0.6.1"
},
@@ -3784,8 +3742,7 @@
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
}
},
@@ -3793,7 +3750,6 @@
"version": "4.41.25",
"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz",
"integrity": "sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ==",
- "dev": true,
"requires": {
"@types/anymatch": "*",
"@types/node": "*",
@@ -3806,8 +3762,7 @@
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
}
},
@@ -3815,7 +3770,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.0.0.tgz",
"integrity": "sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg==",
- "dev": true,
"requires": {
"@types/node": "*",
"@types/source-list-map": "*",
@@ -3825,8 +3779,7 @@
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
}
}
},
@@ -4013,9 +3966,9 @@
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
},
"abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
"dev": true
},
"abbrev": {
@@ -4024,18 +3977,33 @@
"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==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ }
}
},
"acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
+ "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
"dev": true
},
"acorn-globals": {
@@ -4046,6 +4014,14 @@
"requires": {
"acorn": "^7.1.1",
"acorn-walk": "^7.1.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ }
}
},
"acorn-walk": {
@@ -4054,6 +4030,40 @@
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true
},
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "agentkeepalive": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
+ "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
+ "requires": {
+ "debug": "^4.1.0",
+ "depd": "^1.1.2",
+ "humanize-ms": "^1.2.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="
+ }
+ }
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
"airbnb-prop-types": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz",
@@ -4072,9 +4082,9 @@
}
},
"ajv": {
- "version": "6.12.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
- "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -4092,54 +4102,6 @@
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz",
"integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw=="
},
- "amdefine": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
- },
- "ansi-align": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
- "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
- "dev": true,
- "requires": {
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
"ansi-colors": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
@@ -4162,16 +4124,15 @@
}
}
},
- "ansi-html": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
- "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
+ "ansi-html-community": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
+ "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw=="
},
"ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"ansi-styles": {
"version": "3.2.1",
@@ -4185,6 +4146,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
"integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -4196,12 +4158,24 @@
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
},
"are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
"requires": {
"delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
+ "readable-stream": "^3.6.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
}
},
"argparse": {
@@ -4234,11 +4208,6 @@
"integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
"dev": true
},
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
- },
"array-flatten": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
@@ -4263,13 +4232,161 @@
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
},
"array.prototype.find": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz",
- "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.0.tgz",
+ "integrity": "sha512-sn40qmUiLYAcRb/1HsIQjTTZ1kCy8II8VtZJpMn2Aoen9twULhbWXisfh3HimGqMlHGUul0/TfKCnXg42LuPpQ==",
"dev": true,
"requires": {
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.17.4"
+ "es-abstract": "^1.19.4",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
+ "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "regexp.prototype.flags": "^1.4.3",
+ "string.prototype.trimend": "^1.0.5",
+ "string.prototype.trimstart": "^1.0.5",
+ "unbox-primitive": "^1.0.2"
+ }
+ },
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "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==",
+ "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==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ }
}
},
"array.prototype.flat": {
@@ -4282,10 +4399,15 @@
"es-abstract": "^1.17.0-next.1"
}
},
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA=="
+ },
"asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"requires": {
"safer-buffer": "~2.1.0"
}
@@ -4302,9 +4424,9 @@
},
"dependencies": {
"bn.js": {
- "version": "4.11.9",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
- "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
}
}
},
@@ -4343,9 +4465,9 @@
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
},
"async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
"requires": {
"lodash": "^4.17.14"
}
@@ -4386,23 +4508,16 @@
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
- "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
"axios": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz",
- "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==",
+ "version": "0.21.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+ "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
"requires": {
- "follow-redirects": "^1.10.0"
- },
- "dependencies": {
- "follow-redirects": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz",
- "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA=="
- }
+ "follow-redirects": "^1.14.0"
}
},
"babel-code-frame": {
@@ -4636,24 +4751,42 @@
}
},
"babel-loader": {
- "version": "8.2.1",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz",
- "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==",
+ "version": "8.2.5",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz",
+ "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==",
"requires": {
- "find-cache-dir": "^2.1.0",
- "loader-utils": "^1.4.0",
- "make-dir": "^2.1.0",
- "pify": "^4.0.1",
+ "find-cache-dir": "^3.3.1",
+ "loader-utils": "^2.0.0",
+ "make-dir": "^3.1.0",
"schema-utils": "^2.6.5"
},
"dependencies": {
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
"requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "loader-utils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
+ "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "requires": {
+ "find-up": "^4.0.0"
}
}
}
@@ -4729,6 +4862,40 @@
"resolve": "^1.12.0"
}
},
+ "babel-plugin-polyfill-corejs2": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz",
+ "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==",
+ "requires": {
+ "@babel/compat-data": "^7.17.7",
+ "@babel/helper-define-polyfill-provider": "^0.3.2",
+ "semver": "^6.1.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz",
+ "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==",
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.3.2",
+ "core-js-compat": "^3.21.0"
+ }
+ },
+ "babel-plugin-polyfill-regenerator": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz",
+ "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==",
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.3.1"
+ }
+ },
"babel-plugin-syntax-jsx": {
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
@@ -4985,9 +5152,9 @@
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
},
"binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ=="
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
},
"bindings": {
"version": "1.5.0",
@@ -4998,45 +5165,39 @@
"file-uri-to-path": "1.0.0"
}
},
- "block-stream": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
- "requires": {
- "inherits": "~2.0.0"
- }
- },
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
},
"bn.js": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
- "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="
},
"body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
+ "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
"requires": {
- "bytes": "3.1.0",
+ "bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
+ "on-finished": "2.4.1",
+ "qs": "6.10.3",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
},
"dependencies": {
"bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
"debug": {
"version": "2.6.9",
@@ -5049,12 +5210,15 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
}
}
},
@@ -5078,9 +5242,9 @@
"dev": true
},
"bootstrap": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.3.tgz",
- "integrity": "sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ=="
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz",
+ "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ=="
},
"bootstrap-multiselect": {
"version": "github:davidstutz/bootstrap-multiselect#52833181fce388c9110d5c926f69b93e349d92c5",
@@ -5089,109 +5253,10 @@
"jquery": "~2.1.3"
},
"dependencies": {
- "jquery": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.1.4.tgz",
- "integrity": "sha1-IoveaYoMYUMdwmMKahVPFYkNIxc="
- }
- }
- },
- "boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
- "dev": true,
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^3.0.0",
- "cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
+ "bootstrap": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.3.tgz",
+ "integrity": "sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ=="
}
}
},
@@ -5308,15 +5373,14 @@
}
},
"browserslist": {
- "version": "4.14.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz",
- "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==",
+ "version": "4.21.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
+ "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
"requires": {
- "caniuse-lite": "^1.0.30001157",
- "colorette": "^1.2.1",
- "electron-to-chromium": "^1.3.591",
- "escalade": "^3.1.1",
- "node-releases": "^1.1.66"
+ "caniuse-lite": "^1.0.30001370",
+ "electron-to-chromium": "^1.4.202",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.5"
}
},
"bser": {
@@ -5411,36 +5475,13 @@
"unset-value": "^1.0.0"
}
},
- "cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "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": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "dev": true
- }
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
}
},
"callsites": {
@@ -5454,25 +5495,19 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
"requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
- }
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
}
},
"caniuse-lite": {
- "version": "1.0.30001159",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz",
- "integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA=="
+ "version": "1.0.30001373",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz",
+ "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ=="
},
"capture-exit": {
"version": "2.0.0",
@@ -5519,18 +5554,35 @@
}
},
"chokidar": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
- "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"requires": {
- "anymatch": "~3.1.1",
+ "anymatch": "~3.1.2",
"braces": "~3.0.2",
- "fsevents": "~2.1.2",
- "glob-parent": "~5.1.0",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
- "readdirp": "~3.5.0"
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ }
}
},
"chownr": {
@@ -5539,12 +5591,9 @@
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
},
"chrome-trace-event": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
- "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
- "requires": {
- "tslib": "^1.9.0"
- }
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="
},
"ci-info": {
"version": "2.0.0",
@@ -5589,26 +5638,24 @@
}
},
"classnames": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
- "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
+ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
},
"clean-webpack-plugin": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz",
"integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==",
- "dev": true,
"requires": {
"@types/webpack": "^4.4.31",
"del": "^4.1.1"
}
},
- "cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
- "dev": true
- },
"cliui": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
@@ -5653,34 +5700,16 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
"requires": {
"is-plain-object": "^2.0.4",
"kind-of": "^6.0.2",
"shallow-clone": "^3.0.0"
}
},
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- },
- "dependencies": {
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true
- }
- }
- },
"clsx": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
- "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA=="
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="
},
"co": {
"version": "4.6.0",
@@ -5688,11 +5717,6 @@
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
"dev": true
},
- "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="
- },
"collect-v8-coverage": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
@@ -5721,10 +5745,10 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
- "colorette": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
- "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
},
"combined-stream": {
"version": "1.0.8",
@@ -5807,20 +5831,6 @@
"typedarray": "^0.0.6"
}
},
- "configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "dev": true,
- "requires": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- }
- },
"connect-history-api-fallback": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
@@ -5842,11 +5852,18 @@
"integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
},
"content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"requires": {
- "safe-buffer": "5.1.2"
+ "safe-buffer": "5.2.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=="
+ }
}
},
"content-type": {
@@ -5863,9 +5880,9 @@
}
},
"cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
},
"cookie-signature": {
"version": "1.0.6",
@@ -5896,11 +5913,11 @@
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
},
"core-js-compat": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz",
- "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==",
+ "version": "3.24.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.0.tgz",
+ "integrity": "sha512-F+2E63X3ff/nj8uIrf8Rf24UDGIz7p838+xjEp+Bx3y8OWXj+VTPPZNCtdqovPaS9o7Tka5mCH01Zn5vOd6UQg==",
"requires": {
- "browserslist": "^4.14.6",
+ "browserslist": "^4.21.2",
"semver": "7.0.0"
},
"dependencies": {
@@ -6462,9 +6479,9 @@
},
"dependencies": {
"bn.js": {
- "version": "4.11.9",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
- "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
}
}
},
@@ -6547,12 +6564,6 @@
"randomfill": "^1.0.3"
}
},
- "crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "dev": true
- },
"css-box-model": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz",
@@ -6562,24 +6573,27 @@
}
},
"css-loader": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.0.1.tgz",
- "integrity": "sha512-cXc2ti9V234cq7rJzFKhirb2L2iPy8ZjALeVJAozXYz9te3r4eqLSixNAbMDJSgJEQywqXzs8gonxaboeKqwiw==",
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz",
+ "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==",
"requires": {
- "camelcase": "^6.2.0",
- "cssesc": "^3.0.0",
- "icss-utils": "^5.0.0",
+ "icss-utils": "^5.1.0",
"loader-utils": "^2.0.0",
- "postcss": "^8.1.4",
+ "postcss": "^8.2.15",
"postcss-modules-extract-imports": "^3.0.0",
"postcss-modules-local-by-default": "^4.0.0",
"postcss-modules-scope": "^3.0.0",
"postcss-modules-values": "^4.0.0",
"postcss-value-parser": "^4.1.0",
"schema-utils": "^3.0.0",
- "semver": "^7.3.2"
+ "semver": "^7.3.5"
},
"dependencies": {
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
+ },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -6596,35 +6610,46 @@
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
},
- "camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
- },
"loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
+ "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
"schema-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
- "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
"requires": {
- "@types/json-schema": "^7.0.6",
+ "@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
}
},
"semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
@@ -6679,14 +6704,6 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz",
"integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w=="
},
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "requires": {
- "array-find-index": "^1.0.1"
- }
- },
"cyclist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
@@ -6724,10 +6741,26 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==",
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg=="
+ }
+ }
+ },
"decimal.js": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz",
- "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==",
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
"dev": true
},
"decode-uri-component": {
@@ -6754,9 +6787,9 @@
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
},
"deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
"deepmerge": {
@@ -6773,12 +6806,6 @@
"ip-regex": "^2.1.0"
}
},
- "defer-to-connect": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
- "dev": true
- },
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -6849,9 +6876,9 @@
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
},
"depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
},
"des.js": {
"version": "1.0.1",
@@ -6863,9 +6890,9 @@
}
},
"destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
},
"detect-file": {
"version": "1.0.0",
@@ -6879,9 +6906,9 @@
"dev": true
},
"detect-node": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
- "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
},
"diff-sequences": {
"version": "26.6.2",
@@ -6900,9 +6927,9 @@
},
"dependencies": {
"bn.js": {
- "version": "4.11.9",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
- "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
}
}
},
@@ -6918,9 +6945,9 @@
"integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0="
},
"dns-packet": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
- "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
+ "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
"requires": {
"ip": "^1.1.0",
"safe-buffer": "^5.0.1"
@@ -6999,27 +7026,12 @@
"domelementtype": "1"
}
},
- "dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "dev": true,
- "requires": {
- "is-obj": "^2.0.0"
- }
- },
"duplexer": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
"integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
"dev": true
},
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
- "dev": true
- },
"duplexify": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
@@ -7046,28 +7058,28 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
- "version": "1.3.602",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.602.tgz",
- "integrity": "sha512-+JbC10U8vpKAqAtrEqORdzaWewRgEj5DY+QQNyP/dxDTshPqqgpjrvt6smewKS/5F3vT5prYgg7/VTxb5FROjw=="
+ "version": "1.4.205",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.205.tgz",
+ "integrity": "sha512-sSHlbfqn6CgQqD9muogEwWrw1wi2tHEQ+sunW7ex/kJ9ICucE85JW0E9ekbRDDgLP7NlpoNVUl+el0556RhFIg=="
},
"elliptic": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
- "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
"requires": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
"hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
},
"dependencies": {
"bn.js": {
- "version": "4.11.9",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
- "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
}
}
},
@@ -7101,6 +7113,26 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
+ "encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "optional": true,
+ "requires": {
+ "iconv-lite": "^0.6.2"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ }
+ }
+ },
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -7136,6 +7168,11 @@
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
"dev": true
},
+ "env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="
+ },
"enzyme": {
"version": "3.11.0",
"resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz",
@@ -7167,16 +7204,16 @@
}
},
"enzyme-adapter-react-16": {
- "version": "1.15.5",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.5.tgz",
- "integrity": "sha512-33yUJGT1nHFQlbVI5qdo5Pfqvu/h4qPwi1o0a6ZZsjpiqq92a3HjynDhwd1IeED+Su60HDWV8mxJqkTnLYdGkw==",
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz",
+ "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==",
"dev": true,
"requires": {
- "enzyme-adapter-utils": "^1.13.1",
+ "enzyme-adapter-utils": "^1.14.0",
"enzyme-shallow-equal": "^1.0.4",
"has": "^1.0.3",
- "object.assign": "^4.1.0",
- "object.values": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "object.values": "^1.1.2",
"prop-types": "^15.7.2",
"react-is": "^16.13.1",
"react-test-renderer": "^16.0.0-0",
@@ -7193,6 +7230,117 @@
"object-is": "^1.1.2"
}
},
+ "es-abstract": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
+ "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "regexp.prototype.flags": "^1.4.3",
+ "string.prototype.trimend": "^1.0.5",
+ "string.prototype.trimstart": "^1.0.5",
+ "unbox-primitive": "^1.0.2"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ }
+ }
+ },
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true
+ },
+ "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==",
+ "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==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
"react-test-renderer": {
"version": "16.14.0",
"resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz",
@@ -7204,21 +7352,214 @@
"react-is": "^16.8.6",
"scheduler": "^0.19.1"
}
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
}
}
},
"enzyme-adapter-utils": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.1.tgz",
- "integrity": "sha512-5A9MXXgmh/Tkvee3bL/9RCAAgleHqFnsurTYCbymecO4ohvtNO5zqIhHxV370t7nJAwaCfkgtffarKpC0GPt0g==",
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.0.tgz",
+ "integrity": "sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg==",
"dev": true,
"requires": {
"airbnb-prop-types": "^2.16.0",
- "function.prototype.name": "^1.1.2",
- "object.assign": "^4.1.0",
- "object.fromentries": "^2.0.2",
+ "function.prototype.name": "^1.1.3",
+ "has": "^1.0.3",
+ "object.assign": "^4.1.2",
+ "object.fromentries": "^2.0.3",
"prop-types": "^15.7.2",
"semver": "^5.7.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
+ "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "regexp.prototype.flags": "^1.4.3",
+ "string.prototype.trimend": "^1.0.5",
+ "string.prototype.trimstart": "^1.0.5",
+ "unbox-primitive": "^1.0.2"
+ }
+ },
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "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==",
+ "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==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ }
}
},
"enzyme-shallow-equal": {
@@ -7231,6 +7572,11 @@
"object-is": "^1.0.2"
}
},
+ "err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="
+ },
"errno": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
@@ -7265,6 +7611,15 @@
"string.prototype.trimstart": "^1.0.1"
}
},
+ "es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
"es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
@@ -7280,12 +7635,6 @@
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
},
- "escape-goat": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
- "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
- "dev": true
- },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -7297,18 +7646,24 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
"dev": true,
"requires": {
"esprima": "^4.0.1",
- "estraverse": "^4.2.0",
+ "estraverse": "^5.2.0",
"esutils": "^2.0.2",
"optionator": "^0.8.1",
"source-map": "~0.6.1"
},
"dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -7342,9 +7697,9 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
}
}
},
@@ -7369,17 +7724,14 @@
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
},
"events": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
- "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg=="
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
},
"eventsource": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
- "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
- "requires": {
- "original": "^1.0.0"
- }
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz",
+ "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA=="
},
"evp_bytestokey": {
"version": "1.0.3",
@@ -7567,37 +7919,38 @@
}
},
"express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
+ "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
"requires": {
- "accepts": "~1.3.7",
+ "accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
+ "body-parser": "1.20.0",
+ "content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.4.0",
+ "cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
- "depd": "~1.1.2",
+ "depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "~1.1.2",
+ "finalhandler": "1.2.0",
"fresh": "0.5.2",
+ "http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.10.3",
"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",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
@@ -7606,7 +7959,7 @@
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
"debug": {
"version": "2.6.9",
@@ -7619,12 +7972,20 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "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=="
}
}
},
@@ -7733,9 +8094,9 @@
"dev": true
},
"faye-websocket": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
+ "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
"requires": {
"websocket-driver": ">=0.5.1"
}
@@ -7822,16 +8183,16 @@
}
},
"finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "statuses": "~1.5.0",
+ "statuses": "2.0.1",
"unpipe": "~1.0.0"
},
"dependencies": {
@@ -7846,7 +8207,7 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
}
}
},
@@ -7886,7 +8247,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -8010,9 +8370,9 @@
}
},
"follow-redirects": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz",
- "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA=="
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
+ "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA=="
},
"for-in": {
"version": "1.0.2",
@@ -8044,9 +8404,9 @@
}
},
"forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
"fragment-cache": {
"version": "0.2.1",
@@ -8070,6 +8430,14 @@
"readable-stream": "^2.0.0"
}
},
+ "fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
"fs-write-stream-atomic": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
@@ -8090,19 +8458,9 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
"integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "dev": true,
"optional": true
},
- "fstream": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
- "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
- },
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -8126,18 +8484,33 @@
"dev": true
},
"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"
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+ "requires": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
}
},
"gaze": {
@@ -8158,6 +8531,23 @@
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
+ "get-intrinsic": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
+ "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ }
+ }
+ },
"get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -8177,6 +8567,16 @@
"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==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
@@ -8240,9 +8640,9 @@
}
},
"glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"requires": {
"is-glob": "^4.0.1"
}
@@ -8256,15 +8656,6 @@
"find-index": "^0.1.1"
}
},
- "global-dirs": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz",
- "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==",
- "dev": true,
- "requires": {
- "ini": "^1.3.5"
- }
- },
"global-modules": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
@@ -8340,51 +8731,15 @@
}
},
"globule": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
- "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz",
+ "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==",
"requires": {
"glob": "~7.1.1",
- "lodash": "~4.17.10",
+ "lodash": "^4.17.21",
"minimatch": "~3.0.2"
}
},
- "got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "dev": true,
- "requires": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- },
- "dependencies": {
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true
- }
- }
- },
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
@@ -8408,14 +8763,19 @@
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"requires": {
- "ajv": "^6.5.5",
+ "ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
+ "hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA=="
+ },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -8428,6 +8788,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
"requires": {
"ansi-regex": "^2.0.0"
},
@@ -8435,20 +8796,51 @@
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
}
}
},
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true
+ },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
+ "has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.1"
+ }
+ },
"has-symbols": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
},
+ "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"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ }
+ }
+ },
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
@@ -8506,12 +8898,6 @@
}
}
},
- "has-yarn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
- "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
- "dev": true
- },
"hash-base": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
@@ -8575,9 +8961,9 @@
}
},
"hosted-git-info": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
+ "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=="
},
"hpack.js": {
"version": "2.1.6",
@@ -8609,9 +8995,9 @@
}
},
"html-entities": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
- "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA=="
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz",
+ "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA=="
},
"html-escaper": {
"version": "2.0.2",
@@ -8649,8 +9035,7 @@
"http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
- "dev": true
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
},
"http-deceiver": {
"version": "1.2.7",
@@ -8658,24 +9043,22 @@
"integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc="
},
"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==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"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="
- }
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
}
},
+ "http-parser-js": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
+ "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q=="
+ },
"http-proxy": {
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
@@ -8686,6 +9069,16 @@
"requires-port": "^1.0.0"
}
},
+ "http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "requires": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
"http-proxy-middleware": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
@@ -8809,12 +9202,29 @@
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
},
+ "https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
"human-signals": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
"integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
"dev": true
},
+ "humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "requires": {
+ "ms": "^2.0.0"
+ }
+ },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -8860,12 +9270,6 @@
}
}
},
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
- "dev": true
- },
"import-local": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
@@ -8880,23 +9284,10 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
},
- "in-publish": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz",
- "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ=="
- },
"indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "requires": {
- "repeating": "^2.0.0"
- }
- },
- "indexes-of": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
},
"infer-owner": {
"version": "1.0.4",
@@ -8918,9 +9309,9 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
"internal-ip": {
"version": "4.3.0",
@@ -8931,6 +9322,17 @@
"ipaddr.js": "^1.9.0"
}
},
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
"interpret": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
@@ -8945,9 +9347,9 @@
}
},
"ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
+ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="
},
"ip-regex": {
"version": "2.1.0",
@@ -8988,15 +9390,28 @@
}
},
"is-arguments": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
- "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -9116,18 +9531,10 @@
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
- "is-finite": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
- "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w=="
- },
"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"
- }
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"is-generator-fn": {
"version": "2.1.0",
@@ -9143,28 +9550,15 @@
"is-extglob": "^2.1.1"
}
},
- "is-installed-globally": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
- "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
- "dev": true,
- "requires": {
- "global-dirs": "^2.0.1",
- "is-path-inside": "^3.0.1"
- },
- "dependencies": {
- "is-path-inside": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
- "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
- "dev": true
- }
- }
+ "is-lambda": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="
},
- "is-npm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
- "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==",
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
"dev": true
},
"is-number": {
@@ -9178,12 +9572,6 @@
"integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==",
"dev": true
},
- "is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "dev": true
- },
"is-path-cwd": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
@@ -9205,6 +9593,11 @@
"path-is-inside": "^1.0.2"
}
},
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg=="
+ },
"is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -9220,9 +9613,9 @@
"dev": true
},
"is-potential-custom-element-name": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
- "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
"dev": true
},
"is-primitive": {
@@ -9239,6 +9632,15 @@
"has-symbols": "^1.0.1"
}
},
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -9269,10 +9671,14 @@
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
},
"is-windows": {
"version": "1.0.2",
@@ -9284,12 +9690,6 @@
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
"integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
},
- "is-yarn-global": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
- "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
- "dev": true
- },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -10896,9 +11296,9 @@
}
},
"jquery": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
- "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg=="
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
+ "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
},
"jquery-ui-dist": {
"version": "1.12.1",
@@ -10906,9 +11306,9 @@
"integrity": "sha1-XAgV08xvkP9fqvWyaKbiO0ypBPo="
},
"js-base64": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.2.tgz",
- "integrity": "sha512-1hgLrLIrmCgZG+ID3VoLNLOSwjGnoZa8tyrUdEteMeIzsT6PH7PMLyUvbDwzNE56P3PNxyvuIOx4Uh2E5rzQIw=="
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
},
"js-tokens": {
"version": "4.0.0",
@@ -10931,60 +11331,72 @@
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"jsdom": {
- "version": "16.4.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz",
- "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==",
+ "version": "16.7.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
+ "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
"dev": true,
"requires": {
- "abab": "^2.0.3",
- "acorn": "^7.1.1",
+ "abab": "^2.0.5",
+ "acorn": "^8.2.4",
"acorn-globals": "^6.0.0",
"cssom": "^0.4.4",
- "cssstyle": "^2.2.0",
+ "cssstyle": "^2.3.0",
"data-urls": "^2.0.0",
- "decimal.js": "^10.2.0",
+ "decimal.js": "^10.2.1",
"domexception": "^2.0.1",
- "escodegen": "^1.14.1",
+ "escodegen": "^2.0.0",
+ "form-data": "^3.0.0",
"html-encoding-sniffer": "^2.0.1",
- "is-potential-custom-element-name": "^1.0.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-potential-custom-element-name": "^1.0.1",
"nwsapi": "^2.2.0",
- "parse5": "5.1.1",
- "request": "^2.88.2",
- "request-promise-native": "^1.0.8",
- "saxes": "^5.0.0",
+ "parse5": "6.0.1",
+ "saxes": "^5.0.1",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^3.0.1",
+ "tough-cookie": "^4.0.0",
"w3c-hr-time": "^1.0.2",
"w3c-xmlserializer": "^2.0.0",
"webidl-conversions": "^6.1.0",
"whatwg-encoding": "^1.0.5",
"whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0",
- "ws": "^7.2.3",
+ "whatwg-url": "^8.5.0",
+ "ws": "^7.4.6",
"xml-name-validator": "^3.0.0"
},
"dependencies": {
+ "form-data": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
"parse5": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
- "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
"dev": true
},
"tough-cookie": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
- "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
"dev": true,
"requires": {
- "ip-regex": "^2.1.0",
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.1.2"
}
},
"ws": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz",
- "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==",
+ "version": "7.5.9",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+ "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
"dev": true
}
}
@@ -10994,12 +11406,6 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
},
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
- "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",
@@ -11008,13 +11414,12 @@
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
},
"json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -11026,11 +11431,6 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
- "json3": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
- "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA=="
- },
"json5": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
@@ -11040,25 +11440,16 @@
}
},
"jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
- "json-schema": "0.2.3",
+ "json-schema": "0.4.0",
"verror": "1.10.0"
}
},
- "keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "dev": true,
- "requires": {
- "json-buffer": "3.0.0"
- }
- },
"killable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
@@ -11076,23 +11467,14 @@
"dev": true
},
"klona": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz",
- "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA=="
- },
- "latest-version": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
- "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
- "dev": true,
- "requires": {
- "package-json": "^6.3.0"
- }
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
+ "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ=="
},
"leaflet": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz",
- "integrity": "sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw=="
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.8.0.tgz",
+ "integrity": "sha512-gwhMjFCQiYs3x/Sf+d49f10ERXaEFCPr+nVTryhAW8DWbMGqJqt9G4XuIaHmFW08zYvhgdzqXGr8AlW8v8dQkA=="
},
"leven": {
"version": "3.1.0",
@@ -11110,25 +11492,6 @@
"type-check": "~0.3.2"
}
},
- "line-column": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz",
- "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=",
- "requires": {
- "isarray": "^1.0.0",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
"line-height": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz",
@@ -11142,25 +11505,6 @@
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
},
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- }
- }
- },
"loader-runner": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
@@ -11190,15 +11534,19 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
"requires": {
"p-locate": "^4.1.0"
}
},
"lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
},
"lodash.escape": {
"version": "4.0.1",
@@ -11218,16 +11566,10 @@
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
"dev": true
},
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
- "dev": true
- },
"loglevel": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz",
- "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ=="
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz",
+ "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA=="
},
"loose-envify": {
"version": "1.4.0",
@@ -11237,34 +11579,18 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "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==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
+ "yallist": "^4.0.0"
},
"dependencies": {
"yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
@@ -11272,7 +11598,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
"requires": {
"semver": "^6.0.0"
},
@@ -11280,8 +11605,91 @@
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "make-fetch-happen": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
+ "requires": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.2.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.2",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^6.0.0",
+ "ssri": "^8.0.0"
+ },
+ "dependencies": {
+ "cacache": {
+ "version": "15.3.0",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
+ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+ "requires": {
+ "@npmcli/fs": "^1.0.0",
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ }
+ },
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+ "requires": {
+ "minipass": "^3.1.1"
+ }
}
}
},
@@ -11300,9 +11708,9 @@
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
},
"map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ=="
},
"map-visit": {
"version": "1.0.0",
@@ -11354,20 +11762,69 @@
"dev": true
},
"meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "requires": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "requires": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw=="
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
+ }
}
},
"merge-descriptors": {
@@ -11406,9 +11863,9 @@
},
"dependencies": {
"bn.js": {
- "version": "4.11.9",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
- "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
}
}
},
@@ -11436,16 +11893,26 @@
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
+ "min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="
+ },
"mini-css-extract-plugin": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.1.tgz",
- "integrity": "sha512-jIOheqh9EU98rqj6ZaFTYNNDSFqdakNqaUZfkYwaXPjI9batmXVXX+K71NrqRAgtoGefELBMld1EQ7dqSAD5SQ==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz",
+ "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==",
"requires": {
"loader-utils": "^2.0.0",
"schema-utils": "^3.0.0",
"webpack-sources": "^1.1.0"
},
"dependencies": {
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
+ },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -11463,9 +11930,9 @@
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
},
"loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
+ "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
@@ -11473,11 +11940,11 @@
}
},
"schema-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
- "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
"requires": {
- "@types/json-schema": "^7.0.6",
+ "@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
}
@@ -11503,9 +11970,93 @@
}
},
"minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ },
+ "minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ }
+ },
+ "minipass": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
+ "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
+ "requires": {
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
+ },
+ "minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-fetch": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
+ "requires": {
+ "encoding": "^0.1.12",
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
},
"mississippi": {
"version": "3.0.0",
@@ -11614,9 +12165,9 @@
"integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40="
},
"nanobus": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/nanobus/-/nanobus-4.4.0.tgz",
- "integrity": "sha512-Hv9USGyH8EsPy0o8pPWE7x3YRIfuZDgMBirzjU6XLebhiSK2g53JlfqgolD0c39ne6wXAfaBNcIAvYe22Bav+Q==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/nanobus/-/nanobus-4.5.0.tgz",
+ "integrity": "sha512-7sBZo9wthqNJ7QXnfVXZL7fkKJLN55GLOdX+RyZT34UOvxxnFtJe/c7K0ZRLAKOvaY1xJThFFn0Usw2H9R6Frg==",
"requires": {
"nanoassert": "^1.1.0",
"nanotiming": "^7.2.0",
@@ -11624,9 +12175,9 @@
}
},
"nanoid": {
- "version": "3.1.17",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.17.tgz",
- "integrity": "sha512-5mmlQz73ohlISpARejqTwgYzh92wwBccatETsLOI+VKkY6Lx/Dj3wvG7tCoKjX+eEaZWn0gB7Xkfl5JatHQTeA=="
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
},
"nanomatch": {
"version": "1.2.13",
@@ -11683,9 +12234,9 @@
}
},
"negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
},
"neo-async": {
"version": "2.6.2",
@@ -11708,53 +12259,60 @@
"integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
},
"node-gyp": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
- "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
"requires": {
- "fstream": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "osenv": "0",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^2.0.0",
- "which": "1"
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^9.1.0",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
},
"dependencies": {
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
"nopt": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
"requires": {
"abbrev": "1"
}
},
- "semver": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
+ "npmlog": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+ "requires": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ }
},
- "tar": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
- "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"requires": {
- "block-stream": "*",
- "fstream": "^1.0.12",
- "inherits": "2"
+ "glob": "^7.1.3"
}
},
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"requires": {
- "isexe": "^2.0.0"
+ "lru-cache": "^6.0.0"
}
}
}
@@ -11850,91 +12408,121 @@
}
},
"node-releases": {
- "version": "1.1.67",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz",
- "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg=="
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
},
"node-sass": {
- "version": "4.14.1",
- "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz",
- "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz",
+ "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==",
"requires": {
"async-foreach": "^0.1.3",
- "chalk": "^1.1.1",
- "cross-spawn": "^3.0.0",
+ "chalk": "^4.1.2",
+ "cross-spawn": "^7.0.3",
"gaze": "^1.0.0",
"get-stdin": "^4.0.1",
"glob": "^7.0.3",
- "in-publish": "^2.0.0",
"lodash": "^4.17.15",
- "meow": "^3.7.0",
- "mkdirp": "^0.5.1",
+ "meow": "^9.0.0",
"nan": "^2.13.2",
- "node-gyp": "^3.8.0",
- "npmlog": "^4.0.0",
+ "node-gyp": "^8.4.1",
+ "npmlog": "^5.0.0",
"request": "^2.88.0",
- "sass-graph": "2.2.5",
+ "sass-graph": "4.0.0",
"stdout-stream": "^1.4.0",
"true-case-path": "^1.0.2"
},
"dependencies": {
"ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
},
"chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
}
},
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
"cross-spawn": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
- "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"requires": {
- "lru-cache": "^4.0.1",
- "which": "^1.2.9"
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
}
},
- "supports-color": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "shebang-command": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
},
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"requires": {
- "isexe": "^2.0.0"
+ "has-flag": "^4.0.0"
}
}
}
},
"nodemon": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.6.tgz",
- "integrity": "sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==",
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz",
+ "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==",
"dev": true,
"requires": {
- "chokidar": "^3.2.2",
- "debug": "^3.2.6",
+ "chokidar": "^3.5.2",
+ "debug": "^3.2.7",
"ignore-by-default": "^1.0.1",
"minimatch": "^3.0.4",
- "pstree.remy": "^1.1.7",
+ "pstree.remy": "^1.1.8",
"semver": "^5.7.1",
+ "simple-update-notifier": "^1.0.7",
"supports-color": "^5.5.0",
"touch": "^3.1.0",
- "undefsafe": "^2.0.3",
- "update-notifier": "^4.1.0"
+ "undefsafe": "^2.0.5"
},
"dependencies": {
"debug": {
@@ -11946,15 +12534,6 @@
"ms": "^2.1.1"
}
},
- "nopt": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
- "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- },
"touch": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
@@ -11966,6 +12545,15 @@
}
}
},
+ "nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
"normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -11982,12 +12570,6 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
- "normalize-url": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
- "dev": true
- },
"npm-run-all": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
@@ -12070,14 +12652,59 @@
}
},
"npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
"requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
+ },
+ "dependencies": {
+ "are-we-there-yet": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ }
+ },
+ "gauge": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+ "requires": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
}
},
"nth-check": {
@@ -12089,15 +12716,10 @@
"boolbase": "~1.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="
- },
"nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
+ "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
"dev": true
},
"oauth-sign": {
@@ -12193,15 +12815,160 @@
}
},
"object.fromentries": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
- "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
+ "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
"dev": true,
"requires": {
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3"
+ "es-abstract": "^1.19.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
+ "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "regexp.prototype.flags": "^1.4.3",
+ "string.prototype.trimend": "^1.0.5",
+ "string.prototype.trimstart": "^1.0.5",
+ "unbox-primitive": "^1.0.2"
+ }
+ },
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "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==",
+ "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==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "dependencies": {
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ }
+ }
+ }
}
},
"object.omit": {
@@ -12240,9 +13007,9 @@
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
},
"on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"requires": {
"ee-first": "1.1.1"
}
@@ -12291,44 +13058,11 @@
"word-wrap": "~1.2.3"
}
},
- "original": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
- "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
- "requires": {
- "url-parse": "^1.4.3"
- }
- },
"os-browserify": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
},
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
- },
- "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-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
- "dev": true
- },
"p-each-series": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
@@ -12352,7 +13086,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
"requires": {
"p-limit": "^2.2.0"
}
@@ -12375,26 +13108,6 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
},
- "package-json": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
- "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
- "dev": true,
- "requires": {
- "got": "^9.6.0",
- "registry-auth-token": "^4.0.0",
- "registry-url": "^5.0.0",
- "semver": "^6.2.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
"pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
@@ -12460,11 +13173,14 @@
}
},
"parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"requires": {
- "error-ex": "^1.2.0"
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
}
},
"parse-passwd": {
@@ -12504,8 +13220,7 @@
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
},
"path-is-absolute": {
"version": "1.0.1",
@@ -12523,9 +13238,9 @@
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
},
"path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"path-parser": {
"version": "4.2.0",
@@ -12540,27 +13255,10 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- }
- }
- },
"pbkdf2": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
- "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
"requires": {
"create-hash": "^1.1.2",
"create-hmac": "^1.1.4",
@@ -12574,6 +13272,11 @@
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
"picomatch": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
@@ -12683,26 +13386,18 @@
}
},
"posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
- },
- "postcss": {
- "version": "8.1.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.8.tgz",
- "integrity": "sha512-hO6jFWBy0QnBBRaw+s0F4hVPKGDICec/nLNEG1D4qqw9/LBzWMkTjckqqELXAo0J42jN8GFZXtgQfezEaoG9gQ==",
- "requires": {
- "colorette": "^1.2.1",
- "line-column": "^1.0.2",
- "nanoid": "^3.1.16",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- }
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "postcss": {
+ "version": "8.4.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
}
},
"postcss-modules-extract-imports": {
@@ -12737,20 +13432,18 @@
}
},
"postcss-selector-parser": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
- "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
"requires": {
"cssesc": "^3.0.0",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1",
"util-deprecate": "^1.0.2"
}
},
"postcss-value-parser": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
- "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"prelude-ls": {
"version": "1.1.2",
@@ -12758,12 +13451,6 @@
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"dev": true
},
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "dev": true
- },
"preserve": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
@@ -12829,6 +13516,15 @@
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
},
+ "promise-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+ "requires": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ }
+ },
"prompts": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
@@ -12861,11 +13557,11 @@
}
},
"proxy-addr": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
- "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "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==",
"requires": {
- "forwarded": "~0.1.2",
+ "forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
@@ -12874,11 +13570,6 @@
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
},
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -12904,9 +13595,9 @@
},
"dependencies": {
"bn.js": {
- "version": "4.11.9",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
- "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
}
}
},
@@ -12945,20 +13636,14 @@
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
- "pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "dev": true,
+ "qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
- "escape-goat": "^2.0.0"
+ "side-channel": "^1.0.4"
}
},
- "qs": {
- "version": "6.9.4",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
- "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ=="
- },
"querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
@@ -12974,6 +13659,11 @@
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
"integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
},
+ "quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="
+ },
"raf": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
@@ -13045,35 +13735,23 @@
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"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==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"dependencies": {
"bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
}
}
},
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dev": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
"react": {
"version": "16.14.0",
"resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
@@ -13219,9 +13897,9 @@
}
},
"react-select": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/react-select/-/react-select-3.1.0.tgz",
- "integrity": "sha512-wBFVblBH1iuCBprtpyGtd1dGMadsG36W5/t2Aj8OE6WbByDg5jIFyT7X5gT+l0qmT5TqWhxX+VsKJvCEl2uL9g==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/react-select/-/react-select-3.2.0.tgz",
+ "integrity": "sha512-B/q3TnCZXEKItO0fFN/I0tWOX3WJvi/X2wtdffmwSQVRwg5BpValScTO1vdic9AxlUgmeSzib2hAZAwIUQUZGQ==",
"requires": {
"@babel/runtime": "^7.4.4",
"@emotion/cache": "^10.0.9",
@@ -13229,28 +13907,36 @@
"@emotion/css": "^10.0.9",
"memoize-one": "^5.0.0",
"prop-types": "^15.6.0",
- "react-input-autosize": "^2.2.2",
+ "react-input-autosize": "^3.0.0",
"react-transition-group": "^4.3.0"
},
"dependencies": {
"csstype": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz",
- "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
+ "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
},
"dom-helpers": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz",
- "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
"requires": {
"@babel/runtime": "^7.8.7",
"csstype": "^3.0.2"
}
},
+ "react-input-autosize": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz",
+ "integrity": "sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==",
+ "requires": {
+ "prop-types": "^15.5.8"
+ }
+ },
"react-transition-group": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz",
- "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
+ "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
"requires": {
"@babel/runtime": "^7.5.5",
"dom-helpers": "^5.0.1",
@@ -13261,13 +13947,13 @@
}
},
"react-shallow-renderer": {
- "version": "16.14.1",
- "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz",
- "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==",
+ "version": "16.15.0",
+ "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz",
+ "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==",
"dev": true,
"requires": {
"object-assign": "^4.1.1",
- "react-is": "^16.12.0 || ^17.0.0"
+ "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0"
}
},
"react-sortable-hoc": {
@@ -13281,27 +13967,27 @@
}
},
"react-test-renderer": {
- "version": "17.0.1",
- "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.1.tgz",
- "integrity": "sha512-/dRae3mj6aObwkjCcxZPlxDFh73XZLgvwhhyON2haZGUEhiaY5EjfAdw+d/rQmlcFwdTpMXCSGVk374QbCTlrA==",
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz",
+ "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==",
"dev": true,
"requires": {
"object-assign": "^4.1.1",
- "react-is": "^17.0.1",
+ "react-is": "^17.0.2",
"react-shallow-renderer": "^16.13.1",
- "scheduler": "^0.20.1"
+ "scheduler": "^0.20.2"
},
"dependencies": {
"react-is": {
- "version": "17.0.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
- "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==",
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true
},
"scheduler": {
- "version": "0.20.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.1.tgz",
- "integrity": "sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==",
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
+ "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
"dev": true,
"requires": {
"loose-envify": "^1.1.0",
@@ -13322,9 +14008,9 @@
}
},
"react-virtualized": {
- "version": "9.22.2",
- "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.22.2.tgz",
- "integrity": "sha512-5j4h4FhxTdOpBKtePSs1yk6LDNT4oGtUwjT7Nkh61Z8vv3fTG/XeOf8J4li1AYaexOwTXnw0HFVxsV0GBUqwRw==",
+ "version": "9.22.3",
+ "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.22.3.tgz",
+ "integrity": "sha512-MKovKMxWTcwPSxE1kK1HcheQTWfuCxAuBoSTf2gwyMM21NdX/PXUhnoP8Uc5dRKd+nKm8v41R36OellhdCpkrw==",
"requires": {
"@babel/runtime": "^7.7.2",
"clsx": "^1.0.4",
@@ -13335,14 +14021,14 @@
},
"dependencies": {
"csstype": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz",
- "integrity": "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
+ "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
},
"dom-helpers": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz",
- "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
"requires": {
"@babel/runtime": "^7.8.7",
"csstype": "^3.0.2"
@@ -13351,41 +14037,31 @@
}
},
"read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
"requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="
+ }
}
},
"read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
"requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- }
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
}
},
"readable-stream": {
@@ -13403,20 +14079,20 @@
}
},
"readdirp": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
- "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"requires": {
"picomatch": "^2.2.1"
}
},
"redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
"requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
}
},
"redux": {
@@ -13440,11 +14116,11 @@
"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
},
"regenerate-unicode-properties": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
- "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
+ "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
"requires": {
- "regenerate": "^1.4.0"
+ "regenerate": "^1.4.2"
}
},
"regenerator-runtime": {
@@ -13453,9 +14129,9 @@
"integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
},
"regenerator-transform": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
- "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
+ "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
"requires": {
"@babel/runtime": "^7.8.4"
}
@@ -13479,54 +14155,44 @@
}
},
"regexp.prototype.flags": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
- "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
"requires": {
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
+ "functions-have-names": "^1.2.2"
+ },
+ "dependencies": {
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
+ }
}
},
"regexpu-core": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz",
- "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
- "requires": {
- "regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^8.2.0",
- "regjsgen": "^0.5.1",
- "regjsparser": "^0.6.4",
- "unicode-match-property-ecmascript": "^1.0.4",
- "unicode-match-property-value-ecmascript": "^1.2.0"
- }
- },
- "registry-auth-token": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
- "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
- "dev": true,
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "registry-url": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
- "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
+ "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
"requires": {
- "rc": "^1.2.8"
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.0.1",
+ "regjsgen": "^0.6.0",
+ "regjsparser": "^0.8.2",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.0.0"
}
},
"regjsgen": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
- "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
+ "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA=="
},
"regjsparser": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
- "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
+ "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
"requires": {
"jsesc": "~0.5.0"
},
@@ -13534,7 +14200,7 @@
"jsesc": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA=="
}
}
},
@@ -13558,14 +14224,6 @@
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
},
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -13594,32 +14252,12 @@
},
"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=="
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
}
}
},
- "request-promise-core": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
- "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.19"
- }
- },
- "request-promise-native": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
- "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
- "dev": true,
- "requires": {
- "request-promise-core": "1.1.4",
- "stealthy-require": "^1.1.1",
- "tough-cookie": "^2.3.3"
- }
- },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -13690,15 +14328,6 @@
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
},
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "dev": true,
- "requires": {
- "lowercase-keys": "^1.0.0"
- }
- },
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
@@ -13945,20 +14574,95 @@
}
},
"sass-graph": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz",
- "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz",
+ "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==",
"requires": {
"glob": "^7.0.0",
- "lodash": "^4.0.0",
- "scss-tokenizer": "^0.2.3",
- "yargs": "^13.3.2"
+ "lodash": "^4.17.11",
+ "scss-tokenizer": "^0.3.0",
+ "yargs": "^17.2.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
+ },
+ "yargs": {
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
+ "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "21.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
+ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg=="
+ }
}
},
"sass-loader": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.0.tgz",
- "integrity": "sha512-ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg==",
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.3.1.tgz",
+ "integrity": "sha512-y2aBdtYkbqorVavkC3fcJIUDGIegzDWPn3/LAFhsf3G+MzPKTJx37sROf5pXtUeggSVbNbmfj8TgRaSLMelXRA==",
"requires": {
"klona": "^2.0.4",
"loader-utils": "^2.0.0",
@@ -13967,6 +14671,11 @@
"semver": "^7.3.2"
},
"dependencies": {
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
+ },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -13984,29 +14693,45 @@
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
},
"loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
+ "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
"schema-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
- "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
"requires": {
- "@types/json-schema": "^7.0.6",
+ "@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
}
},
"semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
@@ -14057,21 +14782,18 @@
}
},
"scss-tokenizer": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
- "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz",
+ "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==",
"requires": {
- "js-base64": "^2.1.8",
- "source-map": "^0.4.2"
+ "js-base64": "^2.4.3",
+ "source-map": "^0.7.1"
},
"dependencies": {
"source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "requires": {
- "amdefine": ">=0.0.4"
- }
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="
}
}
},
@@ -14091,9 +14813,9 @@
"integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw=="
},
"selfsigned": {
- "version": "1.10.8",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz",
- "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==",
+ "version": "1.10.14",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz",
+ "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==",
"requires": {
"node-forge": "^0.10.0"
}
@@ -14103,41 +14825,24 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
- "semver-diff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
- "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
- "dev": true,
- "requires": {
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
"send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"requires": {
"debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
- "http-errors": "~1.7.2",
+ "http-errors": "2.0.0",
"mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
"range-parser": "~1.2.1",
- "statuses": "~1.5.0"
+ "statuses": "2.0.1"
},
"dependencies": {
"debug": {
@@ -14151,14 +14856,14 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
}
}
},
"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=="
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
@@ -14189,6 +14894,11 @@
"ms": "2.0.0"
}
},
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="
+ },
"http-errors": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
@@ -14214,18 +14924,23 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="
}
}
},
"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==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.17.1"
+ "send": "0.18.0"
}
},
"set-blocking": {
@@ -14260,9 +14975,9 @@
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
},
"setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"sha.js": {
"version": "2.4.11",
@@ -14277,7 +14992,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
"requires": {
"kind-of": "^6.0.2"
}
@@ -14296,9 +15010,9 @@
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
"shell-quote": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
- "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
+ "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==",
"dev": true
},
"shellwords": {
@@ -14308,11 +15022,45 @@
"dev": true,
"optional": true
},
+ "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"
+ },
+ "dependencies": {
+ "object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
+ }
+ }
+ },
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
},
+ "simple-update-notifier": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz",
+ "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==",
+ "dev": true,
+ "requires": {
+ "semver": "~7.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+ "dev": true
+ }
+ }
+ },
"sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@@ -14325,6 +15073,11 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
+ "smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
+ },
"snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -14441,42 +15194,76 @@
}
},
"sockjs": {
- "version": "0.3.20",
- "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
- "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==",
+ "version": "0.3.24",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
+ "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
+ "requires": {
+ "faye-websocket": "^0.11.3",
+ "uuid": "^8.3.2",
+ "websocket-driver": "^0.7.4"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ }
+ }
+ },
+ "sockjs-client": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz",
+ "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==",
"requires": {
- "faye-websocket": "^0.10.0",
- "uuid": "^3.4.0",
- "websocket-driver": "0.6.5"
+ "debug": "^3.2.7",
+ "eventsource": "^2.0.2",
+ "faye-websocket": "^0.11.4",
+ "inherits": "^2.0.4",
+ "url-parse": "^1.5.10"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
+ "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
+ "requires": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ },
+ "dependencies": {
+ "ip": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
+ }
}
},
- "sockjs-client": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
- "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
+ "socks-proxy-agent": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
+ "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
"requires": {
- "debug": "^3.2.5",
- "eventsource": "^1.0.7",
- "faye-websocket": "~0.11.1",
- "inherits": "^2.0.3",
- "json3": "^3.3.2",
- "url-parse": "^1.4.3"
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
},
"dependencies": {
"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"
- }
- },
- "faye-websocket": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
- "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
- "websocket-driver": ">=0.5.1"
+ "ms": "2.1.2"
}
}
}
@@ -14491,6 +15278,11 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
},
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
@@ -14604,9 +15396,9 @@
"dev": true
},
"sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -14620,9 +15412,9 @@
}
},
"ssri": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
- "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
+ "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
"requires": {
"figgy-pudding": "^3.5.1"
}
@@ -14664,9 +15456,9 @@
}
},
"statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
"stdout-stream": {
"version": "1.4.1",
@@ -14676,12 +15468,6 @@
"readable-stream": "^2.0.1"
}
},
- "stealthy-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
- "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
- "dev": true
- },
"stream-browserify": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
@@ -14739,13 +15525,28 @@
}
},
"string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
}
},
"string.prototype.padend": {
@@ -14810,14 +15611,6 @@
}
}
},
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "requires": {
- "is-utf8": "^0.2.0"
- }
- },
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
@@ -14830,19 +15623,13 @@
"dev": true
},
"strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
"requires": {
- "get-stdin": "^4.0.1"
+ "min-indent": "^1.0.0"
}
},
- "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=",
- "dev": true
- },
"style-loader": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz",
@@ -14960,11 +15747,35 @@
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
},
- "term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "dev": true
+ "tar": {
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
+ "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
},
"terminal-link": {
"version": "2.1.1",
@@ -14977,9 +15788,9 @@
}
},
"terser": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
- "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
+ "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
"requires": {
"commander": "^2.20.0",
"source-map": "~0.6.1",
@@ -15079,9 +15890,9 @@
"integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw=="
},
"tmpl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
- "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"dev": true
},
"to-arraybuffer": {
@@ -15117,12 +15928,6 @@
}
}
},
- "to-readable-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
- "dev": true
- },
"to-regex": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
@@ -15143,9 +15948,9 @@
}
},
"toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
},
"topojson-client": {
"version": "3.1.0",
@@ -15183,18 +15988,18 @@
}
},
"tr46": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
- "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
"dev": true,
"requires": {
"punycode": "^2.1.1"
}
},
"trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw=="
},
"true-case-path": {
"version": "1.0.3",
@@ -15204,11 +16009,6 @@
"glob": "^7.1.2"
}
},
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
"tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
@@ -15245,8 +16045,7 @@
"type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
},
"type-is": {
"version": "1.6.18",
@@ -15309,60 +16108,60 @@
}
}
},
- "undefsafe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
- "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"dev": true,
"requires": {
- "debug": "^2.2.0"
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.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=",
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true
}
}
},
+ "undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
+ "dev": true
+ },
"underscore": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
"integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
},
"unicode-canonical-property-names-ecmascript": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
- "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ=="
},
"unicode-match-property-ecmascript": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
- "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
"requires": {
- "unicode-canonical-property-names-ecmascript": "^1.0.4",
- "unicode-property-aliases-ecmascript": "^1.0.4"
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
}
},
"unicode-match-property-value-ecmascript": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
- "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw=="
},
"unicode-property-aliases-ecmascript": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
- "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ=="
},
"union-value": {
"version": "1.0.1",
@@ -15375,11 +16174,6 @@
"set-value": "^2.0.1"
}
},
- "uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
- },
"unique-filename": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
@@ -15396,14 +16190,11 @@
"imurmurhash": "^0.1.4"
}
},
- "unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "dev": true,
- "requires": {
- "crypto-random-string": "^2.0.0"
- }
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
},
"unpipe": {
"version": "1.0.0",
@@ -15451,76 +16242,13 @@
"resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
"integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
},
- "update-notifier": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
- "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
- "dev": true,
+ "update-browserslist-db": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
+ "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
"requires": {
- "boxen": "^4.2.0",
- "chalk": "^3.0.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.3.1",
- "is-npm": "^4.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.0.0",
- "pupa": "^2.0.1",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
}
},
"uri-js": {
@@ -15553,23 +16281,14 @@
}
},
"url-parse": {
- "version": "1.4.7",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
- "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
"requires": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
}
},
- "url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "dev": true,
- "requires": {
- "prepend-http": "^2.0.0"
- }
- },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -15928,9 +16647,9 @@
"dev": true
},
"webpack": {
- "version": "4.44.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz",
- "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==",
+ "version": "4.46.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
+ "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
"requires": {
"@webassemblyjs/ast": "1.9.0",
"@webassemblyjs/helper-module-context": "1.9.0",
@@ -15940,7 +16659,7 @@
"ajv": "^6.10.2",
"ajv-keywords": "^3.4.1",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^4.3.0",
+ "enhanced-resolve": "^4.5.0",
"eslint-scope": "^4.0.3",
"json-parse-better-errors": "^1.0.2",
"loader-runner": "^2.4.0",
@@ -15982,17 +16701,38 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"requires": {
"is-extendable": "^0.1.0"
}
}
}
},
+ "enhanced-resolve": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
+ "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ }
+ }
+ },
"fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@@ -16003,7 +16743,7 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"requires": {
"is-extendable": "^0.1.0"
}
@@ -16013,7 +16753,7 @@
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
"requires": {
"kind-of": "^3.0.2"
},
@@ -16021,7 +16761,7 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"requires": {
"is-buffer": "^1.1.5"
}
@@ -16061,7 +16801,7 @@
"to-regex-range": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
"requires": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
@@ -16123,9 +16863,9 @@
}
},
"webpack-dev-middleware": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
- "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
+ "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
"requires": {
"memory-fs": "^0.4.1",
"mime": "^2.4.4",
@@ -16135,18 +16875,18 @@
},
"dependencies": {
"mime": {
- "version": "2.4.6",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
- "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
}
}
},
"webpack-dev-server": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz",
- "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==",
+ "version": "3.11.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz",
+ "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==",
"requires": {
- "ansi-html": "0.0.7",
+ "ansi-html-community": "0.0.8",
"bonjour": "^3.5.0",
"chokidar": "^2.1.8",
"compression": "^1.7.4",
@@ -16166,11 +16906,11 @@
"p-retry": "^3.0.1",
"portfinder": "^1.0.26",
"schema-utils": "^1.0.0",
- "selfsigned": "^1.10.7",
+ "selfsigned": "^1.10.8",
"semver": "^6.3.0",
"serve-index": "^1.9.1",
- "sockjs": "0.3.20",
- "sockjs-client": "1.4.0",
+ "sockjs": "^0.3.21",
+ "sockjs-client": "^1.5.0",
"spdy": "^4.0.2",
"strip-ansi": "^3.0.1",
"supports-color": "^6.1.0",
@@ -16193,7 +16933,7 @@
"normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
"requires": {
"remove-trailing-separator": "^1.0.1"
}
@@ -16225,7 +16965,7 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"requires": {
"is-extendable": "^0.1.0"
}
@@ -16254,7 +16994,7 @@
"fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@@ -16265,7 +17005,7 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"requires": {
"is-extendable": "^0.1.0"
}
@@ -16285,7 +17025,7 @@
"glob-parent": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
"requires": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
@@ -16294,7 +17034,7 @@
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"requires": {
"is-extglob": "^2.1.0"
}
@@ -16304,7 +17044,7 @@
"is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
"requires": {
"binary-extensions": "^1.0.0"
}
@@ -16312,7 +17052,7 @@
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
"requires": {
"kind-of": "^3.0.2"
},
@@ -16320,7 +17060,7 @@
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"requires": {
"is-buffer": "^1.1.5"
}
@@ -16383,7 +17123,7 @@
"to-regex-range": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
"requires": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
@@ -16401,10 +17141,9 @@
}
},
"webpack-merge": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.4.0.tgz",
- "integrity": "sha512-/scBgu8LVPlHDgqH95Aw1xS+L+PHrpHKOwYVGFaNOQl4Q4wwwWDarwB1WdZAbLQ24SKhY3Awe7VZGYAdp+N+gQ==",
- "dev": true,
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
+ "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
"requires": {
"clone-deep": "^4.0.1",
"wildcard": "^2.0.0"
@@ -16427,10 +17166,12 @@
}
},
"websocket-driver": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
- "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
+ "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
"requires": {
+ "http-parser-js": ">=0.5.1",
+ "safe-buffer": ">=5.1.0",
"websocket-extensions": ">=0.1.1"
}
},
@@ -16455,13 +17196,13 @@
"dev": true
},
"whatwg-url": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz",
- "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==",
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
"dev": true,
"requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^2.0.2",
+ "lodash": "^4.7.0",
+ "tr46": "^2.1.0",
"webidl-conversions": "^6.1.0"
}
},
@@ -16469,72 +17210,52 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
+ "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==",
"dev": true,
"requires": {
- "string-width": "^4.0.0"
+ "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"
},
"dependencies": {
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "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==",
"dev": true,
"requires": {
- "ansi-regex": "^5.0.0"
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
}
}
}
},
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "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"
+ }
+ },
"wildcard": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
- "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
- "dev": true
+ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw=="
},
"word-wrap": {
"version": "1.2.3",
@@ -16608,19 +17329,13 @@
}
},
"ws": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
- "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
"requires": {
"async-limiter": "~1.0.0"
}
},
- "xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
- "dev": true
- },
"xml-name-validator": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
@@ -16639,9 +17354,9 @@
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
},
"y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
},
"yallist": {
"version": "3.1.1",
diff --git a/package.json b/package.json
index 5ccfc5538..0ac0f0557 100755
--- a/package.json
+++ b/package.json
@@ -41,70 +41,70 @@
"babel-jest": "^26.6.3",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
"cpx": "^1.5.0",
- "enzyme": "^3.8.0",
- "enzyme-adapter-react-16": "^1.15.5",
+ "enzyme": "^3.11.0",
+ "enzyme-adapter-react-16": "^1.15.6",
"jest": "^26.6.3",
- "nodemon": "^2.0.6",
+ "nodemon": "^2.0.19",
"npm-run-all": "*",
- "react-test-renderer": "^17.0.1"
+ "react-test-renderer": "^17.0.2"
},
"dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-decorators": "^7.12.1",
+ "@babel/core": "^7.18.9",
+ "@babel/plugin-proposal-class-properties": "^7.18.6",
+ "@babel/plugin-proposal-decorators": "^7.18.9",
"@babel/polyfill": "^7.12.1",
- "@babel/preset-env": "^7.12.1",
- "@babel/preset-react": "^7.12.5",
- "@fortawesome/fontawesome-svg-core": "^1.2.32",
- "@fortawesome/free-solid-svg-icons": "^5.15.1",
- "@fortawesome/react-fontawesome": "^0.1.12",
- "axios": "^0.21.0",
+ "@babel/preset-env": "^7.18.9",
+ "@babel/preset-react": "^7.18.6",
+ "@fortawesome/fontawesome-svg-core": "^1.2.36",
+ "@fortawesome/free-solid-svg-icons": "^5.15.4",
+ "@fortawesome/react-fontawesome": "^0.1.19",
+ "axios": "^0.21.4",
"babel-core": "^7.0.0-bridge.0",
- "babel-loader": "^8.2.1",
+ "babel-loader": "^8.2.5",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-polyfill": "^6.26.0",
- "bootstrap": "^4.5.3",
+ "bootstrap": "^4.6.2",
"bootstrap-multiselect": "github:davidstutz/bootstrap-multiselect",
- "classnames": "^2.2.6",
+ "classnames": "^2.3.1",
"clean-webpack-plugin": "^3.0.0",
- "css-loader": "^5.0.1",
+ "css-loader": "^5.2.7",
"file-loader": "^6.2.0",
- "jquery": "^3.4.0",
+ "jquery": "^3.6.0",
"jquery-ui-dist": "1.12.1",
- "leaflet": "^1.7.1",
- "mini-css-extract-plugin": "^1.3.1",
+ "leaflet": "^1.8.0",
+ "mini-css-extract-plugin": "^1.6.2",
"mobx": "^5.15.7",
- "mobx-react": "^5.3.6",
- "nanobus": "^4.3.5",
+ "mobx-react": "^5.4.4",
+ "nanobus": "^4.5.0",
"node-addon-api": "^1.7.1",
- "node-sass": "^4.12.0",
- "pnotify": "^4.0.0-alpha.4",
- "popper.js": "^1.14.7",
- "qs": "^6.9.4",
+ "node-sass": "^7.0.1",
+ "pnotify": "^4.0.1",
+ "popper.js": "^1.16.1",
+ "qs": "^6.11.0",
"react": "^16.14.0",
"react-autosize-textarea": "^7.1.0",
- "react-beautiful-dnd": "^12.0.0",
- "react-bootstrap-table-next": "^2.0.0",
- "react-bootstrap-table2-paginator": "^2.0.0",
+ "react-beautiful-dnd": "^12.2.0",
+ "react-bootstrap-table-next": "^2.2.0",
+ "react-bootstrap-table2-paginator": "^2.1.2",
"react-dom": "^16.14.0",
"react-fast-compare": "^2.0.4",
"react-icons": "^3.11.0",
"react-multiselect-checkboxes": "^0.1.1",
"react-paginate": "^6.5.0",
- "react-select": "^3.1.0",
- "react-sortable-hoc": "^1.9.1",
- "react-virtualized": "^9.22.2",
- "router5": "^7.0.1",
- "router5-plugin-browser": "^7.0.1",
- "sass-loader": "^10.1.0",
+ "react-select": "^3.2.0",
+ "react-sortable-hoc": "^1.11.0",
+ "react-virtualized": "^9.22.3",
+ "router5": "^7.0.2",
+ "router5-plugin-browser": "^7.0.2",
+ "sass-loader": "^10.3.1",
"select2": "^4.0.13",
"style-loader": "^2.0.0",
"topojson-client": "^3.1.0",
"uglifyjs-webpack-plugin": "^2.2.0",
- "webpack": "^4.44.2",
- "webpack-bundle-tracker": "^0.4.2-beta",
+ "webpack": "^4.46.0",
+ "webpack-bundle-tracker": "^0.4.3",
"webpack-cli": "^3.3.12",
- "webpack-dev-server": "^3.11.0",
- "webpack-merge": "^5.4.0"
+ "webpack-dev-server": "^3.11.3",
+ "webpack-merge": "^5.8.0"
}
}
diff --git a/requirements.in b/requirements.in
index 18c6c6a08..76f99ce95 100644
--- a/requirements.in
+++ b/requirements.in
@@ -1,6 +1,7 @@
Django~=3.2.12 # 3.2 LTS, supported until Apr 2025
dateparser # used in indicators to translate date strings to date objects
beautifulsoup4 # used in testing to parse html response data
+django-admin-autocomplete-filter # used in Django admin for autocomplete filters
django-admin-sortable2 # used in Django admin for sortable indicators
django-crispy-forms # used in old (siteprofile/formlibrary) forms - deprecated
django-localflavor # provides localization support for numbers/dates/formatting
diff --git a/requirements.txt b/requirements.txt
index a47708038..0f1ff47ed 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,5 +1,5 @@
#
-# This file is autogenerated by pip-compile with python 3.8
+# This file is autogenerated by pip-compile with python 3.9
# To update, run:
#
# pip-compile
@@ -47,6 +47,7 @@ diff-match-patch==20200713
django==3.2.12
# via
# -r requirements.in
+ # django-admin-autocomplete-filter
# django-admin-sortable2
# django-import-export
# django-localflavor
@@ -54,6 +55,8 @@ django==3.2.12
# django-mysql
# django-safedelete
# djangorestframework
+django-admin-autocomplete-filter==0.7.1
+ # via -r requirements.in
django-admin-sortable2==1.0
# via -r requirements.in
django-crispy-forms==1.11.2
diff --git a/scss/_misc_utilities.scss b/scss/_misc_utilities.scss
index ce5bfaf73..828ea3976 100644
--- a/scss/_misc_utilities.scss
+++ b/scss/_misc_utilities.scss
@@ -74,6 +74,10 @@
.show {
display: block;
}
+.waiting {
+ pointer-events: none;
+ opacity: 0.5;
+}
// Layout
diff --git a/scss/components/_program-period.scss b/scss/components/_program-period.scss
new file mode 100644
index 000000000..a17e9b722
--- /dev/null
+++ b/scss/components/_program-period.scss
@@ -0,0 +1,19 @@
+.program-period {
+ &__close {
+ position: relative;
+ right: -10%;
+ }
+ &__body {
+ width: 90%;
+ }
+ &__content {
+ .section__content {
+ display: flex;
+ &--column {
+ flex-direction: column;
+ }
+ }
+ }
+
+}
+
diff --git a/scss/components/_react-multiselect.scss b/scss/components/_react-multiselect.scss
index d0db0ab7a..b92853a2a 100644
--- a/scss/components/_react-multiselect.scss
+++ b/scss/components/_react-multiselect.scss
@@ -20,6 +20,11 @@
box-shadow: 0 1px 1px 1px rgba(0, 0, 0, 0.08);
}
}
+ &.is-invalid {
+ & > div:not(.invalid-feedback) {
+ border: 1px solid $red;
+ }
+ }
.invalid-feedback {
display: block;
}
diff --git a/scss/components/_react_datepicker.scss b/scss/components/_react_datepicker.scss
new file mode 100644
index 000000000..f46121060
--- /dev/null
+++ b/scss/components/_react_datepicker.scss
@@ -0,0 +1,3 @@
+div.react-datepicker__triangle {
+ left: -50% !important;
+}
diff --git a/scss/components/_tola_management.scss b/scss/components/_tola_management.scss
index 8ac8ed2d0..99d01424e 100644
--- a/scss/components/_tola_management.scss
+++ b/scss/components/_tola_management.scss
@@ -227,3 +227,55 @@
list-style-type: none;
padding-inline-start: 0px;
}
+
+// Styling for the Profile tab's GAIT IDs, Fund Codes, Donors table
+.profile__table {
+ label {
+ font-weight: normal;
+ }
+ .profile-table {
+ &__thead {
+ border: none;
+ }
+ &__td {
+ border: none;
+ padding: 0;
+ min-width: 160px;
+ width: 40px;
+
+ &.gaitid {
+ width: 15%;
+ min-width: 80px;
+ }
+ &.fund-code {
+ width: 20%;
+ }
+ &--trash {
+ width: 6px;
+ text-align: center;
+ vertical-align: middle;
+ border: none;
+ padding: 0;
+ }
+ &.invalid {
+ padding: 0 0 0.5rem;
+ }
+ }
+ }
+
+ .invalid-feedback {
+ display: flex;
+ margin-top: 0;
+ flex-wrap: wrap;
+ span {
+ margin-right: 0.25rem;
+ white-space: nowrap;
+ }
+ }
+}
+
+#id_admin_program_profile-tab {
+ .form-control {
+ text-overflow: ellipsis;
+ }
+}
\ No newline at end of file
diff --git a/scss/tola.scss b/scss/tola.scss
index cfc48843b..65282724d 100644
--- a/scss/tola.scss
+++ b/scss/tola.scss
@@ -111,7 +111,8 @@
@import 'components/pnotify'; // overloads pnotify styles & adds our own
@import 'components/import_indicators'; // Import indicator popover styles
@import 'components/component_status'; // Component statuses styles
-
+@import 'components/program-period'; // styling for the program period component
+@import 'components/react_datepicker'; // Styling for the react datepicker component
/* Local custom CSS and overloads for non-BS libraries */
@import 'mc_tola_forms'; // extremely custom!
@import 'maps';
diff --git a/templates/home.html b/templates/home.html
index 674d62fd9..3419fe9c6 100755
--- a/templates/home.html
+++ b/templates/home.html
@@ -85,22 +85,17 @@
{% if program.indicator_count %}
{% if not program.reporting_period_start or not program.reporting_period_end %}
{% if has_high_role %}
- {% blocktrans with id=program.id start_date=program.start_date end_date=program.end_date reporting_period_start=program.reporting_period_start reporting_period_end=program.reporting_period_end %}
- Before adding indicators and performance results, we need to know your program's
-
- reporting start and end dates.
-
+ >
{% endblocktrans %}
{% else %}
diff --git a/templates/indicators/indicator_plan.html b/templates/indicators/indicator_plan.html
index bd98efd48..283537ac8 100755
--- a/templates/indicators/indicator_plan.html
+++ b/templates/indicators/indicator_plan.html
@@ -23,9 +23,6 @@
{% block region_header %}
- {% if program.gaitid %}
- {{ program.gaitid }} -
- {% endif %}
{{ program.name }}:
{% trans "Indicator Plan" %}
diff --git a/templates/indicators/program_page.html b/templates/indicators/program_page.html
index 83d95645d..856655f17 100755
--- a/templates/indicators/program_page.html
+++ b/templates/indicators/program_page.html
@@ -37,10 +37,6 @@ {% trans "Program details" %}
{% endif %}
{% trans "Change log" %}
{% trans "Indicator plan" %}
- {% if program.gait_url %}
- {% comment %}Translators: GAIT is the Grant and Award Information Tracker system used by MercyCorps {% endcomment %}
- {% trans "View program in GAIT" %}
- {% endif %}
is
{{ program.percent_complete }}% complete
{% endblocktrans %}
diff --git a/templates/workflow/new_program_email_notification.html b/templates/workflow/new_program_email_notification.html
new file mode 100644
index 000000000..548938a2c
--- /dev/null
+++ b/templates/workflow/new_program_email_notification.html
@@ -0,0 +1,93 @@
+{% load i18n %}{% autoescape on %}
+
+Dear TolaData Country Administrator,
+
+The following program or project has been created in TolaData:
+
+- Name: {{ program_name }}
+- Start Date: {{ program_start_date }}
+- End Date: {{ program_end_date }}
+- Countries: {{ Countries }}
+- GAIT IDs: {{ gaitids }}
+{% if fundcodes %}
+- Fund Codes: {{ fundcodes }}
+{% else %}
+- Fund Codes: not provided
+{% endif %}
+{% if donors %}
+- Donors: {{ donors }}
+{% else %}
+- Donors: not provided
+{% endif %}
+
+Please ensure the following:
+- The program Settings are correct for the program, and
+- The program or project team members are assigned the appropriate program-level permissions in Admin-Users in order to begin setting up the program in TolaData.
+
+For instructions on how to perform Country Administrator functions, please visit the TolaData User Guide..
+
+
+
+
+Cher administrateur de pays TolaData,
+
+Le programme ou projet suivant a été créé dans TolaData:
+
+- Nom : {{ program_name }}
+- Date de début : {{ program_start_date }}
+- Date de fin : {{ program_end_date }}
+- Pays : {{ Countries }}
+- GAIT IDs: {{ gaitids }}
+{% if fundcodes %}
+- Codes de fonds : {{ fundcodes }}
+{% else %}
+- Codes de fonds : non fourni
+{% endif %}
+{% if donors %}
+- Bailleurs de fonds : {{ donors }}
+{% else %}
+- Bailleurs de fonds : non fourni
+{% endif %}
+
+Veuillez vous assurer de ce qui suit:
+- Les Paramètres du programme sont corrects pour le programme, et
+- Les membres de l'équipe du programme ou du projet ont les permissions appropriées au niveau du programme dans Admin - Utilisateurs afin de commencer à configurer le programme dans TolaData.
+
+Pour obtenir des instructions sur la façon d'exécuter les fonctions de l'administrateur de pays, veuillez consulter le Guide de l'Utilisateur de TolaData.
+
+
+
+
+Estimado Administrador de País de TolaData,
+
+El siguiente programa o proyecto ha sido creado en TolaData:
+
+- Nombre: {{ program_name }}
+- Fecha de inicio: {{ program_start_date }}
+- Fecha de finalización: {{ program_end_date }}
+- Países: {{ Countries }}
+- GAIT IDs: {{ gaitids }}
+{% if fundcodes %}
+- Códigos de fondos: {{ fundcodes }}
+{% else %}
+- Códigos de fondos: no se proporciona
+{% endif %}
+{% if donors %}
+- Financiadores: {{ donors }}
+{% else %}
+- Financiadores: no se proporciona
+{% endif %}
+
+Por favor, asegúrese de lo siguiente:
+- La Configuración del programa es correcta para el programa, y
+- Los miembros del equipo del programa o del proyecto tienen asignados los permisos adecuados a nivel de programa en Admin - Usuarios para poder empezar a configurar el programa en TolaData.
+
+Para obtener instrucciones sobre cómo realizar las funciones de Administrador del País, por favor visite la Guía del Usuario de TolaData.
+
+
+
+
+Thank you,
+The Mercy Corps team
+
+{% endautoescape %}
diff --git a/templates/workflow/new_program_email_notification.txt b/templates/workflow/new_program_email_notification.txt
new file mode 100644
index 000000000..f3cdc9bae
--- /dev/null
+++ b/templates/workflow/new_program_email_notification.txt
@@ -0,0 +1,82 @@
+{% load i18n %}{% autoescape on %}
+
+{% if no_basic_admin %}
+{{ no_basic_admin }}
+{% endif %}
+
+{% if recipient_refused %}
+{{ recipient_refused }}
+{% endif %}
+
+Dear TolaData Country Administrator,
+
+The following program or project has been created in TolaData:
+
+- Name: {{ program_name }}
+- Start Date: {{ program_start_date }}
+- End Date: {{ program_end_date }}
+- Countries: {{ Countries }}
+- GAIT IDs: {{ gaitids }}
+{% if fundcodes %}
+- Fund Codes: {{ fundcodes }}
+{% endif %}
+{% if donors %}
+- Donors: {{ donors }}
+{% endif %}
+
+Please ensure the following:
+- The program Settings are correct for the program, and
+- The program or project team members are assigned the appropriate program-level permissions in Admin-Users in order to begin setting up the program in TolaData.
+For instructions on how to perform Country Administrator functions, please visit the TolaData User Guide: https://mercycorpsemea.sharepoint.com/sites/TolaDataUserGuide
+
+
+Cher administrateur de pays TolaData,
+
+Le programme ou projet suivant a été créé dans TolaData :
+
+- Nom : {{ program_name }}
+- Date de début : {{ program_start_date }}
+- Date de fin : {{ program_end_date }}
+- Pays : {{ Countries }}
+- GAIT IDs: {{ gaitids }}
+{% if fundcodes %}
+- Codes de fonds : {{ fundcodes }}
+{% endif %}
+{% if donors %}
+- Bailleurs de fonds : {{ donors }}
+{% endif %}
+
+
+Veuillez vous assurer de ce qui suit:
+- Les Paramètres du programme sont corrects pour le programme, et
+- Les membres de l'équipe du programme ou du projet ont les permissions appropriées au niveau du programme dans Admin - Utilisateurs afin de commencer à configurer le programme dans TolaData.
+
+Pour obtenir des instructions sur la façon d'exécuter les fonctions de l'administrateur de pays, veuillez consulter le Guide de l'Utilisateur de TolaData: https://mercycorpsemea.sharepoint.com/sites/TolaDataUserGuide
+
+
+Estimado Administrador de País de TolaData,
+
+El siguiente programa o proyecto ha sido creado en TolaData:
+
+- Nombre: {{ program_name }}
+- Fecha de inicio: {{ program_start_date }}
+- Fecha de finalización: {{ program_end_date }}
+- Países: {{ Countries }}
+- GAIT IDs: {{ gaitids }}
+{% if fundcodes %}
+- Códigos de fondos: {{ fundcodes }}
+{% endif %}
+{% if donors %}
+- Financiadores: {{ donors }}
+{% endif %}
+
+Por favor, asegúrese de lo siguiente:
+- La Configuración del programa es correcta para el programa, y
+- Los miembros del equipo del programa o del proyecto tienen asignados los permisos adecuados a nivel de programa en Admin - Usuarios para poder empezar a configurar el programa en TolaData.
+
+Para obtener instrucciones sobre cómo realizar las funciones de Administrador del País, por favor visite la Guía del Usuario de TolaData: https://mercycorpsemea.sharepoint.com/sites/TolaDataUserGuide
+{% endautoescape %}
+
+
+Thank you,
+The Mercy Corps team
diff --git a/templates/workflow/updated_dates_email_notification.html b/templates/workflow/updated_dates_email_notification.html
new file mode 100644
index 000000000..9bc250c7d
--- /dev/null
+++ b/templates/workflow/updated_dates_email_notification.html
@@ -0,0 +1,21 @@
+{% load i18n %}{% autoescape on %}
+
+
Dear TolaData Country Administrator,
+
+
The official program dates of {{ program_name }} were updated based on new information from the Identification Assignment Assistant (IDAA). As a result, the Indicator Tracking Period may need to be updated too. Please coordinate with the program team members to review and update the Indicator Tracking Period, if necessary.
+
+
For instructions on how to perform Country Administrator functions, please visit the TolaData User Guide.
+
+
Cher administrateur de pays TolaData,
+
+
Les dates officielles du programme {{ program_name }} ont été mises à jour sur la base de nouvelles informations provenant de l'Assistant pour l'Attribution de l'Identification (IDAA). Par conséquent, il se peut que la Période de Suivi des Indicateurs doive également être mise à jour. Veuillez vous coordonner avec les membres de l'équipe du programme pour revoir et mettre à jour la Période de Suivi des Indicateurs, si nécessaire.
+
+
Pour obtenir des instructions sur la façon d'exécuter les fonctions de l'administrateur de pays, veuillez consulter le Guide de l'Utilisateur de TolaData.
+
+
Estimado Administrador de País de TolaData,
+
+
Las fechas oficiales del programa {{ program_name }} fueron actualizadas en base a la nueva información del Asistente de Asignación de Identificación (IDAA). Como resultado, el Período de Seguimiento del Indicador puede necesitar ser actualizado también. Por favor, coordine con los miembros del equipo del programa para revisar y actualizar el Período de Seguimiento del Indicador, si es necesario.
+
+
Para obtener instrucciones sobre cómo realizar las funciones de Administrador del País, por favor visite la Guía del Usuario de TolaData.
+
+{% endautoescape %}
\ No newline at end of file
diff --git a/templates/workflow/updated_dates_email_notification.txt b/templates/workflow/updated_dates_email_notification.txt
new file mode 100644
index 000000000..c3a872315
--- /dev/null
+++ b/templates/workflow/updated_dates_email_notification.txt
@@ -0,0 +1,27 @@
+{% load i18n %}{% autoescape on %}
+
+{% if no_basic_admin %}
+{{ no_basic_admin }}
+{% endif %}
+
+Dear TolaData Country Administrator,
+
+The official program dates of {{ program_name }} were updated based on new information from the Identification Assignment Assistant (IDAA). As a result, the Indicator Tracking Period may need to be updated too. Please coordinate with the program team members to review and update the Indicator Tracking Period, if necessary.
+
+For instructions on how to perform Country Administrator functions, please visit the TolaData User Guide: https://mercycorpsemea.sharepoint.com/sites/TolaDataUserGuide.
+
+
+Cher administrateur de pays TolaData,
+
+Les dates officielles du programme {{ program_name }} ont été mises à jour sur la base de nouvelles informations provenant de l'Assistant pour l'Attribution de l'Identification (IDAA). Par conséquent, il se peut que la Période de Suivi des Indicateurs doive également être mise à jour. Veuillez vous coordonner avec les membres de l'équipe du programme pour revoir et mettre à jour la Période de Suivi des Indicateurs, si nécessaire.
+
+Pour obtenir des instructions sur la façon d'exécuter les fonctions de l'administrateur de pays, veuillez consulter le Guide de l'Utilisateur de TolaData: https://mercycorpsemea.sharepoint.com/sites/TolaDataUserGuide.
+
+
+Estimado Administrador de País de TolaData,
+
+Las fechas oficiales del programa {{ program_name }} fueron actualizadas en base a la nueva información del Asistente de Asignación de Identificación (IDAA). Como resultado, el Período de Seguimiento del Indicador puede necesitar ser actualizado también. Por favor, coordine con los miembros del equipo del programa para revisar y actualizar el Período de Seguimiento del Indicador, si es necesario.
+
+Para obtener instrucciones sobre cómo realizar las funciones de Administrador del País, por favor visite la Guía del Usuario de TolaData: https://mercycorpsemea.sharepoint.com/sites/TolaDataUserGuide.
+
+{% endautoescape %}
\ No newline at end of file
diff --git a/tola/db_translations.js b/tola/db_translations.js
index db23703d7..7c777a45a 100644
--- a/tola/db_translations.js
+++ b/tola/db_translations.js
@@ -1,31 +1,31 @@
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string0 = gettext("By training")
+string0 = gettext("Baseline")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string1 = gettext("Endline")
+string1 = gettext("By distribution")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string2 = gettext("Weekly")
+string2 = gettext("Semi-annual")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string3 = gettext("Annual")
+string3 = gettext("Post shock")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string4 = gettext("Final evaluation")
+string4 = gettext("By event")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
string5 = gettext("Monthly")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string6 = gettext("Midline")
+string6 = gettext("Annual")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string7 = gettext("Baseline")
+string7 = gettext("By training")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string8 = gettext("By distribution")
+string8 = gettext("Final evaluation")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string9 = gettext("By batch")
+string9 = gettext("Midline")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string10 = gettext("Quarterly")
+string10 = gettext("Endline")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string11 = gettext("By event")
+string11 = gettext("Quarterly")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string12 = gettext("Post shock")
+string12 = gettext("Weekly")
// # Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string13 = gettext("Semi-annual")
+string13 = gettext("By batch")
// # Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
string14 = gettext("Agribusiness")
// # Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
@@ -139,38 +139,34 @@ string68 = gettext("Process / Management")
// # Translators: The main area of a program
string69 = gettext("Economic Opportunity")
// # Translators: The main area of a program
-string70 = gettext("Economic Opportunity / Opportunité économique / Oportunidad económica")
+string70 = gettext("Food Security")
// # Translators: The main area of a program
-string71 = gettext("Food Security")
+string71 = gettext("Good Governance and Peace")
// # Translators: The main area of a program
-string72 = gettext("Good Governance and Peace")
+string72 = gettext("Resilience approach (tick this box if the program used a resilience approach)")
// # Translators: The main area of a program
-string73 = gettext("Good Governance and Peace / Bonne gouvernance et paix / Buena gobernanza y paz")
-// # Translators: The main area of a program
-string74 = gettext("Resilience approach (tick this box if the program used a resilience approach)")
-// # Translators: The main area of a program
-string75 = gettext("Water Security")
+string73 = gettext("Water Security")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string76 = gettext("Agriculture")
+string74 = gettext("Agriculture")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string77 = gettext("Cash and Voucher Assistance")
+string75 = gettext("Cash and Voucher Assistance")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string78 = gettext("Direct")
+string76 = gettext("Direct")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string79 = gettext("Employment")
+string77 = gettext("Employment")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string80 = gettext("Environment (DRR, Energy and Water)")
+string78 = gettext("Environment (DRR, Energy and Water)")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string81 = gettext("Financial Services")
+string79 = gettext("Financial Services")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string82 = gettext("Indirect")
+string80 = gettext("Indirect")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string83 = gettext("Infrastructure (non - WASH, non - energy)")
+string81 = gettext("Infrastructure (non - WASH, non - energy)")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string84 = gettext("Nutrition")
+string82 = gettext("Nutrition")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string85 = gettext("Peace, Governance and Partnership")
+string83 = gettext("Peace, Governance and Partnership")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string86 = gettext("Public Health (non - nutrition, non - WASH)")
+string84 = gettext("Public Health (non - nutrition, non - WASH)")
// # Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string87 = gettext("WASH")
+string85 = gettext("WASH")
diff --git a/tola/db_translations.py b/tola/db_translations.py
index 244668597..c9633a675 100644
--- a/tola/db_translations.py
+++ b/tola/db_translations.py
@@ -1,33 +1,33 @@
from django.utils.translation import ugettext_lazy as _
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string0 = _("By training")
+string0 = _("Baseline")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string1 = _("Endline")
+string1 = _("By distribution")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string2 = _("Weekly")
+string2 = _("Semi-annual")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string3 = _("Annual")
+string3 = _("Post shock")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string4 = _("Final evaluation")
+string4 = _("By event")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
string5 = _("Monthly")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string6 = _("Midline")
+string6 = _("Annual")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string7 = _("Baseline")
+string7 = _("By training")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string8 = _("By distribution")
+string8 = _("Final evaluation")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string9 = _("By batch")
+string9 = _("Midline")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string10 = _("Quarterly")
+string10 = _("Endline")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string11 = _("By event")
+string11 = _("Quarterly")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string12 = _("Post shock")
+string12 = _("Weekly")
# Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-string13 = _("Semi-annual")
+string13 = _("By batch")
# Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
string14 = _("Agribusiness")
# Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
@@ -141,38 +141,34 @@
# Translators: The main area of a program
string69 = _("Economic Opportunity")
# Translators: The main area of a program
-string70 = _("Economic Opportunity / Opportunité économique / Oportunidad económica")
+string70 = _("Food Security")
# Translators: The main area of a program
-string71 = _("Food Security")
+string71 = _("Good Governance and Peace")
# Translators: The main area of a program
-string72 = _("Good Governance and Peace")
+string72 = _("Resilience approach (tick this box if the program used a resilience approach)")
# Translators: The main area of a program
-string73 = _("Good Governance and Peace / Bonne gouvernance et paix / Buena gobernanza y paz")
-# Translators: The main area of a program
-string74 = _("Resilience approach (tick this box if the program used a resilience approach)")
-# Translators: The main area of a program
-string75 = _("Water Security")
+string73 = _("Water Security")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string76 = _("Agriculture")
+string74 = _("Agriculture")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string77 = _("Cash and Voucher Assistance")
+string75 = _("Cash and Voucher Assistance")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string78 = _("Direct")
+string76 = _("Direct")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string79 = _("Employment")
+string77 = _("Employment")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string80 = _("Environment (DRR, Energy and Water)")
+string78 = _("Environment (DRR, Energy and Water)")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string81 = _("Financial Services")
+string79 = _("Financial Services")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string82 = _("Indirect")
+string80 = _("Indirect")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string83 = _("Infrastructure (non - WASH, non - energy)")
+string81 = _("Infrastructure (non - WASH, non - energy)")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string84 = _("Nutrition")
+string82 = _("Nutrition")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string85 = _("Peace, Governance and Partnership")
+string83 = _("Peace, Governance and Partnership")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string86 = _("Public Health (non - nutrition, non - WASH)")
+string84 = _("Public Health (non - nutrition, non - WASH)")
# Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-string87 = _("WASH")
+string85 = _("WASH")
diff --git a/tola/locale/es/LC_MESSAGES/django.mo b/tola/locale/es/LC_MESSAGES/django.mo
index 0ba5c9210..3b4b0c212 100644
Binary files a/tola/locale/es/LC_MESSAGES/django.mo and b/tola/locale/es/LC_MESSAGES/django.mo differ
diff --git a/tola/locale/es/LC_MESSAGES/django.po b/tola/locale/es/LC_MESSAGES/django.po
index 1e538cf98..ef1fdd959 100644
--- a/tola/locale/es/LC_MESSAGES/django.po
+++ b/tola/locale/es/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-24 10:02-0700\n"
-"PO-Revision-Date: 2022-05-18 11:18-0400\n"
+"POT-Creation-Date: 2022-10-18 12:41-0700\n"
+"PO-Revision-Date: 2022-10-18 13:49-0600\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: es\n"
@@ -13,47 +13,59 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.0.1\n"
-#: indicators/admin.py:43
+#: indicators/admin.py:64
msgid "Show all"
msgstr "Ver todo"
-#: indicators/admin.py:55
+#: indicators/admin.py:76
msgid "status"
msgstr "estado"
#. Translators: This is a filter option that allows users to limit results based on status of archived or not-archived
-#: indicators/admin.py:61
+#: indicators/admin.py:82
msgid "Active (not archived)"
msgstr "Activo (no archivado)"
#. Translators: This is a filter option that allows users to limit results based on status of archived or not-archived
-#: indicators/admin.py:63
+#: indicators/admin.py:84
msgid "Inactive (archived)"
msgstr "Inactivo (archivado)"
#. Translators: This is label text for an individual category in a listing of disaggregation categories
-#: indicators/admin.py:154
+#: indicators/admin.py:319
msgid "Category"
msgstr "Categoría"
#. Translators: This is label text for a listing of disaggregation categories
-#: indicators/admin.py:156
+#: indicators/admin.py:321
msgid "Categories"
msgstr "Categorías"
-#. Translators: Heading for list of disaggregation types assigned to a country
-#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
-#: indicators/admin.py:171 indicators/indicator_plan.py:75
-#: indicators/models.py:522 indicators/models.py:626 indicators/models.py:1347
-#: templates/indicators/disaggregation_print.html:55
-#: templates/indicators/disaggregation_report.html:94
-#: tola_management/models.py:924 tola_management/models.py:932
-msgid "Disaggregation"
-msgstr "Desagregación"
+#: indicators/admin.py:384 indicators/models.py:519
+#, fuzzy
+#| msgid "Global disaggregation"
+msgid "Global Disaggregation"
+msgstr "Desagregación global"
-#: indicators/export_renderers.py:54
+#: indicators/admin.py:385
+#, fuzzy
+#| msgid "Global disaggregations"
+msgid "Global Disaggregations"
+msgstr "Desagregaciones globales"
+
+#: indicators/admin.py:417
+#, fuzzy
+#| msgid "Country Disaggregations"
+msgid "Country Disaggregation"
+msgstr "Desagregación del País"
+
+#: indicators/admin.py:418
+msgid "Country Disaggregations"
+msgstr "Desagregación del País"
+
+#: indicators/export_renderers.py:54 tola_management/models.py:831
msgid "Program ID"
-msgstr "Identificador de Programa"
+msgstr "Identificador de programa"
#: indicators/export_renderers.py:55
msgid "Indicator ID"
@@ -65,22 +77,22 @@ msgid "No."
msgstr "No."
#: indicators/export_renderers.py:58 indicators/forms.py:392
-#: indicators/models.py:1566 indicators/models.py:2000
-#: indicators/models.py:2293 indicators/views/views_program.py:138
+#: indicators/models.py:1573 indicators/models.py:2013
+#: indicators/models.py:2305 indicators/views/views_program.py:138
#: indicators/views/views_program.py:177
#: templates/indicators/disaggregation_print.html:53
#: templates/indicators/disaggregation_report.html:91
-#: tola_management/programadmin.py:62 tola_management/programadmin.py:110
+#: tola_management/programadmin.py:66 tola_management/programadmin.py:114
msgid "Indicator"
msgstr "Indicador"
#: indicators/export_renderers.py:61 indicators/indicator_plan.py:41
-#: indicators/models.py:138 indicators/models.py:1263
+#: indicators/models.py:134 indicators/models.py:1270
msgid "Level"
msgstr "Nivel"
#: indicators/export_renderers.py:63 indicators/indicator_plan.py:83
-#: indicators/models.py:1331 tola_management/models.py:392
+#: indicators/models.py:1338 tola_management/models.py:405
msgid "Unit of measure"
msgstr "Unidad de medida"
@@ -90,56 +102,56 @@ msgid "Change"
msgstr "Cambio"
#. Translators: 'C' as in Cumulative and 'NC' as in Non Cumulative
-#: indicators/export_renderers.py:72 indicators/models.py:1382
+#: indicators/export_renderers.py:72 indicators/models.py:1389
msgid "C / NC"
msgstr "C / NC"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: indicators/export_renderers.py:77 indicators/forms.py:259
-#: indicators/forms.py:557 indicators/models.py:1355 tola/db_translations.py:18
-#: tola_management/models.py:398
+#: indicators/forms.py:557 indicators/models.py:1362 tola/db_translations.py:4
+#: tola_management/models.py:411
msgid "Baseline"
msgstr "Base"
-#: indicators/export_renderers.py:82 indicators/models.py:1087
-#: indicators/models.py:1989
+#: indicators/export_renderers.py:82 indicators/models.py:1094
+#: indicators/models.py:2002
msgid "Life of Program (LoP) only"
msgstr "Vida del programa (LoP) solamente"
-#: indicators/export_renderers.py:83 indicators/models.py:1088
+#: indicators/export_renderers.py:83 indicators/models.py:1095
msgid "Midline and endline"
msgstr "Línea media y línea final"
#. Translators: label for the date of the last completed Annual target period.
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/export_renderers.py:84 indicators/models.py:1089
+#: indicators/export_renderers.py:84 indicators/models.py:1096
#: templates/indicators/program_target_period_info_helptext.html:16
-#: tola/db_translations.py:10
+#: tola/db_translations.py:16
msgid "Annual"
msgstr "Anual"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/export_renderers.py:85 indicators/models.py:1090
-#: tola/db_translations.py:30
+#: indicators/export_renderers.py:85 indicators/models.py:1097
+#: tola/db_translations.py:8
msgid "Semi-annual"
msgstr "Semestral"
-#: indicators/export_renderers.py:86 indicators/models.py:1091
+#: indicators/export_renderers.py:86 indicators/models.py:1098
msgid "Tri-annual"
msgstr "Trienal"
#. Translators: this is the measure of time (3 months)
#. Translators: label for the date of the last completed Quarterly target period.
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/export_renderers.py:88 indicators/models.py:1092
+#: indicators/export_renderers.py:88 indicators/models.py:1099
#: templates/indicators/program_target_period_info_helptext.html:22
-#: tola/db_translations.py:24
+#: tola/db_translations.py:26
msgid "Quarterly"
msgstr "Trimestral"
#. Translators: label for the date of the last completed Monthly target period.
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/export_renderers.py:89 indicators/models.py:1093
+#: indicators/export_renderers.py:89 indicators/models.py:1100
#: templates/indicators/program_target_period_info_helptext.html:24
#: tola/db_translations.py:14
msgid "Monthly"
@@ -151,7 +163,7 @@ msgid "*All values in this report are rounded to two decimal places."
msgstr "*Todos los valores de este informe se redondean a dos decimales."
#. Translators: This single word is part of this longer sentence: :Please complete all required fields in the Target tab."
-#: indicators/export_renderers.py:157 indicators/models.py:2009
+#: indicators/export_renderers.py:157 indicators/models.py:2022
#: templates/indicators/indicator_form_common_js.html:1228
#: templates/indicators/result_table.html:32
#: workflow/serializers_new/period_serializers.py:46
@@ -159,7 +171,7 @@ msgid "Target"
msgstr "Objetivo"
#: indicators/export_renderers.py:157 indicators/export_renderers.py:158
-#: indicators/models.py:2287 templates/indicators/result_table.html:33
+#: indicators/models.py:2299 templates/indicators/result_table.html:33
#: workflow/serializers_new/period_serializers.py:52
msgid "Actual"
msgstr "Real"
@@ -174,21 +186,21 @@ msgstr "% Cumplido"
#: indicators/serializers_new/iptt_period_data_serializers.py:108
#: indicators/templatetags/mytags.py:93
#: indicators/views/bulk_indicator_import_views.py:113
-#: tola_management/models.py:165 tola_management/models.py:454
-#: tola_management/programadmin.py:181
+#: tola_management/models.py:167 tola_management/models.py:467
+#: tola_management/programadmin.py:185
msgid "N/A"
msgstr "N/A"
#. Translators: Page title for a log of all changes to indicators over a program's history
#. Translators: Sheet title for a log of all changes to indicators over a program's history
#. Translators: Page title for a log of all changes to indicators over a program's history
-#: indicators/export_renderers.py:406 tola_management/programadmin.py:125
-#: tola_management/programadmin.py:620 tola_management/views.py:336
+#: indicators/export_renderers.py:406 tola_management/programadmin.py:129
+#: tola_management/programadmin.py:769 tola_management/views.py:353
msgid "Program change log"
msgstr "Registro de cambios en el programa"
#. Translators: referring to an indicator whose results accumulate over time
-#: indicators/export_renderers.py:430 indicators/models.py:1710
+#: indicators/export_renderers.py:430 indicators/models.py:1718
msgid "Cumulative"
msgstr "Acumulativo"
@@ -202,8 +214,8 @@ msgstr "No acumulativo"
msgid "No data"
msgstr "Sin datos"
-#: indicators/forms.py:258 indicators/models.py:108 indicators/models.py:1518
-#: indicators/models.py:2300 workflow/forms.py:100 workflow/models.py:562
+#: indicators/forms.py:258 indicators/models.py:103 indicators/models.py:1525
+#: indicators/models.py:2312 workflow/forms.py:100 workflow/models.py:577
msgid "Program"
msgstr "Programa"
@@ -211,7 +223,7 @@ msgstr "Programa"
#. the Result that's being entered into the form
#. Translators: Number of the indicator being shown
#: indicators/forms.py:265 indicators/views/views_program.py:110
-#: tola_management/models.py:413 tola_management/programadmin.py:109
+#: tola_management/models.py:426 tola_management/programadmin.py:113
msgid "Result level"
msgstr "Nivel del resultado"
@@ -263,7 +275,7 @@ msgstr "Desagregaciones de %(country_name)s"
#. Translators: Label of a form field. User specifies whether changes should increase or decrease.
#: indicators/forms.py:400 indicators/forms.py:625
-#: indicators/indicator_plan.py:90 tola_management/models.py:396
+#: indicators/indicator_plan.py:90 tola_management/models.py:409
msgid "Direction of change"
msgstr "Dirección de cambio"
@@ -297,7 +309,7 @@ msgstr ""
#. Translators: This is a result that was actually achieved, versus one that was planned.
#: indicators/forms.py:684
#: templates/indicators/results/result_form_disaggregation_fields.html:62
-#: tola_management/models.py:406
+#: tola_management/models.py:419
msgid "Actual value"
msgstr "Valor real"
@@ -309,7 +321,7 @@ msgstr "Sitio"
#. Translators: field label that identifies which of a set of a targets (e.g. monthly/annual) a result
#. is being compared to
-#: indicators/forms.py:698 tola_management/models.py:405
+#: indicators/forms.py:698 tola_management/models.py:418
msgid "Measure against target"
msgstr "Medida contra objetivo"
@@ -317,7 +329,7 @@ msgstr "Medida contra objetivo"
msgid "Link to file or folder"
msgstr "Enlace al archivo o carpeta"
-#: indicators/forms.py:713 tola_management/models.py:404
+#: indicators/forms.py:713 tola_management/models.py:417
msgid "Result date"
msgstr "Fecha del resultado"
@@ -379,6 +391,16 @@ msgstr "Origen del indicador"
msgid "Indicator definition"
msgstr "Definición del indicador"
+#. Translators: Heading for list of disaggregation types assigned to a country
+#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
+#: indicators/indicator_plan.py:75 indicators/models.py:516
+#: indicators/models.py:622 indicators/models.py:1354
+#: templates/indicators/disaggregation_print.html:55
+#: templates/indicators/disaggregation_report.html:94
+#: tola_management/models.py:955 tola_management/models.py:963
+msgid "Disaggregation"
+msgstr "Desagregación"
+
#: indicators/indicator_plan.py:97
msgid "# / %"
msgstr "# / %"
@@ -391,34 +413,34 @@ msgstr "Cálculo"
msgid "Baseline value"
msgstr "Valor de referencia"
-#: indicators/indicator_plan.py:116 tola_management/models.py:395
+#: indicators/indicator_plan.py:116 tola_management/models.py:408
msgid "LOP target"
msgstr "Objetivo LOP"
-#: indicators/indicator_plan.py:122 indicators/models.py:1386
-#: tola_management/models.py:397
+#: indicators/indicator_plan.py:122 indicators/models.py:1393
+#: tola_management/models.py:410
msgid "Rationale for target"
msgstr "Justificación del objetivo"
-#: indicators/indicator_plan.py:129 indicators/models.py:1394
+#: indicators/indicator_plan.py:129 indicators/models.py:1401
msgid "Target frequency"
msgstr "Frecuencia objetivo"
#: indicators/indicator_plan.py:137 indicators/views/views_program.py:112
-#: tola_management/models.py:415
+#: tola_management/models.py:428
msgid "Means of verification"
msgstr "Medios de verificación"
-#: indicators/indicator_plan.py:144 indicators/models.py:1426
-#: tola_management/models.py:416
+#: indicators/indicator_plan.py:144 indicators/models.py:1433
+#: tola_management/models.py:429
msgid "Data collection method"
msgstr "Método de recopilación de datos"
-#: indicators/indicator_plan.py:151 indicators/models.py:1436
+#: indicators/indicator_plan.py:151 indicators/models.py:1443
msgid "Frequency of data collection"
msgstr "Frecuencia de recopilación de datos"
-#: indicators/indicator_plan.py:158 indicators/models.py:1446
+#: indicators/indicator_plan.py:158 indicators/models.py:1453
msgid "Data points"
msgstr "Puntos de datos"
@@ -426,35 +448,35 @@ msgstr "Puntos de datos"
msgid "Responsible person(s) & team"
msgstr "Persona(s) o equipo responsable"
-#: indicators/indicator_plan.py:173 indicators/models.py:1462
-#: tola_management/models.py:417
+#: indicators/indicator_plan.py:173 indicators/models.py:1469
+#: tola_management/models.py:430
msgid "Method of analysis"
msgstr "Método de análisis"
-#: indicators/indicator_plan.py:180 indicators/models.py:1469
+#: indicators/indicator_plan.py:180 indicators/models.py:1476
msgid "Information use"
msgstr "Uso de información"
-#: indicators/indicator_plan.py:187 indicators/models.py:1480
+#: indicators/indicator_plan.py:187 indicators/models.py:1487
msgid "Frequency of reporting"
msgstr "Frecuencia de informes"
#. Translators: This is the title of a form field.
-#: indicators/indicator_plan.py:194 indicators/models.py:1499
+#: indicators/indicator_plan.py:194 indicators/models.py:1506
msgid "Data quality assurance techniques"
msgstr "Medidas de garantía de calidad de los datos"
#. Translators: This is the title of a form field.
-#: indicators/indicator_plan.py:201 indicators/models.py:1489
+#: indicators/indicator_plan.py:201 indicators/models.py:1496
msgid "Data quality assurance details"
msgstr "Detalles de la garantía de calidad de los datos"
-#: indicators/indicator_plan.py:208 indicators/models.py:1505
+#: indicators/indicator_plan.py:208 indicators/models.py:1512
msgid "Data issues"
msgstr "Problemas de datos"
-#: indicators/indicator_plan.py:215 indicators/models.py:1514
-#: indicators/models.py:2290
+#: indicators/indicator_plan.py:215 indicators/models.py:1521
+#: indicators/models.py:2302
msgid "Comments"
msgstr "Comentarios"
@@ -469,83 +491,103 @@ msgstr "Indicadores sin asignar a un nivel del sistema de resultados"
msgid "Indicator plan"
msgstr "Plan de indicadores"
-#: indicators/models.py:66 indicators/models.py:1252
+#: indicators/models.py:65 indicators/models.py:1259
msgid "Indicator type"
msgstr "Tipo de indicador"
-#: indicators/models.py:67 indicators/models.py:87 indicators/models.py:109
-#: indicators/models.py:673 indicators/models.py:690
-#: tola_management/models.py:811 workflow/forms.py:134
+#: indicators/models.py:66 indicators/models.py:81 indicators/models.py:104
+#: indicators/models.py:673 indicators/models.py:691
+#: tola_management/models.py:828 workflow/forms.py:134
msgid "Description"
msgstr "Descripción"
-#: indicators/models.py:68 indicators/models.py:89 indicators/models.py:110
-#: indicators/models.py:133 indicators/models.py:412 indicators/models.py:437
-#: indicators/models.py:528 indicators/models.py:629 indicators/models.py:674
-#: indicators/models.py:692 indicators/models.py:718 indicators/models.py:739
-#: indicators/models.py:1542 indicators/models.py:2023
-#: indicators/models.py:2314 workflow/models.py:59 workflow/models.py:128
+#: indicators/models.py:67 indicators/models.py:83 indicators/models.py:105
+#: indicators/models.py:129 indicators/models.py:404 indicators/models.py:430
+#: indicators/models.py:522 indicators/models.py:625 indicators/models.py:674
+#: indicators/models.py:693 indicators/models.py:733 indicators/models.py:750
+#: indicators/models.py:1549 indicators/models.py:2036
+#: indicators/models.py:2326 workflow/models.py:73 workflow/models.py:142
msgid "Create date"
msgstr "Fecha de creación"
-#: indicators/models.py:69 indicators/models.py:90 indicators/models.py:111
-#: indicators/models.py:134 indicators/models.py:413 indicators/models.py:438
-#: indicators/models.py:529 indicators/models.py:630 indicators/models.py:676
-#: indicators/models.py:693 indicators/models.py:719 indicators/models.py:740
-#: indicators/models.py:1546 indicators/models.py:2024
-#: indicators/models.py:2315 workflow/models.py:60 workflow/models.py:129
+#: indicators/models.py:68 indicators/models.py:84 indicators/models.py:106
+#: indicators/models.py:130 indicators/models.py:405 indicators/models.py:431
+#: indicators/models.py:523 indicators/models.py:626 indicators/models.py:676
+#: indicators/models.py:694 indicators/models.py:734 indicators/models.py:751
+#: indicators/models.py:1553 indicators/models.py:2037
+#: indicators/models.py:2327 workflow/models.py:74 workflow/models.py:143
msgid "Edit date"
msgstr "Fecha de edición"
-#: indicators/models.py:72
+#: indicators/models.py:71
msgid "Indicator Type"
msgstr "Tipo de indicador"
-#: indicators/models.py:85 indicators/models.py:107 indicators/models.py:128
-#: indicators/models.py:408 indicators/models.py:715 indicators/models.py:1289
-#: tola_management/models.py:133 tola_management/models.py:391
-#: tola_management/models.py:808 tola_management/models.py:864
+#: indicators/models.py:72
+#, fuzzy
+#| msgid "Indicator Type"
+msgid "Indicator Types"
+msgstr "Tipo de indicador"
+
+#: indicators/models.py:79 indicators/models.py:102 indicators/models.py:124
+#: indicators/models.py:400 indicators/models.py:730 indicators/models.py:1296
+#: tola_management/models.py:135 tola_management/models.py:404
+#: tola_management/models.py:891
msgid "Name"
msgstr "Nombre"
-#: indicators/models.py:86 workflow/models.py:168 workflow/models.py:529
-#: workflow/models.py:907
+#: indicators/models.py:80 workflow/models.py:147 workflow/models.py:190
+#: workflow/models.py:544 workflow/models.py:1024
msgid "Country"
msgstr "País"
-#: indicators/models.py:88 templates/workflow/site_profile_list.html:53
+#: indicators/models.py:82 templates/workflow/site_profile_list.html:53
msgid "Status"
msgstr "Estado"
-#: indicators/models.py:93
+#: indicators/models.py:87 indicators/models.py:1288
+msgid "Country Strategic Objective"
+msgstr "Objetivo estratégico del país"
+
+#: indicators/models.py:88
msgid "Country Strategic Objectives"
msgstr "Objetivos Estratégicos del País"
-#: indicators/models.py:114 indicators/models.py:1275
+#: indicators/models.py:109 indicators/models.py:1282
msgid "Program Objective"
msgstr "Objetivo del programa"
-#: indicators/models.py:129 indicators/views/views_program.py:113
-#: tola_management/models.py:411
+#: indicators/models.py:110
+#, fuzzy
+#| msgid "Program Objective"
+msgid "Program Objectives"
+msgstr "Objetivo del programa"
+
+#: indicators/models.py:125 indicators/views/views_program.py:113
+#: tola_management/models.py:424
msgid "Assumptions"
msgstr "Suposiciones"
-#: indicators/models.py:132 indicators/models.py:628
+#: indicators/models.py:128 indicators/models.py:624
msgid "Sort order"
msgstr "Orden"
+#: indicators/models.py:135
+msgid "Levels"
+msgstr "Niveles"
+
#. Translators: Name of the most commonly used organizational hierarchy of KPIs at Mercy Corps.
-#: indicators/models.py:328
+#: indicators/models.py:320
msgid "Mercy Corps"
msgstr "Mercy Corps"
#. Translators: Highest level objective of a project. High level KPIs can be attached here.
-#: indicators/models.py:331 indicators/models.py:369 indicators/models.py:397
+#: indicators/models.py:323 indicators/models.py:361 indicators/models.py:389
msgid "Goal"
msgstr "Objetivo"
#. Translators: Below Goals, the 2nd highest organizing level to attach KPIs to.
-#: indicators/models.py:333 indicators/models.py:345
+#: indicators/models.py:325 indicators/models.py:337
msgid "Outcome"
msgstr "Resultado"
@@ -553,162 +595,200 @@ msgstr "Resultado"
#. Translators: Below Sub-Purpose, the 4th highest organizing level to attach KPIs to. Noun.
#. Translators: Below Sub-Intermediate Result, the 4th highest organizing level to attach KPIs to. Noun.
#. Translators: Below Intermediate Outcome, the lowest organizing level to attach KPIs to. Noun.
-#: indicators/models.py:335 indicators/models.py:347 indicators/models.py:375
-#: indicators/models.py:389 indicators/models.py:405
+#: indicators/models.py:327 indicators/models.py:339 indicators/models.py:367
+#: indicators/models.py:381 indicators/models.py:397
msgid "Output"
msgstr "Salida"
#. Translators: Below Output, the lowest organizing level to attach KPIs to.
#. Translators: Below Result, the lowest organizing level to attach KPIs to.
-#: indicators/models.py:337 indicators/models.py:363
+#: indicators/models.py:329 indicators/models.py:355
msgid "Activity"
msgstr "Actividad"
#. Translators: Name of the most commonly used organizational hierarchy of KPIs at Mercy Corps.
-#: indicators/models.py:340
+#: indicators/models.py:332
msgid "Department for International Development (DFID)"
msgstr "Departamento de Desarrollo Internacional (DFID)"
#. Translators: Highest level objective of a project. High level KPIs can be attached here.
-#: indicators/models.py:343
+#: indicators/models.py:335
msgid "Impact"
msgstr "Impacto"
#. Translators: Below Output, the lowest organizing level to attach KPIs to.
#. Translators: Below Output, the lowest organizing level to attach KPIs to. Noun.
-#: indicators/models.py:349 indicators/models.py:377 indicators/models.py:391
+#: indicators/models.py:341 indicators/models.py:369 indicators/models.py:383
msgid "Input"
msgstr "Entrada"
#. Translators: The KPI organizational hierarchy used when we work on EC projects.
-#: indicators/models.py:352
+#: indicators/models.py:344
msgid "European Commission (EC)"
msgstr "Comisión Europea (CE)"
#. Translators: Highest level goal of a project. High level KPIs can be attached here.
-#: indicators/models.py:355
+#: indicators/models.py:347
msgid "Overall Objective"
msgstr "Objetivo General"
#. Translators: Below Overall Objective, the 2nd highest organizing level to attach KPIs to.
-#: indicators/models.py:357
+#: indicators/models.py:349
msgid "Specific Objective"
msgstr "Objetivo Específico"
#. Translators: Below Specific Objective, the 3rd highest organizing level to attach KPIs to.
#. Translators: Below Goal, the 2nd highest organizing level to attach KPIs to.
-#: indicators/models.py:359 indicators/models.py:371 indicators/models.py:399
+#: indicators/models.py:351 indicators/models.py:363 indicators/models.py:391
msgid "Purpose"
msgstr "Finalidad"
#. Translators: Below Purpose, the 4th highest organizing level to attach KPIs to.
-#: indicators/models.py:361 templates/indicators/result_form_modal.html:136
+#: indicators/models.py:353 templates/indicators/result_form_modal.html:136
msgid "Result"
msgstr "Resultado"
#. Translators: The KPI organizational hierarchy used when we work on certain USAID projects.
-#: indicators/models.py:366
+#: indicators/models.py:358
msgid "USAID 1"
msgstr "USAID 1"
#. Translators: Below Purpose, the 3rd highest organizing level to attach KPIs to.
-#: indicators/models.py:373 indicators/models.py:401
+#: indicators/models.py:365 indicators/models.py:393
msgid "Sub-Purpose"
msgstr "Subpropósito"
#. Translators: The KPI organizational hierarchy used when we work on certain USAID projects.
-#: indicators/models.py:380
+#: indicators/models.py:372
msgid "USAID 2"
msgstr "USAID 2"
#. Translators: Highest level goal of a project. High level KPIs can be attached here.
-#: indicators/models.py:383
+#: indicators/models.py:375
msgid "Strategic Objective"
msgstr "Objetivo Estratégico"
#. Translators: Below Strategic Objective, the 2nd highest organizing level to attach KPIs to.
-#: indicators/models.py:385
+#: indicators/models.py:377
msgid "Intermediate Result"
msgstr "Resultado Intermedio"
#. Translators: Below Intermediate Result, the 3rd highest organizing level to attach KPIs to.
-#: indicators/models.py:387
+#: indicators/models.py:379
msgid "Sub-Intermediate Result"
msgstr "Resultado Sub-Intermedio"
#. Translators: The KPI organizational hierarchy used when we work on USAID Food for Peace projects.
-#: indicators/models.py:394
+#: indicators/models.py:386
msgid "USAID FFP"
msgstr "USAID FFP"
#. Translators: Below Sub-Purpose, the 4th highest organizing level to attach KPIs to.
-#: indicators/models.py:403
+#: indicators/models.py:395
msgid "Intermediate Outcome"
msgstr "Resultado Intermedio"
#. Translators: This is depth of the selected object (a level tier) in a hierarchy of level tier objects
-#: indicators/models.py:411
+#: indicators/models.py:403
msgid "Level Tier depth"
msgstr "Profundidad del nivel"
#. Translators: Indicators are assigned to Levels. Levels are organized in a hierarchy of Tiers.
-#: indicators/models.py:418
+#: indicators/models.py:410
msgid "Level Tier"
msgstr "Nivel"
+#: indicators/models.py:411
+#, fuzzy
+#| msgid "Level Tier"
+msgid "Level Tiers"
+msgstr "Nivel"
+
#. Translators: Indicators are assigned to Levels. Levels are organized in a hierarchy of Tiers. There are several templates that users can choose from with different names for the Tiers.
-#: indicators/models.py:442
-msgid "Level tier templates"
+#: indicators/models.py:435 indicators/models.py:436
+#, fuzzy
+#| msgid "Level tier templates"
+msgid "Level Tier Templates"
msgstr "Plantillas de nivel"
-#: indicators/models.py:503
+#: indicators/models.py:497
msgid "Sex and Age Disaggregated Data (SADD)"
msgstr "Datos desagregados de género y edad (SADD)"
-#: indicators/models.py:504
+#: indicators/models.py:498
msgid "SADD (including unknown) with double counting"
msgstr "SADD (desconocido) con cómputo doble"
-#: indicators/models.py:505
+#: indicators/models.py:499
msgid "SADD (including unknown) without double counting"
msgstr "SADD (desconocido) sin cómputo doble"
-#: indicators/models.py:506
+#: indicators/models.py:500
msgid "Actual with double counting"
msgstr "Real con cómputo doble"
-#: indicators/models.py:507
+#: indicators/models.py:501
msgid "Actual without double counting"
msgstr "Real sin cómputo doble"
-#: indicators/models.py:508
+#: indicators/models.py:502
msgid "Sectors Direct with double counting"
msgstr "Sectores directos (Recuento Doble)"
-#: indicators/models.py:509
+#: indicators/models.py:503
msgid "Sectors Indirect with double counting"
msgstr "Sectores indirectos (Recuento Doble)"
-#: indicators/models.py:525
-msgid "Global disaggregation"
-msgstr "Desagregación global"
-
#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
-#: indicators/models.py:526 tola_management/models.py:930
+#: indicators/models.py:520 tola_management/models.py:961
msgid "Archived"
msgstr "Archivado"
-#: indicators/models.py:627 templates/indicators/disaggregation_print.html:59
+#: indicators/models.py:529
+msgid "Disaggregation Type"
+msgstr "Tipo de desagregación"
+
+#: indicators/models.py:530
+#, fuzzy
+#| msgid "Disaggregation Type"
+msgid "Disaggregation Types"
+msgstr "Tipo de desagregación"
+
+#: indicators/models.py:623 templates/indicators/disaggregation_print.html:59
#: templates/indicators/disaggregation_report.html:98
msgid "Label"
msgstr "Etiqueta"
+#: indicators/models.py:631
+#, fuzzy
+#| msgid "Disaggregation label"
+msgid "Disaggregation Label"
+msgstr "Etiqueta de desagregación"
+
+#: indicators/models.py:632
+#, fuzzy
+#| msgid "Disaggregation label"
+msgid "Disaggregation Labels"
+msgstr "Etiqueta de desagregación"
+
#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
-#: indicators/models.py:658 tola_management/models.py:926
+#: indicators/models.py:656 tola_management/models.py:957
msgid "Disaggregation category"
msgstr "Categoría de desagregación"
-#: indicators/models.py:671 indicators/models.py:688
+#: indicators/models.py:663
+#, fuzzy
+#| msgid "Disaggregated values"
+msgid "Disaggregated Value"
+msgstr "Valores desagregados modificados"
+
+#: indicators/models.py:664
+#, fuzzy
+#| msgid "Disaggregated values"
+msgid "Disaggregated Values"
+msgstr "Valores desagregados modificados"
+
+#: indicators/models.py:671 indicators/models.py:689
msgid "Frequency"
msgstr "Frecuencia"
@@ -716,183 +796,231 @@ msgstr "Frecuencia"
msgid "Reporting Frequency"
msgstr "Frecuencia de informes"
-#: indicators/models.py:696
+#: indicators/models.py:680
+#, fuzzy
+#| msgid "Reporting Frequency"
+msgid "Reporting Frequencies"
+msgstr "Frecuencia de informes"
+
+#: indicators/models.py:697
msgid "Data Collection Frequency"
msgstr "Frecuencia de recopilación de datos"
-#: indicators/models.py:709
+#: indicators/models.py:698
+#, fuzzy
+#| msgid "Data Collection Frequency"
+msgid "Data Collection Frequencies"
+msgstr "Frecuencia de recopilación de datos"
+
+#: indicators/models.py:706 indicators/models.py:716
msgid "Outcome theme name"
msgstr "Nombre del tema de resultados"
-#: indicators/models.py:710
+#: indicators/models.py:707 indicators/models.py:717
msgid "Active?"
msgstr "¿Activo?"
-#: indicators/models.py:711
+#: indicators/models.py:708 indicators/models.py:718
msgid "Creation date"
msgstr "Fecha de creación"
-#: indicators/models.py:716
+#: indicators/models.py:711
+#, fuzzy
+#| msgid "Outcome themes"
+msgid "Outcome Theme"
+msgstr "Temas de resultados"
+
+#: indicators/models.py:712
+#, fuzzy
+#| msgid "Outcome themes"
+msgid "Outcome Themes"
+msgstr "Temas de resultados"
+
+#: indicators/models.py:722 workflow/models.py:539
+#, fuzzy
+#| msgid "Outcome themes"
+msgid "IDAA Outcome Theme"
+msgstr "Temas de resultados"
+
+#: indicators/models.py:723
+#, fuzzy
+#| msgid "Outcome themes"
+msgid "IDAA Outcome Themes"
+msgstr "Temas de resultados"
+
+#: indicators/models.py:731
msgid "URL"
msgstr "URL"
-#: indicators/models.py:717
+#: indicators/models.py:732
msgid "Feed URL"
msgstr "URL de la fuente"
-#: indicators/models.py:722
+#: indicators/models.py:737
msgid "External Service"
msgstr "Servicio externo"
-#: indicators/models.py:736
+#: indicators/models.py:738
+#, fuzzy
+#| msgid "External Service"
+msgid "External Services"
+msgstr "Servicio externo"
+
+#: indicators/models.py:747
msgid "External service"
msgstr "Servicio externo"
-#: indicators/models.py:737
+#: indicators/models.py:748
msgid "Full URL"
msgstr "URL completa"
-#: indicators/models.py:738
+#: indicators/models.py:749
msgid "Unique ID"
msgstr "Identificación única"
-#: indicators/models.py:743
+#: indicators/models.py:754
msgid "External Service Record"
msgstr "Registro de servicio externo"
-#: indicators/models.py:1094
+#: indicators/models.py:755
+#, fuzzy
+#| msgid "External Service Record"
+msgid "External Service Records"
+msgstr "Registro de servicio externo"
+
+#: indicators/models.py:1101
msgid "Event"
msgstr "Evento"
-#: indicators/models.py:1114
+#: indicators/models.py:1121
msgid "Number (#)"
msgstr "Número (#)"
-#: indicators/models.py:1115
+#: indicators/models.py:1122
msgid "Percentage (%)"
msgstr "Porcentaje (%)"
#. Translators: A value that can be entered into a form field when the field doesn't apply in a particular situation.
-#: indicators/models.py:1122 indicators/models.py:1364
+#: indicators/models.py:1129 indicators/models.py:1371
#: indicators/views/bulk_indicator_import_views.py:117
msgid "Not applicable"
msgstr "No aplica"
-#: indicators/models.py:1123 tola_management/models.py:455
+#: indicators/models.py:1130 tola_management/models.py:468
msgid "Increase (+)"
msgstr "Aumentar (+)"
-#: indicators/models.py:1124 tola_management/models.py:456
+#: indicators/models.py:1131 tola_management/models.py:469
msgid "Decrease (-)"
msgstr "Disminuir (-)"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1141
+#: indicators/models.py:1148
msgid "Data cleaning and processing"
msgstr "Depuración y procesamiento de datos"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1143
+#: indicators/models.py:1150
msgid "Data collection training and piloting"
msgstr "Capacitación y ensayo para recopilación de datos"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1145
+#: indicators/models.py:1152
msgid "Data cross checks or triangulation of data sources"
msgstr "Comprobaciones cruzadas de datos o triangulación de fuentes de datos"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1147
+#: indicators/models.py:1154
msgid "Data quality audits (DQAs)"
msgstr "Auditorías de calidad de datos (DQA)"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1149
+#: indicators/models.py:1156
msgid "Data spot checks"
msgstr "Comprobaciones de datos aleatorias"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1151
+#: indicators/models.py:1158
msgid "Digital data collection tools"
msgstr "Herramientas de recopilación de datos digitales"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1153
+#: indicators/models.py:1160
msgid "External evaluator or consultant"
msgstr "Evaluador o consultor externo"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1155
+#: indicators/models.py:1162
msgid "Mixed methods"
msgstr "Métodos combinados"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1157
+#: indicators/models.py:1164
msgid "Participatory data analysis validation"
msgstr "Validación del análisis de datos participativos"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1159
+#: indicators/models.py:1166
msgid "Peer reviews or reproducibility checks"
msgstr "Revisiones por pares o controles de reproducibilidad"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1161
+#: indicators/models.py:1168
msgid "Randomized phone calls to respondents"
msgstr "Llamadas telefónicas aleatorias a los encuestados"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1163
+#: indicators/models.py:1170
msgid "Randomized visits to respondents"
msgstr "Visitas aleatorias a los encuestados"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1165
+#: indicators/models.py:1172
msgid "Regular indicator and data reviews"
msgstr "Revisiones periódicas de indicadores y datos"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1167
+#: indicators/models.py:1174
msgid "Secure data storage"
msgstr "Almacenamiento seguro de datos"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1169
+#: indicators/models.py:1176
msgid "Shadow audits or accompanied supervision"
msgstr "Auditorías de evaluación o supervisión con acompañamiento"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1171
+#: indicators/models.py:1178
msgid "Standardized indicators"
msgstr "Indicadores estandarizados"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1173
+#: indicators/models.py:1180
msgid "Standard operating procedures (SOPs) or protocols"
msgstr "Procedimientos operativos estándar (SOP) o protocolos"
#. Translators: describes a user-selectable option in a list of things that users plan to do with the information gathered while the program is running
-#: indicators/models.py:1178
+#: indicators/models.py:1185
msgid "Donor and/or stakeholder reporting"
msgstr "Informes de los donantes y las partes interesadas"
#. Translators: describes a user-selectable option in a list of things that users plan to do with the information gathered while the program is running
-#: indicators/models.py:1180
+#: indicators/models.py:1187
msgid "Internal program management and learning"
msgstr "Gestión y aprendizaje del programa interno"
#. Translators: describes a user-selectable option in a list of things that users plan to do with the information gathered while the program is running
-#: indicators/models.py:1182
+#: indicators/models.py:1189
msgid "Participant accountability"
msgstr "Responsabilidad de los participantes"
#. Translators: Short description of how values are accumulated over time.
-#: indicators/models.py:1195
+#: indicators/models.py:1202
msgid "Targets, actuals, and results are non-cumulative."
msgstr "Los objetivos, los reales, y los resultados no son acumulativos."
#. Translators: Full description of how values are accumulated over time.
-#: indicators/models.py:1197
+#: indicators/models.py:1204
msgid ""
"Targets, actuals, and results are non-cumulative. Target period actuals are "
"the sum of all results for that target period. Life of Program target and "
@@ -904,14 +1032,14 @@ msgstr ""
"todos los periodos objetivo."
#. Translators: Short description of how values are accumulated over time.
-#: indicators/models.py:1199
+#: indicators/models.py:1206
msgid "Targets and actuals are cumulative; results are non-cumulative."
msgstr ""
"Los objetivos y los reales son acumulativos; los resultados no son "
"acumulativos."
#. Translators: Full description of how values are accumulated over time.
-#: indicators/models.py:1201
+#: indicators/models.py:1208
msgid ""
"Targets and actuals are cumulative; results are non-cumulative. Target "
"period actuals are the sum of the results from the current and all previous "
@@ -925,12 +1053,12 @@ msgstr ""
"programa refleja el real más reciente."
#. Translators: Short description of how values are accumulated over time.
-#: indicators/models.py:1203
+#: indicators/models.py:1210
msgid "Targets, actuals, and results are cumulative."
msgstr "Los objetivos, los reales, y los resultados son acumulativos."
#. Translators: Full description of how values are accumulated over time.
-#: indicators/models.py:1205
+#: indicators/models.py:1212
msgid ""
"Targets, actuals, and results are cumulative. Target period actuals mirror "
"the most recent result for that target period; no calculations are performed "
@@ -943,12 +1071,12 @@ msgstr ""
"vida del programa refleja el último objetivo, y el real de la vida del "
"programa refleja el real más reciente."
-#: indicators/models.py:1249
+#: indicators/models.py:1256
msgid "Indicator key"
msgstr "Clave del Indicador"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1254
+#: indicators/models.py:1261
msgid ""
"Classifying indicators by type allows us to filter and analyze related sets "
"of indicators."
@@ -957,21 +1085,17 @@ msgstr ""
"de indicadores relacionados."
#. Translators: Label for a field that shows whether an object was imported or not
-#: indicators/models.py:1259
+#: indicators/models.py:1266
msgid "Bulk Imported"
msgstr "Bloque importado"
#. Translators: this is help text for a drop down select menu on an indicator setup form
-#: indicators/models.py:1266
+#: indicators/models.py:1273
msgid "Select the result this indicator is intended to measure."
msgstr "Seleccione el resultado que se pretende medir con este indicador."
-#: indicators/models.py:1281
-msgid "Country Strategic Objective"
-msgstr "Objetivo estratégico del país"
-
#. Translators: this is help text for a menu area on an indicator setup form where objectives are selected
-#: indicators/models.py:1284
+#: indicators/models.py:1291
msgid ""
"Identifying the country strategic objectives to which an indicator "
"contributes, allows us to filter and analyze related sets of indicators. "
@@ -984,7 +1108,7 @@ msgstr ""
"el administrador de país de TolaData."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1291
+#: indicators/models.py:1298
msgid ""
"Provide an indicator statement of the precise information needed to assess "
"whether intended changes have occurred."
@@ -993,15 +1117,15 @@ msgstr ""
"necesaria para evaluar si se han realizado los cambios previstos."
#. Translators: this is the label for a form field where the user enters the "number" identifying an indicator
-#: indicators/models.py:1296 templates/indicators/disaggregation_report.html:90
-#: tola_management/models.py:447
+#: indicators/models.py:1303 templates/indicators/disaggregation_report.html:90
+#: tola_management/models.py:460
msgid "Number"
msgstr "Número"
#. Translators: a "number" in this context is a kind of label. This is help text to explain why a user is
#. seeing customized numbers instead of auto-generated ones that can derived from the indicator's place in
#. the hierarchy. The "numbers" look something like "1.1" or "1.2.1a"
-#: indicators/models.py:1300
+#: indicators/models.py:1307
msgid ""
"This number is displayed in place of the indicator number automatically "
"generated through the results framework. An admin can turn on auto-numbering "
@@ -1012,12 +1136,12 @@ msgstr ""
"activar la numeración automática en la configuración del programa."
#. Translators: field label for entering which standardized list the indicator was chosen from
-#: indicators/models.py:1307
+#: indicators/models.py:1314
msgid "Source"
msgstr "Fuente"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1309
+#: indicators/models.py:1316
msgid ""
"Identify the source of this indicator (e.g. Mercy Corps DIG, EC, USAID, "
"etc.) If the indicator is brand new and created specifically for the "
@@ -1028,12 +1152,12 @@ msgstr ""
"programa, introduzca “Personalizado”."
#. Translators: field label for entering the extended explanation of the indicator
-#: indicators/models.py:1315 tola_management/models.py:414
+#: indicators/models.py:1322 tola_management/models.py:427
msgid "Definition"
msgstr "Definición"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1317
+#: indicators/models.py:1324
msgid ""
"Provide a long-form definition of the indicator and all key terms that need "
"further detail for precise and reliable measurement. Anyone reading the "
@@ -1045,17 +1169,17 @@ msgstr ""
"Cualquiera que lea la definición debe entender claramente lo que mide el "
"indicador, sin que haya cabida a ambigüedades."
-#: indicators/models.py:1324
+#: indicators/models.py:1331
msgid "Rationale or justification for indicator"
msgstr "Justificación del indicador"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1326
+#: indicators/models.py:1333
msgid "Explain why the indicator was chosen for this program."
msgstr "Explique por qué se escogió el indicador para este programa."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1333
+#: indicators/models.py:1340
msgid ""
"Enter a meaningful description of what the indicator uses as its standard "
"unit (e.g. households, kilograms, kits, participants, etc.)"
@@ -1064,18 +1188,18 @@ msgstr ""
"unidad estándar (por ejemplo, hogares, kilogramos, equipos, participantes, "
"etc.)."
-#: indicators/models.py:1339
+#: indicators/models.py:1346
msgid "Unit Type"
msgstr "Tipo de unidad"
#. Translators: this is help text for a user selecting "percentage" or "numeric" as the measurement type
-#: indicators/models.py:1341
+#: indicators/models.py:1348
msgid "This selection determines how results are calculated and displayed."
msgstr ""
"Esta selección determina cómo se calculan y se muestran los resultados."
#. Translators: this is help text for a menu area where disaggregations (by age, gender, etc.) are selected
-#: indicators/models.py:1349
+#: indicators/models.py:1356
msgid ""
"Select all relevant disaggregations. Disaggregations are managed by the "
"TolaData country administrator. Mercy Corps required disaggregations (e.g. "
@@ -1088,7 +1212,7 @@ msgstr ""
"pero pueden deseleccionarse cuando no son aplicables al indicador."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1357
+#: indicators/models.py:1364
msgid ""
"Enter a numeric value for the baseline that is greater than or equal to "
"zero. If a baseline is not yet known or not applicable, enter a zero or "
@@ -1100,17 +1224,17 @@ msgstr ""
"cero o escriba “No aplicable”. La línea de base siempre puede "
"actualizarse más adelante."
-#: indicators/models.py:1369 templates/indicators/indicatortargets.html:91
+#: indicators/models.py:1376 templates/indicators/indicatortargets.html:91
#: templates/indicators/indicatortargets.html:213
msgid "Life of Program (LoP) target"
msgstr "Objetivo de la vida del programa (LoP)"
-#: indicators/models.py:1373
+#: indicators/models.py:1380
msgid "Direction of Change"
msgstr "Dirección de cambio"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1375
+#: indicators/models.py:1382
msgid ""
"Is your program trying to achieve an increase (+) or decrease (-) in the "
"indicator's unit of measure? This field is important for the accuracy of our "
@@ -1126,7 +1250,7 @@ msgstr ""
"el resultado sea inferior al objetivo."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1388
+#: indicators/models.py:1395
msgid ""
"Provide an explanation for any target value/s assigned to this indicator. "
"You might include calculations and any historical or secondary data sources "
@@ -1137,7 +1261,7 @@ msgstr ""
"para estimar los objetivos."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1396
+#: indicators/models.py:1403
msgid ""
"This selection determines how the indicator's targets and results are "
"organized and displayed. Target frequencies will vary depending on how "
@@ -1150,24 +1274,24 @@ msgstr ""
"datos del indicador para gestionar e informar adecuadamente sobre el "
"progreso del programa."
-#: indicators/models.py:1404
+#: indicators/models.py:1411
msgid "First event name"
msgstr "Nombre del primer evento"
-#: indicators/models.py:1410
+#: indicators/models.py:1417
msgid "First target period begins*"
msgstr "Comienza el primer período objetivo*"
-#: indicators/models.py:1414
+#: indicators/models.py:1421
msgid "Number of target periods*"
msgstr "Número de períodos objetivo*"
-#: indicators/models.py:1419
+#: indicators/models.py:1426
msgid "Means of verification / data source"
msgstr "Medios de verificación / Fuente de datos"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1421
+#: indicators/models.py:1428
msgid ""
"Identify the source of indicator data and the tools used to collect data (e."
"g., surveys, checklists, etc.) Indicate whether these tools already exist or "
@@ -1179,7 +1303,7 @@ msgstr ""
"necesario desarrollarlos."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1428
+#: indicators/models.py:1435
msgid ""
"Explain the process used to collect data (e.g., population-based sampling "
"with randomized selection, review of partner records, etc.) Explain how the "
@@ -1193,7 +1317,7 @@ msgstr ""
"que el indicador aplicará para la recopilación de datos."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1438
+#: indicators/models.py:1445
msgid ""
"How frequently will you collect data for this indicator? The frequency and "
"timing of data collection should be based on how often data are needed for "
@@ -1211,7 +1335,7 @@ msgstr ""
"calcularlos."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1448
+#: indicators/models.py:1455
#, python-format
msgid ""
"List all data points required for reporting. While some indicators require a "
@@ -1228,12 +1352,12 @@ msgstr ""
"datos serían el número de estudiantes titulados (numerador) y el número de "
"estudiantes matriculados (denominador)."
-#: indicators/models.py:1455
+#: indicators/models.py:1462
msgid "Responsible person(s) and team"
msgstr "Persona(s) o equipo responsable"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1457
+#: indicators/models.py:1464
msgid ""
"List the people or team(s) responsible for data collection. This can include "
"community volunteers, program team members, local partner(s), enumerators, "
@@ -1244,7 +1368,7 @@ msgstr ""
"programa, socio(s) local(es), encuestadores, consultores, etc."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1464
+#: indicators/models.py:1471
msgid ""
"The method of analysis should be detailed enough to allow an auditor or "
"third party to reproduce the analysis or calculation and generate the same "
@@ -1255,7 +1379,7 @@ msgstr ""
"obtenga el mismo resultado."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1471
+#: indicators/models.py:1478
msgid ""
"Describe the primary uses of the indicator and its intended audience. This "
"is the most important field in an indicator plan, because it explains the "
@@ -1272,7 +1396,7 @@ msgstr ""
"incluyan indicadores útiles en el programa."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1482
+#: indicators/models.py:1489
msgid ""
"This frequency should make sense in relation to the data collection "
"frequency and target frequency and should adhere to any requirements "
@@ -1284,7 +1408,7 @@ msgstr ""
"partes interesadas y los donantes."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1491
+#: indicators/models.py:1498
msgid ""
"Provide any additional details about how data quality will be ensured for "
"this specific indicator. Additional details may include specific roles and "
@@ -1298,7 +1422,7 @@ msgstr ""
"verificarán, revisarán o triangularán, por ejemplo."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1501
+#: indicators/models.py:1508
msgid ""
"Select the data quality assurance techniques that will be applied to this "
"specific indicator."
@@ -1307,7 +1431,7 @@ msgstr ""
"para este indicador específico."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1507
+#: indicators/models.py:1514
msgid ""
"List any limitations of the data used to calculate this indicator (e.g., "
"issues with validity, reliability, accuracy, precision, and/or potential for "
@@ -1322,14 +1446,14 @@ msgstr ""
"de datos o los métodos de análisis de datos. Por favor, sea específico y "
"explique cómo se abordaron los problemas de los datos."
-#: indicators/models.py:1523
-#: indicators/views/bulk_indicator_import_views.py:787 workflow/models.py:39
-#: workflow/models.py:525
+#: indicators/models.py:1530
+#: indicators/views/bulk_indicator_import_views.py:787 workflow/models.py:38
+#: workflow/models.py:530
msgid "Sector"
msgstr "Sector"
#. Translators: this is help text for a field on an indicator setup form where the user selects from a list
-#: indicators/models.py:1525
+#: indicators/models.py:1532
msgid ""
"Classifying indicators by sector allows us to filter and analyze related "
"sets of indicators."
@@ -1337,17 +1461,22 @@ msgstr ""
"Clasificar los indicadores por sector nos permite filtrar y analizar "
"conjuntos de indicadores relacionados."
-#: indicators/models.py:1529
+#: indicators/models.py:1536
msgid "External Service ID"
msgstr "Identificación de servicio externo"
#. Translators: This is the name of the Level object in the old system of organising levels
-#: indicators/models.py:1536
+#: indicators/models.py:1543
msgid "Old Level"
msgstr "Nivel Anterior"
+#: indicators/models.py:1574 indicators/views/views_program.py:111
+#: templates/indicators/disaggregation_report.html:141
+msgid "Indicators"
+msgstr "Indicadores"
+
#. Translators: This is an error message that is returned when a user is trying to assign an indicator to the wrong hierarchy of levels.
-#: indicators/models.py:1579
+#: indicators/models.py:1587
#, python-format
msgid ""
"Level/Indicator mismatched program IDs (level %(level_program_id)d and "
@@ -1356,164 +1485,218 @@ msgstr ""
"Los identificadores de programa no coinciden con el nivel/indicador (nivel "
"%(level_program_id)de indicador %(indicator_program_id)d)"
-#: indicators/models.py:1699 indicators/templatetags/mytags.py:118
+#: indicators/models.py:1707 indicators/templatetags/mytags.py:118
msgid "#"
msgstr "#"
-#: indicators/models.py:1701 indicators/templatetags/mytags.py:121
+#: indicators/models.py:1709 indicators/templatetags/mytags.py:121
msgid "%"
msgstr "%"
#. Translators: referring to an indicator whose results do not accumulate over time
-#: indicators/models.py:1715
+#: indicators/models.py:1723
msgid "Not cumulative"
msgstr "No acumulativo"
-#: indicators/models.py:1720 indicators/templatetags/mytags.py:88
+#: indicators/models.py:1728 indicators/templatetags/mytags.py:88
msgid "-"
msgstr "-"
-#: indicators/models.py:1722 indicators/templatetags/mytags.py:91
+#: indicators/models.py:1730 indicators/templatetags/mytags.py:91
msgid "+"
msgstr "+"
-#: indicators/models.py:1873 indicators/models.py:1880
-#: indicators/views/views_indicators.py:526
-#: indicators/views/views_indicators.py:534
+#: indicators/models.py:1881 indicators/models.py:1888
+#: indicators/views/views_indicators.py:525
+#: indicators/views/views_indicators.py:533
msgid "indicator"
msgstr "indicador"
-#: indicators/models.py:1990 templates/indicators/result_table.html:217
+#: indicators/models.py:1986
+#, fuzzy
+#| msgid "Indicator imported"
+msgid "Bulk Indicator Import File"
+msgstr "Indicador importado"
+
+#: indicators/models.py:1987
+#, fuzzy
+#| msgid "Indicator imported"
+msgid "Bulk Indicator Import Files"
+msgstr "Indicador importado"
+
+#: indicators/models.py:2003 templates/indicators/result_table.html:217
#: workflow/serializers_new/period_serializers.py:20
msgid "Life of Program"
msgstr "Vida del programa"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/models.py:1991 tola/db_translations.py:16
+#: indicators/models.py:2004 tola/db_translations.py:22
msgid "Midline"
msgstr "Línea media"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/models.py:1992 tola/db_translations.py:6
+#: indicators/models.py:2005 tola/db_translations.py:24
msgid "Endline"
msgstr "Línea final"
-#: indicators/models.py:1993
+#: indicators/models.py:2006
msgid "Year"
msgstr "Año"
-#: indicators/models.py:1994
+#: indicators/models.py:2007
msgid "Semi-annual period"
msgstr "Períodos semestrales"
-#: indicators/models.py:1995
+#: indicators/models.py:2008
msgid "Tri-annual period"
msgstr "Períodos trienales"
-#: indicators/models.py:1996
+#: indicators/models.py:2009
msgid "Quarter"
msgstr "Trimestre"
-#: indicators/models.py:2005
+#: indicators/models.py:2018
msgid "Period"
msgstr "Período"
-#: indicators/models.py:2013
+#: indicators/models.py:2026
#: templates/indicators/indicator_reportingperiod_modal.html:41
#: templates/indicators/indicator_reportingperiod_modal.html:61
-#: tola_management/models.py:409
+#: tola_management/models.py:422
msgid "Start date"
msgstr "Fecha de inicio"
-#: indicators/models.py:2018
+#: indicators/models.py:2031
#: templates/indicators/indicator_reportingperiod_modal.html:48
#: templates/indicators/indicator_reportingperiod_modal.html:73
-#: tola_management/models.py:410
+#: tola_management/models.py:423
msgid "End date"
msgstr "Fecha final"
-#: indicators/models.py:2022
+#: indicators/models.py:2035
msgid "Customsort"
msgstr "Customsort"
-#: indicators/models.py:2028 templates/workflow/site_indicatordata.html:20
+#: indicators/models.py:2041 templates/workflow/site_indicatordata.html:20
msgid "Periodic Target"
msgstr "Objetivo periódico"
-#: indicators/models.py:2279
+#: indicators/models.py:2042
+#, fuzzy
+#| msgid "Periodic Target"
+msgid "Periodic Targets"
+msgstr "Objetivo periódico"
+
+#: indicators/models.py:2285
+#, fuzzy
+#| msgid "Result changed"
+msgid "Result Manager"
+msgstr "Resultado modificado"
+
+#: indicators/models.py:2286
+#, fuzzy
+#| msgid "Result changed"
+msgid "Result Managers"
+msgstr "Resultado modificado"
+
+#: indicators/models.py:2291
msgid "Data key"
msgstr "Clave de Datos"
-#: indicators/models.py:2283
+#: indicators/models.py:2295
msgid "Periodic target"
msgstr "Objetivo periódico"
-#: indicators/models.py:2303
+#: indicators/models.py:2315
msgid "Date collected"
msgstr "Fecha de recoplicación"
-#: indicators/models.py:2308
+#: indicators/models.py:2320
msgid "Originated By"
msgstr "Originado por"
-#: indicators/models.py:2311
+#: indicators/models.py:2323
msgid "Record name"
msgstr "Nombre del registro"
-#: indicators/models.py:2312
+#: indicators/models.py:2324
msgid "Evidence URL"
msgstr "URL de la Evidencia"
-#: indicators/models.py:2316 templates/workflow/site_indicatordata.html:5
+#: indicators/models.py:2328 templates/workflow/site_indicatordata.html:5
#: templates/workflow/site_profile_list.html:5
#: templates/workflow/site_profile_list.html:6
#: templates/workflow/site_profile_list.html:167
#: templates/workflow/siteprofile_form.html:11
-#: templates/workflow/siteprofile_form.html:13 tola_management/models.py:412
+#: templates/workflow/siteprofile_form.html:13 tola_management/models.py:425
msgid "Sites"
msgstr "Sitios"
-#: indicators/models.py:2420
+#: indicators/models.py:2335
+#, fuzzy
+#| msgid "Indicators and results"
+msgid "Indicator Result"
+msgstr "Indicadores y resultados"
+
+#: indicators/models.py:2336
+#, fuzzy
+#| msgid "Indicators and results"
+msgid "Indicator Results"
+msgstr "Indicadores y resultados"
+
+#: indicators/models.py:2427
msgid "Report Name"
msgstr "Nombre del Informe"
-#: indicators/models.py:2493
+#: indicators/models.py:2439
+#, fuzzy
+#| msgid "Pinned reports"
+msgid "Pinned Report"
+msgstr "Informes fijados"
+
+#: indicators/models.py:2440
+#, fuzzy
+#| msgid "Pinned reports"
+msgid "Pinned Reports"
+msgstr "Informes fijados"
+
+#: indicators/models.py:2502
msgid "years"
msgstr "años"
-#: indicators/models.py:2494
+#: indicators/models.py:2503
msgid "semi-annual periods"
msgstr "períodos semestrales"
-#: indicators/models.py:2495
+#: indicators/models.py:2504
msgid "tri-annual periods"
msgstr "períodos trienales"
-#: indicators/models.py:2496
+#: indicators/models.py:2505
msgid "quarters"
msgstr "trimestres"
-#: indicators/models.py:2497
+#: indicators/models.py:2506
msgid "months"
msgstr "meses"
#. Translators: Example: Most recent 2 Months
-#: indicators/models.py:2527
+#: indicators/models.py:2536
#, python-brace-format
msgid "Most recent {num_recent_periods} {time_or_target_period_str}"
msgstr "Últimos {num_recent_periods} {time_or_target_period_str}"
#. Translators: Example: Show all Years
-#: indicators/models.py:2533
+#: indicators/models.py:2542
#, python-brace-format
msgid "Show all {time_or_target_period_str}"
msgstr "Ver todos los {time_or_target_period_str}"
-#: indicators/models.py:2543 indicators/models.py:2547
+#: indicators/models.py:2552 indicators/models.py:2556
msgid "Show all results"
msgstr "Ver todos los resultados"
-#: indicators/models.py:2561
+#: indicators/models.py:2570
msgid "Recent progress for all indicators"
msgstr "Progreso reciente para todos los indicadores"
@@ -1564,14 +1747,14 @@ msgstr ""
"La suma de ‘SADD sin cómputo doble’ debe ser igual a la suma de ‘Directo sin "
"cómputo doble’."
-#. Translators: An error message detailing that the fields Direct and Indirect total participants with double counting is required
+#. Translators: An error message detailing that the field Direct total participants with double counting is required
#: indicators/serializers_new/participant_count_serializers.py:302
msgid ""
-"Direct total participants with double counting is required. Please "
-"complete these fields."
+"Direct total participants with double counting is required. Please complete "
+"these fields."
msgstr ""
-"Se requiere un total de participantes directos con cómputo doble. "
-"Por favor, complete estos campos."
+"Se requiere un total de participantes directos con cómputo doble. Por favor, "
+"complete estos campos."
#. Translators: An error message detailing that the Direct and Indirect without double counting should be equal to or lower than the value of Direct and Indirect with double counting
#: indicators/serializers_new/participant_count_serializers.py:306
@@ -1584,8 +1767,25 @@ msgstr ""
#. Translators: An error message detailing that the Sector values should be less to or equal to the sum of Direct and Indirect with double counting value
#: indicators/serializers_new/participant_count_serializers.py:310
+#, fuzzy
+#| msgid ""
+#| "Sector values should be less than or equal to the 'Direct/Indirect with "
+#| "double counting' value."
+msgid ""
+"Direct sector values should be less than or equal to the 'Direct with double "
+"counting' value."
+msgstr ""
+"Los valores del sector deben ser menores o iguales al valor ‘Directo/"
+"Indirecto con cómputo doble’."
+
+#. Translators: An error message detailing that the Sector values should be less to or equal to the sum of Direct and Indirect with double counting value
+#: indicators/serializers_new/participant_count_serializers.py:314
+#, fuzzy
+#| msgid ""
+#| "Sector values should be less than or equal to the 'Direct/Indirect with "
+#| "double counting' value."
msgid ""
-"Sector values should be less than or equal to the 'Direct/Indirect with "
+"Indirect sector values should be less than or equal to the 'Indirect with "
"double counting' value."
msgstr ""
"Los valores del sector deben ser menores o iguales al valor ‘Directo/"
@@ -1850,18 +2050,18 @@ msgid "You have exceeded the character limit of this field"
msgstr "Ha superado el límite de caracteres de este campo"
#. Translators: success message when an indicator was created
-#: indicators/views/views_indicators.py:380
+#: indicators/views/views_indicators.py:379
msgid "Success! Indicator created."
msgstr "¡Éxito! Indicador creado."
#. Translators: success message when an indicator was updated
-#: indicators/views/views_indicators.py:383
+#: indicators/views/views_indicators.py:382
msgid "Success! Indicator updated."
msgstr "¡Éxito! Indicador actualizado."
#. Translators: success message when an indicator was created,
#. ex. "Indicator 2a was saved and linked to Outcome 2.2"
-#: indicators/views/views_indicators.py:394
+#: indicators/views/views_indicators.py:393
#, python-brace-format
msgid ""
"Indicator {indicator_number} was saved and linked to "
@@ -1871,21 +2071,21 @@ msgstr ""
"{result_level_display_ontology}"
#. Translators: success message when indicator was updated ex. "Indicator 2a updated"
-#: indicators/views/views_indicators.py:400
+#: indicators/views/views_indicators.py:399
#, python-brace-format
msgid "Indicator {indicator_number} updated."
msgstr "El indicador {indicator_number} se ha actualizado."
#. Translators: a fragment of a larger string that will be a title for a form. The full string might be e.g. Complete setup of Outcome indicator 1.1a.
-#: indicators/views/views_indicators.py:514
+#: indicators/views/views_indicators.py:513
msgid "Complete setup of "
msgstr "Completar la configuración de "
-#: indicators/views/views_indicators.py:537
+#: indicators/views/views_indicators.py:536
msgid "Indicator setup"
msgstr "Configuración del indicador"
-#: indicators/views/views_indicators.py:649
+#: indicators/views/views_indicators.py:648
msgid ""
"This indicator was imported from an Excel template. Some fields could not be "
"included in the template, including targets that are required before results "
@@ -1895,15 +2095,15 @@ msgstr ""
"pudieron incluirse en la plantilla, entre ellos los objetivos necesarios "
"para poder informar de los resultados."
-#: indicators/views/views_indicators.py:803
+#: indicators/views/views_indicators.py:802
msgid "Success, Indicator Deleted!"
msgstr "¡Éxito, indicador eliminado!"
-#: indicators/views/views_indicators.py:813
+#: indicators/views/views_indicators.py:812
msgid "Reason for change is required."
msgstr "Se requiere justificación para el cambio."
-#: indicators/views/views_indicators.py:819
+#: indicators/views/views_indicators.py:818
msgid ""
"Reason for change is not required when deleting an indicator with no linked "
"results."
@@ -1911,36 +2111,40 @@ msgstr ""
"No se requiere justificación del cambio al eliminar un indicador sin "
"resultados vinculados."
-#: indicators/views/views_indicators.py:827
+#: indicators/views/views_indicators.py:826
msgid "The indicator was successfully deleted."
msgstr "El indicador se ha eliminado satisfactoriamente."
+#. Translators: Text of an error message that appears when a user hasn't provided a justification for the
+#. change they are making to some data
#. Translators: Text of an error message that appears when a user hasn't provided a justification for the change they are making to some data
-#: indicators/views/views_indicators.py:861
-#: indicators/views/views_indicators.py:921
-#: indicators/views/views_indicators.py:1105 workflow/views.py:309
+#: indicators/views/views_indicators.py:860
+#: indicators/views/views_indicators.py:920
+#: indicators/views/views_indicators.py:1104
+#: workflow/serializers_new/program_period_serializer.py:30
+#: workflow/views.py:340
msgid "Reason for change is required"
msgstr "Se requiere justificación para el cambio"
-#: indicators/views/views_indicators.py:865
-#: indicators/views/views_indicators.py:928 tola_management/models.py:781
+#: indicators/views/views_indicators.py:864
+#: indicators/views/views_indicators.py:927 tola_management/models.py:794
msgid "No reason for change required."
msgstr "No se requiere justificación para el cambio."
-#: indicators/views/views_indicators.py:1014
+#: indicators/views/views_indicators.py:1013
#, python-format
msgid "Result was added to %(level)s indicator %(number)s."
msgstr "Resultado agregado a %(level)s indicador %(number)s."
-#: indicators/views/views_indicators.py:1019
+#: indicators/views/views_indicators.py:1018
msgid "Success, Data Created!"
msgstr "¡Éxito, datos creados!"
-#: indicators/views/views_indicators.py:1080
+#: indicators/views/views_indicators.py:1079
msgid "Result updated."
msgstr "Resultado actualizado."
-#: indicators/views/views_indicators.py:1084
+#: indicators/views/views_indicators.py:1083
msgid "Success, Data Updated!"
msgstr "¡Éxito, datos actualizados!"
@@ -1952,11 +2156,6 @@ msgstr "¡Éxito, datos actualizados!"
msgid "Logframe"
msgstr "Marco Lógico"
-#: indicators/views/views_program.py:111
-#: templates/indicators/disaggregation_report.html:141
-msgid "Indicators"
-msgstr "Indicadores"
-
#: indicators/views/views_program.py:435 indicators/views/views_program.py:437
msgid "Results Framework"
msgstr "Sistema de Resultados"
@@ -2198,16 +2397,16 @@ msgstr "Usuarios"
#: templates/base.html:127 templates/indicators/disaggregation_report.html:137
#: templates/workflow/filter.html:11
-#: templates/workflow/site_profile_list.html:21
+#: templates/workflow/site_profile_list.html:21 workflow/models.py:578
msgid "Programs"
msgstr "Programas"
-#: templates/base.html:128 workflow/models.py:72
+#: templates/base.html:128 workflow/models.py:87
msgid "Organizations"
msgstr "Organizaciones"
#: templates/base.html:129 templates/workflow/tags/program_menu.html:8
-#: tola_management/models.py:813 workflow/models.py:133
+#: tola_management/models.py:830 workflow/models.py:148
msgid "Countries"
msgstr "Países"
@@ -2281,11 +2480,11 @@ msgstr "No hay programas disponibles"
msgid "Browse all sites"
msgstr "Explorar todos los sitios"
-#: templates/home.html:24 templates/home.html:196
+#: templates/home.html:24 templates/home.html:191
msgid "Sites with results"
msgstr "Sitios con resultados"
-#: templates/home.html:26 templates/home.html:212
+#: templates/home.html:26 templates/home.html:207
msgid "Sites without results"
msgstr "Sitios sin resultados"
@@ -2321,16 +2520,34 @@ msgid "Recent progress report"
msgstr "Informe de progreso reciente"
#: templates/home.html:88
-#, python-format
+#, fuzzy, python-format
+#| msgid ""
+#| "\n"
+#| " Before adding indicators and performance "
+#| "results, we need to know your program's\n"
+#| "
\n"
+#| " reporting start and end dates.\n"
+#| " \n"
+#| " "
msgid ""
"\n"
-" Before adding indicators and performance "
-"results, we need to know your program's\n"
-"
\n"
-" reporting start and end dates.\n"
-" \n"
+" >\n"
" "
msgstr ""
"\n"
@@ -2366,7 +2581,7 @@ msgstr ""
" "
#. Translators: A message telling the user why they can not access it due to the start and end date not being set.
-#: templates/home.html:108
+#: templates/home.html:103
msgid ""
"Before you can view this program, an administrator needs to set the "
"program's start and end dates."
@@ -2375,31 +2590,31 @@ msgstr ""
"fechas de inicio y fin del programa."
#. Translators: link users to the new results framework builder page when a level already exists
-#: templates/home.html:119
+#: templates/home.html:114
msgid "Start adding indicators to your results framework."
msgstr "Comience a agregar indicadores al sistema de resultados."
#. Translators: link users to the new results framework builder page - no levels currently exist
-#: templates/home.html:122
+#: templates/home.html:117
msgid "Start building your results framework and adding indicators."
msgstr "Comience a crear su sistema de resultados y agregar indicadores."
#. Translators: A message telling the user a program can not yet be accessed because indicators have not been created on it.
-#: templates/home.html:128 templates/home.html:136
+#: templates/home.html:123 templates/home.html:131
msgid "No indicators have been entered for this program."
msgstr "No se han ingresado indicadores para este programa."
-#: templates/home.html:130 templates/indicators/indicator_form_modal.html:25
+#: templates/home.html:125 templates/indicators/indicator_form_modal.html:25
msgid "Add indicator"
msgstr "Agregar indicador"
-#: templates/home.html:141 templates/indicators/program_page.html:16
+#: templates/home.html:136 templates/indicators/program_page.html:16
msgid "Program metrics
for target periods completed to date"
msgstr ""
"Métricas del programa
para períodos objetivo completados hasta la "
"fecha"
-#: templates/home.html:154
+#: templates/home.html:149
#, python-format
msgid ""
"\n"
@@ -2415,7 +2630,7 @@ msgstr ""
" "
#. Translators: message shown when there are no programs available to the user, or no active programs in a country
-#: templates/home.html:168
+#: templates/home.html:163
msgid ""
"\n"
"
\n"
@@ -2443,11 +2658,11 @@ msgstr ""
"
\n"
" "
-#: templates/home.html:204 templates/workflow/site_profile_list.html:175
+#: templates/home.html:199 templates/workflow/site_profile_list.html:175
msgid "Site with result"
msgstr "Sitio con resultados"
-#: templates/home.html:220
+#: templates/home.html:215
msgid "Site without result"
msgstr "Sitio sin resultados"
@@ -2478,7 +2693,7 @@ msgstr "En general"
#: templates/indicators/disaggregation_print.html:58
#: templates/indicators/disaggregation_report.html:97
-#: templates/indicators/disaggregation_report.html:145 workflow/models.py:859
+#: templates/indicators/disaggregation_report.html:145 workflow/models.py:976
msgid "Type"
msgstr "Tipo"
@@ -2847,15 +3062,15 @@ msgid "No"
msgstr "No"
#: templates/indicators/indicator_plan.html:4
-#: templates/indicators/indicator_plan.html:31
+#: templates/indicators/indicator_plan.html:28
msgid "Indicator Plan"
msgstr "Plan Indicador"
-#: templates/indicators/indicator_plan.html:48
+#: templates/indicators/indicator_plan.html:45
msgid "Group indicators"
msgstr "Agrupar indicadores"
-#: templates/indicators/indicator_plan.html:52
+#: templates/indicators/indicator_plan.html:49
msgid "by Level"
msgstr "por Nivel"
@@ -3128,24 +3343,19 @@ msgstr "Sistema de Resultados"
msgid "Create results framework"
msgstr "Crear sistema de resultados"
-#. Translators: GAIT is the Grant and Award Information Tracker system used by MercyCorps
-#: templates/indicators/program_page.html:42
-msgid "View program in GAIT"
-msgstr "Ver programa en GAIT"
-
-#: templates/indicators/program_page.html:50
+#: templates/indicators/program_page.html:46
msgid "Pinned reports"
msgstr "Informes fijados"
-#: templates/indicators/program_page.html:56
+#: templates/indicators/program_page.html:52
msgid "IPTT:"
msgstr "IPTT:"
-#: templates/indicators/program_page.html:69
+#: templates/indicators/program_page.html:65
msgid "Create an IPTT report"
msgstr "Crear un informe de IPTT"
-#: templates/indicators/program_page.html:73
+#: templates/indicators/program_page.html:69
msgid "Reports will be available after the program start date."
msgstr ""
"Los informes estarán disponibles a partir de la fecha de inicio del programa."
@@ -3154,42 +3364,53 @@ msgstr ""
msgid "Program setup"
msgstr "Configuración del programa"
-#. Translators: The full sentance is: Before adding indicators and performance results, we need to know your program's reporting start and end dates.
-#: templates/indicators/program_setup_incomplete.html:9
-#, python-format
+#: templates/indicators/program_setup_incomplete.html:8
+#, fuzzy, python-format
+#| msgid ""
+#| "\n"
+#| "
\n"
+#| " Program period\n"
+#| " \n"
+#| " is
%(program.percent_complete)s%% "
+#| "complete"
msgid ""
"\n"
-" Before adding indicators and performance results, we need to know your "
-"program's\n"
-"
reporting start and end dates.\n"
+" >\n"
" "
msgstr ""
"\n"
-" Antes de agregar indicadores y resultados de rendimiento, necesitamos "
-"saber las \n"
"
fechas de inicio y fin de informes \n"
-"de su programa.\n"
-" "
+" data-program=\"%(program.id)s\"\n"
+" data-progstart=\"%(program.start_date)s\"\n"
+" data-progend=\"%(program.end_date)s\"\n"
+" data-rptstart=\"%(program.reporting_period_start)s\"\n"
+" data-rptend=\"%(program.reporting_period_end)s\"\n"
+" data-target=\"#id_reporting_period_modal\">\n"
+" El período del programa\n"
+" \n"
+" está
%(program.percent_complete)s%% "
+"completado"
#. Translators: Explains why some target periods are not included in a certain calculation
#: templates/indicators/program_target_period_info_helptext.html:11
@@ -3592,23 +3813,36 @@ msgstr ""
"resultados."
#: templates/indicators/tags/program-complete.html:5
-#, python-format
+#, fuzzy, python-format
+#| msgid ""
+#| "\n"
+#| "
\n"
+#| " Program period\n"
+#| " \n"
+#| " is
"
+#| "%(program.percent_complete)s%% complete\n"
+#| " "
msgid ""
"\n"
-"
\n"
-" Program period\n"
-" \n"
+" >\n"
" is
%(program.percent_complete)s"
"%% complete\n"
" "
@@ -4084,39 +4318,39 @@ msgid "Important dates"
msgstr "Fechas importantes"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:4
-msgid "By training"
-msgstr "Por formación"
+#: tola/db_translations.py:6
+msgid "By distribution"
+msgstr "Por distribución"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:8
-msgid "Weekly"
-msgstr "Semanal"
+#: tola/db_translations.py:10
+msgid "Post shock"
+msgstr "Posterior al desastre"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.py:12
-msgid "Final evaluation"
-msgstr "Evaluación final"
+msgid "By event"
+msgstr "Por evento"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:20
-msgid "By distribution"
-msgstr "Por distribución"
+#: tola/db_translations.py:18
+msgid "By training"
+msgstr "Por formación"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:22
-msgid "By batch"
-msgstr "Por lotes"
+#: tola/db_translations.py:20
+msgid "Final evaluation"
+msgstr "Evaluación final"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:26
-msgid "By event"
-msgstr "Por evento"
+#: tola/db_translations.py:28
+msgid "Weekly"
+msgstr "Semanal"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:28
-msgid "Post shock"
-msgstr "Posterior al desastre"
+#: tola/db_translations.py:30
+msgid "By batch"
+msgstr "Por lotes"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#: tola/db_translations.py:32
@@ -4125,7 +4359,7 @@ msgstr "Agroindustria"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:34 tola/db_translations.py:156
+#: tola/db_translations.py:34 tola/db_translations.py:152
msgid "Agriculture"
msgstr "Agricultura"
@@ -4216,7 +4450,7 @@ msgstr "Alimentos"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: The main area of a program
-#: tola/db_translations.py:70 tola/db_translations.py:146
+#: tola/db_translations.py:70 tola/db_translations.py:144
msgid "Food Security"
msgstr "Seguridad alimentaria"
@@ -4332,7 +4566,7 @@ msgstr "Cuestiones urbanas"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:116 tola/db_translations.py:178
+#: tola/db_translations.py:116 tola/db_translations.py:174
msgid "WASH"
msgstr "WASH"
@@ -4397,24 +4631,12 @@ msgid "Economic Opportunity"
msgstr "Oportunidad económica"
#. Translators: The main area of a program
-#: tola/db_translations.py:144
-msgid "Economic Opportunity / Opportunité économique / Oportunidad económica"
-msgstr ""
-
-#. Translators: The main area of a program
-#: tola/db_translations.py:148
+#: tola/db_translations.py:146
msgid "Good Governance and Peace"
msgstr "Buena gobernanza y paz"
#. Translators: The main area of a program
-#: tola/db_translations.py:150
-msgid ""
-"Good Governance and Peace / Bonne gouvernance et paix / Buena gobernanza y "
-"paz"
-msgstr ""
-
-#. Translators: The main area of a program
-#: tola/db_translations.py:152
+#: tola/db_translations.py:148
msgid ""
"Resilience approach (tick this box if the program used a resilience approach)"
msgstr ""
@@ -4422,57 +4644,57 @@ msgstr ""
"enfoque de resiliencia)"
#. Translators: The main area of a program
-#: tola/db_translations.py:154
+#: tola/db_translations.py:150
msgid "Water Security"
msgstr "Seguridad del agua"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:158
+#: tola/db_translations.py:154
msgid "Cash and Voucher Assistance"
msgstr "Asistencia en efectivo y vales"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:160
+#: tola/db_translations.py:156
msgid "Direct"
msgstr "Directo"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:162
+#: tola/db_translations.py:158
msgid "Employment"
msgstr "Empleo"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:164
+#: tola/db_translations.py:160
msgid "Environment (DRR, Energy and Water)"
msgstr "Medio ambiente (DRR, energía y agua)"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:166
+#: tola/db_translations.py:162
msgid "Financial Services"
msgstr "Servicios financieros"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:168
+#: tola/db_translations.py:164
msgid "Indirect"
msgstr "Indirecto"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:170
+#: tola/db_translations.py:166
msgid "Infrastructure (non - WASH, non - energy)"
msgstr "Infraestructura (no WASH, no energía)"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:172
+#: tola/db_translations.py:168
msgid "Nutrition"
msgstr "Nutrición"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:174
+#: tola/db_translations.py:170
msgid "Peace, Governance and Partnership"
msgstr "Paz, gobernanza, y asociaciones"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:176
+#: tola/db_translations.py:172
msgid "Public Health (non - nutrition, non - WASH)"
msgstr "Salud pública (no nutricional/no WASH)"
@@ -4480,26 +4702,11 @@ msgstr "Salud pública (no nutricional/no WASH)"
msgid "Form Errors"
msgstr "Errores en el Formulario"
-#: tola/util.py:162
-msgid "Program does not have a GAIT id"
-msgstr "El programa no tiene un identificador GAIT"
-
-#. Translators: There was a network or server error trying to reach the GAIT service
-#: tola/util.py:169
-msgid "There was a problem connecting to the GAIT server."
-msgstr "Hubo un problema al conectarse al servidor GAIT."
-
-#. Translators: A request for {gait_id} to the GAIT server returned no results
-#: tola/util.py:173
-#, python-brace-format
-msgid "The GAIT ID {gait_id} could not be found."
-msgstr "El identificador GAIT {gait_id} no se encontró."
-
-#: tola/views.py:99
+#: tola/views.py:107
msgid "You are not logged in."
msgstr "No ha iniciado sesión."
-#: tola/views.py:143
+#: tola/views.py:151
msgid "Your profile has been updated."
msgstr "Su perfil se ha actualizado."
@@ -4508,352 +4715,461 @@ msgstr "Su perfil se ha actualizado."
msgid "Program list inconsistent with country access"
msgstr "Lista de programas incompatible con el acceso del país"
-#: tola_management/models.py:106 tola_management/models.py:377
-#: tola_management/models.py:797 tola_management/models.py:854
-#: tola_management/models.py:912
+#: tola_management/models.py:106 tola_management/models.py:386
+#: tola_management/models.py:810 tola_management/models.py:877
+#: tola_management/models.py:939
msgid "Modification date"
msgstr "Fecha de modificación"
-#: tola_management/models.py:110 tola_management/models.py:382
-#: tola_management/models.py:800 tola_management/models.py:857
-#: tola_management/models.py:916
+#: tola_management/models.py:110 tola_management/models.py:391
+#: tola_management/models.py:813 tola_management/models.py:880
+#: tola_management/models.py:943
msgid "Modification type"
msgstr "Tipo de modificación"
-#: tola_management/models.py:132 workflow/models.py:158
+#: tola_management/models.py:128
+msgid "User Management Audit Log"
+msgstr ""
+
+#: tola_management/models.py:129
+msgid "User Management Audit Logs"
+msgstr ""
+
+#: tola_management/models.py:134 workflow/models.py:180
msgid "Title"
msgstr "Título"
-#: tola_management/models.py:134
+#: tola_management/models.py:136
msgid "First name"
msgstr "Nombre"
-#: tola_management/models.py:135
+#: tola_management/models.py:137
msgid "Last name"
msgstr "Apellidos"
-#: tola_management/models.py:136
+#: tola_management/models.py:138
msgid "Username"
msgstr "Nombre de usuario"
#. Translators: Form field capturing how a user wants to be called (e.g. Marsha or Mr. Wiggles).
-#: tola_management/models.py:138
+#: tola_management/models.py:140
msgid "Mode of address"
msgstr "Tratamiento"
#. Translators: Form field capturing whether a user prefers to be contacted by phone, email, etc...
-#: tola_management/models.py:140 tola_management/models.py:869
+#: tola_management/models.py:142 tola_management/models.py:896
msgid "Mode of contact"
msgstr "Forma de contacto preferido"
-#: tola_management/models.py:141
+#: tola_management/models.py:143
msgid "Phone number"
msgstr "Número de teléfono"
-#: tola_management/models.py:142
+#: tola_management/models.py:144
msgid "Email"
msgstr "Correo electrónico"
-#: tola_management/models.py:143 tola_management/programadmin.py:113
-#: workflow/models.py:165
+#: tola_management/models.py:145 tola_management/programadmin.py:117
+#: workflow/models.py:86 workflow/models.py:187
msgid "Organization"
msgstr "Organización"
-#: tola_management/models.py:144 tola_management/models.py:870
+#: tola_management/models.py:146 tola_management/models.py:897
msgid "Is active"
msgstr "Activo"
-#: tola_management/models.py:150
+#: tola_management/models.py:152
msgid "User created"
msgstr "Usuario creado"
-#: tola_management/models.py:151
+#: tola_management/models.py:153
msgid "Roles and permissions updated"
msgstr "Roles y permisos actualizado"
-#: tola_management/models.py:152
+#: tola_management/models.py:154
msgid "User profile updated"
msgstr "Perfil de usuario actualizado"
-#: tola_management/models.py:185
+#: tola_management/models.py:187
msgid "Base Country"
msgstr "País Principal"
#. Translators: this is an alternative to picking a reason from a dropdown
-#: tola_management/models.py:323
+#: tola_management/models.py:325
msgid "Other (please specify)"
msgstr "Otro (especificar)"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:325
+#: tola_management/models.py:327
msgid "Adaptive management"
msgstr "Gestión adaptativa"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:327
+#: tola_management/models.py:329
msgid "Budget realignment"
msgstr "Realineamiento del presupuesto"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:329
+#: tola_management/models.py:331
msgid "Changes in context"
msgstr "Cambios en el contexto"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:331
+#: tola_management/models.py:333
msgid "Costed extension"
msgstr "Extensión financiada"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:333
+#: tola_management/models.py:335
msgid "COVID-19"
msgstr "COVID-19"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:335
+#: tola_management/models.py:337
msgid "Donor requirement"
msgstr "Requisito del donante"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:337
+#: tola_management/models.py:339
msgid "Implementation delays"
msgstr "Retrasos en la implementación"
-#: tola_management/models.py:393
+#: tola_management/models.py:342
+msgid "Audit Log Rationale Selection"
+msgstr ""
+
+#: tola_management/models.py:343
+msgid "Audit Log Rationale Selections"
+msgstr ""
+
+#: tola_management/models.py:398
+#, fuzzy
+#| msgid "Program updated"
+msgid "Program Audit Log"
+msgstr "Programa actualizado"
+
+#: tola_management/models.py:399
+#, fuzzy
+#| msgid "Program details"
+msgid "Program Audit Logs"
+msgstr "Detalles del programa"
+
+#: tola_management/models.py:406
msgid "Unit of measure type"
msgstr "Tipo de unidad de medida"
-#: tola_management/models.py:394
+#: tola_management/models.py:407
msgid "Is cumulative"
msgstr "Es acumulativo"
-#: tola_management/models.py:399
+#: tola_management/models.py:412
msgid "Baseline N/A"
msgstr "Línea de base no aplicable"
#. Translators: A Noun. The URL or computer file path where a document can be found.
-#: tola_management/models.py:401
+#: tola_management/models.py:414
msgid "Evidence link"
msgstr "Enlace de evidencia"
#. Translators: A Noun. The user-friendly name of the evidence document they are attaching to a result.
-#: tola_management/models.py:403
+#: tola_management/models.py:416
msgid "Evidence record name"
msgstr "Nombre de registro de evidencia"
#. Translators: A Noun. A list of high-level categories that a program's activities fall into (e.g. food security or humanitarian response)
-#: tola_management/models.py:408
+#: tola_management/models.py:421 tola_management/models.py:834
msgid "Outcome themes"
msgstr "Temas de resultados"
-#: tola_management/models.py:423
+#: tola_management/models.py:436
msgid "Indicator created"
msgstr "Indicador creado"
#. Translators: this is a value in a change log that tells a user what type of change was made. This value indicates that there was a succesful upload.
-#: tola_management/models.py:425
+#: tola_management/models.py:438
msgid "Indicator imported"
msgstr "Indicador importado"
#. Translators: this is a value in a change log that tells a user what type of change was made. This value indicates that an attempt was made to upload a template but doesn't specify whether the upload was successful or not
-#: tola_management/models.py:427
+#: tola_management/models.py:440
msgid "Indicator import template uploaded"
msgstr "Plantilla de importación de indicadores cargada"
-#: tola_management/models.py:428
+#: tola_management/models.py:441
msgid "Indicator changed"
msgstr "Indicador modificado"
-#: tola_management/models.py:429
+#: tola_management/models.py:442
msgid "Indicator deleted"
msgstr "Indicador eliminado"
-#: tola_management/models.py:430
+#: tola_management/models.py:443
msgid "Result changed"
msgstr "Resultado modificado"
-#: tola_management/models.py:431
+#: tola_management/models.py:444
msgid "Result created"
msgstr "Resultado creado"
#. Translators: this is a value in a change log that tells a user what type of change was made.
-#: tola_management/models.py:433
+#: tola_management/models.py:446
msgid "Participant count changed"
msgstr "Cómputo de participantes cambiado"
#. Translators: this is a value in a change log that tells a user what type of change was made.
-#: tola_management/models.py:435
+#: tola_management/models.py:448
msgid "Participant count created"
msgstr "Cómputo de participantes creado"
-#: tola_management/models.py:436
+#: tola_management/models.py:449
msgid "Program dates changed"
msgstr "Fechas del programa modificadas"
-#: tola_management/models.py:437
+#: tola_management/models.py:450
msgid "Result level changed"
msgstr "Nivel de resultados modificado"
-#: tola_management/models.py:448
+#: tola_management/models.py:461
msgid "Percentage"
msgstr "Porcentaje"
-#: tola_management/models.py:807
+#: tola_management/models.py:818
+#, fuzzy
+#| msgid "program indicator"
+msgid "Program Admin Audit Log"
+msgstr "indicador de programa"
+
+#: tola_management/models.py:819
+#, fuzzy
+#| msgid "program indicator"
+msgid "Program Admin Audit Logs"
+msgstr "indicador de programa"
+
+#: tola_management/models.py:824 workflow/models.py:862
msgid "GAIT ID"
msgstr "ID GAIT"
-#: tola_management/models.py:809
+#: tola_management/models.py:825
+msgid "Program name"
+msgstr "Nombre del programa"
+
+#: tola_management/models.py:826
msgid "Funding status"
msgstr "Estado de la financiación"
-#: tola_management/models.py:810
+#: tola_management/models.py:827
msgid "Cost center"
msgstr "Centro de costos"
-#: tola_management/models.py:812 tola_management/models.py:871
+#: tola_management/models.py:829 tola_management/models.py:898
+#: workflow/models.py:39
msgid "Sectors"
msgstr "Sectores"
-#: tola_management/models.py:819
+#: tola_management/models.py:832
+msgid "Program start date"
+msgstr "Fecha de inicio del programa"
+
+#: tola_management/models.py:833
+msgid "Program end date"
+msgstr "Fecha de finalización del programa"
+
+#: tola_management/models.py:835
+msgid "Donors"
+msgstr "Donante"
+
+#: tola_management/models.py:836
+msgid "Fund codes"
+msgstr "Código del fondo"
+
+#: tola_management/models.py:842
msgid "Program created"
msgstr "Programa creado"
-#: tola_management/models.py:820
+#: tola_management/models.py:843
msgid "Program updated"
msgstr "Programa actualizado"
-#: tola_management/models.py:865
+#: tola_management/models.py:885
+#, fuzzy
+#| msgid "Organization updated"
+msgid "Organization Admin Audit Log"
+msgstr "Organización actualizada"
+
+#: tola_management/models.py:886
+#, fuzzy
+#| msgid "Organization updated"
+msgid "Organization Admin Audit Logs"
+msgstr "Organización actualizada"
+
+#: tola_management/models.py:892
msgid "Primary address"
msgstr "Dirección principal"
-#: tola_management/models.py:866
+#: tola_management/models.py:893
msgid "Primary contact name"
msgstr "Nombre de contacto principal"
-#: tola_management/models.py:867
+#: tola_management/models.py:894
msgid "Primary contact email"
msgstr "Dirección de correo electrónico de contacto principal"
-#: tola_management/models.py:868
+#: tola_management/models.py:895
msgid "Primary contact phone"
msgstr "Teléfono de contacto principal"
-#: tola_management/models.py:877
+#: tola_management/models.py:904
msgid "Organization created"
msgstr "Organización creada"
-#: tola_management/models.py:878
+#: tola_management/models.py:905
msgid "Organization updated"
msgstr "Organización actualizada"
+#: tola_management/models.py:948
+msgid "Country Admin Audit Log"
+msgstr ""
+
+#: tola_management/models.py:949
+msgid "Country Admin Audit Logs"
+msgstr ""
+
#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
-#: tola_management/models.py:928
+#: tola_management/models.py:959
msgid "Disaggregation categories"
msgstr "Categorías de desagregación"
+#: tola_management/models.py:964
+msgid "Country name"
+msgstr "Nombre del país"
+
+#: tola_management/models.py:965
+msgid "Country code"
+msgstr "Código del país"
+
#. Translators: Heading for data that tracks when a data disaggregation as been created for a country
-#: tola_management/models.py:939
+#: tola_management/models.py:972
msgid "Country disaggregation created"
msgstr "Desagregación de país creada"
#. Translators: Heading for data that tracks when a data disaggregation assigned to a country has been changed.
-#: tola_management/models.py:941
+#: tola_management/models.py:974
msgid "Country disaggregation updated"
msgstr "Desagregación de país actualizada"
#. Translators: Heading for data that tracks when a data disaggregation assigned to a country has been deleted.
-#: tola_management/models.py:943
+#: tola_management/models.py:976
msgid "Country disaggregation deleted"
msgstr "Desagregación de país eliminada"
#. Translators: Heading for data that tracks when a data disaggregation assigned to a country has been archived.
-#: tola_management/models.py:945
+#: tola_management/models.py:978
msgid "Country disaggregation archived"
msgstr "Desagregación de país archivada"
#. Translators: Heading for data that tracks when a data disaggregation assigned to a country has been restored.
-#: tola_management/models.py:947
+#: tola_management/models.py:980
msgid "Country disaggregation unarchived"
msgstr "Desagregación de país desarchivada"
#. Translators: Heading for data that tracks when the categories of a data disaggregation that has been assigned to country have been updated.
-#: tola_management/models.py:949
+#: tola_management/models.py:982
msgid "Country disaggregation categories updated"
msgstr "Categorías de desagregación por país actualizadas"
+#: tola_management/models.py:983
+msgid "Country created"
+msgstr "País creado"
+
#. Translators: The date and time of the change made to a piece of data
-#: tola_management/programadmin.py:107
+#: tola_management/programadmin.py:111
msgid "Date and time"
msgstr "Fecha y hora"
#. Translators: The name of the user who carried out an action
-#: tola_management/programadmin.py:112 workflow/models.py:162
+#: tola_management/programadmin.py:116 workflow/models.py:184
msgid "User"
msgstr "Usuario"
#. Translators: Part of change log, indicates the type of change being made to a particular piece of data
-#: tola_management/programadmin.py:115
+#: tola_management/programadmin.py:119
msgid "Change type"
msgstr "Tipo de cambio"
#. Translators: Part of change log, shows what the data looked like before the changes
-#: tola_management/programadmin.py:117
+#: tola_management/programadmin.py:121
msgid "Previous entry"
msgstr "Entrada anterior"
#. Translators: Part of change log, shows what the data looks like after the changes
-#: tola_management/programadmin.py:119
+#: tola_management/programadmin.py:123
msgid "New entry"
msgstr "Nueva entrada"
#. Translators: Part of change log, reason for the change as entered by the user
-#: tola_management/programadmin.py:121
+#: tola_management/programadmin.py:125
msgid "Rationale"
msgstr "Justificación"
-#: tola_management/views.py:275
+#: tola_management/programadmin.py:314
+msgid "The program start date may not be after the program end date."
+msgstr ""
+"La fecha de inicio del programa no puede ser posterior a la fecha de "
+"finalización del programa."
+
+#: tola_management/programadmin.py:316
+msgid "The program end date may not be before the program start date."
+msgstr ""
+"La fecha de finalización del programa no puede ser anterior a la fecha de "
+"inicio del programa."
+
+#: tola_management/programadmin.py:339
+msgid "Duplicate GAIT ID numbers are not allowed."
+msgstr "No se permite duplicar los números de identificación GAIT."
+
+#: tola_management/views.py:292
msgid "Mercy Corps - Tola New Account Registration"
msgstr "Este campo debe ser único"
#. Translators: Page title for an administration page managing users of the application
-#: tola_management/views.py:294
+#: tola_management/views.py:311
msgid "Admin: Users"
msgstr "Administrador: usuarios"
#. Translators: Page title for an administration page managing organizations in the application
-#: tola_management/views.py:299
+#: tola_management/views.py:316
msgid "Admin: Organizations"
msgstr "Administrador: organizaciones"
#. Translators: Page title for an administration page managing Programs using the application
-#: tola_management/views.py:304
+#: tola_management/views.py:321
msgid "Admin: Programs"
msgstr "Administrador: programas"
#. Translators: Page title for an administration page managing countries represented in the application
-#: tola_management/views.py:309
+#: tola_management/views.py:326
msgid "Admin: Countries"
msgstr "Administrador: países"
#. Translators: Error message given when an administrator tries to save a username that is already taken
-#: tola_management/views.py:394 tola_management/views.py:406
+#: tola_management/views.py:411 tola_management/views.py:423
msgid "A user account with this username already exists."
msgstr "Ya existe una cuenta de usuario con este nombre de usuario."
#. Translators: Error message given when an administrator tries to save a email that is already taken
-#: tola_management/views.py:398 tola_management/views.py:410
+#: tola_management/views.py:415 tola_management/views.py:427
msgid "A user account with this email address already exists."
msgstr ""
"Ya existe una cuenta de usuario con esta dirección de correo electrónico."
-#: tola_management/views.py:418
+#: tola_management/views.py:435
msgid ""
"Non-Mercy Corps emails should not be used with the Mercy Corps organization."
msgstr ""
"Los correos electrónicos que no pertenecen a Mercy Corps no deben usarse con "
"la organización Mercy Corps."
-#: tola_management/views.py:424
+#: tola_management/views.py:441
msgid ""
"A user account with this email address already exists. Mercy Corps accounts "
"are managed by Okta. Mercy Corps employees should log in using their Okta "
@@ -4867,7 +5183,7 @@ msgstr ""
#. Translators: Error message given when an administrator tries to save a bad combination of
#. organization and email
#. Translators: Error message given when an administrator tries to save an invalid username
-#: tola_management/views.py:430 tola_management/views.py:435
+#: tola_management/views.py:447 tola_management/views.py:452
msgid ""
"Mercy Corps accounts are managed by Okta. Mercy Corps employees should log "
"in using their Okta username and password."
@@ -4876,12 +5192,12 @@ msgstr ""
"Mercy Corps deben iniciar sesión con su nombre de usuario y contraseña de "
"Okta."
-#: tola_management/views.py:448
+#: tola_management/views.py:465
msgid "Only superusers can create Mercy Corps staff profiles."
msgstr ""
"Solo los super-usuarios pueden crear perfiles de personal de Mercy Corps."
-#: tola_management/views.py:487
+#: tola_management/views.py:504
msgid "Only superusers can edit Mercy Corps staff profiles."
msgstr ""
"Solo los super-usuarios pueden modificar perfiles de personal de Mercy Corps."
@@ -4946,7 +5262,7 @@ msgstr "Alfabetización"
msgid "Demographic Info Data Source"
msgstr "Origen de los Datos de Información Demográfica"
-#: workflow/forms.py:181 workflow/models.py:861
+#: workflow/forms.py:181 workflow/models.py:978
msgid "Date of First Contact"
msgstr "Fecha del primer contacto"
@@ -4954,417 +5270,499 @@ msgstr "Fecha del primer contacto"
msgid "Search"
msgstr "Buscar"
-#: workflow/models.py:34
+#: workflow/models.py:33 workflow/models.py:55
msgid "Sector Name"
msgstr "Nombre del sector"
-#: workflow/models.py:56
+#: workflow/models.py:60 workflow/models.py:534
+#, fuzzy
+#| msgid "Sector"
+msgid "IDAA Sector"
+msgstr "Sector"
+
+#: workflow/models.py:61
+#, fuzzy
+#| msgid "Sector"
+msgid "IDAA Sectors"
+msgstr "Sector"
+
+#: workflow/models.py:70
msgid "Organization Name"
msgstr "Nombre de la organización"
-#: workflow/models.py:57 workflow/models.py:124
+#: workflow/models.py:71 workflow/models.py:138
msgid "Description/Notes"
msgstr "Descripción/Notas"
-#: workflow/models.py:58
+#: workflow/models.py:72
msgid "Organization url"
msgstr "URL de la organización"
-#: workflow/models.py:62
+#: workflow/models.py:76
msgid "Primary Address"
msgstr "Dirección Principal"
-#: workflow/models.py:63
+#: workflow/models.py:77
msgid "Primary Contact Name"
msgstr "Nombre de Contacto Principal"
-#: workflow/models.py:64
+#: workflow/models.py:78
msgid "Primary Contact Email"
msgstr "Dirección de Correo Electrónico de Contacto Principal"
-#: workflow/models.py:65
+#: workflow/models.py:79
msgid "Primary Contact Phone"
msgstr "Teléfono de Contacto Principal"
-#: workflow/models.py:66
+#: workflow/models.py:80
msgid "Primary Mode of Contact"
msgstr "Forma de Contacto Principal"
-#: workflow/models.py:111
+#: workflow/models.py:121
msgid "Region Name"
msgstr "Nombre de la región"
-#: workflow/models.py:119
+#: workflow/models.py:125
+#, fuzzy
+#| msgid "Regions"
+msgid "Region"
+msgstr "Regiones"
+
+#: workflow/models.py:126
+msgid "Regions"
+msgstr "Regiones"
+
+#: workflow/models.py:133
msgid "Country Name"
msgstr "Nombre del país"
-#: workflow/models.py:121
+#: workflow/models.py:135
msgid "organization"
msgstr "organización"
-#: workflow/models.py:123
+#: workflow/models.py:137
msgid "2 Letter Country Code"
msgstr "Código de país de 2 letras"
-#: workflow/models.py:125
+#: workflow/models.py:139
msgid "Latitude"
msgstr "Latitud"
-#: workflow/models.py:126
+#: workflow/models.py:140
msgid "Longitude"
msgstr "Longitud"
-#: workflow/models.py:127
+#: workflow/models.py:141
msgid "Zoom"
msgstr "Enfocar"
-#: workflow/models.py:159
+#: workflow/models.py:181
msgid "Given Name"
msgstr "Nombre de pila"
-#: workflow/models.py:160
+#: workflow/models.py:182
msgid "Employee Number"
msgstr "Número de empleado"
-#: workflow/models.py:171
+#: workflow/models.py:193
msgid "Active Country"
msgstr "País activo"
-#: workflow/models.py:174
+#: workflow/models.py:196
msgid "Accessible Countries"
msgstr "Países accesibles"
-#: workflow/models.py:189
+#: workflow/models.py:211
msgid "Tola User"
msgstr "Usuario de Tola"
-#: workflow/models.py:344
+#: workflow/models.py:212
+#, fuzzy
+#| msgid "Tola User"
+msgid "Tola Users"
+msgstr "Usuario de Tola"
+
+#: workflow/models.py:367
msgid "No Organization for this user"
msgstr "El usuario no tiene Organización"
-#: workflow/models.py:398
+#: workflow/models.py:421
msgid "User (all programs)"
msgstr "Usuario (todos los programas)"
-#: workflow/models.py:399
+#: workflow/models.py:422
msgid "Basic Admin (all programs)"
msgstr "Admin Básico (todos los programas)"
-#: workflow/models.py:410
+#: workflow/models.py:433
msgid "Only Mercy Corps users can be given country-level access"
msgstr "Solo usuarios de Mercy Corps pueden obtener acceso de nivel país"
-#: workflow/models.py:519
-msgid "ID"
-msgstr "Identificación"
+#: workflow/models.py:524
+#, fuzzy
+#| msgid "GAIT ID"
+msgid "Legacy GAIT ID"
+msgstr "ID GAIT"
-#: workflow/models.py:520
+#: workflow/models.py:525
msgid "External program id"
msgstr "ID del programa externo"
-#: workflow/models.py:521
+#: workflow/models.py:526
msgid "Program Name"
msgstr "Nombre del programa"
-#: workflow/models.py:522
+#: workflow/models.py:527
msgid "Funding Status"
msgstr "Estado de financiamiento"
-#: workflow/models.py:523
+#: workflow/models.py:528 workflow/models.py:887
msgid "Fund Code"
msgstr "Código del fondo"
-#: workflow/models.py:524
+#: workflow/models.py:529
msgid "Program Description"
msgstr "Descripción del programa"
-#: workflow/models.py:528
+#: workflow/models.py:543
msgid "Enable Approval Authority"
msgstr "Habilitar autoridad de aprobación"
-#: workflow/models.py:537
+#: workflow/models.py:552
msgid "Enable Public Dashboard"
msgstr "Habilitar tablero público"
-#: workflow/models.py:538
+#: workflow/models.py:553
msgid "Program Start Date"
msgstr "Fecha de inicio del programa"
-#: workflow/models.py:539
+#: workflow/models.py:554
msgid "Program End Date"
msgstr "Fecha de finalización del programa"
-#: workflow/models.py:540
+#: workflow/models.py:555
msgid "Reporting Period Start Date"
msgstr "Fecha de inicio del período de informe"
-#: workflow/models.py:541
+#: workflow/models.py:556
msgid "Reporting Period End Date"
msgstr "Fecha de finalización del período de informe"
#. Translators: This is an option that users can select to use the new "results framework" option to organize their indicators.
-#: workflow/models.py:544
+#: workflow/models.py:559
msgid "Auto-number indicators according to the results framework"
msgstr "Indicadores de numeración automática según el sistema de resultados"
-#: workflow/models.py:548
+#: workflow/models.py:563
msgid "Group indicators according to the results framework"
msgstr "Agrupar indicadores de acuerdo con el sistema de resultados"
#. Translators: this labels a filter to sort indicators, for example, "by Outcome chain":
#. Translators: see note for %(tier)s chain, this is the same thing
-#: workflow/models.py:743 workflow/serializers.py:204
+#: workflow/models.py:788 workflow/serializers.py:204
#, python-format
msgid "by %(level_name)s chain"
msgstr "por cadena de %(level_name)s"
#. Translators: this labels a filter to sort indicators, for example, "by Outcome chain":
-#: workflow/models.py:754
+#: workflow/models.py:799
#, python-format
msgid "%(level_name)s chains"
msgstr "cadenas de %(level_name)s"
+#: workflow/models.py:839
+#, fuzzy
+#| msgid "Program created"
+msgid "Program Discrepancy"
+msgstr "Programa creado"
+
+#: workflow/models.py:840
+#, fuzzy
+#| msgid "Program details"
+msgid "Program Discrepancies"
+msgstr "Detalles del programa"
+
+#: workflow/models.py:845 workflow/models.py:849
+#, fuzzy
+#| msgid "None"
+msgid "(None)"
+msgstr "Ninguno"
+
+#: workflow/models.py:863
+#, fuzzy
+#| msgid "GAIT ID"
+msgid "GAIT IDs"
+msgstr "ID GAIT"
+
+#: workflow/models.py:888
+msgid "Fund Codes"
+msgstr "Código del fondo"
+
#. Translators: Refers to a user permission role with limited access to view data only
-#: workflow/models.py:773
+#: workflow/models.py:896
msgid "Low (view only)"
msgstr "Bajo (solo ver)"
#. Translators: Refers to a user permission role with limited access to add or edit result data
-#: workflow/models.py:775
+#: workflow/models.py:898
msgid "Medium (add and edit results)"
msgstr "Medio (agregar y editar resultados)"
#. Translators: Refers to a user permission role with access to edit any data
-#: workflow/models.py:777
+#: workflow/models.py:900
msgid "High (edit anything)"
msgstr "Alto (editar todo)"
-#: workflow/models.py:799 workflow/models.py:804
+#: workflow/models.py:919 workflow/models.py:920
+#, fuzzy
+#| msgid "Programs"
+msgid "Program Access"
+msgstr "Programas"
+
+#: workflow/models.py:924 workflow/models.py:929
msgid "Profile Type"
msgstr "Tipo de perfil"
-#: workflow/models.py:826
+#: workflow/models.py:930
+#, fuzzy
+#| msgid "Profile Type"
+msgid "Profile Types"
+msgstr "Tipo de perfil"
+
+#: workflow/models.py:948
msgid "Land Classification"
msgstr "Clasificación de tierras"
-#: workflow/models.py:826
+#: workflow/models.py:948
msgid "Rural, Urban, Peri-Urban"
msgstr "Rural, urbano, periurbano"
-#: workflow/models.py:831
+#: workflow/models.py:953
msgid "Land Type"
msgstr "Tipo de tierra"
-#: workflow/models.py:858
+#: workflow/models.py:975
msgid "Site Name"
msgstr "Nombre del sitio"
-#: workflow/models.py:860
+#: workflow/models.py:977
msgid "Contact Name"
msgstr "Nombre de contacto"
-#: workflow/models.py:862
+#: workflow/models.py:979
msgid "Contact Number"
msgstr "Número de contacto"
-#: workflow/models.py:863
+#: workflow/models.py:980
msgid "Number of Members"
msgstr "Número de miembros"
-#: workflow/models.py:864
+#: workflow/models.py:981
msgid "Data Source"
msgstr "Fuente de datos"
-#: workflow/models.py:865
+#: workflow/models.py:982
msgid "Total # Households"
msgstr "Número total de hogares"
-#: workflow/models.py:866
+#: workflow/models.py:983
msgid "Average Household Size"
msgstr "Tamaño promedio del hogar"
-#: workflow/models.py:867
+#: workflow/models.py:984
msgid "Male age 0-5"
msgstr "Hombre de 0-5 años"
-#: workflow/models.py:868
+#: workflow/models.py:985
msgid "Female age 0-5"
msgstr "Mujer de 0-5 años"
-#: workflow/models.py:869
+#: workflow/models.py:986
msgid "Male age 6-9"
msgstr "Hombre de 6-9 años"
-#: workflow/models.py:870
+#: workflow/models.py:987
msgid "Female age 6-9"
msgstr "Mujer de 6-9 años"
-#: workflow/models.py:871
+#: workflow/models.py:988
msgid "Male age 10-14"
msgstr "Hombre de 10-14 años"
-#: workflow/models.py:872
+#: workflow/models.py:989
msgid "Female age 10-14"
msgstr "Mujer de 10-14 años"
-#: workflow/models.py:873
+#: workflow/models.py:990
msgid "Male age 15-19"
msgstr "Hombre de 15-19 años"
-#: workflow/models.py:874
+#: workflow/models.py:991
msgid "Female age 15-19"
msgstr "Mujer de 15-19 años"
-#: workflow/models.py:875
+#: workflow/models.py:992
msgid "Male age 20-24"
msgstr "Hombre de 20-24 años"
-#: workflow/models.py:876
+#: workflow/models.py:993
msgid "Female age 20-24"
msgstr "Mujer de 20-24 años"
-#: workflow/models.py:877
+#: workflow/models.py:994
msgid "Male age 25-34"
msgstr "Hombre de 25-34 años"
-#: workflow/models.py:878
+#: workflow/models.py:995
msgid "Female age 25-34"
msgstr "Mujer de 25-34 años"
-#: workflow/models.py:879
+#: workflow/models.py:996
msgid "Male age 35-49"
msgstr "Hombre de 35-49 años"
-#: workflow/models.py:880
+#: workflow/models.py:997
msgid "Female age 35-49"
msgstr "Mujer de 35-49 años"
-#: workflow/models.py:881
+#: workflow/models.py:998
msgid "Male Over 50"
msgstr "Hombre mayor de 50 años"
-#: workflow/models.py:882
+#: workflow/models.py:999
msgid "Female Over 50"
msgstr "Mujer mayor de 50 años"
-#: workflow/models.py:883
+#: workflow/models.py:1000
msgid "Total population"
msgstr "Población total"
-#: workflow/models.py:884
+#: workflow/models.py:1001
msgid "Total male"
msgstr "Total masculino"
-#: workflow/models.py:885
+#: workflow/models.py:1002
msgid "Total female"
msgstr "Total femenino"
-#: workflow/models.py:887
+#: workflow/models.py:1004
msgid "Classify land"
msgstr "Clasificar la tierra"
-#: workflow/models.py:888
+#: workflow/models.py:1005
msgid "Total Land"
msgstr "Tierra total"
-#: workflow/models.py:890
+#: workflow/models.py:1007
msgid "Total Agricultural Land"
msgstr "Tierra agrícola total"
-#: workflow/models.py:892
+#: workflow/models.py:1009
msgid "Total Rain-fed Land"
msgstr "Tierra total alimentada por la lluvia"
-#: workflow/models.py:894
+#: workflow/models.py:1011
msgid "Total Horticultural Land"
msgstr "Tierra hortícola total"
-#: workflow/models.py:895
+#: workflow/models.py:1012
msgid "Total Literate People"
msgstr "Total de personas alfabetizadas"
-#: workflow/models.py:896
+#: workflow/models.py:1013
#, python-format
msgid "% of Literate Males"
msgstr "% de hombres alfabetizados"
-#: workflow/models.py:897
+#: workflow/models.py:1014
#, python-format
msgid "% of Literate Females"
msgstr "% de mujeres alfabetizadas"
-#: workflow/models.py:898
+#: workflow/models.py:1015
msgid "Literacy Rate (%)"
msgstr "Tasa de alfabetización (%)"
-#: workflow/models.py:899
+#: workflow/models.py:1016
msgid "Households Owning Land"
msgstr "Hogares que poseen tierras"
-#: workflow/models.py:901
+#: workflow/models.py:1018
msgid "Average Landholding Size"
msgstr "Tamaño promedio de propiedad"
-#: workflow/models.py:902
+#: workflow/models.py:1019
msgid "In hectares/jeribs"
msgstr "En hectáreas/jeribs"
-#: workflow/models.py:904
+#: workflow/models.py:1021
msgid "Households Owning Livestock"
msgstr "Hogares que son propietarios de ganado"
-#: workflow/models.py:906
+#: workflow/models.py:1023
msgid "Animal Types"
msgstr "Tipos de animales"
-#: workflow/models.py:906
+#: workflow/models.py:1023
msgid "List Animal Types"
msgstr "Lista de tipos de animales"
-#: workflow/models.py:909
+#: workflow/models.py:1026
msgid "Latitude (Decimal Coordinates)"
msgstr "Latitud (coordenadas decimales)"
-#: workflow/models.py:911
+#: workflow/models.py:1028
msgid "Longitude (Decimal Coordinates)"
msgstr "Longitud (coordenadas decimales)"
-#: workflow/models.py:912
+#: workflow/models.py:1029
msgid "Site Active"
msgstr "Sitio activo"
-#: workflow/models.py:913
+#: workflow/models.py:1030
msgid "Approval"
msgstr "Aprobación"
-#: workflow/models.py:913
+#: workflow/models.py:1030
msgid "in progress"
msgstr "en progreso"
-#: workflow/models.py:915
+#: workflow/models.py:1032
msgid "This is the Provincial Line Manager"
msgstr "Este es el gerente de línea provincial"
-#: workflow/models.py:916
+#: workflow/models.py:1033
msgid "Approved by"
msgstr "Aprobado por"
-#: workflow/models.py:918
+#: workflow/models.py:1035
msgid "This is the originator"
msgstr "Este es el creador"
-#: workflow/models.py:919
+#: workflow/models.py:1036
msgid "Filled by"
msgstr "Llenado por"
-#: workflow/models.py:921
+#: workflow/models.py:1038
msgid "This should be GIS Manager"
msgstr "Esto debería ser gerente de SIG"
-#: workflow/models.py:922
+#: workflow/models.py:1039
msgid "Location verified by"
msgstr "Ubicación verificada por"
+#: workflow/models.py:1048
+#, fuzzy
+#| msgid "Profile"
+msgid "Site Profile"
+msgstr "Perfil"
+
+#: workflow/models.py:1049
+#, fuzzy
+#| msgid "Site Projects"
+msgid "Site Profiles"
+msgstr "Proyectos del Sitio"
+
#. Translators: This labels how a list of levels is ordered. Levels are part of a hierarchy and belong to one of ~six tiers. Grouping by level means that Levels on the same tier but on different branches are gropued together. Grouping by tier chain means levels are displayed with other levels in their same branch, as part of the natural hierarchy.
#: workflow/serializers_new/base_program_serializers.py:194
#, python-format
@@ -5392,11 +5790,60 @@ msgstr "Informe del IPTT TvA"
msgid "IPTT TvA full program report"
msgstr "Informe completo del programa del IPTT TvA"
-#: workflow/views.py:314
+#: workflow/serializers_new/program_period_serializer.py:38
+#: workflow/serializers_new/program_period_serializer.py:58
+msgid "Indicator tracking period cannot be outside of the IDAA program dates."
+msgstr ""
+"El periodo de seguimiento de los indicadores no puede estar fuera de las "
+"fechas del programa IDAA."
+
+#: workflow/serializers_new/program_period_serializer.py:41
+msgid "Indicator tracking period must start on the first of the month."
+msgstr ""
+"El período de seguimiento de los indicadores debe comenzar el primer día del "
+"mes."
+
+#: workflow/serializers_new/program_period_serializer.py:47
+msgid ""
+"Indicator tracking period start date cannot be changed while time-aware "
+"periodic targets are in place."
+msgstr ""
+"La fecha de inicio del período de seguimiento de los indicadores no puede "
+"modificarse mientras los objetivos periódicos de tiempo estén vigentes."
+
+#: workflow/serializers_new/program_period_serializer.py:62
+msgid "Indicator tracking period must end on the last day of the month."
+msgstr ""
+"El período de seguimiento de los indicadores debe terminar el último día del "
+"mes."
+
+#: workflow/serializers_new/program_period_serializer.py:68
+msgid ""
+"Indicator tracking period must end after the start of the last target period."
+msgstr ""
+"El periodo de seguimiento de los indicadores debe terminar después del "
+"inicio del último periodo objetivo."
+
+#: workflow/serializers_new/program_period_serializer.py:71
+msgid ""
+"Indicator tracking period start date must be before the indicator tracking "
+"period end date."
+msgstr ""
+"La fecha de inicio del periodo de seguimiento de los indicadores debe ser "
+"anterior a la fecha de finalización del periodo de seguimiento de los "
+"indicadores."
+
+#: workflow/serializers_new/program_period_serializer.py:74
+msgid "You must select an indicator tracking period end date."
+msgstr ""
+"Debe seleccionar una fecha de finalización del periodo de seguimiento de los "
+"indicadores."
+
+#: workflow/views.py:345
msgid "Reporting period must start on the first of the month"
msgstr "El período de informe debe comenzar el primero de mes"
-#: workflow/views.py:321
+#: workflow/views.py:352
msgid ""
"Reporting period start date cannot be changed while time-aware periodic "
"targets are in place"
@@ -5404,21 +5851,21 @@ msgstr ""
"La fecha de inicio del período de informe no puede ser cambiada mientras "
"haya objetivos periódicos basados en tiempo"
-#: workflow/views.py:329
+#: workflow/views.py:360
msgid "Reporting period must end on the last day of the month"
msgstr "El período de informe debe terminar el último día de mes"
-#: workflow/views.py:336
+#: workflow/views.py:367
msgid "Reporting period must end after the start of the last target period"
msgstr ""
"El período de informe debe terminar después del inicio del último período "
"objetivo"
-#: workflow/views.py:342
+#: workflow/views.py:373
msgid "Reporting period must start before reporting period ends"
msgstr "El período de informe debe comenzar antes que su fecha de finalización"
-#: workflow/views.py:347
+#: workflow/views.py:378
msgid "You must select a reporting period end date"
msgstr "Debe seleccionar una fecha de finalización para el período de informe"
@@ -5431,6 +5878,113 @@ msgstr "Encontrar"
msgid "City, Country:"
msgstr "Ciudad, País:"
+#~ msgid "The program start date may not be more than 10 years in the past."
+#~ msgstr ""
+#~ "La fecha de inicio del programa no puede ser más de 10 años en el pasado."
+
+#~ msgid "The program end date may not be more than 10 years in the future."
+#~ msgstr ""
+#~ "La fecha de finalización del programa no puede ser más de 10 años en el "
+#~ "futuro."
+
+#~ msgid "Program does not have a GAIT id"
+#~ msgstr "El programa no tiene un identificador GAIT"
+
+#~ msgid "There was a problem connecting to the GAIT server."
+#~ msgstr "Hubo un problema al conectarse al servidor GAIT."
+
+#~ msgid "The GAIT ID {gait_id} could not be found."
+#~ msgstr "El identificador GAIT {gait_id} no se encontró."
+
+#~ msgid ""
+#~ "\n"
+#~ "
\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ "
"
+#~ "span>\n"
+#~ " "
+
+#~ msgid ""
+#~ "\n"
+#~ " \n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " \n"
+#~ " "
+
+#~ msgid ""
+#~ "\n"
+#~ " "
+#~ "span>\n"
+#~ " is
%(program."
+#~ "percent_complete)s%% complete\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " \n"
+#~ " está
%(program.percent_complete)s%"
+#~ "% completado\n"
+#~ " "
+
+#~ msgid "ID"
+#~ msgstr "Identificación"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| " \n"
+#~| " "
+#~ msgid ""
+#~ "\n"
+#~ " "
+#~ "span>\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " \n"
+#~ " "
+
+#~ msgid "View program in GAIT"
+#~ msgstr "Ver programa en GAIT"
+
+#~ msgid ""
+#~ "\n"
+#~ " Before adding indicators and performance results, we need to know "
+#~ "your program's\n"
+#~ " reporting start and end dates.\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " Antes de agregar indicadores y resultados de rendimiento, necesitamos "
+#~ "saber las \n"
+#~ " fechas de inicio y fin de informes \n"
+#~ "de su programa.\n"
+#~ " "
+
#~ msgid "Peace and Stability"
#~ msgstr "Paz y estabilidad"
@@ -5625,9 +6179,6 @@ msgstr "Ciudad, País:"
#~ msgid "Target periods"
#~ msgstr "Periodos objetivo"
-#~ msgid "Levels"
-#~ msgstr "Niveles"
-
#~ msgid "Types"
#~ msgstr "Tipos"
@@ -5643,9 +6194,6 @@ msgstr "Ciudad, País:"
#~ msgid "Standard (TolaData Admins Only)"
#~ msgstr "Estándar (solo administradores de TolaData)"
-#~ msgid "Disaggregation label"
-#~ msgstr "Etiqueta de desagregación"
-
#~ msgid "Disaggregation Value"
#~ msgstr "Valor de desagregación"
@@ -5890,9 +6438,6 @@ msgstr "Ciudad, País:"
#~ msgid "No sites yet."
#~ msgstr "No hay sitios todavía."
-#~ msgid "Site Projects"
-#~ msgstr "Proyectos del Sitio"
-
#~ msgid "Project Data for %(site)s"
#~ msgstr "Datos del proyecto para %(site)s small>"
@@ -5950,9 +6495,6 @@ msgstr "Ciudad, País:"
#~ msgid "Contact"
#~ msgstr "Contacto"
-#~ msgid "Fund code"
-#~ msgstr "Código del fondo"
-
#~ msgid "User with Approval Authority"
#~ msgstr "Usuario con autoridad de aprobación"
@@ -7074,23 +7616,6 @@ msgstr "Ciudad, País:"
#~ msgid "Add an indicator."
#~ msgstr "Agregar un indicador."
-#~ msgid ""
-#~ "\n"
-#~ " %(indicator_count)s program indicator\n"
-#~ " "
-#~ msgid_plural ""
-#~ "\n"
-#~ " %(indicator_count)s program indicators\n"
-#~ " "
-#~ msgstr[0] ""
-#~ "\n"
-#~ " %(indicator_count)s indicador de programa\n"
-#~ " "
-#~ msgstr[1] ""
-#~ "\n"
-#~ " %(indicator_count)s indicadores de programa\n"
-#~ " "
-
#~ msgid "Reporting period"
#~ msgstr "Período de información"
@@ -7169,9 +7694,6 @@ msgstr "Ciudad, País:"
#~ msgid "District:"
#~ msgstr "Distrito:"
-#~ msgid "program indicator"
-#~ msgstr "indicador de programa"
-
#~ msgid ""
#~ "External template indicators include agency standard indicator feeds or "
#~ "donor required indicators from a web service. Skip The service section "
@@ -7469,9 +7991,6 @@ msgstr "Ciudad, País:"
#~ msgid "Success! Changes to the results framework template were saved"
#~ msgstr "Se guardaron los cambios en la plantilla del sistema de resultados."
-#~ msgid "Disaggregated values"
-#~ msgstr "Valores desagregados modificados"
-
#~ msgid "Result levels must have unique names."
#~ msgstr "Los niveles de resultados deben tener nombres únicos."
@@ -7673,9 +8192,6 @@ msgstr "Ciudad, País:"
#~ msgid "Show all indicators"
#~ msgstr "Ver todos los indicadores"
-#~ msgid "None"
-#~ msgstr "Ninguno"
-
#~ msgid "Group indicators:"
#~ msgstr "Indicadores de grupo:"
@@ -7870,27 +8386,15 @@ msgstr "Ciudad, País:"
#~ msgid "Result date:"
#~ msgstr "Fecha del resultado:"
-#~ msgid "Indicators and results"
-#~ msgstr "Indicadores y resultados"
-
#~ msgid "entries"
#~ msgstr "ítems"
#~ msgid "Strategic Objectives"
#~ msgstr "Objetivos estratégicos"
-#~ msgid "Country Disaggregations"
-#~ msgstr "Desagregación del País"
-
#~ msgid "History"
#~ msgstr "Historial"
-#~ msgid "Country name"
-#~ msgstr "Nombre del país"
-
-#~ msgid "Country Code"
-#~ msgstr "Código del País"
-
#~ msgid "Save Changes"
#~ msgstr "Guardar cambios"
@@ -8138,9 +8642,6 @@ msgstr "Ciudad, País:"
#~ msgid "organizations"
#~ msgstr "organizaciones"
-#~ msgid "Program name"
-#~ msgstr "Nombre del programa"
-
#~ msgid "Indicator grouping"
#~ msgstr "Agrupación de indicadores"
@@ -8286,9 +8787,6 @@ msgstr "Ciudad, País:"
#~ msgid "Verification email send failed"
#~ msgstr "Falló el envío de correo electrónico de verificación"
-#~ msgid "Regions"
-#~ msgstr "Regiones"
-
#~ msgid "Find a User"
#~ msgstr "Encontrar una Usuario"
@@ -8355,9 +8853,6 @@ msgstr "Ciudad, País:"
#~ msgid "%s and sub-levels: %s"
#~ msgstr "%s y subniveles: %s"
-#~ msgid "Disaggregation Type"
-#~ msgstr "Tipo de desagregación"
-
#~ msgid "and sub-levels:"
#~ msgstr "y subniveles:"
@@ -8602,41 +9097,6 @@ msgstr "Ciudad, País:"
#~ "por debajo del objetivo\n"
#~ " "
-#~ msgid ""
-#~ "\n"
-#~ " \n"
-#~ " Program period\n"
-#~ " \n"
-#~ " is
%(program.percent_complete)s%% "
-#~ "complete"
-#~ msgstr ""
-#~ "\n"
-#~ " \n"
-#~ " El período del programa\n"
-#~ " \n"
-#~ " está
%(program.percent_complete)s%% "
-#~ "completado"
-
#~ msgid "Target vs Actuals Report"
#~ msgstr "Informe objetivo frente a informes reales"
diff --git a/tola/locale/es/LC_MESSAGES/djangojs.mo b/tola/locale/es/LC_MESSAGES/djangojs.mo
index 134e62ba2..d23259750 100644
Binary files a/tola/locale/es/LC_MESSAGES/djangojs.mo and b/tola/locale/es/LC_MESSAGES/djangojs.mo differ
diff --git a/tola/locale/es/LC_MESSAGES/djangojs.po b/tola/locale/es/LC_MESSAGES/djangojs.po
index 991c42ceb..5369b2728 100644
--- a/tola/locale/es/LC_MESSAGES/djangojs.po
+++ b/tola/locale/es/LC_MESSAGES/djangojs.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-24 10:03-0700\n"
-"PO-Revision-Date: 2022-05-18 11:48-0400\n"
+"POT-Creation-Date: 2022-10-17 09:49-0700\n"
+"PO-Revision-Date: 2022-10-17 14:24-0400\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: es\n"
@@ -11,14 +11,23 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 3.0.1\n"
+"X-Generator: Poedit 3.1.1\n"
#. Translators: This is the file name of an Excel template that will be used for batch imports
-#: js/apiv2.js:139 js/apiv2.js:172
+#: js/apiv2.js:152 js/apiv2.js:185
msgid "Import indicators.xlsx"
msgstr "Importar indicadores.xlsx"
-#: js/base.js:383 js/base.js:384
+#: js/base.js:17 js/pages/program_page/components/program_period.js:437
+msgid "Program period"
+msgstr "Período del programa"
+
+#: js/base.js:23
+msgid "Set the indicator tracking start and end dates."
+msgstr ""
+"Establezca las fechas de inicio y fin del seguimiento de los indicadores."
+
+#: js/base.js:402 js/base.js:403
msgid ""
"Your changes will be recorded in a change log. For future reference, please "
"share your reason for these changes."
@@ -26,11 +35,11 @@ msgstr ""
"Sus cambios serán guardados en un registro de cambios. Para referencia "
"futura, indique la justificación para estos cambios."
-#: js/base.js:385
+#: js/base.js:404
msgid "This action cannot be undone"
msgstr "Advertencia: esta acción no se puede deshacer"
-#: js/base.js:395
+#: js/base.js:414
#, python-format
msgid ""
"Removing this target means that %s result will no longer have targets "
@@ -46,23 +55,23 @@ msgstr[1] ""
"asociados."
#. Translators: the header of an alert after an action completed successfully
-#: js/base.js:415
+#: js/base.js:434
msgid "Success"
msgstr "Éxito"
#. Translators: the header of an alert where additional warning info is provided
-#: js/base.js:434 js/pages/results_framework/components/level_cards.js:86
+#: js/base.js:453 js/pages/results_framework/components/level_cards.js:86
#: js/pages/results_framework/models.js:635
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:657
#: js/pages/tola_management_pages/country/models.js:438
#: js/pages/tola_management_pages/country/models.js:473
#: js/pages/tola_management_pages/country/models.js:505
-#: js/pages/tola_management_pages/program/models.js:279
+#: js/pages/tola_management_pages/program/models.js:292
msgid "Warning"
msgstr "Advertencia"
#. Translators: the header of an alert after an action failed for some reason
-#: js/base.js:452
+#: js/base.js:471
msgid "Error"
msgstr "Error"
@@ -88,7 +97,7 @@ msgstr ""
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:661
#: js/pages/tola_management_pages/country/models.js:478
#: js/pages/tola_management_pages/country/models.js:510
-#: js/pages/tola_management_pages/program/models.js:283
+#: js/pages/tola_management_pages/program/models.js:296
msgid "Are you sure you want to continue?"
msgstr "¿Está seguro que quiere continuar?"
@@ -102,7 +111,7 @@ msgstr "Continuar"
#: js/components/ImportIndicatorsPopover.js:419
#: js/components/ImportIndicatorsPopover.js:631
#: js/components/changesetNotice.js:66
-#: js/pages/results_form_PC/resultsFormPC.js:383
+#: js/pages/results_form_PC/resultsFormPC.js:386
#: js/pages/results_framework/components/level_cards.js:578
msgid "Cancel"
msgstr "Cancelar"
@@ -299,6 +308,54 @@ msgid "We don’t recognize this file type. Please upload an Excel file."
msgstr ""
"No se ha reconocido el tipo de archivo. Por favor, suba un archivo de Excel."
+#: js/components/ReactDatepicker.js:9
+msgid "January"
+msgstr "enero"
+
+#: js/components/ReactDatepicker.js:10
+msgid "March"
+msgstr "marzo"
+
+#: js/components/ReactDatepicker.js:11
+msgid "February"
+msgstr "febrero"
+
+#: js/components/ReactDatepicker.js:12
+msgid "April"
+msgstr "abril"
+
+#: js/components/ReactDatepicker.js:13
+msgid "May"
+msgstr "mayo"
+
+#: js/components/ReactDatepicker.js:14
+msgid "June"
+msgstr "junio"
+
+#: js/components/ReactDatepicker.js:15
+msgid "July"
+msgstr "julio"
+
+#: js/components/ReactDatepicker.js:16
+msgid "August"
+msgstr "agosto"
+
+#: js/components/ReactDatepicker.js:17
+msgid "September"
+msgstr "septiembre"
+
+#: js/components/ReactDatepicker.js:18
+msgid "October"
+msgstr "octubre"
+
+#: js/components/ReactDatepicker.js:19
+msgid "November"
+msgstr "noviembre"
+
+#: js/components/ReactDatepicker.js:20
+msgid "December"
+msgstr "diciembre"
+
#. Translators: button label to show the details of all items in a list */}
#. Translators: button label to show the details of all rows in a list */}
#: js/components/actionButtons.js:38
@@ -341,7 +398,7 @@ msgstr "Función"
#: js/pages/iptt_quickstart/components/selects.js:22
#: js/pages/iptt_quickstart/components/selects.js:39
#: js/pages/iptt_report/components/sidebar/reportSelect.js:14
-#: js/pages/tola_management_pages/program/views.js:230
+#: js/pages/tola_management_pages/program/views.js:234
msgid "Program"
msgstr "Programa"
@@ -367,7 +424,8 @@ msgstr "Nuevo Valor"
#. Translators: This is a label for a dropdown that presents several possible justifications for changing a value
#: js/components/changesetNotice.js:19
-#: js/pages/results_form_PC/resultsFormPC.js:273
+#: js/pages/program_page/components/program_period.js:387
+#: js/pages/results_form_PC/resultsFormPC.js:276
#: js/pages/results_framework/components/level_cards.js:404
#: js/pages/tola_management_pages/audit_log/views.js:248
msgid "Reason for change"
@@ -398,6 +456,13 @@ msgstr "seleccionado"
#. Translators: for a dropdown menu with no options checked:
#: js/components/changesetNotice.js:257 js/components/selectWidgets.js:143
#: js/components/selectWidgets.js:148
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:362
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:377
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:384
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:400
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:406
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:421
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:427
msgid "None selected"
msgstr "Ninguno/a seleccionado/a"
@@ -435,13 +500,13 @@ msgstr "Línea media y línea final"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: js/constants.js:39 js/pages/iptt_quickstart/models/ipttQSRootStore.js:32
-#: tola/db_translations.js:8
+#: tola/db_translations.js:14
msgid "Annual"
msgstr "Anual"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: js/constants.js:40 js/pages/iptt_quickstart/models/ipttQSRootStore.js:33
-#: tola/db_translations.js:28
+#: tola/db_translations.js:6
msgid "Semi-annual"
msgstr "Semestral"
@@ -451,7 +516,7 @@ msgstr "Trienal"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: js/constants.js:42 js/pages/iptt_quickstart/models/ipttQSRootStore.js:35
-#: tola/db_translations.js:22
+#: tola/db_translations.js:24
msgid "Quarterly"
msgstr "Trimestral"
@@ -539,8 +604,6 @@ msgid "Impact"
msgstr "Impacto"
#: js/level_utils.js:29 js/level_utils.js:45 js/level_utils.js:53
-#, fuzzy
-#| msgid "Input"
msgid "Input"
msgstr "Entrada"
@@ -560,7 +623,7 @@ msgstr "Objetivo Específico"
msgid "Purpose"
msgstr "Finalidad"
-#: js/level_utils.js:36 js/pages/results_form_PC/resultsFormPC.js:295
+#: js/level_utils.js:36 js/pages/results_form_PC/resultsFormPC.js:298
msgid "Result"
msgstr "Resultado"
@@ -622,7 +685,7 @@ msgstr "Proyecto"
#: js/pages/document_list/components/document_list.js:175
#: js/pages/results_framework/components/level_cards.js:213
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:131
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:132
msgid "Delete"
msgstr "Eliminar"
@@ -821,7 +884,7 @@ msgstr "# / %"
#: js/pages/iptt_report/components/report/tableHeader.js:159
#: js/pages/iptt_report/models/filterStore.js:737
#: js/pages/program_page/components/indicator_list.js:206
-#: tola/db_translations.js:16
+#: tola/db_translations.js:2
msgid "Baseline"
msgstr "Base"
@@ -914,7 +977,7 @@ msgstr "Tipos"
#. Translators: labels sectors (i.e. 'Food Security') that an indicator can be categorized as */
#: js/pages/iptt_report/components/sidebar/reportFilter.js:106
#: js/pages/tola_management_pages/organization/views.js:54
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:129
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:393
#: js/pages/tola_management_pages/program/views.js:54
msgid "Sectors"
msgstr "Sectores"
@@ -1063,6 +1126,14 @@ msgid "Find an indicator:"
msgstr "Encontrar un indicador:"
#: js/pages/program_page/components/indicator_list.js:136
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:293
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:308
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:470
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:477
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:482
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:495
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:500
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:508
msgid "None"
msgstr "Ninguno"
@@ -1231,6 +1302,134 @@ msgstr "Indicadores sin evidencias"
msgid "No evidence"
msgstr "Sin evidencia"
+#: js/pages/program_page/components/program_period.js:164
+msgid ""
+"You must enter values for the indicator tracking period start date before "
+"saving."
+msgstr ""
+"Debe introducir valores para la fecha de inicio del período de seguimiento "
+"de los indicadores antes de grabar."
+
+#: js/pages/program_page/components/program_period.js:169
+msgid ""
+"You must enter values for the indicator tracking period end date before "
+"saving."
+msgstr ""
+"Debe introducir valores para la fecha de finalización del período de "
+"seguimiento de los indicadores antes de grabar."
+
+#: js/pages/program_page/components/program_period.js:174
+msgid "The end date must come after the start date."
+msgstr "La fecha de finalización siempre va después de la de comienzo."
+
+#: js/pages/program_page/components/program_period.js:180
+msgid ""
+"The indicator tracking start date must be later than or equal to the IDAA "
+"start date."
+msgstr ""
+"La fecha de inicio del seguimiento de los indicadores debe ser posterior o "
+"igual a la fecha de inicio de IDAA."
+
+#: js/pages/program_page/components/program_period.js:185
+msgid ""
+"The indicator tracking end date must be earlier than or equal to the IDAA "
+"end date."
+msgstr ""
+"La fecha de finalización del seguimiento de los indicadores debe ser "
+"anterior o igual a la fecha de finalización de IDAA."
+
+#: js/pages/program_page/components/program_period.js:296
+msgid ""
+"Error. Could not retrieve data from server. Please report this to the Tola "
+"team."
+msgstr ""
+"Error. No se pudieron recuperar los datos del servidor. Por favor informe "
+"esto al equipo de Tola."
+
+#. Translators: This is the text of an alert that is triggered upon a successful change to the the start and end dates of the reporting period
+#: js/pages/program_page/components/program_period.js:339
+msgid "Indicator tracking period is updated."
+msgstr "Se actualiza el periodo de seguimiento de los indicadores."
+
+#: js/pages/program_page/components/program_period.js:371
+msgid "There was a problem saving your changes."
+msgstr "Hubo un problema al guardar sus cambios."
+
+#: js/pages/program_page/components/program_period.js:381
+msgid ""
+"This action may result in changes to your periodic targets. If you have "
+"already set up periodic targets for your indicators, you may need to enter "
+"additional target values to cover the entire indicator tracking period. For "
+"future reference, please provide a reason for modifying the indicator "
+"tracking period."
+msgstr ""
+"Esta acción puede dar lugar a cambios en sus objetivos periódicos. Si ya ha "
+"establecido objetivos periódicos para sus indicadores, puede que tenga que "
+"introducir valores objetivo adicionales para cubrir todo el periodo de "
+"seguimiento del indicador. Para futuras referencias, indique la razón por la "
+"que ha modificado el periodo de seguimiento del indicador."
+
+#: js/pages/program_page/components/program_period.js:440
+msgid ""
+"The program period is used as the default for the initial setup of time-"
+"based target periods (e.g., annually, quarterly, etc.) and in the Indicator "
+"Performance Tracking Tables (IPTTs). The Program Period is based on the "
+"program’s official start and end dates as recorded in the Identification "
+"Assignment Assistant (IDAA) system and cannot be adjusted in TolaData."
+msgstr ""
+"El período del programa se utiliza por defecto para la configuración inicial "
+"de los períodos objetivo basados en el tiempo (por ejemplo, anualmente, "
+"trimestralmente, etc.) y en las Tablas de Seguimiento del Rendimiento de los "
+"Indicadores (IPTTs). El periodo del programa se basa en las fechas oficiales "
+"de inicio y finalización del programa, tal y como se registran en el sistema "
+"del Asistente para la Asignación de la Identificación (IDAA), y no puede "
+"ajustarse en TolaData."
+
+#: js/pages/program_page/components/program_period.js:446
+msgid "IDAA program dates"
+msgstr "Fechas del programa IDAA"
+
+#: js/pages/program_page/components/program_period.js:449
+#: js/pages/program_page/components/program_period.js:469
+msgid "Start date"
+msgstr "Fecha de inicio"
+
+#: js/pages/program_page/components/program_period.js:450
+#: js/pages/program_page/components/program_period.js:454
+msgid "Unavailable"
+msgstr "No disponible"
+
+#: js/pages/program_page/components/program_period.js:453
+#: js/pages/program_page/components/program_period.js:480
+msgid "End date"
+msgstr "Fecha final"
+
+#: js/pages/program_page/components/program_period.js:465
+msgid "Indicator tracking period"
+msgstr "Período de seguimiento de los indicadores"
+
+#: js/pages/program_page/components/program_period.js:500
+#: js/pages/tola_management_pages/country/components/edit_country_profile.js:101
+#: js/pages/tola_management_pages/country/components/edit_country_profile.js:108
+#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:530
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:120
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:126
+#: js/pages/tola_management_pages/organization/components/edit_organization_history.js:69
+#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:210
+#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:217
+#: js/pages/tola_management_pages/program/components/program_history.js:64
+#: js/pages/tola_management_pages/program/components/program_settings.js:130
+#: js/pages/tola_management_pages/user/components/edit_user_history.js:74
+msgid "Save Changes"
+msgstr "Guardar cambios"
+
+#: js/pages/program_page/components/program_period.js:504
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:121
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:127
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:553
+msgid "Cancel changes"
+msgstr "Cancelar cambios"
+
#. Translators: Explains how performance is categorized as close to the target or not close to the target
#: js/pages/program_page/components/resultsTable.js:41
msgid ""
@@ -1378,8 +1577,8 @@ msgstr ""
"Advertencia: esta acción no se puede deshacer. ¿Está seguro que quiere "
"borrar este informe fijado?"
-#: js/pages/results_form_PC/components/ActualValueFields.js:20
-#: js/pages/results_form_PC/resultsFormPC.js:101
+#: js/pages/results_form_PC/components/ActualValueFields.js:26
+#: js/pages/results_form_PC/resultsFormPC.js:102
msgid ""
"Direct/indirect without double counting should be equal to or lower than "
"direct/indirect with double counting."
@@ -1387,11 +1586,11 @@ msgstr ""
"Directo/Indirecto sin cómputo doble debe ser igual o menor a Directo/"
"Indirecto con cómputo doble."
-#: js/pages/results_form_PC/components/ActualValueFields.js:34
+#: js/pages/results_form_PC/components/ActualValueFields.js:40
msgid "Total Participant Actual Values"
msgstr "Valores reales del total de participantes"
-#: js/pages/results_form_PC/components/ActualValueFields.js:36
+#: js/pages/results_form_PC/components/ActualValueFields.js:42
msgid ""
"Include the participants with double counting on the left and participants "
"without double counting across programs on the right. Double counting a "
@@ -1417,28 +1616,28 @@ msgstr ""
"recibieron una ventaja tangible por su proximidad o vínculo con los "
"participantes o con las actividades del programa."
-#: js/pages/results_form_PC/components/ActualValueFields.js:40
-#: js/pages/results_form_PC/components/DisaggregationFields.js:100
+#: js/pages/results_form_PC/components/ActualValueFields.js:46
+#: js/pages/results_form_PC/components/DisaggregationFields.js:106
msgid "Without double counting across programs"
msgstr "Sin cómputo doble entre programas"
-#: js/pages/results_form_PC/components/ActualValueFields.js:41
-#: js/pages/results_form_PC/components/DisaggregationFields.js:102
+#: js/pages/results_form_PC/components/ActualValueFields.js:47
+#: js/pages/results_form_PC/components/DisaggregationFields.js:108
msgid "With double counting across programs"
msgstr "Con cómputo doble entre programas"
-#: js/pages/results_form_PC/components/ActualValueFields.js:99
+#: js/pages/results_form_PC/components/ActualValueFields.js:105
msgid "Total Participants"
msgstr "Participantes totales"
#: js/pages/results_form_PC/components/CommonFields.js:47
-#: js/pages/results_form_PC/resultsFormPC.js:80
+#: js/pages/results_form_PC/resultsFormPC.js:81
msgid "This date should be within the fiscal year of the reporting period."
msgstr ""
"Esta fecha debe estar dentro del año fiscal del período de notificación."
#: js/pages/results_form_PC/components/CommonFields.js:56
-#: js/pages/results_form_PC/resultsFormPC.js:88
+#: js/pages/results_form_PC/resultsFormPC.js:89
msgid "Please complete this field. You can select more than one outcome theme."
msgstr ""
"Por favor, complete este campo. Puede seleccionar más de un tema de "
@@ -1469,11 +1668,11 @@ msgstr ""
"Los años fiscales se corresponden a los periodos comprendidos entre el 1 de "
"julio y el 30 de junio del año siguiente."
-#: js/pages/results_form_PC/components/CommonFields.js:104
+#: js/pages/results_form_PC/components/CommonFields.js:105
msgid "Outcome theme"
msgstr "Tema de resultados"
-#: js/pages/results_form_PC/components/CommonFields.js:106
+#: js/pages/results_form_PC/components/CommonFields.js:107
msgid ""
"Outcome themes are the main areas of a program. Refer to MEL Tip Sheet: "
"Guidelines on Counting and Reporting Participant Numbers [link: https://library.mercycorps.org/"
"record/16929?ln=en]."
-#: js/pages/results_form_PC/components/DisaggregationFields.js:55
+#: js/pages/results_form_PC/components/DisaggregationFields.js:61
msgid ""
"The 'SADD without double counting' value should be less than or equal to the "
"'Direct without double counting' value."
@@ -1538,8 +1737,8 @@ msgstr ""
"El valor ‘SADD sin doble cómputo’ debe ser menor o igual que el valor "
"‘Directo sin doble cómputo’."
-#: js/pages/results_form_PC/components/DisaggregationFields.js:72
-#: js/pages/results_form_PC/resultsFormPC.js:116
+#: js/pages/results_form_PC/components/DisaggregationFields.js:78
+#: js/pages/results_form_PC/resultsFormPC.js:117
msgid ""
"Sector values should be less than or equal to the 'Direct/Indirect with "
"double counting' value."
@@ -1547,38 +1746,38 @@ msgstr ""
"Los valores del sector deben ser menores o iguales al valor ‘Directo/"
"Indirecto con cómputo doble’."
-#: js/pages/results_form_PC/components/DisaggregationFields.js:87
+#: js/pages/results_form_PC/components/DisaggregationFields.js:93
msgid "SADD (including unknown)"
msgstr "SADD (desconocido)"
-#: js/pages/results_form_PC/components/DisaggregationFields.js:95
+#: js/pages/results_form_PC/components/DisaggregationFields.js:101
msgid "Needs Attention"
msgstr "Requiere su atención"
-#: js/pages/results_form_PC/components/DisaggregationFields.js:138
+#: js/pages/results_form_PC/components/DisaggregationFields.js:144
msgid "Sum"
msgstr "Suma"
-#: js/pages/results_form_PC/components/DisaggregationFields.js:154
+#: js/pages/results_form_PC/components/DisaggregationFields.js:160
msgid "Total Direct Participants"
msgstr "Total de participantes directos"
-#: js/pages/results_form_PC/components/DisaggregationFields.js:154
+#: js/pages/results_form_PC/components/DisaggregationFields.js:160
msgid "Total Indirect Participants"
msgstr "Total de participantes indirectos"
#: js/pages/results_form_PC/components/EvidenceFields.js:16
-#: js/pages/results_form_PC/resultsFormPC.js:131
+#: js/pages/results_form_PC/resultsFormPC.js:132
msgid "Please enter a valid evidence link."
msgstr "Por favor, introduzca un enlace de prueba válido."
#: js/pages/results_form_PC/components/EvidenceFields.js:19
-#: js/pages/results_form_PC/resultsFormPC.js:134
+#: js/pages/results_form_PC/resultsFormPC.js:135
msgid "A record name must be included along with the link."
msgstr "Se debe incluir un nombre de registro junto con el enlace."
#: js/pages/results_form_PC/components/EvidenceFields.js:23
-#: js/pages/results_form_PC/resultsFormPC.js:138
+#: js/pages/results_form_PC/resultsFormPC.js:139
msgid "A link must be included along with the record name."
msgstr "Debe incluir un enlace junto al nombre del registro."
@@ -1621,7 +1820,7 @@ msgstr "Nombre del registro"
msgid "Give your record a short name that is easy to remember."
msgstr "Dé a su registro un nombre corto que sea fácil de recordar."
-#: js/pages/results_form_PC/resultsFormPC.js:65
+#: js/pages/results_form_PC/resultsFormPC.js:66
msgid ""
"The sum of 'SADD with double counting' should be equal to the sum of 'Direct "
"with double counting'."
@@ -1629,7 +1828,7 @@ msgstr ""
"La suma de ‘SADD con cómputo doble’ debe ser igual a la suma de ‘Directo con "
"cómputo doble’."
-#: js/pages/results_form_PC/resultsFormPC.js:68
+#: js/pages/results_form_PC/resultsFormPC.js:69
msgid ""
"The sum of 'SADD without double counting' should be equal to the sum of "
"'Direct without double counting'."
@@ -1637,20 +1836,20 @@ msgstr ""
"La suma de ‘SADD sin cómputo doble’ debe ser igual a la suma de ‘Directo sin "
"cómputo doble’."
-#: js/pages/results_form_PC/resultsFormPC.js:84
-msgid "You cannot change the fiscal year during the current reporting period. "
+#: js/pages/results_form_PC/resultsFormPC.js:85
+msgid "You cannot change the fiscal year during the current reporting period."
msgstr ""
"No se puede cambiar el año fiscal durante el período de notificación actual."
-#: js/pages/results_form_PC/resultsFormPC.js:95
+#: js/pages/results_form_PC/resultsFormPC.js:96
msgid ""
-"Direct total participants with double counting is required. Please "
-"complete these fields."
+"Direct total participants with double counting is required. Please complete "
+"these fields."
msgstr ""
-"Se requiere un total de participantes directos con cómputo doble. "
-"Por favor, complete estos campos."
+"Se requiere un total de participantes directos con cómputo doble. Por favor, "
+"complete estos campos."
-#: js/pages/results_form_PC/resultsFormPC.js:276
+#: js/pages/results_form_PC/resultsFormPC.js:279
#: js/pages/results_framework/components/level_cards.js:406
msgid ""
"Your changes will be recorded in a change log. For future reference, please "
@@ -1659,11 +1858,11 @@ msgstr ""
"Sus cambios serán guardados en un registro de cambios. Para referencia "
"futura, indique la justificación para estos cambios."
-#: js/pages/results_form_PC/resultsFormPC.js:302
+#: js/pages/results_form_PC/resultsFormPC.js:305
msgid "Participant Count"
msgstr "Cómputo de participantes"
-#: js/pages/results_form_PC/resultsFormPC.js:376
+#: js/pages/results_form_PC/resultsFormPC.js:379
#: js/pages/results_framework/components/level_cards.js:575
msgid "Save and close"
msgstr "Guardar y cerrar"
@@ -1795,7 +1994,7 @@ msgstr ""
#: js/pages/tola_management_pages/country/views.js:66
#: js/pages/tola_management_pages/organization/views.js:83
#: js/pages/tola_management_pages/program/views.js:143
-#: js/pages/tola_management_pages/program/views.js:200
+#: js/pages/tola_management_pages/program/views.js:202
#: js/pages/tola_management_pages/user/views.js:162
#: js/pages/tola_management_pages/user/views.js:230
msgid "Apply"
@@ -1919,7 +2118,7 @@ msgstr "Usuario"
#: js/pages/tola_management_pages/audit_log/views.js:244
#: js/pages/tola_management_pages/organization/views.js:110
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:195
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:196
#: js/pages/tola_management_pages/user/views.js:202
#: js/pages/tola_management_pages/user/views.js:261
msgid "Organization"
@@ -1949,15 +2148,15 @@ msgstr "ítems"
#: js/pages/tola_management_pages/country/components/country_editor.js:23
#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:114
#: js/pages/tola_management_pages/organization/components/organization_editor.js:26
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:70
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:278
#: js/pages/tola_management_pages/program/components/program_editor.js:27
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:144
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:145
#: js/pages/tola_management_pages/user/components/user_editor.js:26
msgid "Profile"
msgstr "Perfil"
#: js/pages/tola_management_pages/country/components/country_editor.js:32
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:216
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:217
msgid "Strategic Objectives"
msgstr "Objetivos estratégicos"
@@ -1977,9 +2176,6 @@ msgstr "Nombre del país"
#: js/pages/tola_management_pages/country/components/edit_country_profile.js:80
#: js/pages/tola_management_pages/country/components/edit_objectives.js:94
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:108
-#, fuzzy
-#| msgid "Description/Notes"
msgid "Description"
msgstr "Descripción/Notas"
@@ -1987,40 +2183,21 @@ msgstr "Descripción/Notas"
msgid "Country Code"
msgstr "Código del País"
-#: js/pages/tola_management_pages/country/components/edit_country_profile.js:101
-#: js/pages/tola_management_pages/country/components/edit_country_profile.js:108
-#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:530
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:120
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:125
-#: js/pages/tola_management_pages/organization/components/edit_organization_history.js:69
-#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:210
-#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:217
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:141
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:148
-#: js/pages/tola_management_pages/program/components/program_history.js:64
-#: js/pages/tola_management_pages/program/components/program_settings.js:130
-#: js/pages/tola_management_pages/user/components/edit_user_history.js:74
-msgid "Save Changes"
-msgstr "Guardar cambios"
-
#. Translators: Button label. Allows users to undo whatever changes they have made.
#: js/pages/tola_management_pages/country/components/edit_country_profile.js:103
#: js/pages/tola_management_pages/country/components/edit_country_profile.js:109
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:533
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:126
#: js/pages/tola_management_pages/country/views.js:67
#: js/pages/tola_management_pages/organization/components/edit_organization_history.js:70
#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:212
#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:218
#: js/pages/tola_management_pages/organization/views.js:84
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:143
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:149
#: js/pages/tola_management_pages/program/components/program_history.js:65
#: js/pages/tola_management_pages/program/components/program_settings.js:131
-#: js/pages/tola_management_pages/program/views.js:201
+#: js/pages/tola_management_pages/program/views.js:203
#: js/pages/tola_management_pages/user/components/edit_user_history.js:75
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:261
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:267
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:262
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:268
#: js/pages/tola_management_pages/user/views.js:231
msgid "Reset"
msgstr "Reiniciar"
@@ -2125,10 +2302,10 @@ msgid "Archive disaggregation"
msgstr "Archivar desagregación"
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:590
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:160
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:161
#: js/pages/tola_management_pages/country/models.js:262
#: js/pages/tola_management_pages/organization/models.js:115
-#: js/pages/tola_management_pages/program/models.js:73
+#: js/pages/tola_management_pages/program/models.js:78
#: js/pages/tola_management_pages/user/models.js:192
msgid "You have unsaved changes. Are you sure you want to discard them?"
msgstr "Tiene cambios sin guardar. ¿Está seguro que desea descartarlos?"
@@ -2185,8 +2362,8 @@ msgstr "Propuesto"
#: js/pages/tola_management_pages/organization/views.js:190
#: js/pages/tola_management_pages/program/components/program_history.js:9
#: js/pages/tola_management_pages/program/views.js:66
-#: js/pages/tola_management_pages/program/views.js:158
-#: js/pages/tola_management_pages/program/views.js:164
+#: js/pages/tola_management_pages/program/views.js:160
+#: js/pages/tola_management_pages/program/views.js:166
#: js/pages/tola_management_pages/user/components/edit_user_history.js:8
#: js/pages/tola_management_pages/user/models.js:75
#: js/pages/tola_management_pages/user/views.js:355
@@ -2213,19 +2390,19 @@ msgstr "Nombre corto"
#: js/pages/tola_management_pages/organization/views.js:113
#: js/pages/tola_management_pages/program/components/program_history.js:53
#: js/pages/tola_management_pages/program/views.js:70
-#: js/pages/tola_management_pages/program/views.js:233
+#: js/pages/tola_management_pages/program/views.js:237
#: js/pages/tola_management_pages/user/components/edit_user_history.js:64
#: js/pages/tola_management_pages/user/views.js:211
#: js/pages/tola_management_pages/user/views.js:265
msgid "Status"
msgstr "Estado"
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:193
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:194
msgid "Delete Strategic Objective?"
msgstr "¿Eliminar Objetivo Estratégico?"
#. Translators: This is a button that allows the user to add a strategic objective. */}
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:235
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:236
msgid "Add strategic objective"
msgstr "Agregar objetivo estratégico"
@@ -2249,7 +2426,7 @@ msgstr[1] ""
#: js/pages/tola_management_pages/country/models.js:215
#: js/pages/tola_management_pages/country/models.js:219
#: js/pages/tola_management_pages/organization/models.js:111
-#: js/pages/tola_management_pages/program/models.js:195
+#: js/pages/tola_management_pages/program/models.js:200
#: js/pages/tola_management_pages/user/models.js:208
msgid "Successfully saved"
msgstr "Guardado exitosamente"
@@ -2257,7 +2434,7 @@ msgstr "Guardado exitosamente"
#. Translators: Saving to the server failed
#: js/pages/tola_management_pages/country/models.js:226
#: js/pages/tola_management_pages/organization/models.js:106
-#: js/pages/tola_management_pages/program/models.js:200
+#: js/pages/tola_management_pages/program/models.js:205
#: js/pages/tola_management_pages/user/models.js:203
msgid "Saving failed"
msgstr "Falló operación de guardado"
@@ -2340,7 +2517,7 @@ msgstr "Encontrar un País"
#: js/pages/tola_management_pages/country/views.js:96
#: js/pages/tola_management_pages/organization/views.js:89
#: js/pages/tola_management_pages/program/views.js:42
-#: js/pages/tola_management_pages/program/views.js:231
+#: js/pages/tola_management_pages/program/views.js:235
msgid "Organizations"
msgstr "Organizaciones"
@@ -2348,7 +2525,7 @@ msgstr "Organizaciones"
#: js/pages/tola_management_pages/country/views.js:97
#: js/pages/tola_management_pages/organization/views.js:30
#: js/pages/tola_management_pages/organization/views.js:111
-#: js/pages/tola_management_pages/program/views.js:206
+#: js/pages/tola_management_pages/program/views.js:208
#: js/pages/tola_management_pages/user/views.js:59
#: js/pages/tola_management_pages/user/views.js:262
msgid "Programs"
@@ -2356,14 +2533,14 @@ msgstr "Programas"
#: js/pages/tola_management_pages/country/views.js:72
#: js/pages/tola_management_pages/organization/views.js:89
-#: js/pages/tola_management_pages/program/views.js:206
+#: js/pages/tola_management_pages/program/views.js:208
#: js/pages/tola_management_pages/user/views.js:236
msgid "Admin:"
msgstr "Administrador:"
#: js/pages/tola_management_pages/country/views.js:72
#: js/pages/tola_management_pages/organization/views.js:18
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:118
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:371
#: js/pages/tola_management_pages/program/views.js:30
msgid "Countries"
msgstr "Países"
@@ -2375,7 +2552,7 @@ msgstr "Agregar País"
#: js/pages/tola_management_pages/country/views.js:98
#: js/pages/tola_management_pages/organization/views.js:112
#: js/pages/tola_management_pages/program/views.js:18
-#: js/pages/tola_management_pages/program/views.js:232
+#: js/pages/tola_management_pages/program/views.js:236
#: js/pages/tola_management_pages/user/views.js:236
msgid "Users"
msgstr "Usuarios"
@@ -2413,7 +2590,7 @@ msgstr "0 programas"
#. Translators: preceded by a number, i.e. "3 users" or "1 user"
#: js/pages/tola_management_pages/country/views.js:229
#: js/pages/tola_management_pages/organization/views.js:182
-#: js/pages/tola_management_pages/program/views.js:320
+#: js/pages/tola_management_pages/program/views.js:327
#, python-format
msgid "%s user"
msgid_plural "%s users"
@@ -2423,7 +2600,7 @@ msgstr[1] "%s usuarios"
#. Translators: when no users are connected to the item
#: js/pages/tola_management_pages/country/views.js:234
#: js/pages/tola_management_pages/organization/views.js:187
-#: js/pages/tola_management_pages/program/views.js:324
+#: js/pages/tola_management_pages/program/views.js:331
msgid "0 users"
msgstr "0 usuarios"
@@ -2436,8 +2613,8 @@ msgstr "países"
#: js/pages/tola_management_pages/organization/views.js:190
#: js/pages/tola_management_pages/program/components/program_history.js:10
#: js/pages/tola_management_pages/program/views.js:67
-#: js/pages/tola_management_pages/program/views.js:159
-#: js/pages/tola_management_pages/program/views.js:164
+#: js/pages/tola_management_pages/program/views.js:161
+#: js/pages/tola_management_pages/program/views.js:166
#: js/pages/tola_management_pages/user/components/edit_user_history.js:9
#: js/pages/tola_management_pages/user/models.js:76
#: js/pages/tola_management_pages/user/views.js:355
@@ -2469,7 +2646,7 @@ msgid "Primary Contact Phone Number"
msgstr "Número Telefónico de Contacto Principal"
#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:200
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:248
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:249
msgid "Preferred Mode of Contact"
msgstr "Forma de Contacto Preferida"
@@ -2497,17 +2674,115 @@ msgstr "Agregar Organización"
msgid "organizations"
msgstr "organizaciones"
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:73
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:112
+msgid "This field may not be left blank."
+msgstr "Este campo no puede dejarse vacío."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:127
+msgid "The program start date may not be more than 10 years in the past."
+msgstr ""
+"La fecha de inicio del programa no puede ser más de 10 años en el pasado."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:131
+msgid "The program start date may not be after the program end date."
+msgstr ""
+"La fecha de inicio del programa no puede ser posterior a la fecha de "
+"finalización del programa."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:137
+msgid "The program end date may not be more than 10 years in the future."
+msgstr ""
+"La fecha de finalización del programa no puede ser más de 10 años en el "
+"futuro."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:141
+msgid "The program end date may not be before the program start date."
+msgstr ""
+"La fecha de finalización del programa no puede ser anterior a la fecha de "
+"inicio del programa."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:157
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:176
+msgid "GAIT IDs may not be left blank."
+msgstr "IDs GAIT no puede dejarse vacío."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:165
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:166
+msgid "Duplicate GAIT ID numbers are not allowed."
+msgstr "No se permite duplicar los números de identificación GAIT."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:186
+msgid "Fund codes may only be 5 digits long."
+msgstr "Los códigos de fondos sólo pueden tener 5 dígitos."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:190
+msgid "Fund codes may only begin with a 3, 7, or 9 (e.g., 30000)."
+msgstr ""
+"Los códigos de fondos sólo pueden empezar por 3, 7, o 9 (por ejemplo, 30000)."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:282
+msgid ""
+"The fields on this tab are auto-populated with data from Identification "
+"Assignment Assistant (IDAA). These fields cannot be edited in TolaData. If "
+"changes to this program information are required, then these changes must be "
+"reflected in IDAA first."
+msgstr ""
+"Los campos de esta pestaña se rellenan automáticamente con los datos del "
+"Asistente de Asignación de Identificación (IDAA). Estos campos no se pueden "
+"editar en TolaData. Si se requieren cambios en esta información del "
+"programa, estos cambios deben reflejarse primero en IDAA."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:288
msgid "Program name"
msgstr "Nombre del programa"
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:84
-msgid "GAIT ID"
-msgstr "ID GAIT"
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:303
+msgid "Program ID"
+msgstr "Identificador de programa"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:318
+msgid "Program start date"
+msgstr "Fecha de inicio del programa"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:338
+msgid "Program end date"
+msgstr "Fecha de finalización del programa"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:358
+msgid "Program funding status"
+msgstr "Estado de la financiación del programa"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:414
+msgid "Outcome themes"
+msgstr "Temas de resultados"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:439
+msgid "GAIT IDs"
+msgstr "IDs GAIT"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:442
+msgid "Fund codes"
+msgstr "Códigos de fondos"
+
+#. Translators: One of several choices for specifying what type of Indicator is being created. An Indicator is a performance measure e.g. "We will distribute 1000 food packs over the next two months"
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:445
+#: tola/db_translations.js:132
+msgid "Donor"
+msgstr "Donante"
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:96
-msgid "Fund Code"
-msgstr "Código del fondo"
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:449
+msgid "Donor dept"
+msgstr "Departamento de donantes"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:546
+msgid "Add another row"
+msgstr "Añadir otra fila"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:552
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:260
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:267
+msgid "Save changes"
+msgstr "Guardar cambios"
#: js/pages/tola_management_pages/program/components/program_settings.js:69
msgid "Indicator grouping"
@@ -2568,43 +2843,38 @@ msgstr ""
"los indicadores; su único fin es ser mostrados."
#. Translators: Notify user that the program start and end date were successfully retrieved from the GAIT service and added to the newly saved Program
-#: js/pages/tola_management_pages/program/models.js:205
+#: js/pages/tola_management_pages/program/models.js:210
msgid "Successfully synced GAIT program start and end dates"
msgstr ""
"Se sincronizaron satisfactoriamente las fechas de inicio y fin del programa "
"desde el servicio GAIT"
#. Translators: Notify user that the program start and end date failed to be retrieved from the GAIT service with a specific reason appended after the :
-#: js/pages/tola_management_pages/program/models.js:211
+#: js/pages/tola_management_pages/program/models.js:216
msgid "Failed to sync GAIT program start and end dates: "
msgstr ""
"Hubo un fallo en la sincronización de las fechas de inicio y fin del "
"programa desde el servicio GAIT: "
#. Translators: A request failed, ask the user if they want to try the request again
-#: js/pages/tola_management_pages/program/models.js:219
+#: js/pages/tola_management_pages/program/models.js:224
msgid "Retry"
msgstr "Reintentar"
#. Translators: button label - ignore the current warning modal on display
-#: js/pages/tola_management_pages/program/models.js:228
+#: js/pages/tola_management_pages/program/models.js:233
msgid "Ignore"
msgstr "Ignorar"
-#: js/pages/tola_management_pages/program/models.js:275
+#: js/pages/tola_management_pages/program/models.js:288
msgid "The GAIT ID for this program is shared with at least one other program."
msgstr ""
"El ID GAIT para este programa está compartido con al menos un programa más."
-#: js/pages/tola_management_pages/program/models.js:276
+#: js/pages/tola_management_pages/program/models.js:289
msgid "View programs with this ID in GAIT."
msgstr "Ver programas con este ID en GAIT."
-#. Translators: error message when trying to connect to the server
-#: js/pages/tola_management_pages/program/models.js:316
-msgid "There was a network or server connection error."
-msgstr "Hubo un error de red o conectividad con el servidor."
-
#: js/pages/tola_management_pages/program/views.js:83
msgid "Find a Program"
msgstr "Encontrar un Programa"
@@ -2624,21 +2894,29 @@ msgstr "Seleccionar..."
msgid "No options"
msgstr "Sin opciones"
-#: js/pages/tola_management_pages/program/views.js:168
+#: js/pages/tola_management_pages/program/views.js:156
+msgid "Funded"
+msgstr "Financiado"
+
+#: js/pages/tola_management_pages/program/views.js:156
+msgid "Completed"
+msgstr "Completado"
+
+#: js/pages/tola_management_pages/program/views.js:170
msgid "Set program status"
msgstr "Definir estado del programa"
-#: js/pages/tola_management_pages/program/views.js:212
+#: js/pages/tola_management_pages/program/views.js:215
msgid "Add Program"
msgstr "Agregar Programa"
#. Translators: Label for a freshly created program before the name is entered
-#: js/pages/tola_management_pages/program/views.js:294
-#: js/pages/tola_management_pages/program/views.js:307
+#: js/pages/tola_management_pages/program/views.js:301
+#: js/pages/tola_management_pages/program/views.js:314
msgid "New Program"
msgstr "Programa nuevo"
-#: js/pages/tola_management_pages/program/views.js:334
+#: js/pages/tola_management_pages/program/views.js:341
msgid "programs"
msgstr "programas"
@@ -2651,36 +2929,31 @@ msgstr "Reenviar Correo Electrónico de Registración"
msgid "Mercy Corps -- managed by Okta"
msgstr "Mercy Corps -- administrada por Okta"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:147
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:148
msgid "Preferred First Name"
msgstr "Nombre Preferido"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:163
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:164
msgid "Preferred Last Name"
msgstr "Apellido Preferido"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:179
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:180
msgid "Username"
msgstr "Nombre de usuario"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:212
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:213
msgid "Title"
msgstr "Título"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:223
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:224
msgid "Email"
msgstr "Correo electrónico"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:238
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:239
msgid "Phone"
msgstr "Teléfono"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:259
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:266
-msgid "Save changes"
-msgstr "Guardar cambios"
-
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:260
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:261
msgid "Save And Add Another"
msgstr "Guardar y Agregar otro"
@@ -2813,50 +3086,50 @@ msgstr "Super Administrador"
msgid "users"
msgstr "usuarios"
-#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.js:2
-msgid "By training"
-msgstr "Por formación"
-
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:4
-msgid "Endline"
-msgstr "Línea final"
+msgid "By distribution"
+msgstr "Por distribución"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.js:6
-msgid "Weekly"
-msgstr "Semanal"
+#: tola/db_translations.js:8
+msgid "Post shock"
+msgstr "Posterior al desastre"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:10
-msgid "Final evaluation"
-msgstr "Evaluación final"
+msgid "By event"
+msgstr "Por evento"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.js:14
-msgid "Midline"
-msgstr "Línea media"
+#: tola/db_translations.js:16
+msgid "By training"
+msgstr "Por formación"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:18
-msgid "By distribution"
-msgstr "Por distribución"
+msgid "Final evaluation"
+msgstr "Evaluación final"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:20
-msgid "By batch"
-msgstr "Por lotes"
+msgid "Midline"
+msgstr "Línea media"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.js:24
-msgid "By event"
-msgstr "Por evento"
+#: tola/db_translations.js:22
+msgid "Endline"
+msgstr "Línea final"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:26
-msgid "Post shock"
-msgstr "Posterior al desastre"
+msgid "Weekly"
+msgstr "Semanal"
+
+#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
+#: tola/db_translations.js:28
+msgid "By batch"
+msgstr "Por lotes"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#: tola/db_translations.js:30
@@ -2865,7 +3138,7 @@ msgstr "Agroindustria"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:32 tola/db_translations.js:154
+#: tola/db_translations.js:32 tola/db_translations.js:150
msgid "Agriculture"
msgstr "Agricultura"
@@ -2956,7 +3229,7 @@ msgstr "Alimentos"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: The main area of a program
-#: tola/db_translations.js:68 tola/db_translations.js:144
+#: tola/db_translations.js:68 tola/db_translations.js:142
msgid "Food Security"
msgstr "Seguridad alimentaria"
@@ -3072,7 +3345,7 @@ msgstr "Cuestiones urbanas"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:114 tola/db_translations.js:176
+#: tola/db_translations.js:114 tola/db_translations.js:172
msgid "WASH"
msgstr "WASH"
@@ -3111,11 +3384,6 @@ msgstr "DIG - de agencia"
msgid "DIG - Testing"
msgstr "DIG - en prueba"
-#. Translators: One of several choices for specifying what type of Indicator is being created. An Indicator is a performance measure e.g. "We will distribute 1000 food packs over the next two months"
-#: tola/db_translations.js:132
-msgid "Donor"
-msgstr "Donante"
-
#. Translators: One of several choices for specifying what type of Indicator is being created. An Indicator is a performance measure e.g. "We will distribute 1000 food packs over the next two months"
#: tola/db_translations.js:134
msgid "Key Performance Indicator (KPI)"
@@ -3137,24 +3405,12 @@ msgid "Economic Opportunity"
msgstr "Oportunidad económica"
#. Translators: The main area of a program
-#: tola/db_translations.js:142
-msgid "Economic Opportunity / Opportunité économique / Oportunidad económica"
-msgstr ""
-
-#. Translators: The main area of a program
-#: tola/db_translations.js:146
+#: tola/db_translations.js:144
msgid "Good Governance and Peace"
msgstr "Buena gobernanza y paz"
#. Translators: The main area of a program
-#: tola/db_translations.js:148
-msgid ""
-"Good Governance and Peace / Bonne gouvernance et paix / Buena gobernanza y "
-"paz"
-msgstr ""
-
-#. Translators: The main area of a program
-#: tola/db_translations.js:150
+#: tola/db_translations.js:146
msgid ""
"Resilience approach (tick this box if the program used a resilience approach)"
msgstr ""
@@ -3162,60 +3418,74 @@ msgstr ""
"enfoque de resiliencia)"
#. Translators: The main area of a program
-#: tola/db_translations.js:152
+#: tola/db_translations.js:148
msgid "Water Security"
msgstr "Seguridad del agua"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:156
+#: tola/db_translations.js:152
msgid "Cash and Voucher Assistance"
msgstr "Asistencia en efectivo y vales"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:158
+#: tola/db_translations.js:154
msgid "Direct"
msgstr "Directo"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:160
+#: tola/db_translations.js:156
msgid "Employment"
msgstr "Empleo"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:162
+#: tola/db_translations.js:158
msgid "Environment (DRR, Energy and Water)"
msgstr "Medio ambiente (DRR, energía y agua)"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:164
+#: tola/db_translations.js:160
msgid "Financial Services"
msgstr "Servicios financieros"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:166
+#: tola/db_translations.js:162
msgid "Indirect"
msgstr "Indirecto"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:168
+#: tola/db_translations.js:164
msgid "Infrastructure (non - WASH, non - energy)"
msgstr "Infraestructura (no WASH, no energía)"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:170
+#: tola/db_translations.js:166
msgid "Nutrition"
msgstr "Nutrición"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:172
+#: tola/db_translations.js:168
msgid "Peace, Governance and Partnership"
msgstr "Paz, gobernanza, y asociaciones"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:174
+#: tola/db_translations.js:170
msgid "Public Health (non - nutrition, non - WASH)"
msgstr "Salud pública (no nutricional/no WASH)"
+#~ msgid "Donors"
+#~ msgstr "Donantes"
+
+#~ msgid ""
+#~ "Economic Opportunity / Opportunité économique / Oportunidad económica"
+#~ msgstr ""
+#~ "Economic Opportunity / Opportunité économique / Oportunidad económica"
+
+#~ msgid "Fund Code"
+#~ msgstr "Código del fondo"
+
+#~ msgid "There was a network or server connection error."
+#~ msgstr "Hubo un error de red o conectividad con el servidor."
+
#, fuzzy
#~| msgid "Description"
#~ msgid "noscript"
@@ -3386,9 +3656,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Program Dates Changed"
#~ msgstr "Fechas de Programa Cambiadas"
-#~ msgid "Number"
-#~ msgstr "Número"
-
#~ msgid "Percentage"
#~ msgstr "Porcentaje"
@@ -3431,9 +3698,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Code"
#~ msgstr "Código"
-#~ msgid "Funded"
-#~ msgstr "Fundado"
-
#~ msgid "Funding Status"
#~ msgstr "Estado de financiamiento"
@@ -4201,9 +4465,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Add a tri-annual period"
#~ msgstr "Agregar un período trienal"
-#~ msgid "Add a month"
-#~ msgstr "Agregar un mes"
-
#~ msgid "Add an event"
#~ msgstr "Agregar un evento"
@@ -4292,9 +4553,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ "Antes de agregar indicadores y resultados de rendimiento, necesitamos "
#~ "saber las fechas de inicio y fin de reporte de su programa."
-#~ msgid "reporting start and end dates."
-#~ msgstr "las fechas de inicio y finalización de su programa."
-
#~ msgid "No Indicators have been entered for this program."
#~ msgstr "No se han ingresado indicadores para este programa."
@@ -4388,25 +4646,9 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Back to Homepage"
#~ msgstr "Volver a la página de inicio"
-#~ msgid ""
-#~ "Error. Could not retrieve data from server. Please report this to the "
-#~ "Tola team."
-#~ msgstr ""
-#~ "Error. No se pudieron recuperar los datos del servidor. Por favor informe "
-#~ "esto al equipo de Tola."
-
-#~ msgid ""
-#~ "You must enter values for the reporting start and end dates before saving."
-#~ msgstr ""
-#~ "Debe ingresar valores para las fechas de inicio y finalización del "
-#~ "informe antes de guardar."
-
#~ msgid "Success. Reporting period changes were saved."
#~ msgstr "Éxito. Se guardaron los cambios del período de informes."
-#~ msgid "There was a problem saving your changes."
-#~ msgstr "Hubo un problema al guardar sus cambios."
-
#~ msgid "targets"
#~ msgstr "objetivos"
@@ -4943,9 +5185,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Contact"
#~ msgstr "Contacto"
-#~ msgid "Fund code"
-#~ msgstr "Código del fondo"
-
#~ msgid "Program Description"
#~ msgstr "Descripción del programa"
@@ -5868,9 +6107,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Category"
#~ msgstr "Categoría"
-#~ msgid "Program ID"
-#~ msgstr "Identificador de Programa"
-
#~ msgid "Indicator ID"
#~ msgstr "Identificador del indicador"
@@ -6357,12 +6593,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Quarter"
#~ msgstr "Trimestre"
-#~ msgid "Start date"
-#~ msgstr "Fecha de inicio"
-
-#~ msgid "End date"
-#~ msgstr "Fecha final"
-
#~ msgid "Customsort"
#~ msgstr "Customsort"
@@ -6862,27 +7092,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Save and add another"
#~ msgstr "Guardar y agregar otro"
-#~ msgid "Program period"
-#~ msgstr "Período del programa"
-
-#~ msgid ""
-#~ "The program period is used in the setup of periodic targets and in "
-#~ "Indicator Performance Tracking Tables (IPTT). TolaData initially sets the "
-#~ "program period to include the program’s official start and end dates, as "
-#~ "recorded in the Grant and Award Information Tracker (GAIT) system. The "
-#~ "program period may be adjusted to align with the program’s indicator plan."
-#~ msgstr ""
-#~ "El período del programa se usa en la configuración de objetivos "
-#~ "periódicos y en las tablas de seguimiento del rendimiento del indicador "
-#~ "(IPTT). TolaData establece inicialmente el período del programa para "
-#~ "incluir las fechas de inicio y finalización oficiales del mismo, tal como "
-#~ "se registra en el sistema de rastreo de información de concesiones y "
-#~ "adjudicaciones (GAIT). El período del programa puede ajustarse para "
-#~ "alinearse con el plan de indicadores del programa."
-
-#~ msgid "GAIT program dates"
-#~ msgstr "Fechas del programa GAIT"
-
#~ msgid "Program start and end dates"
#~ msgstr "Fechas de inicio y finalización del programa"
@@ -6931,28 +7140,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ "de finalización del programa se puede mover más tarde.\n"
#~ " "
-#~ msgid "Unavailable"
-#~ msgstr "No disponible"
-
-#~ msgid ""
-#~ "This action may result in changes to your periodic targets. If you have "
-#~ "already set up periodic targets for your indicators, you may need to "
-#~ "enter additional target values to cover the entire reporting period. For "
-#~ "future reference, please provide a reason for modifying the reporting "
-#~ "period."
-#~ msgstr ""
-#~ "Esta acción puede generar cambios a sus objetivos periódicos. Si ya ha "
-#~ "configurado objetivos periódicos para sus indicadores, puede necesitar "
-#~ "agregar valores objetivo adicionales para cubrir el período de reporte "
-#~ "completo. Para referencia futura, indique la justificación para modificar "
-#~ "el período de reporte."
-
-#~ msgid "The end date must come after the start date."
-#~ msgstr "La fecha de finalización siempre va después de la de comienzo."
-
-#~ msgid "Reporting period updated"
-#~ msgstr "Período del informe actualizado"
-
#~ msgid ""
#~ "\n"
#~ " %(get_target_frequency_label)s targets\n"
@@ -7697,9 +7884,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Evidence record name"
#~ msgstr "Nombre de registro de evidencia"
-#~ msgid "Indicator changed"
-#~ msgstr "Indicador modificado"
-
#~ msgid "Result changed"
#~ msgstr "Resultado modificado"
@@ -7715,9 +7899,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Result level changed"
#~ msgstr "Nivel de resultados modificado"
-#~ msgid "Funding status"
-#~ msgstr "Estado de la financiación"
-
#~ msgid "Cost center"
#~ msgstr "Centro de costos"
@@ -7831,9 +8012,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Places"
#~ msgstr "Lugares"
-#~ msgid "Map"
-#~ msgstr "Mapa"
-
#~ msgid "Demographic Information"
#~ msgstr "Información Demográfica"
@@ -7885,12 +8063,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Program Name"
#~ msgstr "Nombre del programa"
-#~ msgid "Program Start Date"
-#~ msgstr "Fecha de inicio del programa"
-
-#~ msgid "Program End Date"
-#~ msgstr "Fecha de finalización del programa"
-
#~ msgid "Auto-number indicators according to the results framework"
#~ msgstr "Indicadores de numeración automática según el sistema de resultados"
@@ -7990,9 +8162,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "User programs updated"
#~ msgstr "Programas de usuario actualizados"
-#~ msgid "This field must be unique"
-#~ msgstr "Este campo debe ser único"
-
#~ msgid "Analyses and Reporting"
#~ msgstr "Análisis e informes"
@@ -8059,9 +8228,6 @@ msgstr "Salud pública (no nutricional/no WASH)"
#~ msgid "Risks and Assumptions"
#~ msgstr "Riesgos y suposiciones"
-#~ msgid "Complete"
-#~ msgstr "Completar"
-
#~ msgid "Contributor"
#~ msgstr "Contribuyente"
diff --git a/tola/locale/fr/LC_MESSAGES/django.mo b/tola/locale/fr/LC_MESSAGES/django.mo
index 4f2815a05..19087b759 100644
Binary files a/tola/locale/fr/LC_MESSAGES/django.mo and b/tola/locale/fr/LC_MESSAGES/django.mo differ
diff --git a/tola/locale/fr/LC_MESSAGES/django.po b/tola/locale/fr/LC_MESSAGES/django.po
index c9a53f15d..904e599e9 100644
--- a/tola/locale/fr/LC_MESSAGES/django.po
+++ b/tola/locale/fr/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-24 10:03-0700\n"
-"PO-Revision-Date: 2022-05-18 11:20-0400\n"
+"POT-Creation-Date: 2022-10-18 12:41-0700\n"
+"PO-Revision-Date: 2022-10-18 13:37-0600\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
@@ -13,45 +13,57 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 3.0.1\n"
-#: indicators/admin.py:43
+#: indicators/admin.py:64
msgid "Show all"
msgstr "Tout afficher"
-#: indicators/admin.py:55
+#: indicators/admin.py:76
msgid "status"
msgstr "statut"
#. Translators: This is a filter option that allows users to limit results based on status of archived or not-archived
-#: indicators/admin.py:61
+#: indicators/admin.py:82
msgid "Active (not archived)"
msgstr "Actif (non archivé)"
#. Translators: This is a filter option that allows users to limit results based on status of archived or not-archived
-#: indicators/admin.py:63
+#: indicators/admin.py:84
msgid "Inactive (archived)"
msgstr "Inactif (archivé)"
#. Translators: This is label text for an individual category in a listing of disaggregation categories
-#: indicators/admin.py:154
+#: indicators/admin.py:319
msgid "Category"
msgstr "Catégorie"
#. Translators: This is label text for a listing of disaggregation categories
-#: indicators/admin.py:156
+#: indicators/admin.py:321
msgid "Categories"
msgstr "Catégories"
-#. Translators: Heading for list of disaggregation types assigned to a country
-#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
-#: indicators/admin.py:171 indicators/indicator_plan.py:75
-#: indicators/models.py:522 indicators/models.py:626 indicators/models.py:1347
-#: templates/indicators/disaggregation_print.html:55
-#: templates/indicators/disaggregation_report.html:94
-#: tola_management/models.py:924 tola_management/models.py:932
-msgid "Disaggregation"
-msgstr "Désagrégation"
+#: indicators/admin.py:384 indicators/models.py:519
+#, fuzzy
+#| msgid "Global disaggregation"
+msgid "Global Disaggregation"
+msgstr "Désagrégation globale"
-#: indicators/export_renderers.py:54
+#: indicators/admin.py:385
+#, fuzzy
+#| msgid "Global disaggregations"
+msgid "Global Disaggregations"
+msgstr "Désagrégations globales"
+
+#: indicators/admin.py:417
+#, fuzzy
+#| msgid "Country Disaggregations"
+msgid "Country Disaggregation"
+msgstr "Désagrégations du pays"
+
+#: indicators/admin.py:418
+msgid "Country Disaggregations"
+msgstr "Désagrégations du pays"
+
+#: indicators/export_renderers.py:54 tola_management/models.py:831
msgid "Program ID"
msgstr "Identifiant du programme"
@@ -65,22 +77,22 @@ msgid "No."
msgstr "Nº"
#: indicators/export_renderers.py:58 indicators/forms.py:392
-#: indicators/models.py:1566 indicators/models.py:2000
-#: indicators/models.py:2293 indicators/views/views_program.py:138
+#: indicators/models.py:1573 indicators/models.py:2013
+#: indicators/models.py:2305 indicators/views/views_program.py:138
#: indicators/views/views_program.py:177
#: templates/indicators/disaggregation_print.html:53
#: templates/indicators/disaggregation_report.html:91
-#: tola_management/programadmin.py:62 tola_management/programadmin.py:110
+#: tola_management/programadmin.py:66 tola_management/programadmin.py:114
msgid "Indicator"
msgstr "Indicateur"
#: indicators/export_renderers.py:61 indicators/indicator_plan.py:41
-#: indicators/models.py:138 indicators/models.py:1263
+#: indicators/models.py:134 indicators/models.py:1270
msgid "Level"
msgstr "Niveau"
#: indicators/export_renderers.py:63 indicators/indicator_plan.py:83
-#: indicators/models.py:1331 tola_management/models.py:392
+#: indicators/models.py:1338 tola_management/models.py:405
msgid "Unit of measure"
msgstr "Unité de mesure"
@@ -90,56 +102,56 @@ msgid "Change"
msgstr "Modification"
#. Translators: 'C' as in Cumulative and 'NC' as in Non Cumulative
-#: indicators/export_renderers.py:72 indicators/models.py:1382
+#: indicators/export_renderers.py:72 indicators/models.py:1389
msgid "C / NC"
msgstr "C / NC"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: indicators/export_renderers.py:77 indicators/forms.py:259
-#: indicators/forms.py:557 indicators/models.py:1355 tola/db_translations.py:18
-#: tola_management/models.py:398
+#: indicators/forms.py:557 indicators/models.py:1362 tola/db_translations.py:4
+#: tola_management/models.py:411
msgid "Baseline"
msgstr "Mesure de base"
-#: indicators/export_renderers.py:82 indicators/models.py:1087
-#: indicators/models.py:1989
+#: indicators/export_renderers.py:82 indicators/models.py:1094
+#: indicators/models.py:2002
msgid "Life of Program (LoP) only"
msgstr "Vie du programme (LoP) seulement"
-#: indicators/export_renderers.py:83 indicators/models.py:1088
+#: indicators/export_renderers.py:83 indicators/models.py:1095
msgid "Midline and endline"
msgstr "Mesure de mi-parcours et mesure de fin de programme"
#. Translators: label for the date of the last completed Annual target period.
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/export_renderers.py:84 indicators/models.py:1089
+#: indicators/export_renderers.py:84 indicators/models.py:1096
#: templates/indicators/program_target_period_info_helptext.html:16
-#: tola/db_translations.py:10
+#: tola/db_translations.py:16
msgid "Annual"
msgstr "Annuel"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/export_renderers.py:85 indicators/models.py:1090
-#: tola/db_translations.py:30
+#: indicators/export_renderers.py:85 indicators/models.py:1097
+#: tola/db_translations.py:8
msgid "Semi-annual"
msgstr "Semestriel"
-#: indicators/export_renderers.py:86 indicators/models.py:1091
+#: indicators/export_renderers.py:86 indicators/models.py:1098
msgid "Tri-annual"
msgstr "Quadrimestriel"
#. Translators: this is the measure of time (3 months)
#. Translators: label for the date of the last completed Quarterly target period.
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/export_renderers.py:88 indicators/models.py:1092
+#: indicators/export_renderers.py:88 indicators/models.py:1099
#: templates/indicators/program_target_period_info_helptext.html:22
-#: tola/db_translations.py:24
+#: tola/db_translations.py:26
msgid "Quarterly"
msgstr "Trimestriel"
#. Translators: label for the date of the last completed Monthly target period.
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/export_renderers.py:89 indicators/models.py:1093
+#: indicators/export_renderers.py:89 indicators/models.py:1100
#: templates/indicators/program_target_period_info_helptext.html:24
#: tola/db_translations.py:14
msgid "Monthly"
@@ -151,7 +163,7 @@ msgid "*All values in this report are rounded to two decimal places."
msgstr "*Toutes les valeurs de ce rapport sont arrondies à deux décimales."
#. Translators: This single word is part of this longer sentence: :Please complete all required fields in the Target tab."
-#: indicators/export_renderers.py:157 indicators/models.py:2009
+#: indicators/export_renderers.py:157 indicators/models.py:2022
#: templates/indicators/indicator_form_common_js.html:1228
#: templates/indicators/result_table.html:32
#: workflow/serializers_new/period_serializers.py:46
@@ -159,7 +171,7 @@ msgid "Target"
msgstr "Cible"
#: indicators/export_renderers.py:157 indicators/export_renderers.py:158
-#: indicators/models.py:2287 templates/indicators/result_table.html:33
+#: indicators/models.py:2299 templates/indicators/result_table.html:33
#: workflow/serializers_new/period_serializers.py:52
msgid "Actual"
msgstr "Réel"
@@ -174,21 +186,21 @@ msgstr "% Atteint"
#: indicators/serializers_new/iptt_period_data_serializers.py:108
#: indicators/templatetags/mytags.py:93
#: indicators/views/bulk_indicator_import_views.py:113
-#: tola_management/models.py:165 tola_management/models.py:454
-#: tola_management/programadmin.py:181
+#: tola_management/models.py:167 tola_management/models.py:467
+#: tola_management/programadmin.py:185
msgid "N/A"
msgstr "N/A"
#. Translators: Page title for a log of all changes to indicators over a program's history
#. Translators: Sheet title for a log of all changes to indicators over a program's history
#. Translators: Page title for a log of all changes to indicators over a program's history
-#: indicators/export_renderers.py:406 tola_management/programadmin.py:125
-#: tola_management/programadmin.py:620 tola_management/views.py:336
+#: indicators/export_renderers.py:406 tola_management/programadmin.py:129
+#: tola_management/programadmin.py:769 tola_management/views.py:353
msgid "Program change log"
msgstr "Journal des modifications du programme"
#. Translators: referring to an indicator whose results accumulate over time
-#: indicators/export_renderers.py:430 indicators/models.py:1710
+#: indicators/export_renderers.py:430 indicators/models.py:1718
msgid "Cumulative"
msgstr "Cumulatif"
@@ -202,8 +214,8 @@ msgstr "Non cumulatif"
msgid "No data"
msgstr "Pas de données"
-#: indicators/forms.py:258 indicators/models.py:108 indicators/models.py:1518
-#: indicators/models.py:2300 workflow/forms.py:100 workflow/models.py:562
+#: indicators/forms.py:258 indicators/models.py:103 indicators/models.py:1525
+#: indicators/models.py:2312 workflow/forms.py:100 workflow/models.py:577
msgid "Program"
msgstr "Programme"
@@ -211,7 +223,7 @@ msgstr "Programme"
#. the Result that's being entered into the form
#. Translators: Number of the indicator being shown
#: indicators/forms.py:265 indicators/views/views_program.py:110
-#: tola_management/models.py:413 tola_management/programadmin.py:109
+#: tola_management/models.py:426 tola_management/programadmin.py:113
msgid "Result level"
msgstr "Niveau de résultat"
@@ -263,7 +275,7 @@ msgstr "Désagrégations %(country_name)s"
#. Translators: Label of a form field. User specifies whether changes should increase or decrease.
#: indicators/forms.py:400 indicators/forms.py:625
-#: indicators/indicator_plan.py:90 tola_management/models.py:396
+#: indicators/indicator_plan.py:90 tola_management/models.py:409
msgid "Direction of change"
msgstr "Direction du changement"
@@ -297,7 +309,7 @@ msgstr ""
#. Translators: This is a result that was actually achieved, versus one that was planned.
#: indicators/forms.py:684
#: templates/indicators/results/result_form_disaggregation_fields.html:62
-#: tola_management/models.py:406
+#: tola_management/models.py:419
msgid "Actual value"
msgstr "Valeur réelle"
@@ -309,7 +321,7 @@ msgstr "Site"
#. Translators: field label that identifies which of a set of a targets (e.g. monthly/annual) a result
#. is being compared to
-#: indicators/forms.py:698 tola_management/models.py:405
+#: indicators/forms.py:698 tola_management/models.py:418
msgid "Measure against target"
msgstr "Mesurer par rapport à la cible"
@@ -317,7 +329,7 @@ msgstr "Mesurer par rapport à la cible"
msgid "Link to file or folder"
msgstr "Lien vers le fichier ou dossier"
-#: indicators/forms.py:713 tola_management/models.py:404
+#: indicators/forms.py:713 tola_management/models.py:417
msgid "Result date"
msgstr "Date de résultat"
@@ -380,6 +392,16 @@ msgstr "Source de l’indicateur"
msgid "Indicator definition"
msgstr "Définition de l’indicateur"
+#. Translators: Heading for list of disaggregation types assigned to a country
+#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
+#: indicators/indicator_plan.py:75 indicators/models.py:516
+#: indicators/models.py:622 indicators/models.py:1354
+#: templates/indicators/disaggregation_print.html:55
+#: templates/indicators/disaggregation_report.html:94
+#: tola_management/models.py:955 tola_management/models.py:963
+msgid "Disaggregation"
+msgstr "Désagrégation"
+
#: indicators/indicator_plan.py:97
msgid "# / %"
msgstr "# / %"
@@ -392,34 +414,34 @@ msgstr "Calcul"
msgid "Baseline value"
msgstr "Valeur de base"
-#: indicators/indicator_plan.py:116 tola_management/models.py:395
+#: indicators/indicator_plan.py:116 tola_management/models.py:408
msgid "LOP target"
msgstr "Cible de LoP"
-#: indicators/indicator_plan.py:122 indicators/models.py:1386
-#: tola_management/models.py:397
+#: indicators/indicator_plan.py:122 indicators/models.py:1393
+#: tola_management/models.py:410
msgid "Rationale for target"
msgstr "Justification de la cible"
-#: indicators/indicator_plan.py:129 indicators/models.py:1394
+#: indicators/indicator_plan.py:129 indicators/models.py:1401
msgid "Target frequency"
msgstr "Fréquence de la cible"
#: indicators/indicator_plan.py:137 indicators/views/views_program.py:112
-#: tola_management/models.py:415
+#: tola_management/models.py:428
msgid "Means of verification"
msgstr "Moyens de vérification"
-#: indicators/indicator_plan.py:144 indicators/models.py:1426
-#: tola_management/models.py:416
+#: indicators/indicator_plan.py:144 indicators/models.py:1433
+#: tola_management/models.py:429
msgid "Data collection method"
msgstr "Méthode de collecte de données"
-#: indicators/indicator_plan.py:151 indicators/models.py:1436
+#: indicators/indicator_plan.py:151 indicators/models.py:1443
msgid "Frequency of data collection"
msgstr "Fréquence de collecte de données"
-#: indicators/indicator_plan.py:158 indicators/models.py:1446
+#: indicators/indicator_plan.py:158 indicators/models.py:1453
msgid "Data points"
msgstr "Points de données"
@@ -427,35 +449,35 @@ msgstr "Points de données"
msgid "Responsible person(s) & team"
msgstr "Personne(s) responsable(s) et équipe"
-#: indicators/indicator_plan.py:173 indicators/models.py:1462
-#: tola_management/models.py:417
+#: indicators/indicator_plan.py:173 indicators/models.py:1469
+#: tola_management/models.py:430
msgid "Method of analysis"
msgstr "Méthode d’analyse"
-#: indicators/indicator_plan.py:180 indicators/models.py:1469
+#: indicators/indicator_plan.py:180 indicators/models.py:1476
msgid "Information use"
msgstr "Utilisation de l’information"
-#: indicators/indicator_plan.py:187 indicators/models.py:1480
+#: indicators/indicator_plan.py:187 indicators/models.py:1487
msgid "Frequency of reporting"
msgstr "Fréquence de rapportage"
#. Translators: This is the title of a form field.
-#: indicators/indicator_plan.py:194 indicators/models.py:1499
+#: indicators/indicator_plan.py:194 indicators/models.py:1506
msgid "Data quality assurance techniques"
msgstr "Techniques d’assurance de la qualité des données"
#. Translators: This is the title of a form field.
-#: indicators/indicator_plan.py:201 indicators/models.py:1489
+#: indicators/indicator_plan.py:201 indicators/models.py:1496
msgid "Data quality assurance details"
msgstr "Détails sur l’assurance de la qualité des données"
-#: indicators/indicator_plan.py:208 indicators/models.py:1505
+#: indicators/indicator_plan.py:208 indicators/models.py:1512
msgid "Data issues"
msgstr "Problèmes liés aux données"
-#: indicators/indicator_plan.py:215 indicators/models.py:1514
-#: indicators/models.py:2290
+#: indicators/indicator_plan.py:215 indicators/models.py:1521
+#: indicators/models.py:2302
msgid "Comments"
msgstr "Commentaires"
@@ -470,83 +492,103 @@ msgstr "Indicateurs non affectés à un niveau de cadre de résultats"
msgid "Indicator plan"
msgstr "Plan d’indicateur"
-#: indicators/models.py:66 indicators/models.py:1252
+#: indicators/models.py:65 indicators/models.py:1259
msgid "Indicator type"
msgstr "Type d’indicateur"
-#: indicators/models.py:67 indicators/models.py:87 indicators/models.py:109
-#: indicators/models.py:673 indicators/models.py:690
-#: tola_management/models.py:811 workflow/forms.py:134
+#: indicators/models.py:66 indicators/models.py:81 indicators/models.py:104
+#: indicators/models.py:673 indicators/models.py:691
+#: tola_management/models.py:828 workflow/forms.py:134
msgid "Description"
msgstr "Description"
-#: indicators/models.py:68 indicators/models.py:89 indicators/models.py:110
-#: indicators/models.py:133 indicators/models.py:412 indicators/models.py:437
-#: indicators/models.py:528 indicators/models.py:629 indicators/models.py:674
-#: indicators/models.py:692 indicators/models.py:718 indicators/models.py:739
-#: indicators/models.py:1542 indicators/models.py:2023
-#: indicators/models.py:2314 workflow/models.py:59 workflow/models.py:128
+#: indicators/models.py:67 indicators/models.py:83 indicators/models.py:105
+#: indicators/models.py:129 indicators/models.py:404 indicators/models.py:430
+#: indicators/models.py:522 indicators/models.py:625 indicators/models.py:674
+#: indicators/models.py:693 indicators/models.py:733 indicators/models.py:750
+#: indicators/models.py:1549 indicators/models.py:2036
+#: indicators/models.py:2326 workflow/models.py:73 workflow/models.py:142
msgid "Create date"
msgstr "Créer un rendez-vous"
-#: indicators/models.py:69 indicators/models.py:90 indicators/models.py:111
-#: indicators/models.py:134 indicators/models.py:413 indicators/models.py:438
-#: indicators/models.py:529 indicators/models.py:630 indicators/models.py:676
-#: indicators/models.py:693 indicators/models.py:719 indicators/models.py:740
-#: indicators/models.py:1546 indicators/models.py:2024
-#: indicators/models.py:2315 workflow/models.py:60 workflow/models.py:129
+#: indicators/models.py:68 indicators/models.py:84 indicators/models.py:106
+#: indicators/models.py:130 indicators/models.py:405 indicators/models.py:431
+#: indicators/models.py:523 indicators/models.py:626 indicators/models.py:676
+#: indicators/models.py:694 indicators/models.py:734 indicators/models.py:751
+#: indicators/models.py:1553 indicators/models.py:2037
+#: indicators/models.py:2327 workflow/models.py:74 workflow/models.py:143
msgid "Edit date"
msgstr "Date d’édition"
-#: indicators/models.py:72
+#: indicators/models.py:71
msgid "Indicator Type"
msgstr "Type d’indicateur"
-#: indicators/models.py:85 indicators/models.py:107 indicators/models.py:128
-#: indicators/models.py:408 indicators/models.py:715 indicators/models.py:1289
-#: tola_management/models.py:133 tola_management/models.py:391
-#: tola_management/models.py:808 tola_management/models.py:864
+#: indicators/models.py:72
+#, fuzzy
+#| msgid "Indicator Type"
+msgid "Indicator Types"
+msgstr "Type d’indicateur"
+
+#: indicators/models.py:79 indicators/models.py:102 indicators/models.py:124
+#: indicators/models.py:400 indicators/models.py:730 indicators/models.py:1296
+#: tola_management/models.py:135 tola_management/models.py:404
+#: tola_management/models.py:891
msgid "Name"
msgstr "Prénom"
-#: indicators/models.py:86 workflow/models.py:168 workflow/models.py:529
-#: workflow/models.py:907
+#: indicators/models.py:80 workflow/models.py:147 workflow/models.py:190
+#: workflow/models.py:544 workflow/models.py:1024
msgid "Country"
msgstr "Pays"
-#: indicators/models.py:88 templates/workflow/site_profile_list.html:53
+#: indicators/models.py:82 templates/workflow/site_profile_list.html:53
msgid "Status"
msgstr "Statut"
-#: indicators/models.py:93
+#: indicators/models.py:87 indicators/models.py:1288
+msgid "Country Strategic Objective"
+msgstr "Objectif stratégique du pays"
+
+#: indicators/models.py:88
msgid "Country Strategic Objectives"
msgstr "Objectifs stratégiques du pays"
-#: indicators/models.py:114 indicators/models.py:1275
+#: indicators/models.py:109 indicators/models.py:1282
msgid "Program Objective"
msgstr "Objectif du programme"
-#: indicators/models.py:129 indicators/views/views_program.py:113
-#: tola_management/models.py:411
+#: indicators/models.py:110
+#, fuzzy
+#| msgid "Program Objective"
+msgid "Program Objectives"
+msgstr "Objectif du programme"
+
+#: indicators/models.py:125 indicators/views/views_program.py:113
+#: tola_management/models.py:424
msgid "Assumptions"
msgstr "Hypothèses"
-#: indicators/models.py:132 indicators/models.py:628
+#: indicators/models.py:128 indicators/models.py:624
msgid "Sort order"
msgstr "Ordre de classement"
+#: indicators/models.py:135
+msgid "Levels"
+msgstr "Niveaux"
+
#. Translators: Name of the most commonly used organizational hierarchy of KPIs at Mercy Corps.
-#: indicators/models.py:328
+#: indicators/models.py:320
msgid "Mercy Corps"
msgstr "Mercy Corps"
#. Translators: Highest level objective of a project. High level KPIs can be attached here.
-#: indicators/models.py:331 indicators/models.py:369 indicators/models.py:397
+#: indicators/models.py:323 indicators/models.py:361 indicators/models.py:389
msgid "Goal"
msgstr "But"
#. Translators: Below Goals, the 2nd highest organizing level to attach KPIs to.
-#: indicators/models.py:333 indicators/models.py:345
+#: indicators/models.py:325 indicators/models.py:337
msgid "Outcome"
msgstr "Résultat"
@@ -554,162 +596,202 @@ msgstr "Résultat"
#. Translators: Below Sub-Purpose, the 4th highest organizing level to attach KPIs to. Noun.
#. Translators: Below Sub-Intermediate Result, the 4th highest organizing level to attach KPIs to. Noun.
#. Translators: Below Intermediate Outcome, the lowest organizing level to attach KPIs to. Noun.
-#: indicators/models.py:335 indicators/models.py:347 indicators/models.py:375
-#: indicators/models.py:389 indicators/models.py:405
+#: indicators/models.py:327 indicators/models.py:339 indicators/models.py:367
+#: indicators/models.py:381 indicators/models.py:397
msgid "Output"
msgstr "Extrant"
#. Translators: Below Output, the lowest organizing level to attach KPIs to.
#. Translators: Below Result, the lowest organizing level to attach KPIs to.
-#: indicators/models.py:337 indicators/models.py:363
+#: indicators/models.py:329 indicators/models.py:355
msgid "Activity"
msgstr "Activité"
#. Translators: Name of the most commonly used organizational hierarchy of KPIs at Mercy Corps.
-#: indicators/models.py:340
+#: indicators/models.py:332
msgid "Department for International Development (DFID)"
msgstr "Département du Développement International (DFID)"
#. Translators: Highest level objective of a project. High level KPIs can be attached here.
-#: indicators/models.py:343
+#: indicators/models.py:335
msgid "Impact"
msgstr "Impact"
#. Translators: Below Output, the lowest organizing level to attach KPIs to.
#. Translators: Below Output, the lowest organizing level to attach KPIs to. Noun.
-#: indicators/models.py:349 indicators/models.py:377 indicators/models.py:391
+#: indicators/models.py:341 indicators/models.py:369 indicators/models.py:383
msgid "Input"
msgstr "Contribution"
#. Translators: The KPI organizational hierarchy used when we work on EC projects.
-#: indicators/models.py:352
+#: indicators/models.py:344
msgid "European Commission (EC)"
msgstr "Commission européenne (CE)"
#. Translators: Highest level goal of a project. High level KPIs can be attached here.
-#: indicators/models.py:355
+#: indicators/models.py:347
msgid "Overall Objective"
msgstr "Objectif global"
#. Translators: Below Overall Objective, the 2nd highest organizing level to attach KPIs to.
-#: indicators/models.py:357
+#: indicators/models.py:349
msgid "Specific Objective"
msgstr "Objectif spécifique"
#. Translators: Below Specific Objective, the 3rd highest organizing level to attach KPIs to.
#. Translators: Below Goal, the 2nd highest organizing level to attach KPIs to.
-#: indicators/models.py:359 indicators/models.py:371 indicators/models.py:399
+#: indicators/models.py:351 indicators/models.py:363 indicators/models.py:391
msgid "Purpose"
msgstr "Intention"
#. Translators: Below Purpose, the 4th highest organizing level to attach KPIs to.
-#: indicators/models.py:361 templates/indicators/result_form_modal.html:136
+#: indicators/models.py:353 templates/indicators/result_form_modal.html:136
msgid "Result"
msgstr "Résultat"
#. Translators: The KPI organizational hierarchy used when we work on certain USAID projects.
-#: indicators/models.py:366
+#: indicators/models.py:358
msgid "USAID 1"
msgstr "USAID 1"
#. Translators: Below Purpose, the 3rd highest organizing level to attach KPIs to.
-#: indicators/models.py:373 indicators/models.py:401
+#: indicators/models.py:365 indicators/models.py:393
msgid "Sub-Purpose"
msgstr "Sous-intention"
#. Translators: The KPI organizational hierarchy used when we work on certain USAID projects.
-#: indicators/models.py:380
+#: indicators/models.py:372
msgid "USAID 2"
msgstr "USAID 2"
#. Translators: Highest level goal of a project. High level KPIs can be attached here.
-#: indicators/models.py:383
+#: indicators/models.py:375
msgid "Strategic Objective"
msgstr "Objectif stratégique"
#. Translators: Below Strategic Objective, the 2nd highest organizing level to attach KPIs to.
-#: indicators/models.py:385
+#: indicators/models.py:377
msgid "Intermediate Result"
msgstr "Résultat intermédiaire"
#. Translators: Below Intermediate Result, the 3rd highest organizing level to attach KPIs to.
-#: indicators/models.py:387
+#: indicators/models.py:379
msgid "Sub-Intermediate Result"
msgstr "Résultat sous-intermédiaire"
#. Translators: The KPI organizational hierarchy used when we work on USAID Food for Peace projects.
-#: indicators/models.py:394
+#: indicators/models.py:386
msgid "USAID FFP"
msgstr "USAID FFP"
#. Translators: Below Sub-Purpose, the 4th highest organizing level to attach KPIs to.
-#: indicators/models.py:403
+#: indicators/models.py:395
msgid "Intermediate Outcome"
msgstr "Résultat intermédiaire"
#. Translators: This is depth of the selected object (a level tier) in a hierarchy of level tier objects
-#: indicators/models.py:411
+#: indicators/models.py:403
msgid "Level Tier depth"
msgstr "Profondeur de l’échelon"
#. Translators: Indicators are assigned to Levels. Levels are organized in a hierarchy of Tiers.
-#: indicators/models.py:418
+#: indicators/models.py:410
msgid "Level Tier"
msgstr "Échelon"
+#: indicators/models.py:411
+#, fuzzy
+#| msgid "Level Tier"
+msgid "Level Tiers"
+msgstr "Échelon"
+
#. Translators: Indicators are assigned to Levels. Levels are organized in a hierarchy of Tiers. There are several templates that users can choose from with different names for the Tiers.
-#: indicators/models.py:442
-msgid "Level tier templates"
+#: indicators/models.py:435 indicators/models.py:436
+#, fuzzy
+#| msgid "Level tier templates"
+msgid "Level Tier Templates"
msgstr "Modèles d'échelons"
-#: indicators/models.py:503
+#: indicators/models.py:497
msgid "Sex and Age Disaggregated Data (SADD)"
msgstr "Données désagrégées par sexe et âge (SADD)"
-#: indicators/models.py:504
+#: indicators/models.py:498
msgid "SADD (including unknown) with double counting"
msgstr "SADD (inconnu) avec double comptage"
-#: indicators/models.py:505
+#: indicators/models.py:499
msgid "SADD (including unknown) without double counting"
msgstr "SADD (y compris inconnu) sans double comptage"
-#: indicators/models.py:506
+#: indicators/models.py:500
msgid "Actual with double counting"
msgstr "Réel avec double comptage"
-#: indicators/models.py:507
+#: indicators/models.py:501
msgid "Actual without double counting"
msgstr "Réel sans double comptage"
-#: indicators/models.py:508
+#: indicators/models.py:502
msgid "Sectors Direct with double counting"
msgstr "Secteurs directs (double comptage)"
-#: indicators/models.py:509
+#: indicators/models.py:503
msgid "Sectors Indirect with double counting"
msgstr "Secteurs indirects (double comptage)"
-#: indicators/models.py:525
-msgid "Global disaggregation"
-msgstr "Désagrégation globale"
-
#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
-#: indicators/models.py:526 tola_management/models.py:930
+#: indicators/models.py:520 tola_management/models.py:961
msgid "Archived"
msgstr "Archivé"
-#: indicators/models.py:627 templates/indicators/disaggregation_print.html:59
+#: indicators/models.py:529
+#, fuzzy
+#| msgid "Disaggregation"
+msgid "Disaggregation Type"
+msgstr "Désagrégation"
+
+#: indicators/models.py:530
+#, fuzzy
+#| msgid "Disaggregations"
+msgid "Disaggregation Types"
+msgstr "Désagrégations"
+
+#: indicators/models.py:623 templates/indicators/disaggregation_print.html:59
#: templates/indicators/disaggregation_report.html:98
msgid "Label"
msgstr "Étiquette"
+#: indicators/models.py:631
+#, fuzzy
+#| msgid "Disaggregation label"
+msgid "Disaggregation Label"
+msgstr "Étiquette de désagrégation"
+
+#: indicators/models.py:632
+#, fuzzy
+#| msgid "Disaggregation label"
+msgid "Disaggregation Labels"
+msgstr "Étiquette de désagrégation"
+
#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
-#: indicators/models.py:658 tola_management/models.py:926
+#: indicators/models.py:656 tola_management/models.py:957
msgid "Disaggregation category"
msgstr "Catégorie de désagrégation"
-#: indicators/models.py:671 indicators/models.py:688
+#: indicators/models.py:663
+#, fuzzy
+#| msgid "Disaggregated values"
+msgid "Disaggregated Value"
+msgstr "Valeurs désagrégées"
+
+#: indicators/models.py:664
+#, fuzzy
+#| msgid "Disaggregated values"
+msgid "Disaggregated Values"
+msgstr "Valeurs désagrégées"
+
+#: indicators/models.py:671 indicators/models.py:689
msgid "Frequency"
msgstr "Fréquence"
@@ -717,184 +799,232 @@ msgstr "Fréquence"
msgid "Reporting Frequency"
msgstr "Fréquence de rapportage"
-#: indicators/models.py:696
+#: indicators/models.py:680
+#, fuzzy
+#| msgid "Reporting Frequency"
+msgid "Reporting Frequencies"
+msgstr "Fréquence de rapportage"
+
+#: indicators/models.py:697
msgid "Data Collection Frequency"
msgstr "Fréquence de collecte de données"
-#: indicators/models.py:709
+#: indicators/models.py:698
+#, fuzzy
+#| msgid "Data Collection Frequency"
+msgid "Data Collection Frequencies"
+msgstr "Fréquence de collecte de données"
+
+#: indicators/models.py:706 indicators/models.py:716
msgid "Outcome theme name"
msgstr "Nom du thème de résultat"
-#: indicators/models.py:710
+#: indicators/models.py:707 indicators/models.py:717
msgid "Active?"
msgstr "Actif?"
-#: indicators/models.py:711
+#: indicators/models.py:708 indicators/models.py:718
msgid "Creation date"
msgstr "Création d’un rendez-vous"
-#: indicators/models.py:716
+#: indicators/models.py:711
+#, fuzzy
+#| msgid "Outcome themes"
+msgid "Outcome Theme"
+msgstr "Thèmes de résultats"
+
+#: indicators/models.py:712
+#, fuzzy
+#| msgid "Outcome themes"
+msgid "Outcome Themes"
+msgstr "Thèmes de résultats"
+
+#: indicators/models.py:722 workflow/models.py:539
+#, fuzzy
+#| msgid "Outcome themes"
+msgid "IDAA Outcome Theme"
+msgstr "Thèmes de résultats"
+
+#: indicators/models.py:723
+#, fuzzy
+#| msgid "Outcome themes"
+msgid "IDAA Outcome Themes"
+msgstr "Thèmes de résultats"
+
+#: indicators/models.py:731
msgid "URL"
msgstr "URL"
-#: indicators/models.py:717
+#: indicators/models.py:732
msgid "Feed URL"
msgstr "URL du flux"
-#: indicators/models.py:722
+#: indicators/models.py:737
msgid "External Service"
msgstr "Service externe"
-#: indicators/models.py:736
+#: indicators/models.py:738
+#, fuzzy
+#| msgid "External Service"
+msgid "External Services"
+msgstr "Service externe"
+
+#: indicators/models.py:747
msgid "External service"
msgstr "Service externe"
-#: indicators/models.py:737
+#: indicators/models.py:748
msgid "Full URL"
msgstr "URL complète"
-#: indicators/models.py:738
+#: indicators/models.py:749
msgid "Unique ID"
msgstr "Identifiant unique"
-#: indicators/models.py:743
+#: indicators/models.py:754
msgid "External Service Record"
msgstr "Enregistrement de service externe"
-#: indicators/models.py:1094
+#: indicators/models.py:755
+#, fuzzy
+#| msgid "External Service Record"
+msgid "External Service Records"
+msgstr "Enregistrement de service externe"
+
+#: indicators/models.py:1101
msgid "Event"
msgstr "Événement"
-#: indicators/models.py:1114
+#: indicators/models.py:1121
msgid "Number (#)"
msgstr "Nombre (#)"
-#: indicators/models.py:1115
+#: indicators/models.py:1122
msgid "Percentage (%)"
msgstr "Pourcentage (%)"
#. Translators: A value that can be entered into a form field when the field doesn't apply in a particular situation.
-#: indicators/models.py:1122 indicators/models.py:1364
+#: indicators/models.py:1129 indicators/models.py:1371
#: indicators/views/bulk_indicator_import_views.py:117
msgid "Not applicable"
msgstr "Non applicable"
-#: indicators/models.py:1123 tola_management/models.py:455
+#: indicators/models.py:1130 tola_management/models.py:468
msgid "Increase (+)"
msgstr "Augmenter (+)"
-#: indicators/models.py:1124 tola_management/models.py:456
+#: indicators/models.py:1131 tola_management/models.py:469
msgid "Decrease (-)"
msgstr "Diminuer (-)"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1141
+#: indicators/models.py:1148
msgid "Data cleaning and processing"
msgstr "Nettoyage et traitement des données"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1143
+#: indicators/models.py:1150
msgid "Data collection training and piloting"
msgstr "La formation et le pilotage de la collecte de données"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1145
+#: indicators/models.py:1152
msgid "Data cross checks or triangulation of data sources"
msgstr ""
"Vérifications croisées des données ou triangulation des sources de données"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1147
+#: indicators/models.py:1154
msgid "Data quality audits (DQAs)"
msgstr "Audits de qualité des données (DQA)"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1149
+#: indicators/models.py:1156
msgid "Data spot checks"
msgstr "Contrôles ponctuels des données"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1151
+#: indicators/models.py:1158
msgid "Digital data collection tools"
msgstr "Outils numériques de collecte de données"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1153
+#: indicators/models.py:1160
msgid "External evaluator or consultant"
msgstr "Évaluateur ou consultant externe"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1155
+#: indicators/models.py:1162
msgid "Mixed methods"
msgstr "Méthodes mixtes"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1157
+#: indicators/models.py:1164
msgid "Participatory data analysis validation"
msgstr "Validation de l’analyse des données participatives"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1159
+#: indicators/models.py:1166
msgid "Peer reviews or reproducibility checks"
msgstr "L’examen par les pairs ou les contrôles de reproductibilité"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1161
+#: indicators/models.py:1168
msgid "Randomized phone calls to respondents"
msgstr "Appels téléphoniques randomisés aux répondants"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1163
+#: indicators/models.py:1170
msgid "Randomized visits to respondents"
msgstr "Visites randomisées aux répondants"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1165
+#: indicators/models.py:1172
msgid "Regular indicator and data reviews"
msgstr "Examens réguliers des indicateurs et des données"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1167
+#: indicators/models.py:1174
msgid "Secure data storage"
msgstr "Stockage sécurisé des données"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1169
+#: indicators/models.py:1176
msgid "Shadow audits or accompanied supervision"
msgstr "Audits supervisés ou encadrement"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1171
+#: indicators/models.py:1178
msgid "Standardized indicators"
msgstr "Indicateurs standardisés"
#. Translators: describes a user-selectable option in a list of things that users can do to ensure program quality
-#: indicators/models.py:1173
+#: indicators/models.py:1180
msgid "Standard operating procedures (SOPs) or protocols"
msgstr "Procédures ou protocoles opératoires normalisés (PON)"
#. Translators: describes a user-selectable option in a list of things that users plan to do with the information gathered while the program is running
-#: indicators/models.py:1178
+#: indicators/models.py:1185
msgid "Donor and/or stakeholder reporting"
msgstr "Rapportage du donneur et/ou de la partie prenante"
#. Translators: describes a user-selectable option in a list of things that users plan to do with the information gathered while the program is running
-#: indicators/models.py:1180
+#: indicators/models.py:1187
msgid "Internal program management and learning"
msgstr "Gestion et apprentissage du programme interne"
#. Translators: describes a user-selectable option in a list of things that users plan to do with the information gathered while the program is running
-#: indicators/models.py:1182
+#: indicators/models.py:1189
msgid "Participant accountability"
msgstr "Redevabilité des participants"
#. Translators: Short description of how values are accumulated over time.
-#: indicators/models.py:1195
+#: indicators/models.py:1202
msgid "Targets, actuals, and results are non-cumulative."
msgstr "Les cibles, les réelles, et les résultats sont non-cumulatifs."
#. Translators: Full description of how values are accumulated over time.
-#: indicators/models.py:1197
+#: indicators/models.py:1204
msgid ""
"Targets, actuals, and results are non-cumulative. Target period actuals are "
"the sum of all results for that target period. Life of Program target and "
@@ -906,14 +1036,14 @@ msgstr ""
"toutes les périodes cibles."
#. Translators: Short description of how values are accumulated over time.
-#: indicators/models.py:1199
+#: indicators/models.py:1206
msgid "Targets and actuals are cumulative; results are non-cumulative."
msgstr ""
"Les cibles et les réelles sont cumulatives; les résultats sont non-"
"cumulatifs."
#. Translators: Full description of how values are accumulated over time.
-#: indicators/models.py:1201
+#: indicators/models.py:1208
msgid ""
"Targets and actuals are cumulative; results are non-cumulative. Target "
"period actuals are the sum of the results from the current and all previous "
@@ -927,12 +1057,12 @@ msgstr ""
"vie du programme reflète la réelle la plus récente."
#. Translators: Short description of how values are accumulated over time.
-#: indicators/models.py:1203
+#: indicators/models.py:1210
msgid "Targets, actuals, and results are cumulative."
msgstr "Les cibles, les réelles, et les résultats sont cumulatifs."
#. Translators: Full description of how values are accumulated over time.
-#: indicators/models.py:1205
+#: indicators/models.py:1212
msgid ""
"Targets, actuals, and results are cumulative. Target period actuals mirror "
"the most recent result for that target period; no calculations are performed "
@@ -945,12 +1075,12 @@ msgstr ""
"la vie du programme reflète la dernière cible, et la réelle de la vie du "
"programme reflète la réelle la plus récente."
-#: indicators/models.py:1249
+#: indicators/models.py:1256
msgid "Indicator key"
msgstr "Clé d’indicateur"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1254
+#: indicators/models.py:1261
msgid ""
"Classifying indicators by type allows us to filter and analyze related sets "
"of indicators."
@@ -959,21 +1089,17 @@ msgstr ""
"ensembles d’indicateurs liés."
#. Translators: Label for a field that shows whether an object was imported or not
-#: indicators/models.py:1259
+#: indicators/models.py:1266
msgid "Bulk Imported"
msgstr "Importation groupée effectuée"
#. Translators: this is help text for a drop down select menu on an indicator setup form
-#: indicators/models.py:1266
+#: indicators/models.py:1273
msgid "Select the result this indicator is intended to measure."
msgstr "Sélectionnez le résultat que cet indicateur doit mesurer."
-#: indicators/models.py:1281
-msgid "Country Strategic Objective"
-msgstr "Objectif stratégique du pays"
-
#. Translators: this is help text for a menu area on an indicator setup form where objectives are selected
-#: indicators/models.py:1284
+#: indicators/models.py:1291
msgid ""
"Identifying the country strategic objectives to which an indicator "
"contributes, allows us to filter and analyze related sets of indicators. "
@@ -986,7 +1112,7 @@ msgstr ""
"TolaData."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1291
+#: indicators/models.py:1298
msgid ""
"Provide an indicator statement of the precise information needed to assess "
"whether intended changes have occurred."
@@ -995,15 +1121,15 @@ msgstr ""
"évaluer si les changements prévus ont eu lieu."
#. Translators: this is the label for a form field where the user enters the "number" identifying an indicator
-#: indicators/models.py:1296 templates/indicators/disaggregation_report.html:90
-#: tola_management/models.py:447
+#: indicators/models.py:1303 templates/indicators/disaggregation_report.html:90
+#: tola_management/models.py:460
msgid "Number"
msgstr "Nombre"
#. Translators: a "number" in this context is a kind of label. This is help text to explain why a user is
#. seeing customized numbers instead of auto-generated ones that can derived from the indicator's place in
#. the hierarchy. The "numbers" look something like "1.1" or "1.2.1a"
-#: indicators/models.py:1300
+#: indicators/models.py:1307
msgid ""
"This number is displayed in place of the indicator number automatically "
"generated through the results framework. An admin can turn on auto-numbering "
@@ -1014,12 +1140,12 @@ msgstr ""
"numérotation automatique dans les paramètres du programme."
#. Translators: field label for entering which standardized list the indicator was chosen from
-#: indicators/models.py:1307
+#: indicators/models.py:1314
msgid "Source"
msgstr "Source"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1309
+#: indicators/models.py:1316
msgid ""
"Identify the source of this indicator (e.g. Mercy Corps DIG, EC, USAID, "
"etc.) If the indicator is brand new and created specifically for the "
@@ -1030,12 +1156,12 @@ msgstr ""
"spécifiquement pour le programme, veuillez saisir « Personnalisé »."
#. Translators: field label for entering the extended explanation of the indicator
-#: indicators/models.py:1315 tola_management/models.py:414
+#: indicators/models.py:1322 tola_management/models.py:427
msgid "Definition"
msgstr "Définition"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1317
+#: indicators/models.py:1324
msgid ""
"Provide a long-form definition of the indicator and all key terms that need "
"further detail for precise and reliable measurement. Anyone reading the "
@@ -1047,17 +1173,17 @@ msgstr ""
"personne lisant la définition doit comprendre exactement ce que l’indicateur "
"mesure sans aucune ambiguïté."
-#: indicators/models.py:1324
+#: indicators/models.py:1331
msgid "Rationale or justification for indicator"
msgstr "Logique ou justification de l’indicateur"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1326
+#: indicators/models.py:1333
msgid "Explain why the indicator was chosen for this program."
msgstr "Expliquez pourquoi cet indicateur a été choisi pour ce programme."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1333
+#: indicators/models.py:1340
msgid ""
"Enter a meaningful description of what the indicator uses as its standard "
"unit (e.g. households, kilograms, kits, participants, etc.)"
@@ -1065,19 +1191,19 @@ msgstr ""
"Veuillez fournir une description de l’unité standard utilisée par "
"l’indicateur (par ex. : menages, kilogrammes, kits, participants, etc.)"
-#: indicators/models.py:1339
+#: indicators/models.py:1346
msgid "Unit Type"
msgstr "Type d’unité"
#. Translators: this is help text for a user selecting "percentage" or "numeric" as the measurement type
-#: indicators/models.py:1341
+#: indicators/models.py:1348
msgid "This selection determines how results are calculated and displayed."
msgstr ""
"Cette sélection détermine la façon dont les résultats sont calculés et "
"affichés."
#. Translators: this is help text for a menu area where disaggregations (by age, gender, etc.) are selected
-#: indicators/models.py:1349
+#: indicators/models.py:1356
msgid ""
"Select all relevant disaggregations. Disaggregations are managed by the "
"TolaData country administrator. Mercy Corps required disaggregations (e.g. "
@@ -1091,7 +1217,7 @@ msgstr ""
"elles ne s’appliquent pas à l’indicateur."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1357
+#: indicators/models.py:1364
msgid ""
"Enter a numeric value for the baseline that is greater than or equal to "
"zero. If a baseline is not yet known or not applicable, enter a zero or "
@@ -1103,17 +1229,17 @@ msgstr ""
"base ou si elle n’est pas applicable, veuillez saisir un zéro ou cocher la "
"case « Non applicable ». La mesure de base pourra être modifiée plus tard."
-#: indicators/models.py:1369 templates/indicators/indicatortargets.html:91
+#: indicators/models.py:1376 templates/indicators/indicatortargets.html:91
#: templates/indicators/indicatortargets.html:213
msgid "Life of Program (LoP) target"
msgstr "Cible de la vie du programme (LoP)"
-#: indicators/models.py:1373
+#: indicators/models.py:1380
msgid "Direction of Change"
msgstr "Direction du changement"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1375
+#: indicators/models.py:1382
msgid ""
"Is your program trying to achieve an increase (+) or decrease (-) in the "
"indicator's unit of measure? This field is important for the accuracy of our "
@@ -1128,7 +1254,7 @@ msgstr ""
"objectif lorsque le résultat de l’indicateur sera inférieur à la cible."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1388
+#: indicators/models.py:1395
msgid ""
"Provide an explanation for any target value/s assigned to this indicator. "
"You might include calculations and any historical or secondary data sources "
@@ -1139,7 +1265,7 @@ msgstr ""
"historiques ou secondaires utilisées pour estimer les cibles."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1396
+#: indicators/models.py:1403
msgid ""
"This selection determines how the indicator's targets and results are "
"organized and displayed. Target frequencies will vary depending on how "
@@ -1151,24 +1277,24 @@ msgstr ""
"la fréquence à laquelle le programme aura besoin de données de l’indicateur "
"pour gérer et rendre compte de l’avancement du programme."
-#: indicators/models.py:1404
+#: indicators/models.py:1411
msgid "First event name"
msgstr "Premier nom de l’événement"
-#: indicators/models.py:1410
+#: indicators/models.py:1417
msgid "First target period begins*"
msgstr "La première période cible commence*"
-#: indicators/models.py:1414
+#: indicators/models.py:1421
msgid "Number of target periods*"
msgstr "Nombre de périodes cibles*"
-#: indicators/models.py:1419
+#: indicators/models.py:1426
msgid "Means of verification / data source"
msgstr "Moyens de vérification/Source de données"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1421
+#: indicators/models.py:1428
msgid ""
"Identify the source of indicator data and the tools used to collect data (e."
"g., surveys, checklists, etc.) Indicate whether these tools already exist or "
@@ -1180,7 +1306,7 @@ msgstr ""
"devront être développés."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1428
+#: indicators/models.py:1435
msgid ""
"Explain the process used to collect data (e.g., population-based sampling "
"with randomized selection, review of partner records, etc.) Explain how the "
@@ -1194,7 +1320,7 @@ msgstr ""
"l’indicateur pour la collecte de données."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1438
+#: indicators/models.py:1445
msgid ""
"How frequently will you collect data for this indicator? The frequency and "
"timing of data collection should be based on how often data are needed for "
@@ -1212,7 +1338,7 @@ msgstr ""
"la fréquence à laquelle toutes les données seront collectées et traitées."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1448
+#: indicators/models.py:1455
#, python-format
msgid ""
"List all data points required for reporting. While some indicators require a "
@@ -1230,12 +1356,12 @@ msgstr ""
"nécessaires seraient le nombre d’étudiants ayant obtenu leur diplôme "
"(numérateur) et le nombre d’étudiants inscrits à la formation (dénominateur)."
-#: indicators/models.py:1455
+#: indicators/models.py:1462
msgid "Responsible person(s) and team"
msgstr "Personne(s) responsable(s) et équipe"
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1457
+#: indicators/models.py:1464
msgid ""
"List the people or team(s) responsible for data collection. This can include "
"community volunteers, program team members, local partner(s), enumerators, "
@@ -1247,7 +1373,7 @@ msgstr ""
"etc."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1464
+#: indicators/models.py:1471
msgid ""
"The method of analysis should be detailed enough to allow an auditor or "
"third party to reproduce the analysis or calculation and generate the same "
@@ -1258,7 +1384,7 @@ msgstr ""
"générer le même résultat."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1471
+#: indicators/models.py:1478
msgid ""
"Describe the primary uses of the indicator and its intended audience. This "
"is the most important field in an indicator plan, because it explains the "
@@ -1276,7 +1402,7 @@ msgstr ""
"ajoutés au programme."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1482
+#: indicators/models.py:1489
msgid ""
"This frequency should make sense in relation to the data collection "
"frequency and target frequency and should adhere to any requirements "
@@ -1288,7 +1414,7 @@ msgstr ""
"parties prenantes et/ou de bailleur de fonds."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1491
+#: indicators/models.py:1498
msgid ""
"Provide any additional details about how data quality will be ensured for "
"this specific indicator. Additional details may include specific roles and "
@@ -1302,7 +1428,7 @@ msgstr ""
"examiner ou trianguler."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1501
+#: indicators/models.py:1508
msgid ""
"Select the data quality assurance techniques that will be applied to this "
"specific indicator."
@@ -1312,7 +1438,7 @@ msgstr ""
"données qui seront appliquées à cet indicateur spécifique."
#. Translators: this is help text for a field on an indicator setup form
-#: indicators/models.py:1507
+#: indicators/models.py:1514
msgid ""
"List any limitations of the data used to calculate this indicator (e.g., "
"issues with validity, reliability, accuracy, precision, and/or potential for "
@@ -1327,14 +1453,14 @@ msgstr ""
"données et/ou aux méthodes d’analyse des données. Veuillez être le plus "
"précis possible et expliquer comment ces problèmes ont été abordés."
-#: indicators/models.py:1523
-#: indicators/views/bulk_indicator_import_views.py:787 workflow/models.py:39
-#: workflow/models.py:525
+#: indicators/models.py:1530
+#: indicators/views/bulk_indicator_import_views.py:787 workflow/models.py:38
+#: workflow/models.py:530
msgid "Sector"
msgstr "Secteur"
#. Translators: this is help text for a field on an indicator setup form where the user selects from a list
-#: indicators/models.py:1525
+#: indicators/models.py:1532
msgid ""
"Classifying indicators by sector allows us to filter and analyze related "
"sets of indicators."
@@ -1342,17 +1468,22 @@ msgstr ""
"Classer les indicateurs par secteur nous permet de filtrer et d’analyser les "
"ensembles d’indicateurs liés."
-#: indicators/models.py:1529
+#: indicators/models.py:1536
msgid "External Service ID"
msgstr "Identifiant de service externe"
#. Translators: This is the name of the Level object in the old system of organising levels
-#: indicators/models.py:1536
+#: indicators/models.py:1543
msgid "Old Level"
msgstr "Niveau précédent"
+#: indicators/models.py:1574 indicators/views/views_program.py:111
+#: templates/indicators/disaggregation_report.html:141
+msgid "Indicators"
+msgstr "Indicateurs"
+
#. Translators: This is an error message that is returned when a user is trying to assign an indicator to the wrong hierarchy of levels.
-#: indicators/models.py:1579
+#: indicators/models.py:1587
#, python-format
msgid ""
"Level/Indicator mismatched program IDs (level %(level_program_id)d and "
@@ -1361,164 +1492,218 @@ msgstr ""
"Le niveau/l’indicateur ne correspond pas aux identifiants de programme "
"(niveau %(level_program_id)d et indicateur %(indicator_program_id)d)"
-#: indicators/models.py:1699 indicators/templatetags/mytags.py:118
+#: indicators/models.py:1707 indicators/templatetags/mytags.py:118
msgid "#"
msgstr "#"
-#: indicators/models.py:1701 indicators/templatetags/mytags.py:121
+#: indicators/models.py:1709 indicators/templatetags/mytags.py:121
msgid "%"
msgstr "%"
#. Translators: referring to an indicator whose results do not accumulate over time
-#: indicators/models.py:1715
+#: indicators/models.py:1723
msgid "Not cumulative"
msgstr "Non cumulatif"
-#: indicators/models.py:1720 indicators/templatetags/mytags.py:88
+#: indicators/models.py:1728 indicators/templatetags/mytags.py:88
msgid "-"
msgstr "-"
-#: indicators/models.py:1722 indicators/templatetags/mytags.py:91
+#: indicators/models.py:1730 indicators/templatetags/mytags.py:91
msgid "+"
msgstr "+"
-#: indicators/models.py:1873 indicators/models.py:1880
-#: indicators/views/views_indicators.py:526
-#: indicators/views/views_indicators.py:534
+#: indicators/models.py:1881 indicators/models.py:1888
+#: indicators/views/views_indicators.py:525
+#: indicators/views/views_indicators.py:533
msgid "indicator"
msgstr "indicateur"
-#: indicators/models.py:1990 templates/indicators/result_table.html:217
+#: indicators/models.py:1986
+#, fuzzy
+#| msgid "Indicator imported"
+msgid "Bulk Indicator Import File"
+msgstr "Indicateur importé"
+
+#: indicators/models.py:1987
+#, fuzzy
+#| msgid "Indicator imported"
+msgid "Bulk Indicator Import Files"
+msgstr "Indicateur importé"
+
+#: indicators/models.py:2003 templates/indicators/result_table.html:217
#: workflow/serializers_new/period_serializers.py:20
msgid "Life of Program"
msgstr "Vie du programme"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/models.py:1991 tola/db_translations.py:16
+#: indicators/models.py:2004 tola/db_translations.py:22
msgid "Midline"
msgstr "Mesure de mi-parcours"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: indicators/models.py:1992 tola/db_translations.py:6
+#: indicators/models.py:2005 tola/db_translations.py:24
msgid "Endline"
msgstr "Mesure de fin de programme"
-#: indicators/models.py:1993
+#: indicators/models.py:2006
msgid "Year"
msgstr "Année"
-#: indicators/models.py:1994
+#: indicators/models.py:2007
msgid "Semi-annual period"
msgstr "Période semestrielle"
-#: indicators/models.py:1995
+#: indicators/models.py:2008
msgid "Tri-annual period"
msgstr "Période quadrimestrielle"
-#: indicators/models.py:1996
+#: indicators/models.py:2009
msgid "Quarter"
msgstr "Trimestre"
-#: indicators/models.py:2005
+#: indicators/models.py:2018
msgid "Period"
msgstr "Période"
-#: indicators/models.py:2013
+#: indicators/models.py:2026
#: templates/indicators/indicator_reportingperiod_modal.html:41
#: templates/indicators/indicator_reportingperiod_modal.html:61
-#: tola_management/models.py:409
+#: tola_management/models.py:422
msgid "Start date"
msgstr "Date de début"
-#: indicators/models.py:2018
+#: indicators/models.py:2031
#: templates/indicators/indicator_reportingperiod_modal.html:48
#: templates/indicators/indicator_reportingperiod_modal.html:73
-#: tola_management/models.py:410
+#: tola_management/models.py:423
msgid "End date"
msgstr "Date de fin"
-#: indicators/models.py:2022
+#: indicators/models.py:2035
msgid "Customsort"
msgstr "Customsort"
-#: indicators/models.py:2028 templates/workflow/site_indicatordata.html:20
+#: indicators/models.py:2041 templates/workflow/site_indicatordata.html:20
msgid "Periodic Target"
msgstr "Cible périodique"
-#: indicators/models.py:2279
+#: indicators/models.py:2042
+#, fuzzy
+#| msgid "Periodic Target"
+msgid "Periodic Targets"
+msgstr "Cible périodique"
+
+#: indicators/models.py:2285
+#, fuzzy
+#| msgid "Result changed"
+msgid "Result Manager"
+msgstr "Résultat modifié"
+
+#: indicators/models.py:2286
+#, fuzzy
+#| msgid "Result changed"
+msgid "Result Managers"
+msgstr "Résultat modifié"
+
+#: indicators/models.py:2291
msgid "Data key"
msgstr "Clé de données"
-#: indicators/models.py:2283
+#: indicators/models.py:2295
msgid "Periodic target"
msgstr "Cible périodique"
-#: indicators/models.py:2303
+#: indicators/models.py:2315
msgid "Date collected"
msgstr "Date de collecte"
-#: indicators/models.py:2308
+#: indicators/models.py:2320
msgid "Originated By"
msgstr "Originaire de"
-#: indicators/models.py:2311
+#: indicators/models.py:2323
msgid "Record name"
msgstr "Nom de l’enregistrement"
-#: indicators/models.py:2312
+#: indicators/models.py:2324
msgid "Evidence URL"
msgstr "URL de la preuve"
-#: indicators/models.py:2316 templates/workflow/site_indicatordata.html:5
+#: indicators/models.py:2328 templates/workflow/site_indicatordata.html:5
#: templates/workflow/site_profile_list.html:5
#: templates/workflow/site_profile_list.html:6
#: templates/workflow/site_profile_list.html:167
#: templates/workflow/siteprofile_form.html:11
-#: templates/workflow/siteprofile_form.html:13 tola_management/models.py:412
+#: templates/workflow/siteprofile_form.html:13 tola_management/models.py:425
msgid "Sites"
msgstr "Sites"
-#: indicators/models.py:2420
+#: indicators/models.py:2335
+#, fuzzy
+#| msgid "Indicators and results"
+msgid "Indicator Result"
+msgstr "Indicateurs et résultats"
+
+#: indicators/models.py:2336
+#, fuzzy
+#| msgid "Indicators and results"
+msgid "Indicator Results"
+msgstr "Indicateurs et résultats"
+
+#: indicators/models.py:2427
msgid "Report Name"
msgstr "Nom du rapport"
-#: indicators/models.py:2493
+#: indicators/models.py:2439
+#, fuzzy
+#| msgid "Pinned reports"
+msgid "Pinned Report"
+msgstr "Épingler les rapports"
+
+#: indicators/models.py:2440
+#, fuzzy
+#| msgid "Pinned reports"
+msgid "Pinned Reports"
+msgstr "Épingler les rapports"
+
+#: indicators/models.py:2502
msgid "years"
msgstr "années"
-#: indicators/models.py:2494
+#: indicators/models.py:2503
msgid "semi-annual periods"
msgstr "périodes semestrielles"
-#: indicators/models.py:2495
+#: indicators/models.py:2504
msgid "tri-annual periods"
msgstr "périodes quadrimestrielles"
-#: indicators/models.py:2496
+#: indicators/models.py:2505
msgid "quarters"
msgstr "trimestres"
-#: indicators/models.py:2497
+#: indicators/models.py:2506
msgid "months"
msgstr "mois"
#. Translators: Example: Most recent 2 Months
-#: indicators/models.py:2527
+#: indicators/models.py:2536
#, python-brace-format
msgid "Most recent {num_recent_periods} {time_or_target_period_str}"
msgstr "Le plus récent {num_recent_periods} {time_or_target_period_str}"
#. Translators: Example: Show all Years
-#: indicators/models.py:2533
+#: indicators/models.py:2542
#, python-brace-format
msgid "Show all {time_or_target_period_str}"
msgstr "Tout afficher {time_or_target_period_str}"
-#: indicators/models.py:2543 indicators/models.py:2547
+#: indicators/models.py:2552 indicators/models.py:2556
msgid "Show all results"
msgstr "Afficher tous les résultats"
-#: indicators/models.py:2561
+#: indicators/models.py:2570
msgid "Recent progress for all indicators"
msgstr "Progrès récent pour tous les indicateurs"
@@ -1570,14 +1755,14 @@ msgstr ""
"La somme du champ Données ‘SADD sans double comptage’ doit être égale à la "
"somme du champ ‘Direct sans double comptage’."
-#. Translators: An error message detailing that the fields Direct and Indirect total participants with double counting is required
+#. Translators: An error message detailing that the field Direct total participants with double counting is required
#: indicators/serializers_new/participant_count_serializers.py:302
msgid ""
-"Direct total participants with double counting is required. Please "
-"complete these fields."
+"Direct total participants with double counting is required. Please complete "
+"these fields."
msgstr ""
-"Le champ Total de participants directs avec double comptage est "
-"requis. Veuillez renseigner ces champs."
+"Le champ Total de participants directs avec double comptage est requis. "
+"Veuillez renseigner ces champs."
#. Translators: An error message detailing that the Direct and Indirect without double counting should be equal to or lower than the value of Direct and Indirect with double counting
#: indicators/serializers_new/participant_count_serializers.py:306
@@ -1590,8 +1775,25 @@ msgstr ""
#. Translators: An error message detailing that the Sector values should be less to or equal to the sum of Direct and Indirect with double counting value
#: indicators/serializers_new/participant_count_serializers.py:310
+#, fuzzy
+#| msgid ""
+#| "Sector values should be less than or equal to the 'Direct/Indirect with "
+#| "double counting' value."
msgid ""
-"Sector values should be less than or equal to the 'Direct/Indirect with "
+"Direct sector values should be less than or equal to the 'Direct with double "
+"counting' value."
+msgstr ""
+"Les valeurs des secteurs doivent être inférieures ou égales à la valeur "
+"“Direct/Indirect avec double comptage”."
+
+#. Translators: An error message detailing that the Sector values should be less to or equal to the sum of Direct and Indirect with double counting value
+#: indicators/serializers_new/participant_count_serializers.py:314
+#, fuzzy
+#| msgid ""
+#| "Sector values should be less than or equal to the 'Direct/Indirect with "
+#| "double counting' value."
+msgid ""
+"Indirect sector values should be less than or equal to the 'Indirect with "
"double counting' value."
msgstr ""
"Les valeurs des secteurs doivent être inférieures ou égales à la valeur "
@@ -1856,18 +2058,18 @@ msgid "You have exceeded the character limit of this field"
msgstr "Vous avez dépassé la limite de caractères pour ce champ"
#. Translators: success message when an indicator was created
-#: indicators/views/views_indicators.py:380
+#: indicators/views/views_indicators.py:379
msgid "Success! Indicator created."
msgstr "Succès, indicateur créé !"
#. Translators: success message when an indicator was updated
-#: indicators/views/views_indicators.py:383
+#: indicators/views/views_indicators.py:382
msgid "Success! Indicator updated."
msgstr "Succès, indicateur mis à jour !"
#. Translators: success message when an indicator was created,
#. ex. "Indicator 2a was saved and linked to Outcome 2.2"
-#: indicators/views/views_indicators.py:394
+#: indicators/views/views_indicators.py:393
#, python-brace-format
msgid ""
"Indicator {indicator_number} was saved and linked to "
@@ -1877,21 +2079,21 @@ msgstr ""
"{result_level_display_ontology}"
#. Translators: success message when indicator was updated ex. "Indicator 2a updated"
-#: indicators/views/views_indicators.py:400
+#: indicators/views/views_indicators.py:399
#, python-brace-format
msgid "Indicator {indicator_number} updated."
msgstr "Indicateur {indicator_number} mis à jour."
#. Translators: a fragment of a larger string that will be a title for a form. The full string might be e.g. Complete setup of Outcome indicator 1.1a.
-#: indicators/views/views_indicators.py:514
+#: indicators/views/views_indicators.py:513
msgid "Complete setup of "
msgstr "Terminer la configuration de "
-#: indicators/views/views_indicators.py:537
+#: indicators/views/views_indicators.py:536
msgid "Indicator setup"
msgstr "Configuration de l’indicateur"
-#: indicators/views/views_indicators.py:649
+#: indicators/views/views_indicators.py:648
msgid ""
"This indicator was imported from an Excel template. Some fields could not be "
"included in the template, including targets that are required before results "
@@ -1901,15 +2103,15 @@ msgstr ""
"pas pu être inclus dans le modèle, dont les cibles qui sont nécessaires à la "
"publication des résultats."
-#: indicators/views/views_indicators.py:803
+#: indicators/views/views_indicators.py:802
msgid "Success, Indicator Deleted!"
msgstr "Succès, indicateur supprimé !"
-#: indicators/views/views_indicators.py:813
+#: indicators/views/views_indicators.py:812
msgid "Reason for change is required."
msgstr "Une justification pour la modification est requise."
-#: indicators/views/views_indicators.py:819
+#: indicators/views/views_indicators.py:818
msgid ""
"Reason for change is not required when deleting an indicator with no linked "
"results."
@@ -1917,36 +2119,40 @@ msgstr ""
"Lors de la suppression d’un indicateur sans résultat lié, une justification "
"pour la modification n’est pas requise."
-#: indicators/views/views_indicators.py:827
+#: indicators/views/views_indicators.py:826
msgid "The indicator was successfully deleted."
msgstr "L’indicateur a été supprimé avec succès."
+#. Translators: Text of an error message that appears when a user hasn't provided a justification for the
+#. change they are making to some data
#. Translators: Text of an error message that appears when a user hasn't provided a justification for the change they are making to some data
-#: indicators/views/views_indicators.py:861
-#: indicators/views/views_indicators.py:921
-#: indicators/views/views_indicators.py:1105 workflow/views.py:309
+#: indicators/views/views_indicators.py:860
+#: indicators/views/views_indicators.py:920
+#: indicators/views/views_indicators.py:1104
+#: workflow/serializers_new/program_period_serializer.py:30
+#: workflow/views.py:340
msgid "Reason for change is required"
msgstr "Une justification pour la modification est requise"
-#: indicators/views/views_indicators.py:865
-#: indicators/views/views_indicators.py:928 tola_management/models.py:781
+#: indicators/views/views_indicators.py:864
+#: indicators/views/views_indicators.py:927 tola_management/models.py:794
msgid "No reason for change required."
msgstr "Aucune justification pour la modification n’est requise."
-#: indicators/views/views_indicators.py:1014
+#: indicators/views/views_indicators.py:1013
#, python-format
msgid "Result was added to %(level)s indicator %(number)s."
msgstr "Résultat ajouté à %(level)s indicateur %(number)s."
-#: indicators/views/views_indicators.py:1019
+#: indicators/views/views_indicators.py:1018
msgid "Success, Data Created!"
msgstr "Succès, données créées !"
-#: indicators/views/views_indicators.py:1080
+#: indicators/views/views_indicators.py:1079
msgid "Result updated."
msgstr "Résultat mis à jour."
-#: indicators/views/views_indicators.py:1084
+#: indicators/views/views_indicators.py:1083
msgid "Success, Data Updated!"
msgstr "Succès, données mises à jour !"
@@ -1958,11 +2164,6 @@ msgstr "Succès, données mises à jour !"
msgid "Logframe"
msgstr "Cadre logique"
-#: indicators/views/views_program.py:111
-#: templates/indicators/disaggregation_report.html:141
-msgid "Indicators"
-msgstr "Indicateurs"
-
#: indicators/views/views_program.py:435 indicators/views/views_program.py:437
msgid "Results Framework"
msgstr "Cadre de résultats"
@@ -2206,16 +2407,16 @@ msgstr "Utilisateurs"
#: templates/base.html:127 templates/indicators/disaggregation_report.html:137
#: templates/workflow/filter.html:11
-#: templates/workflow/site_profile_list.html:21
+#: templates/workflow/site_profile_list.html:21 workflow/models.py:578
msgid "Programs"
msgstr "Programmes"
-#: templates/base.html:128 workflow/models.py:72
+#: templates/base.html:128 workflow/models.py:87
msgid "Organizations"
msgstr "Organisations"
#: templates/base.html:129 templates/workflow/tags/program_menu.html:8
-#: tola_management/models.py:813 workflow/models.py:133
+#: tola_management/models.py:830 workflow/models.py:148
msgid "Countries"
msgstr "Pays"
@@ -2293,11 +2494,11 @@ msgstr "Aucun programme disponible"
msgid "Browse all sites"
msgstr "Parcourir tous les sites"
-#: templates/home.html:24 templates/home.html:196
+#: templates/home.html:24 templates/home.html:191
msgid "Sites with results"
msgstr "Sites avec résultats"
-#: templates/home.html:26 templates/home.html:212
+#: templates/home.html:26 templates/home.html:207
msgid "Sites without results"
msgstr "Sites sans résultats"
@@ -2333,16 +2534,34 @@ msgid "Recent progress report"
msgstr "Rapport de progrès récent"
#: templates/home.html:88
-#, python-format
+#, fuzzy, python-format
+#| msgid ""
+#| "\n"
+#| " Before adding indicators and performance "
+#| "results, we need to know your program's\n"
+#| " \n"
+#| " reporting start and end dates.\n"
+#| " \n"
+#| " "
msgid ""
"\n"
-" Before adding indicators and performance "
-"results, we need to know your program's\n"
-" \n"
-" reporting start and end dates.\n"
-" \n"
+" >\n"
" "
msgstr ""
"\n"
@@ -2379,7 +2596,7 @@ msgstr ""
" "
#. Translators: A message telling the user why they can not access it due to the start and end date not being set.
-#: templates/home.html:108
+#: templates/home.html:103
msgid ""
"Before you can view this program, an administrator needs to set the "
"program's start and end dates."
@@ -2388,32 +2605,32 @@ msgstr ""
"administrateur doit définir les dates de début et de fin du programme."
#. Translators: link users to the new results framework builder page when a level already exists
-#: templates/home.html:119
+#: templates/home.html:114
msgid "Start adding indicators to your results framework."
msgstr "Commencez à ajouter des indicateurs à votre cadre de résultats."
#. Translators: link users to the new results framework builder page - no levels currently exist
-#: templates/home.html:122
+#: templates/home.html:117
msgid "Start building your results framework and adding indicators."
msgstr ""
"Commencez à concevoir votre cadre de résultats et ajouter des indicateurs."
#. Translators: A message telling the user a program can not yet be accessed because indicators have not been created on it.
-#: templates/home.html:128 templates/home.html:136
+#: templates/home.html:123 templates/home.html:131
msgid "No indicators have been entered for this program."
msgstr "Aucun indicateur n’a été entré pour ce programme."
-#: templates/home.html:130 templates/indicators/indicator_form_modal.html:25
+#: templates/home.html:125 templates/indicators/indicator_form_modal.html:25
msgid "Add indicator"
msgstr "Ajouter un indicateur"
-#: templates/home.html:141 templates/indicators/program_page.html:16
+#: templates/home.html:136 templates/indicators/program_page.html:16
msgid "Program metrics for target periods completed to date"
msgstr ""
"Les statistiques du programme pour les périodes cibles complétées à "
"cette date"
-#: templates/home.html:154
+#: templates/home.html:149
#, python-format
msgid ""
"\n"
@@ -2430,7 +2647,7 @@ msgstr ""
" "
#. Translators: message shown when there are no programs available to the user, or no active programs in a country
-#: templates/home.html:168
+#: templates/home.html:163
msgid ""
"\n"
" \n"
@@ -2458,11 +2675,11 @@ msgstr ""
"
\n"
" "
-#: templates/home.html:204 templates/workflow/site_profile_list.html:175
+#: templates/home.html:199 templates/workflow/site_profile_list.html:175
msgid "Site with result"
msgstr "Site avec résultat"
-#: templates/home.html:220
+#: templates/home.html:215
msgid "Site without result"
msgstr "Site sans résultat"
@@ -2495,7 +2712,7 @@ msgstr "Global"
#: templates/indicators/disaggregation_print.html:58
#: templates/indicators/disaggregation_report.html:97
-#: templates/indicators/disaggregation_report.html:145 workflow/models.py:859
+#: templates/indicators/disaggregation_report.html:145 workflow/models.py:976
msgid "Type"
msgstr "Type"
@@ -2866,15 +3083,15 @@ msgid "No"
msgstr "Non"
#: templates/indicators/indicator_plan.html:4
-#: templates/indicators/indicator_plan.html:31
+#: templates/indicators/indicator_plan.html:28
msgid "Indicator Plan"
msgstr "Plan de l’indicateur"
-#: templates/indicators/indicator_plan.html:48
+#: templates/indicators/indicator_plan.html:45
msgid "Group indicators"
msgstr "Regrouper les indicateurs"
-#: templates/indicators/indicator_plan.html:52
+#: templates/indicators/indicator_plan.html:49
msgid "by Level"
msgstr "par Niveau"
@@ -3148,24 +3365,19 @@ msgstr "Cadre de résultats"
msgid "Create results framework"
msgstr "Créer un cadre de résultats"
-#. Translators: GAIT is the Grant and Award Information Tracker system used by MercyCorps
-#: templates/indicators/program_page.html:42
-msgid "View program in GAIT"
-msgstr "Afficher le programme dans GAIT"
-
-#: templates/indicators/program_page.html:50
+#: templates/indicators/program_page.html:46
msgid "Pinned reports"
msgstr "Épingler les rapports"
-#: templates/indicators/program_page.html:56
+#: templates/indicators/program_page.html:52
msgid "IPTT:"
msgstr "IPTT :"
-#: templates/indicators/program_page.html:69
+#: templates/indicators/program_page.html:65
msgid "Create an IPTT report"
msgstr "Créer un rapport IPTT"
-#: templates/indicators/program_page.html:73
+#: templates/indicators/program_page.html:69
msgid "Reports will be available after the program start date."
msgstr "Les rapports seront disponibles après la date de début du programme."
@@ -3173,24 +3385,34 @@ msgstr "Les rapports seront disponibles après la date de début du programme."
msgid "Program setup"
msgstr "Installation du programme"
-#. Translators: The full sentance is: Before adding indicators and performance results, we need to know your program's reporting start and end dates.
-#: templates/indicators/program_setup_incomplete.html:9
-#, python-format
+#: templates/indicators/program_setup_incomplete.html:8
+#, fuzzy, python-format
+#| msgid ""
+#| "\n"
+#| " Before adding indicators and performance results, we need to know "
+#| "your program's\n"
+#| " reporting start and end dates.\n"
+#| " "
msgid ""
"\n"
-" Before adding indicators and performance results, we need to know your "
-"program's\n"
-" reporting start and end dates.\n"
+" >\n"
" "
msgstr ""
"\n"
@@ -3614,23 +3836,36 @@ msgstr ""
"des résultats."
#: templates/indicators/tags/program-complete.html:5
-#, python-format
+#, fuzzy, python-format
+#| msgid ""
+#| "\n"
+#| " \n"
+#| " Program period\n"
+#| " \n"
+#| " is
"
+#| "%(program.percent_complete)s%% complete\n"
+#| " "
msgid ""
"\n"
-" \n"
-" Program period\n"
-" \n"
+" >\n"
" is
%(program.percent_complete)s"
"%% complete\n"
" "
@@ -4111,39 +4346,39 @@ msgid "Important dates"
msgstr "Dates importantes"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:4
-msgid "By training"
-msgstr "Par formation"
+#: tola/db_translations.py:6
+msgid "By distribution"
+msgstr "Par répartition"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:8
-msgid "Weekly"
-msgstr "Hebdomadaire"
+#: tola/db_translations.py:10
+msgid "Post shock"
+msgstr "Après impact"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.py:12
-msgid "Final evaluation"
-msgstr "Évaluation finale"
+msgid "By event"
+msgstr "Par événement"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:20
-msgid "By distribution"
-msgstr "Par répartition"
+#: tola/db_translations.py:18
+msgid "By training"
+msgstr "Par formation"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:22
-msgid "By batch"
-msgstr "Par lot"
+#: tola/db_translations.py:20
+msgid "Final evaluation"
+msgstr "Évaluation finale"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:26
-msgid "By event"
-msgstr "Par événement"
+#: tola/db_translations.py:28
+msgid "Weekly"
+msgstr "Hebdomadaire"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.py:28
-msgid "Post shock"
-msgstr "Après impact"
+#: tola/db_translations.py:30
+msgid "By batch"
+msgstr "Par lot"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#: tola/db_translations.py:32
@@ -4152,7 +4387,7 @@ msgstr "Agro-industrie"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:34 tola/db_translations.py:156
+#: tola/db_translations.py:34 tola/db_translations.py:152
msgid "Agriculture"
msgstr "Agriculture"
@@ -4244,7 +4479,7 @@ msgstr "Alimentation"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: The main area of a program
-#: tola/db_translations.py:70 tola/db_translations.py:146
+#: tola/db_translations.py:70 tola/db_translations.py:144
msgid "Food Security"
msgstr "Sécurité alimentaire"
@@ -4360,7 +4595,7 @@ msgstr "Questions urbaines"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:116 tola/db_translations.py:178
+#: tola/db_translations.py:116 tola/db_translations.py:174
msgid "WASH"
msgstr "Eau, assainissement et hygiène"
@@ -4425,24 +4660,12 @@ msgid "Economic Opportunity"
msgstr "Opportunité économique"
#. Translators: The main area of a program
-#: tola/db_translations.py:144
-msgid "Economic Opportunity / Opportunité économique / Oportunidad económica"
-msgstr ""
-
-#. Translators: The main area of a program
-#: tola/db_translations.py:148
+#: tola/db_translations.py:146
msgid "Good Governance and Peace"
msgstr "Bonne gouvernance et paix"
#. Translators: The main area of a program
-#: tola/db_translations.py:150
-msgid ""
-"Good Governance and Peace / Bonne gouvernance et paix / Buena gobernanza y "
-"paz"
-msgstr ""
-
-#. Translators: The main area of a program
-#: tola/db_translations.py:152
+#: tola/db_translations.py:148
msgid ""
"Resilience approach (tick this box if the program used a resilience approach)"
msgstr ""
@@ -4450,57 +4673,57 @@ msgstr ""
"approche de la résilience)"
#. Translators: The main area of a program
-#: tola/db_translations.py:154
+#: tola/db_translations.py:150
msgid "Water Security"
msgstr "Sécurité de l’eau"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:158
+#: tola/db_translations.py:154
msgid "Cash and Voucher Assistance"
msgstr "Aide en transferts monétaires et bons d’alimentation"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:160
+#: tola/db_translations.py:156
msgid "Direct"
msgstr "Direct"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:162
+#: tola/db_translations.py:158
msgid "Employment"
msgstr "Emploi"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:164
+#: tola/db_translations.py:160
msgid "Environment (DRR, Energy and Water)"
msgstr "Environnement (ressources renouvelables distribuées, énergie et eau)"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:166
+#: tola/db_translations.py:162
msgid "Financial Services"
msgstr "Services financiers"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:168
+#: tola/db_translations.py:164
msgid "Indirect"
msgstr "Indirect"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:170
+#: tola/db_translations.py:166
msgid "Infrastructure (non - WASH, non - energy)"
msgstr "Infrastructure (ne se rapporte ni à WASH ni à l’énergie)"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:172
+#: tola/db_translations.py:168
msgid "Nutrition"
msgstr "Nutrition"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:174
+#: tola/db_translations.py:170
msgid "Peace, Governance and Partnership"
msgstr "Paix, gouvernance, et partenariats"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.py:176
+#: tola/db_translations.py:172
msgid "Public Health (non - nutrition, non - WASH)"
msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
@@ -4508,26 +4731,11 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
msgid "Form Errors"
msgstr "Erreurs de formulaire"
-#: tola/util.py:162
-msgid "Program does not have a GAIT id"
-msgstr "Le programme ne possède pas d’ID GAIT"
-
-#. Translators: There was a network or server error trying to reach the GAIT service
-#: tola/util.py:169
-msgid "There was a problem connecting to the GAIT server."
-msgstr "Un problème est survenu lors de la connexion au serveur GAIT."
-
-#. Translators: A request for {gait_id} to the GAIT server returned no results
-#: tola/util.py:173
-#, python-brace-format
-msgid "The GAIT ID {gait_id} could not be found."
-msgstr "Impossible de trouver l’ID GAIT {gait_id}."
-
-#: tola/views.py:99
+#: tola/views.py:107
msgid "You are not logged in."
msgstr "Vous n’êtes pas connecté."
-#: tola/views.py:143
+#: tola/views.py:151
msgid "Your profile has been updated."
msgstr "Votre profil a été mis à jour."
@@ -4536,351 +4744,458 @@ msgstr "Votre profil a été mis à jour."
msgid "Program list inconsistent with country access"
msgstr "Liste des programmes incompatibles avec l’accès au pays"
-#: tola_management/models.py:106 tola_management/models.py:377
-#: tola_management/models.py:797 tola_management/models.py:854
-#: tola_management/models.py:912
+#: tola_management/models.py:106 tola_management/models.py:386
+#: tola_management/models.py:810 tola_management/models.py:877
+#: tola_management/models.py:939
msgid "Modification date"
msgstr "Date de modification"
-#: tola_management/models.py:110 tola_management/models.py:382
-#: tola_management/models.py:800 tola_management/models.py:857
-#: tola_management/models.py:916
+#: tola_management/models.py:110 tola_management/models.py:391
+#: tola_management/models.py:813 tola_management/models.py:880
+#: tola_management/models.py:943
msgid "Modification type"
msgstr "Type de modification"
-#: tola_management/models.py:132 workflow/models.py:158
+#: tola_management/models.py:128
+msgid "User Management Audit Log"
+msgstr ""
+
+#: tola_management/models.py:129
+msgid "User Management Audit Logs"
+msgstr ""
+
+#: tola_management/models.py:134 workflow/models.py:180
msgid "Title"
msgstr "Titre"
-#: tola_management/models.py:134
+#: tola_management/models.py:136
msgid "First name"
msgstr "Prénom"
-#: tola_management/models.py:135
+#: tola_management/models.py:137
msgid "Last name"
msgstr "Nom"
-#: tola_management/models.py:136
+#: tola_management/models.py:138
msgid "Username"
msgstr "Nom d’utilisateur"
#. Translators: Form field capturing how a user wants to be called (e.g. Marsha or Mr. Wiggles).
-#: tola_management/models.py:138
+#: tola_management/models.py:140
msgid "Mode of address"
msgstr "Prénom d’usage"
#. Translators: Form field capturing whether a user prefers to be contacted by phone, email, etc...
-#: tola_management/models.py:140 tola_management/models.py:869
+#: tola_management/models.py:142 tola_management/models.py:896
msgid "Mode of contact"
msgstr "Moyen de communication"
-#: tola_management/models.py:141
+#: tola_management/models.py:143
msgid "Phone number"
msgstr "Numéro de téléphone"
-#: tola_management/models.py:142
+#: tola_management/models.py:144
msgid "Email"
msgstr "Adresse e-mail"
-#: tola_management/models.py:143 tola_management/programadmin.py:113
-#: workflow/models.py:165
+#: tola_management/models.py:145 tola_management/programadmin.py:117
+#: workflow/models.py:86 workflow/models.py:187
msgid "Organization"
msgstr "Organisation"
-#: tola_management/models.py:144 tola_management/models.py:870
+#: tola_management/models.py:146 tola_management/models.py:897
msgid "Is active"
msgstr "Actif"
-#: tola_management/models.py:150
+#: tola_management/models.py:152
msgid "User created"
msgstr "Utilisateur créé"
-#: tola_management/models.py:151
+#: tola_management/models.py:153
msgid "Roles and permissions updated"
msgstr "Rôles et autorisations mis à jour"
-#: tola_management/models.py:152
+#: tola_management/models.py:154
msgid "User profile updated"
msgstr "Profil de l’utilisateur mis à jour"
-#: tola_management/models.py:185
+#: tola_management/models.py:187
msgid "Base Country"
msgstr "Pays principal"
#. Translators: this is an alternative to picking a reason from a dropdown
-#: tola_management/models.py:323
+#: tola_management/models.py:325
msgid "Other (please specify)"
msgstr "Autre (veuillez préciser)"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:325
+#: tola_management/models.py:327
msgid "Adaptive management"
msgstr "Gestion adaptative"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:327
+#: tola_management/models.py:329
msgid "Budget realignment"
msgstr "Réalignement du budget"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:329
+#: tola_management/models.py:331
msgid "Changes in context"
msgstr "Changements en contexte"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:331
+#: tola_management/models.py:333
msgid "Costed extension"
msgstr "Extension chiffrée"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:333
+#: tola_management/models.py:335
msgid "COVID-19"
msgstr "COVID-19"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:335
+#: tola_management/models.py:337
msgid "Donor requirement"
msgstr "Exigence du donateur"
#. Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
-#: tola_management/models.py:337
+#: tola_management/models.py:339
msgid "Implementation delays"
msgstr "Retards de mise en œuvre"
-#: tola_management/models.py:393
+#: tola_management/models.py:342
+msgid "Audit Log Rationale Selection"
+msgstr ""
+
+#: tola_management/models.py:343
+msgid "Audit Log Rationale Selections"
+msgstr ""
+
+#: tola_management/models.py:398
+#, fuzzy
+#| msgid "Program updated"
+msgid "Program Audit Log"
+msgstr "Programme mis à jour"
+
+#: tola_management/models.py:399
+#, fuzzy
+#| msgid "Program details"
+msgid "Program Audit Logs"
+msgstr "Détails du programme"
+
+#: tola_management/models.py:406
msgid "Unit of measure type"
msgstr "Type d’unité de mesure"
-#: tola_management/models.py:394
+#: tola_management/models.py:407
msgid "Is cumulative"
msgstr "Cumulatif"
-#: tola_management/models.py:399
+#: tola_management/models.py:412
msgid "Baseline N/A"
msgstr "Mesure de base N/A"
#. Translators: A Noun. The URL or computer file path where a document can be found.
-#: tola_management/models.py:401
+#: tola_management/models.py:414
msgid "Evidence link"
msgstr "Lien de la preuve"
#. Translators: A Noun. The user-friendly name of the evidence document they are attaching to a result.
-#: tola_management/models.py:403
+#: tola_management/models.py:416
msgid "Evidence record name"
msgstr "Nom de la preuve"
#. Translators: A Noun. A list of high-level categories that a program's activities fall into (e.g. food security or humanitarian response)
-#: tola_management/models.py:408
+#: tola_management/models.py:421 tola_management/models.py:834
msgid "Outcome themes"
msgstr "Thèmes de résultats"
-#: tola_management/models.py:423
+#: tola_management/models.py:436
msgid "Indicator created"
msgstr "Indicateur créé"
#. Translators: this is a value in a change log that tells a user what type of change was made. This value indicates that there was a succesful upload.
-#: tola_management/models.py:425
+#: tola_management/models.py:438
msgid "Indicator imported"
msgstr "Indicateur importé"
#. Translators: this is a value in a change log that tells a user what type of change was made. This value indicates that an attempt was made to upload a template but doesn't specify whether the upload was successful or not
-#: tola_management/models.py:427
+#: tola_management/models.py:440
msgid "Indicator import template uploaded"
msgstr "Le modèle d’importation de l’indicateur a été chargé"
-#: tola_management/models.py:428
+#: tola_management/models.py:441
msgid "Indicator changed"
msgstr "Indicateur modifié"
-#: tola_management/models.py:429
+#: tola_management/models.py:442
msgid "Indicator deleted"
msgstr "Indicateur supprimé"
-#: tola_management/models.py:430
+#: tola_management/models.py:443
msgid "Result changed"
msgstr "Résultat modifié"
-#: tola_management/models.py:431
+#: tola_management/models.py:444
msgid "Result created"
msgstr "Résultat créé"
#. Translators: this is a value in a change log that tells a user what type of change was made.
-#: tola_management/models.py:433
+#: tola_management/models.py:446
msgid "Participant count changed"
msgstr "Nombre de participants modifié"
#. Translators: this is a value in a change log that tells a user what type of change was made.
-#: tola_management/models.py:435
+#: tola_management/models.py:448
msgid "Participant count created"
msgstr "Nombre de participants créés"
-#: tola_management/models.py:436
+#: tola_management/models.py:449
msgid "Program dates changed"
msgstr "Dates du programme modifiées"
-#: tola_management/models.py:437
+#: tola_management/models.py:450
msgid "Result level changed"
msgstr "Niveau de résultat modifié"
-#: tola_management/models.py:448
+#: tola_management/models.py:461
msgid "Percentage"
msgstr "Pourcentage (%)"
-#: tola_management/models.py:807
+#: tola_management/models.py:818
+msgid "Program Admin Audit Log"
+msgstr ""
+
+#: tola_management/models.py:819
+#, fuzzy
+#| msgid "Programs and Roles"
+msgid "Program Admin Audit Logs"
+msgstr "Programmes et rôles"
+
+#: tola_management/models.py:824 workflow/models.py:862
msgid "GAIT ID"
msgstr "ID GAIT"
-#: tola_management/models.py:809
+#: tola_management/models.py:825
+msgid "Program name"
+msgstr "Nom du programme"
+
+#: tola_management/models.py:826
msgid "Funding status"
msgstr "Statut de financement"
-#: tola_management/models.py:810
+#: tola_management/models.py:827
msgid "Cost center"
msgstr "Centre de coût"
-#: tola_management/models.py:812 tola_management/models.py:871
+#: tola_management/models.py:829 tola_management/models.py:898
+#: workflow/models.py:39
msgid "Sectors"
msgstr "Secteurs"
-#: tola_management/models.py:819
+#: tola_management/models.py:832
+msgid "Program start date"
+msgstr "Date de début du programme"
+
+#: tola_management/models.py:833
+msgid "Program end date"
+msgstr "Date de fin du programme"
+
+#: tola_management/models.py:835
+msgid "Donors"
+msgstr "Bailleurs de fonds"
+
+#: tola_management/models.py:836
+msgid "Fund codes"
+msgstr "Code du fonds"
+
+#: tola_management/models.py:842
msgid "Program created"
msgstr "Programme créé"
-#: tola_management/models.py:820
+#: tola_management/models.py:843
msgid "Program updated"
msgstr "Programme mis à jour"
-#: tola_management/models.py:865
+#: tola_management/models.py:885
+#, fuzzy
+#| msgid "Organization updated"
+msgid "Organization Admin Audit Log"
+msgstr "Société mise à jour"
+
+#: tola_management/models.py:886
+#, fuzzy
+#| msgid "Organization updated"
+msgid "Organization Admin Audit Logs"
+msgstr "Société mise à jour"
+
+#: tola_management/models.py:892
msgid "Primary address"
msgstr "Adresse principale"
-#: tola_management/models.py:866
+#: tola_management/models.py:893
msgid "Primary contact name"
msgstr "Nom du contact principal"
-#: tola_management/models.py:867
+#: tola_management/models.py:894
msgid "Primary contact email"
msgstr "Adresse e-mail du contact principal"
-#: tola_management/models.py:868
+#: tola_management/models.py:895
msgid "Primary contact phone"
msgstr "Numéro de téléphone du contact principal"
-#: tola_management/models.py:877
+#: tola_management/models.py:904
msgid "Organization created"
msgstr "Société créée"
-#: tola_management/models.py:878
+#: tola_management/models.py:905
msgid "Organization updated"
msgstr "Société mise à jour"
+#: tola_management/models.py:948
+msgid "Country Admin Audit Log"
+msgstr ""
+
+#: tola_management/models.py:949
+msgid "Country Admin Audit Logs"
+msgstr ""
+
#. Translators: Heading for list of disaggregation categories in a particular disaggregation type.
-#: tola_management/models.py:928
+#: tola_management/models.py:959
msgid "Disaggregation categories"
msgstr "Catégories de désagrégation"
+#: tola_management/models.py:964
+msgid "Country name"
+msgstr "Nom de pays"
+
+#: tola_management/models.py:965
+msgid "Country code"
+msgstr "Code de pays"
+
#. Translators: Heading for data that tracks when a data disaggregation as been created for a country
-#: tola_management/models.py:939
+#: tola_management/models.py:972
msgid "Country disaggregation created"
msgstr "Désagrégation au niveau du pays créée"
#. Translators: Heading for data that tracks when a data disaggregation assigned to a country has been changed.
-#: tola_management/models.py:941
+#: tola_management/models.py:974
msgid "Country disaggregation updated"
msgstr "Désagrégation au niveau du pays mise à jour"
#. Translators: Heading for data that tracks when a data disaggregation assigned to a country has been deleted.
-#: tola_management/models.py:943
+#: tola_management/models.py:976
msgid "Country disaggregation deleted"
msgstr "Désagrégation au niveau du pays supprimée"
#. Translators: Heading for data that tracks when a data disaggregation assigned to a country has been archived.
-#: tola_management/models.py:945
+#: tola_management/models.py:978
msgid "Country disaggregation archived"
msgstr "Désagrégation au niveau du pays archivée"
#. Translators: Heading for data that tracks when a data disaggregation assigned to a country has been restored.
-#: tola_management/models.py:947
+#: tola_management/models.py:980
msgid "Country disaggregation unarchived"
msgstr "Désagrégation au niveau du pays non archivée"
#. Translators: Heading for data that tracks when the categories of a data disaggregation that has been assigned to country have been updated.
-#: tola_management/models.py:949
+#: tola_management/models.py:982
msgid "Country disaggregation categories updated"
msgstr "Catégories de désagrégation au niveau du pays mises à jour"
+#: tola_management/models.py:983
+msgid "Country created"
+msgstr "Pays créé"
+
#. Translators: The date and time of the change made to a piece of data
-#: tola_management/programadmin.py:107
+#: tola_management/programadmin.py:111
msgid "Date and time"
msgstr "Date et heure"
#. Translators: The name of the user who carried out an action
-#: tola_management/programadmin.py:112 workflow/models.py:162
+#: tola_management/programadmin.py:116 workflow/models.py:184
msgid "User"
msgstr "Utilisateur"
#. Translators: Part of change log, indicates the type of change being made to a particular piece of data
-#: tola_management/programadmin.py:115
+#: tola_management/programadmin.py:119
msgid "Change type"
msgstr "Type de modification"
#. Translators: Part of change log, shows what the data looked like before the changes
-#: tola_management/programadmin.py:117
+#: tola_management/programadmin.py:121
msgid "Previous entry"
msgstr "Entrée précédente"
#. Translators: Part of change log, shows what the data looks like after the changes
-#: tola_management/programadmin.py:119
+#: tola_management/programadmin.py:123
msgid "New entry"
msgstr "Nouvelle entrée"
#. Translators: Part of change log, reason for the change as entered by the user
-#: tola_management/programadmin.py:121
+#: tola_management/programadmin.py:125
msgid "Rationale"
msgstr "Justification"
-#: tola_management/views.py:275
+#: tola_management/programadmin.py:314
+msgid "The program start date may not be after the program end date."
+msgstr ""
+"La date de début du programme ne doit pas être postérieure à la date de fin "
+"du programme."
+
+#: tola_management/programadmin.py:316
+msgid "The program end date may not be before the program start date."
+msgstr ""
+"La date de fin du programme ne doit pas être antérieure à la date de début "
+"du programme."
+
+#: tola_management/programadmin.py:339
+msgid "Duplicate GAIT ID numbers are not allowed."
+msgstr "Les doublons de numéros d'identification GAIT ne sont pas autorisés."
+
+#: tola_management/views.py:292
msgid "Mercy Corps - Tola New Account Registration"
msgstr "Enregistrement d’un nouveau compte Mercy Corps - Tola"
#. Translators: Page title for an administration page managing users of the application
-#: tola_management/views.py:294
+#: tola_management/views.py:311
msgid "Admin: Users"
msgstr "Administrateur : Utilisateurs"
#. Translators: Page title for an administration page managing organizations in the application
-#: tola_management/views.py:299
+#: tola_management/views.py:316
msgid "Admin: Organizations"
msgstr "Administrateur : Organisations"
#. Translators: Page title for an administration page managing Programs using the application
-#: tola_management/views.py:304
+#: tola_management/views.py:321
msgid "Admin: Programs"
msgstr "Administrateur : Programmes"
#. Translators: Page title for an administration page managing countries represented in the application
-#: tola_management/views.py:309
+#: tola_management/views.py:326
msgid "Admin: Countries"
msgstr "Administrateur : Pays"
#. Translators: Error message given when an administrator tries to save a username that is already taken
-#: tola_management/views.py:394 tola_management/views.py:406
+#: tola_management/views.py:411 tola_management/views.py:423
msgid "A user account with this username already exists."
msgstr "Un compte utilisateur avec ce nom d’utilisateur existe déjà."
#. Translators: Error message given when an administrator tries to save a email that is already taken
-#: tola_management/views.py:398 tola_management/views.py:410
+#: tola_management/views.py:415 tola_management/views.py:427
msgid "A user account with this email address already exists."
msgstr "Un compte utilisateur avec cette adresse e-mail existe déjà."
-#: tola_management/views.py:418
+#: tola_management/views.py:435
msgid ""
"Non-Mercy Corps emails should not be used with the Mercy Corps organization."
msgstr ""
"Les adresses e-mails qui ne sont pas relatives à Mercy Corps ne doivent pas "
"être utilisées avec l’organisation Mercy Corps."
-#: tola_management/views.py:424
+#: tola_management/views.py:441
msgid ""
"A user account with this email address already exists. Mercy Corps accounts "
"are managed by Okta. Mercy Corps employees should log in using their Okta "
@@ -4893,7 +5208,7 @@ msgstr ""
#. Translators: Error message given when an administrator tries to save a bad combination of
#. organization and email
#. Translators: Error message given when an administrator tries to save an invalid username
-#: tola_management/views.py:430 tola_management/views.py:435
+#: tola_management/views.py:447 tola_management/views.py:452
msgid ""
"Mercy Corps accounts are managed by Okta. Mercy Corps employees should log "
"in using their Okta username and password."
@@ -4902,12 +5217,12 @@ msgstr ""
"doivent se connecter en utilisant leur nom d’utilisateur et leur mot de "
"passe Okta."
-#: tola_management/views.py:448
+#: tola_management/views.py:465
msgid "Only superusers can create Mercy Corps staff profiles."
msgstr ""
"Seuls les super-utilisateurs peuvent créer des profils d’équipe Mercy Corps."
-#: tola_management/views.py:487
+#: tola_management/views.py:504
msgid "Only superusers can edit Mercy Corps staff profiles."
msgstr ""
"Seuls les super-utilisateurs peuvent modifier des profils d’équipe Mercy "
@@ -4973,7 +5288,7 @@ msgstr "Alphabétisation"
msgid "Demographic Info Data Source"
msgstr "Source de données d’informations démographiques"
-#: workflow/forms.py:181 workflow/models.py:861
+#: workflow/forms.py:181 workflow/models.py:978
msgid "Date of First Contact"
msgstr "Date du premier contact"
@@ -4981,419 +5296,501 @@ msgstr "Date du premier contact"
msgid "Search"
msgstr "Rechercher"
-#: workflow/models.py:34
+#: workflow/models.py:33 workflow/models.py:55
msgid "Sector Name"
msgstr "Nom du secteur"
-#: workflow/models.py:56
+#: workflow/models.py:60 workflow/models.py:534
+#, fuzzy
+#| msgid "Sector"
+msgid "IDAA Sector"
+msgstr "Secteur"
+
+#: workflow/models.py:61
+#, fuzzy
+#| msgid "Sector"
+msgid "IDAA Sectors"
+msgstr "Secteur"
+
+#: workflow/models.py:70
msgid "Organization Name"
msgstr "Nom de l’organisation"
-#: workflow/models.py:57 workflow/models.py:124
+#: workflow/models.py:71 workflow/models.py:138
msgid "Description/Notes"
msgstr "Description/Notes"
-#: workflow/models.py:58
+#: workflow/models.py:72
msgid "Organization url"
msgstr "URL de l’organisation"
-#: workflow/models.py:62
+#: workflow/models.py:76
msgid "Primary Address"
msgstr "Adresse principale"
-#: workflow/models.py:63
+#: workflow/models.py:77
msgid "Primary Contact Name"
msgstr "Nom du contact principal"
-#: workflow/models.py:64
+#: workflow/models.py:78
msgid "Primary Contact Email"
msgstr "Adresse e-mail du contact principal"
-#: workflow/models.py:65
+#: workflow/models.py:79
msgid "Primary Contact Phone"
msgstr "Numéro de téléphone du contact principal"
-#: workflow/models.py:66
+#: workflow/models.py:80
msgid "Primary Mode of Contact"
msgstr "Moyen de communication principal"
-#: workflow/models.py:111
+#: workflow/models.py:121
msgid "Region Name"
msgstr "Nom de la région"
-#: workflow/models.py:119
+#: workflow/models.py:125
+#, fuzzy
+#| msgid "Regions"
+msgid "Region"
+msgstr "Régions"
+
+#: workflow/models.py:126
+msgid "Regions"
+msgstr "Régions"
+
+#: workflow/models.py:133
msgid "Country Name"
msgstr "Nom du pays"
-#: workflow/models.py:121
+#: workflow/models.py:135
msgid "organization"
msgstr "organisation"
-#: workflow/models.py:123
+#: workflow/models.py:137
msgid "2 Letter Country Code"
msgstr "Code de pays à 2 lettres"
-#: workflow/models.py:125
+#: workflow/models.py:139
msgid "Latitude"
msgstr "Latitude"
-#: workflow/models.py:126
+#: workflow/models.py:140
msgid "Longitude"
msgstr "Longitude"
-#: workflow/models.py:127
+#: workflow/models.py:141
msgid "Zoom"
msgstr "Zoom"
-#: workflow/models.py:159
+#: workflow/models.py:181
msgid "Given Name"
msgstr "Prénom"
-#: workflow/models.py:160
+#: workflow/models.py:182
msgid "Employee Number"
msgstr "Numéro d’employé"
-#: workflow/models.py:171
+#: workflow/models.py:193
msgid "Active Country"
msgstr "Pays actif"
-#: workflow/models.py:174
+#: workflow/models.py:196
msgid "Accessible Countries"
msgstr "Pays accessibles"
-#: workflow/models.py:189
+#: workflow/models.py:211
msgid "Tola User"
msgstr "Utilisateur de Tola"
-#: workflow/models.py:344
+#: workflow/models.py:212
+#, fuzzy
+#| msgid "Tola User"
+msgid "Tola Users"
+msgstr "Utilisateur de Tola"
+
+#: workflow/models.py:367
msgid "No Organization for this user"
msgstr "Aucune Organisation pour cet utilisateur"
-#: workflow/models.py:398
+#: workflow/models.py:421
msgid "User (all programs)"
msgstr "Utilisateur (tous les programmes)"
-#: workflow/models.py:399
+#: workflow/models.py:422
msgid "Basic Admin (all programs)"
msgstr "Administrateur de base (tous les programmes)"
-#: workflow/models.py:410
+#: workflow/models.py:433
msgid "Only Mercy Corps users can be given country-level access"
msgstr ""
"Seuls les utilisateurs Mercy Corps peuvent bénéficier d’un accès au pays"
-#: workflow/models.py:519
-msgid "ID"
-msgstr "Identifiant"
+#: workflow/models.py:524
+#, fuzzy
+#| msgid "GAIT ID"
+msgid "Legacy GAIT ID"
+msgstr "ID GAIT"
-#: workflow/models.py:520
+#: workflow/models.py:525
msgid "External program id"
msgstr "ID de programme externe"
-#: workflow/models.py:521
+#: workflow/models.py:526
msgid "Program Name"
msgstr "Nom du programme"
-#: workflow/models.py:522
+#: workflow/models.py:527
msgid "Funding Status"
msgstr "Statut de financement"
-#: workflow/models.py:523
+#: workflow/models.py:528 workflow/models.py:887
msgid "Fund Code"
msgstr "Code du fonds"
-#: workflow/models.py:524
+#: workflow/models.py:529
msgid "Program Description"
msgstr "Description du programme"
-#: workflow/models.py:528
+#: workflow/models.py:543
msgid "Enable Approval Authority"
msgstr "Activer l’autorité d’approbation"
-#: workflow/models.py:537
+#: workflow/models.py:552
msgid "Enable Public Dashboard"
msgstr "Activer le tableau de bord public"
-#: workflow/models.py:538
+#: workflow/models.py:553
msgid "Program Start Date"
msgstr "Date de début du programme"
-#: workflow/models.py:539
+#: workflow/models.py:554
msgid "Program End Date"
msgstr "Date de fin du programme"
-#: workflow/models.py:540
+#: workflow/models.py:555
msgid "Reporting Period Start Date"
msgstr "Date de début de la période de déclaration"
-#: workflow/models.py:541
+#: workflow/models.py:556
msgid "Reporting Period End Date"
msgstr "Date de fin de la période de déclaration"
#. Translators: This is an option that users can select to use the new "results framework" option to organize their indicators.
-#: workflow/models.py:544
+#: workflow/models.py:559
msgid "Auto-number indicators according to the results framework"
msgstr ""
"Numéroter automatiquement les indicateurs d’après le cadre de résultats"
-#: workflow/models.py:548
+#: workflow/models.py:563
msgid "Group indicators according to the results framework"
msgstr "Regrouper les indicateurs selon le cadre de résultats"
#. Translators: this labels a filter to sort indicators, for example, "by Outcome chain":
#. Translators: see note for %(tier)s chain, this is the same thing
-#: workflow/models.py:743 workflow/serializers.py:204
+#: workflow/models.py:788 workflow/serializers.py:204
#, python-format
msgid "by %(level_name)s chain"
msgstr "par chaîne %(level_name)s"
#. Translators: this labels a filter to sort indicators, for example, "by Outcome chain":
-#: workflow/models.py:754
+#: workflow/models.py:799
#, python-format
msgid "%(level_name)s chains"
msgstr "chaînes de %(level_name)s"
+#: workflow/models.py:839
+#, fuzzy
+#| msgid "Program created"
+msgid "Program Discrepancy"
+msgstr "Programme créé"
+
+#: workflow/models.py:840
+#, fuzzy
+#| msgid "Program details"
+msgid "Program Discrepancies"
+msgstr "Détails du programme"
+
+#: workflow/models.py:845 workflow/models.py:849
+#, fuzzy
+#| msgid "None"
+msgid "(None)"
+msgstr "Aucun"
+
+#: workflow/models.py:863
+#, fuzzy
+#| msgid "GAIT ID"
+msgid "GAIT IDs"
+msgstr "ID GAIT"
+
+#: workflow/models.py:888
+msgid "Fund Codes"
+msgstr "Code du fonds"
+
#. Translators: Refers to a user permission role with limited access to view data only
-#: workflow/models.py:773
+#: workflow/models.py:896
msgid "Low (view only)"
msgstr "Faible (visionnage uniquement)"
#. Translators: Refers to a user permission role with limited access to add or edit result data
-#: workflow/models.py:775
+#: workflow/models.py:898
msgid "Medium (add and edit results)"
msgstr "Moyen (ajout et modification des résultats)"
#. Translators: Refers to a user permission role with access to edit any data
-#: workflow/models.py:777
+#: workflow/models.py:900
msgid "High (edit anything)"
msgstr "Élevé (modification de n’importe quelle donnée)"
-#: workflow/models.py:799 workflow/models.py:804
+#: workflow/models.py:919 workflow/models.py:920
+#, fuzzy
+#| msgid "Programs"
+msgid "Program Access"
+msgstr "Programmes"
+
+#: workflow/models.py:924 workflow/models.py:929
msgid "Profile Type"
msgstr "Type de profil"
-#: workflow/models.py:826
+#: workflow/models.py:930
+#, fuzzy
+#| msgid "Profile Type"
+msgid "Profile Types"
+msgstr "Type de profil"
+
+#: workflow/models.py:948
msgid "Land Classification"
msgstr "Classification des terres"
-#: workflow/models.py:826
+#: workflow/models.py:948
msgid "Rural, Urban, Peri-Urban"
msgstr "Rural, Urbain, Périurbain"
-#: workflow/models.py:831
+#: workflow/models.py:953
msgid "Land Type"
msgstr "Type de terrain"
-#: workflow/models.py:858
+#: workflow/models.py:975
msgid "Site Name"
msgstr "Nom du site"
-#: workflow/models.py:860
+#: workflow/models.py:977
msgid "Contact Name"
msgstr "Nom du contact"
-#: workflow/models.py:862
+#: workflow/models.py:979
msgid "Contact Number"
msgstr "Numéro de contact"
-#: workflow/models.py:863
+#: workflow/models.py:980
msgid "Number of Members"
msgstr "Nombre de membres"
-#: workflow/models.py:864
+#: workflow/models.py:981
msgid "Data Source"
msgstr "Source de données"
-#: workflow/models.py:865
+#: workflow/models.py:982
msgid "Total # Households"
msgstr "Nombre total de ménages"
-#: workflow/models.py:866
+#: workflow/models.py:983
msgid "Average Household Size"
msgstr "Taille moyenne du ménage"
-#: workflow/models.py:867
+#: workflow/models.py:984
msgid "Male age 0-5"
msgstr "Homme de 0-5 ans"
-#: workflow/models.py:868
+#: workflow/models.py:985
msgid "Female age 0-5"
msgstr "Femme de 0-5 ans"
-#: workflow/models.py:869
+#: workflow/models.py:986
msgid "Male age 6-9"
msgstr "Homme de 6-9 ans"
-#: workflow/models.py:870
+#: workflow/models.py:987
msgid "Female age 6-9"
msgstr "Femme de 6-9 ans"
-#: workflow/models.py:871
+#: workflow/models.py:988
msgid "Male age 10-14"
msgstr "Homme de 10-14 ans"
-#: workflow/models.py:872
+#: workflow/models.py:989
msgid "Female age 10-14"
msgstr "Femme de 10-14 ans"
-#: workflow/models.py:873
+#: workflow/models.py:990
msgid "Male age 15-19"
msgstr "Homme de 15-19 ans"
-#: workflow/models.py:874
+#: workflow/models.py:991
msgid "Female age 15-19"
msgstr "Femme de 15-19 ans"
-#: workflow/models.py:875
+#: workflow/models.py:992
msgid "Male age 20-24"
msgstr "Homme de 20-24 ans"
-#: workflow/models.py:876
+#: workflow/models.py:993
msgid "Female age 20-24"
msgstr "Femme de 20-24 ans"
-#: workflow/models.py:877
+#: workflow/models.py:994
msgid "Male age 25-34"
msgstr "Homme de 25-34 ans"
-#: workflow/models.py:878
+#: workflow/models.py:995
msgid "Female age 25-34"
msgstr "Femme de 25-34 ans"
-#: workflow/models.py:879
+#: workflow/models.py:996
msgid "Male age 35-49"
msgstr "Homme de 35-49 ans"
-#: workflow/models.py:880
+#: workflow/models.py:997
msgid "Female age 35-49"
msgstr "Femme de 35-49 ans"
-#: workflow/models.py:881
+#: workflow/models.py:998
msgid "Male Over 50"
msgstr "Homme de plus de 50 ans"
-#: workflow/models.py:882
+#: workflow/models.py:999
msgid "Female Over 50"
msgstr "Femme de plus de 50 ans"
-#: workflow/models.py:883
+#: workflow/models.py:1000
msgid "Total population"
msgstr "Population totale"
-#: workflow/models.py:884
+#: workflow/models.py:1001
msgid "Total male"
msgstr "Total masculin"
-#: workflow/models.py:885
+#: workflow/models.py:1002
msgid "Total female"
msgstr "Total féminin"
-#: workflow/models.py:887
+#: workflow/models.py:1004
msgid "Classify land"
msgstr "Classer les terres"
-#: workflow/models.py:888
+#: workflow/models.py:1005
msgid "Total Land"
msgstr "Total des terres"
-#: workflow/models.py:890
+#: workflow/models.py:1007
msgid "Total Agricultural Land"
msgstr "Total terres agricoles"
-#: workflow/models.py:892
+#: workflow/models.py:1009
msgid "Total Rain-fed Land"
msgstr "Total des terres irriguées"
-#: workflow/models.py:894
+#: workflow/models.py:1011
msgid "Total Horticultural Land"
msgstr "Total des terres horticoles"
-#: workflow/models.py:895
+#: workflow/models.py:1012
msgid "Total Literate People"
msgstr "Total des personnes alphabètes"
-#: workflow/models.py:896
+#: workflow/models.py:1013
#, python-format
msgid "% of Literate Males"
msgstr "% d’hommes alphabètes"
-#: workflow/models.py:897
+#: workflow/models.py:1014
#, python-format
msgid "% of Literate Females"
msgstr "% de femmes alphabètes"
-#: workflow/models.py:898
+#: workflow/models.py:1015
msgid "Literacy Rate (%)"
msgstr "Taux d’alphabétisation (%)"
-#: workflow/models.py:899
+#: workflow/models.py:1016
msgid "Households Owning Land"
msgstr "Ménages propriétaires de terres"
-#: workflow/models.py:901
+#: workflow/models.py:1018
msgid "Average Landholding Size"
msgstr "Taille moyenne des terres"
-#: workflow/models.py:902
+#: workflow/models.py:1019
msgid "In hectares/jeribs"
msgstr "En hectares/jeribs"
-#: workflow/models.py:904
+#: workflow/models.py:1021
msgid "Households Owning Livestock"
msgstr "Ménages possédant du bétail"
-#: workflow/models.py:906
+#: workflow/models.py:1023
msgid "Animal Types"
msgstr "Types d’animaux"
-#: workflow/models.py:906
+#: workflow/models.py:1023
msgid "List Animal Types"
msgstr "Liste des types d’animaux"
-#: workflow/models.py:909
+#: workflow/models.py:1026
msgid "Latitude (Decimal Coordinates)"
msgstr "Latitude (coordonnées décimales)"
-#: workflow/models.py:911
+#: workflow/models.py:1028
msgid "Longitude (Decimal Coordinates)"
msgstr "Longitude (coordonnées décimales)"
-#: workflow/models.py:912
+#: workflow/models.py:1029
msgid "Site Active"
msgstr "Site actif"
-#: workflow/models.py:913
+#: workflow/models.py:1030
msgid "Approval"
msgstr "Approbation"
-#: workflow/models.py:913
+#: workflow/models.py:1030
msgid "in progress"
msgstr "en cours"
-#: workflow/models.py:915
+#: workflow/models.py:1032
msgid "This is the Provincial Line Manager"
msgstr "Ceci est le gestionnaire de ligne provincial"
-#: workflow/models.py:916
+#: workflow/models.py:1033
msgid "Approved by"
msgstr "Approuvé par"
-#: workflow/models.py:918
+#: workflow/models.py:1035
msgid "This is the originator"
msgstr "C’est l’auteur"
-#: workflow/models.py:919
+#: workflow/models.py:1036
msgid "Filled by"
msgstr "Rempli par"
-#: workflow/models.py:921
+#: workflow/models.py:1038
msgid "This should be GIS Manager"
msgstr "Cela devrait être GIS Manager"
-#: workflow/models.py:922
+#: workflow/models.py:1039
msgid "Location verified by"
msgstr "Lieu vérifié par"
+#: workflow/models.py:1048
+#, fuzzy
+#| msgid "Profile"
+msgid "Site Profile"
+msgstr "Profil"
+
+#: workflow/models.py:1049
+#, fuzzy
+#| msgid "Site Projects"
+msgid "Site Profiles"
+msgstr "Projets de site"
+
#. Translators: This labels how a list of levels is ordered. Levels are part of a hierarchy and belong to one of ~six tiers. Grouping by level means that Levels on the same tier but on different branches are gropued together. Grouping by tier chain means levels are displayed with other levels in their same branch, as part of the natural hierarchy.
#: workflow/serializers_new/base_program_serializers.py:194
#, python-format
@@ -5421,11 +5818,56 @@ msgstr "Rapport TVA IPTT"
msgid "IPTT TvA full program report"
msgstr "Rapport IPTT relatif à la totalité de la TVA du programme"
-#: workflow/views.py:314
+#: workflow/serializers_new/program_period_serializer.py:38
+#: workflow/serializers_new/program_period_serializer.py:58
+msgid "Indicator tracking period cannot be outside of the IDAA program dates."
+msgstr ""
+"La période de suivi des indicateurs ne peut pas être en dehors des dates du "
+"programme IDAA."
+
+#: workflow/serializers_new/program_period_serializer.py:41
+msgid "Indicator tracking period must start on the first of the month."
+msgstr "La période de suivi des indicateurs doit commencer le premier du mois."
+
+#: workflow/serializers_new/program_period_serializer.py:47
+msgid ""
+"Indicator tracking period start date cannot be changed while time-aware "
+"periodic targets are in place."
+msgstr ""
+"La date de début de la période de suivi des indicateurs ne peut pas être "
+"modifiée tant que les cibles périodiques temporelles sont en place."
+
+#: workflow/serializers_new/program_period_serializer.py:62
+msgid "Indicator tracking period must end on the last day of the month."
+msgstr ""
+"La période de suivi des indicateurs doit se terminer le dernier jour du mois."
+
+#: workflow/serializers_new/program_period_serializer.py:68
+msgid ""
+"Indicator tracking period must end after the start of the last target period."
+msgstr ""
+"La période de suivi des indicateurs doit se terminer après le début de la "
+"dernière période cible."
+
+#: workflow/serializers_new/program_period_serializer.py:71
+msgid ""
+"Indicator tracking period start date must be before the indicator tracking "
+"period end date."
+msgstr ""
+"La date de début de la période de suivi des indicateurs doit être antérieure "
+"à la date de fin de la période de suivi des indicateurs."
+
+#: workflow/serializers_new/program_period_serializer.py:74
+msgid "You must select an indicator tracking period end date."
+msgstr ""
+"Vous devez sélectionner une date de fin de la période de suivi des "
+"indicateurs."
+
+#: workflow/views.py:345
msgid "Reporting period must start on the first of the month"
msgstr "La période de rapport doit débuter le premier jour du mois"
-#: workflow/views.py:321
+#: workflow/views.py:352
msgid ""
"Reporting period start date cannot be changed while time-aware periodic "
"targets are in place"
@@ -5433,23 +5875,23 @@ msgstr ""
"La date de début de la période de rapport ne peut pas être modifiée lorsque "
"des cibles périodiques à durée limitée sont définies"
-#: workflow/views.py:329
+#: workflow/views.py:360
msgid "Reporting period must end on the last day of the month"
msgstr "La période de rapport doit se terminer le dernier jour du mois"
-#: workflow/views.py:336
+#: workflow/views.py:367
msgid "Reporting period must end after the start of the last target period"
msgstr ""
"La période de rapport doit se terminer après le début de la dernière période "
"cible"
-#: workflow/views.py:342
+#: workflow/views.py:373
msgid "Reporting period must start before reporting period ends"
msgstr ""
"La période de rapport doit débuter avant que la période de rapport ne se "
"termine"
-#: workflow/views.py:347
+#: workflow/views.py:378
msgid "You must select a reporting period end date"
msgstr "Vous devez sélectionner une date de fin de période de rapport"
@@ -5462,6 +5904,80 @@ msgstr "Rechercher"
msgid "City, Country:"
msgstr "Ville, Pays :"
+#~ msgid "The program start date may not be more than 10 years in the past."
+#~ msgstr ""
+#~ "La date de début du programme ne doit pas se situer plus de 10 ans dans "
+#~ "le passé."
+
+#~ msgid "The program end date may not be more than 10 years in the future."
+#~ msgstr ""
+#~ "La date de fin du programme ne doit pas se situer plus de 10 ans dans le "
+#~ "futur."
+
+#~ msgid "Program does not have a GAIT id"
+#~ msgstr "Le programme ne possède pas d’ID GAIT"
+
+#~ msgid "There was a problem connecting to the GAIT server."
+#~ msgstr "Un problème est survenu lors de la connexion au serveur GAIT."
+
+#~ msgid "The GAIT ID {gait_id} could not be found."
+#~ msgstr "Impossible de trouver l’ID GAIT {gait_id}."
+
+#~ msgid ""
+#~ "\n"
+#~ "
\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ "
"
+#~ "span>\n"
+#~ " "
+
+#~ msgid ""
+#~ "\n"
+#~ " \n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " \n"
+#~ " "
+
+#~ msgid ""
+#~ "\n"
+#~ " "
+#~ "span>\n"
+#~ " is
%(program."
+#~ "percent_complete)s%% complete\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " \n"
+#~ " est
%(program.percent_complete)s%"
+#~ "% complète\n"
+#~ " "
+
+#~ msgid "ID"
+#~ msgstr "Identifiant"
+
+#, fuzzy
+#~| msgid ""
+#~| "\n"
+#~| " \n"
+#~| " "
+#~ msgid ""
+#~ "\n"
+#~ " "
+#~ "span>\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " \n"
+#~ " "
+
+#~ msgid "View program in GAIT"
+#~ msgstr "Afficher le programme dans GAIT"
+
#~ msgid "Peace and Stability"
#~ msgstr "Paix et stabilité"
@@ -5644,9 +6160,6 @@ msgstr "Ville, Pays :"
#~ msgid "Target periods"
#~ msgstr "Périodes cibles"
-#~ msgid "Levels"
-#~ msgstr "Niveaux"
-
#~ msgid "Types"
#~ msgstr "Types"
@@ -5662,9 +6175,6 @@ msgstr "Ville, Pays :"
#~ msgid "Standard (TolaData Admins Only)"
#~ msgstr "Standard (Administrateurs TolaData uniquement)"
-#~ msgid "Disaggregation label"
-#~ msgstr "Étiquette de désagrégation"
-
#~ msgid "Disaggregation Value"
#~ msgstr "Valeur de désagrégation"
@@ -5920,9 +6430,6 @@ msgstr "Ville, Pays :"
#~ msgid "No sites yet."
#~ msgstr "Pas encore de site."
-#~ msgid "Site Projects"
-#~ msgstr "Projets de site"
-
#~ msgid "Project Data for %(site)s"
#~ msgstr "Données du projet pour %(site)s small>"
@@ -5977,9 +6484,6 @@ msgstr "Ville, Pays :"
#~ msgid "Contact"
#~ msgstr "Contact"
-#~ msgid "Fund code"
-#~ msgstr "Code du fonds"
-
#~ msgid "User with Approval Authority"
#~ msgstr "Utilisateur avec autorité d’approbation"
@@ -6950,9 +7454,6 @@ msgstr "Ville, Pays :"
#~ msgid "Clear filters"
#~ msgstr "Effacer les filtres"
-#~ msgid "Disaggregations"
-#~ msgstr "Désagrégations"
-
#~ msgid "Hide columns"
#~ msgstr "Masquer les colonnes"
@@ -7023,9 +7524,6 @@ msgstr "Ville, Pays :"
#~ msgid "Find an indicator:"
#~ msgstr "Rechercher un indicateur :"
-#~ msgid "None"
-#~ msgstr "Aucun"
-
#~ msgid "Group indicators:"
#~ msgstr "Regrouper les indicateurs :"
@@ -7236,27 +7734,15 @@ msgstr "Ville, Pays :"
#~ msgid "Result date:"
#~ msgstr "Date de résultat :"
-#~ msgid "Indicators and results"
-#~ msgstr "Indicateurs et résultats"
-
#~ msgid "entries"
#~ msgstr "entrées"
#~ msgid "Strategic Objectives"
#~ msgstr "Objectifs stratégiques"
-#~ msgid "Country Disaggregations"
-#~ msgstr "Désagrégations du pays"
-
#~ msgid "History"
#~ msgstr "Historique"
-#~ msgid "Country name"
-#~ msgstr "Nom du pays"
-
-#~ msgid "Country Code"
-#~ msgstr "Code pays"
-
#~ msgid "Save Changes"
#~ msgstr "Enregistrer les modifications"
@@ -7508,9 +7994,6 @@ msgstr "Ville, Pays :"
#~ msgid "organizations"
#~ msgstr "organisations"
-#~ msgid "Program name"
-#~ msgstr "Nom du programme"
-
#~ msgid "Indicator grouping"
#~ msgstr "Groupement des indicateurs"
@@ -7626,9 +8109,6 @@ msgstr "Ville, Pays :"
#~ msgid "Individual programs only"
#~ msgstr "Programmes individuels uniquement"
-#~ msgid "Programs and Roles"
-#~ msgstr "Programmes et rôles"
-
#~ msgid "More information on Program Roles"
#~ msgstr "En savoir plus sur les rôles de programmes"
@@ -7656,9 +8136,6 @@ msgstr "Ville, Pays :"
#~ msgid "Verification email send failed"
#~ msgstr "Échec de l’envoi de l’e-mail de vérification"
-#~ msgid "Regions"
-#~ msgstr "Régions"
-
#~ msgid "Find a User"
#~ msgstr "Rechercher un utilisateur"
@@ -7732,9 +8209,6 @@ msgstr "Ville, Pays :"
#~ "Cette option est conseillée pour les désagrégations nécessaires aux "
#~ "programmes dans un pays, peu importe le secteur."
-#~ msgid "Disaggregated values"
-#~ msgstr "Valeurs désagrégées"
-
#~ msgid "%s and sub-levels: %s"
#~ msgstr "%s et sous-niveau: %s"
diff --git a/tola/locale/fr/LC_MESSAGES/djangojs.mo b/tola/locale/fr/LC_MESSAGES/djangojs.mo
index e8aef6aad..62cf60f56 100644
Binary files a/tola/locale/fr/LC_MESSAGES/djangojs.mo and b/tola/locale/fr/LC_MESSAGES/djangojs.mo differ
diff --git a/tola/locale/fr/LC_MESSAGES/djangojs.po b/tola/locale/fr/LC_MESSAGES/djangojs.po
index 09a1c0e90..c47317aab 100644
--- a/tola/locale/fr/LC_MESSAGES/djangojs.po
+++ b/tola/locale/fr/LC_MESSAGES/djangojs.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-05-24 10:03-0700\n"
-"PO-Revision-Date: 2022-05-18 11:47-0400\n"
+"POT-Creation-Date: 2022-10-17 09:49-0700\n"
+"PO-Revision-Date: 2022-10-17 14:21-0400\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
@@ -11,14 +11,22 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Poedit 3.0.1\n"
+"X-Generator: Poedit 3.1.1\n"
#. Translators: This is the file name of an Excel template that will be used for batch imports
-#: js/apiv2.js:139 js/apiv2.js:172
+#: js/apiv2.js:152 js/apiv2.js:185
msgid "Import indicators.xlsx"
msgstr "Import indicators.xlsx"
-#: js/base.js:383 js/base.js:384
+#: js/base.js:17 js/pages/program_page/components/program_period.js:437
+msgid "Program period"
+msgstr "Période du programme"
+
+#: js/base.js:23
+msgid "Set the indicator tracking start and end dates."
+msgstr "Définissez les dates de début et de fin du suivi des indicateurs."
+
+#: js/base.js:402 js/base.js:403
msgid ""
"Your changes will be recorded in a change log. For future reference, please "
"share your reason for these changes."
@@ -27,11 +35,11 @@ msgstr ""
"titre de référence, veuillez partager votre justification pour ces "
"modifications."
-#: js/base.js:385
+#: js/base.js:404
msgid "This action cannot be undone"
msgstr "Cette action est irréversible"
-#: js/base.js:395
+#: js/base.js:414
#, python-format
msgid ""
"Removing this target means that %s result will no longer have targets "
@@ -40,30 +48,30 @@ msgid_plural ""
"Removing this target means that %s results will no longer have targets "
"associated with them."
msgstr[0] ""
-"La suppression de cette cible signifie que %s résultat ne sera plus associé "
-"à des cibles."
+"La suppression de cette cible signifie que %s résultat ne sera plus associé à "
+"des cibles."
msgstr[1] ""
"La suppression de cette cible signifie que %s résultats ne seront plus "
"associés à des cibles."
#. Translators: the header of an alert after an action completed successfully
-#: js/base.js:415
+#: js/base.js:434
msgid "Success"
msgstr "Succès"
#. Translators: the header of an alert where additional warning info is provided
-#: js/base.js:434 js/pages/results_framework/components/level_cards.js:86
+#: js/base.js:453 js/pages/results_framework/components/level_cards.js:86
#: js/pages/results_framework/models.js:635
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:657
#: js/pages/tola_management_pages/country/models.js:438
#: js/pages/tola_management_pages/country/models.js:473
#: js/pages/tola_management_pages/country/models.js:505
-#: js/pages/tola_management_pages/program/models.js:279
+#: js/pages/tola_management_pages/program/models.js:292
msgid "Warning"
msgstr "Attention"
#. Translators: the header of an alert after an action failed for some reason
-#: js/base.js:452
+#: js/base.js:471
msgid "Error"
msgstr "Erreur"
@@ -89,7 +97,7 @@ msgstr ""
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:661
#: js/pages/tola_management_pages/country/models.js:478
#: js/pages/tola_management_pages/country/models.js:510
-#: js/pages/tola_management_pages/program/models.js:283
+#: js/pages/tola_management_pages/program/models.js:296
msgid "Are you sure you want to continue?"
msgstr "Voulez-vous vraiment continuer ?"
@@ -103,7 +111,7 @@ msgstr "Continuer"
#: js/components/ImportIndicatorsPopover.js:419
#: js/components/ImportIndicatorsPopover.js:631
#: js/components/changesetNotice.js:66
-#: js/pages/results_form_PC/resultsFormPC.js:383
+#: js/pages/results_form_PC/resultsFormPC.js:386
#: js/pages/results_framework/components/level_cards.js:578
msgid "Cancel"
msgstr "Annuler"
@@ -171,8 +179,8 @@ msgstr[0] ""
"%s indicateur est prêt à être importé. Voulez-vous finaliser le processus "
"d’importation ? Cette action est irréversible."
msgstr[1] ""
-"%s indicateurs sont prêts à être importés. Voulez-vous finaliser le "
-"processus d’importation ? Cette action est irréversible."
+"%s indicateurs sont prêts à être importés. Voulez-vous finaliser le processus "
+"d’importation ? Cette action est irréversible."
#. Translators: Button to confirm and complete the import process
#: js/components/ImportIndicatorsPopover.js:595
@@ -194,13 +202,11 @@ msgid_plural ""
"%s indicators were successfully imported, but require additional details "
"before results can be submitted."
msgstr[0] ""
-"%s indicateur a bien été importé. Toutefois, des informations "
-"supplémentaires sont nécessaires pour que les résultats puissent être "
-"envoyés."
+"%s indicateur a bien été importé. Toutefois, des informations supplémentaires "
+"sont nécessaires pour que les résultats puissent être envoyés."
msgstr[1] ""
"%s indicateurs ont bien été importés. Toutefois, des informations "
-"supplémentaires sont nécessaires pour que les résultats puissent être "
-"envoyés."
+"supplémentaires sont nécessaires pour que les résultats puissent être envoyés."
#. Translators: Message with the count of indicators that were successfully imported but they require additional details before they can be submitted. Message to the user to close this popover message to see their new imported indicators.
#: js/components/ImportIndicatorsPopover.js:659
@@ -214,9 +220,9 @@ msgid_plural ""
"before results can be submitted. Close this message to view your imported "
"indicators."
msgstr[0] ""
-"%s indicateur a bien été importé. Toutefois, des informations "
-"supplémentaires sont nécessaires pour que les résultats puissent être "
-"envoyés. Fermez ce message pour consulter l’indicateur importé."
+"%s indicateur a bien été importé. Toutefois, des informations supplémentaires "
+"sont nécessaires pour que les résultats puissent être envoyés. Fermez ce "
+"message pour consulter l’indicateur importé."
msgstr[1] ""
"%s indicateurs ont bien été importés. Toutefois, des informations "
"supplémentaires sont nécessaires pour que les résultats puissent être "
@@ -251,16 +257,16 @@ msgid ""
"By default, the template will include 10 or 20 indicator rows per result "
"level. Adjust the numbers if you need more or fewer rows."
msgstr ""
-"Par défaut, le modèle comprend entre 10 et 20 lignes d’indicateurs par "
-"niveau de résultat. Vous pouvez ajouter ou supprimer des lignes en fonction "
-"de vos besoins."
+"Par défaut, le modèle comprend entre 10 et 20 lignes d’indicateurs par niveau "
+"de résultat. Vous pouvez ajouter ou supprimer des lignes en fonction de vos "
+"besoins."
#. Translators: Message to user that we cannot import the their file. This could be caused by the wrong file being selected, or the structure of the file was changed, or the results framework was updated and does not match the template anymore.
#: js/components/ImportIndicatorsPopover.js:912
msgid ""
"We can’t import indicators from this file. This can happen if the wrong file "
-"is selected, the template structure is modified, or the results framework "
-"was updated and no longer matches the template."
+"is selected, the template structure is modified, or the results framework was "
+"updated and no longer matches the template."
msgstr ""
"Impossible d’importer des indicateurs à partir de ce fichier. Cette erreur "
"peut survenir lorsque le fichier sélectionné n’est pas le bon, que la "
@@ -307,6 +313,54 @@ msgstr ""
"Nous ne reconnaissons pas ce type de fichier. Veuillez importer un fichier "
"Excel."
+#: js/components/ReactDatepicker.js:9
+msgid "January"
+msgstr "janvier"
+
+#: js/components/ReactDatepicker.js:10
+msgid "March"
+msgstr "mars"
+
+#: js/components/ReactDatepicker.js:11
+msgid "February"
+msgstr "février"
+
+#: js/components/ReactDatepicker.js:12
+msgid "April"
+msgstr "avril"
+
+#: js/components/ReactDatepicker.js:13
+msgid "May"
+msgstr "mai"
+
+#: js/components/ReactDatepicker.js:14
+msgid "June"
+msgstr "juin"
+
+#: js/components/ReactDatepicker.js:15
+msgid "July"
+msgstr "juillet"
+
+#: js/components/ReactDatepicker.js:16
+msgid "August"
+msgstr "août"
+
+#: js/components/ReactDatepicker.js:17
+msgid "September"
+msgstr "septembre"
+
+#: js/components/ReactDatepicker.js:18
+msgid "October"
+msgstr "octobre"
+
+#: js/components/ReactDatepicker.js:19
+msgid "November"
+msgstr "novembre"
+
+#: js/components/ReactDatepicker.js:20
+msgid "December"
+msgstr "décembre"
+
#. Translators: button label to show the details of all items in a list */}
#. Translators: button label to show the details of all rows in a list */}
#: js/components/actionButtons.js:38
@@ -349,7 +403,7 @@ msgstr "Rôle"
#: js/pages/iptt_quickstart/components/selects.js:22
#: js/pages/iptt_quickstart/components/selects.js:39
#: js/pages/iptt_report/components/sidebar/reportSelect.js:14
-#: js/pages/tola_management_pages/program/views.js:230
+#: js/pages/tola_management_pages/program/views.js:234
msgid "Program"
msgstr "Programme"
@@ -375,7 +429,8 @@ msgstr "Nouvelle entrée"
#. Translators: This is a label for a dropdown that presents several possible justifications for changing a value
#: js/components/changesetNotice.js:19
-#: js/pages/results_form_PC/resultsFormPC.js:273
+#: js/pages/program_page/components/program_period.js:387
+#: js/pages/results_form_PC/resultsFormPC.js:276
#: js/pages/results_framework/components/level_cards.js:404
#: js/pages/tola_management_pages/audit_log/views.js:248
msgid "Reason for change"
@@ -406,6 +461,13 @@ msgstr "sélectionné(s)"
#. Translators: for a dropdown menu with no options checked:
#: js/components/changesetNotice.js:257 js/components/selectWidgets.js:143
#: js/components/selectWidgets.js:148
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:362
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:377
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:384
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:400
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:406
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:421
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:427
msgid "None selected"
msgstr "Aucun sélectionné"
@@ -443,13 +505,13 @@ msgstr "Mesure de mi-parcours et mesure de fin de programme"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: js/constants.js:39 js/pages/iptt_quickstart/models/ipttQSRootStore.js:32
-#: tola/db_translations.js:8
+#: tola/db_translations.js:14
msgid "Annual"
msgstr "Annuel"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: js/constants.js:40 js/pages/iptt_quickstart/models/ipttQSRootStore.js:33
-#: tola/db_translations.js:28
+#: tola/db_translations.js:6
msgid "Semi-annual"
msgstr "Semestriel"
@@ -459,7 +521,7 @@ msgstr "Quadrimestriel"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: js/constants.js:42 js/pages/iptt_quickstart/models/ipttQSRootStore.js:35
-#: tola/db_translations.js:22
+#: tola/db_translations.js:24
msgid "Quarterly"
msgstr "Trimestriel"
@@ -547,8 +609,6 @@ msgid "Impact"
msgstr "Impact"
#: js/level_utils.js:29 js/level_utils.js:45 js/level_utils.js:53
-#, fuzzy
-#| msgid "Input"
msgid "Input"
msgstr "Contribution"
@@ -568,7 +628,7 @@ msgstr "Objectif spécifique"
msgid "Purpose"
msgstr "Intention"
-#: js/level_utils.js:36 js/pages/results_form_PC/resultsFormPC.js:295
+#: js/level_utils.js:36 js/pages/results_form_PC/resultsFormPC.js:298
msgid "Result"
msgstr "Résultat"
@@ -630,7 +690,7 @@ msgstr "Projet"
#: js/pages/document_list/components/document_list.js:175
#: js/pages/results_framework/components/level_cards.js:213
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:131
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:132
msgid "Delete"
msgstr "Supprimer"
@@ -829,7 +889,7 @@ msgstr "# / %"
#: js/pages/iptt_report/components/report/tableHeader.js:159
#: js/pages/iptt_report/models/filterStore.js:737
#: js/pages/program_page/components/indicator_list.js:206
-#: tola/db_translations.js:16
+#: tola/db_translations.js:2
msgid "Baseline"
msgstr "Mesure de base"
@@ -854,8 +914,8 @@ msgstr "N/A"
#: js/pages/iptt_report/components/report/tableRows.js:77
msgid "Results cannot be added because the indicator is missing targets."
msgstr ""
-"Les résultats ne peuvent pas être ajoutés car les cibles de l’indicateur "
-"sont manquantes."
+"Les résultats ne peuvent pas être ajoutés car les cibles de l’indicateur sont "
+"manquantes."
#. Translators: a button that lets the user add a new result
#: js/pages/iptt_report/components/report/tableRows.js:106
@@ -923,7 +983,7 @@ msgstr "Types"
#. Translators: labels sectors (i.e. 'Food Security') that an indicator can be categorized as */
#: js/pages/iptt_report/components/sidebar/reportFilter.js:106
#: js/pages/tola_management_pages/organization/views.js:54
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:129
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:393
#: js/pages/tola_management_pages/program/views.js:54
msgid "Sectors"
msgstr "Secteurs"
@@ -1072,6 +1132,14 @@ msgid "Find an indicator:"
msgstr "Rechercher un indicateur :"
#: js/pages/program_page/components/indicator_list.js:136
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:293
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:308
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:470
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:477
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:482
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:495
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:500
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:508
msgid "None"
msgstr "Aucun"
@@ -1101,11 +1169,11 @@ msgstr "Cibles de l’indicateur manquantes"
#: js/pages/program_page/components/indicator_list.js:359
msgid ""
-"Some indicators have missing targets. To enter these values, click the "
-"target icon near the indicator name."
+"Some indicators have missing targets. To enter these values, click the target "
+"icon near the indicator name."
msgstr ""
-"Certains indicateurs ont des cibles manquantes. Pour enregistrer ces "
-"valeurs, veuillez cliquer sur l’icône de cible qui se situe près du nom de "
+"Certains indicateurs ont des cibles manquantes. Pour enregistrer ces valeurs, "
+"veuillez cliquer sur l’icône de cible qui se situe près du nom de "
"l’indicateur."
#: js/pages/program_page/components/program_metrics.js:138
@@ -1133,8 +1201,8 @@ msgid ""
"target is 100 and your result is 110, the indicator is 10% above target and "
"on track.
Please note that if your indicator has a decreasing "
"direction of change, then “above” and “below” are switched. In that case, if "
-"your target is 100 and your result is 200, your indicator is 50% below "
-"target and not on track.
"
+"your target is 100 and your result is 200, your indicator is 50% below target "
+"and not on track.
"
msgstr ""
"La valeur réelle correspond à la valeur cible à 15 % près. Ainsi, si votre "
"cible est 100 et votre résultat 110, l’indicateur est 10 % au-dessus de la "
@@ -1167,8 +1235,8 @@ msgstr ""
#: js/pages/program_page/components/program_metrics.js:240
msgid "Unavailable until the first target period ends with results reported."
msgstr ""
-"Indisponible jusqu’à la fin de la première période cible avec publication "
-"des résultats."
+"Indisponible jusqu’à la fin de la première période cible avec publication des "
+"résultats."
#. Translators: title of a graphic showing indicators with targets */
#: js/pages/program_page/components/program_metrics.js:261
@@ -1242,6 +1310,135 @@ msgstr "Indicateurs avec preuves manquantes"
msgid "No evidence"
msgstr "Aucune preuve"
+#: js/pages/program_page/components/program_period.js:164
+msgid ""
+"You must enter values for the indicator tracking period start date before "
+"saving."
+msgstr ""
+"Vous devez saisir les valeurs de la date de début de la période de suivi des "
+"indicateurs avant de sauvegarder."
+
+#: js/pages/program_page/components/program_period.js:169
+msgid ""
+"You must enter values for the indicator tracking period end date before "
+"saving."
+msgstr ""
+"Vous devez saisir les valeurs de la date de fin de la période de suivi des "
+"indicateurs avant de sauvegarder."
+
+#: js/pages/program_page/components/program_period.js:174
+msgid "The end date must come after the start date."
+msgstr "La date de fin vient toujours après la date de démarrage."
+
+#: js/pages/program_page/components/program_period.js:180
+msgid ""
+"The indicator tracking start date must be later than or equal to the IDAA "
+"start date."
+msgstr ""
+"La date de début de suivi des indicateurs doit être postérieure ou égale à la "
+"date de début d’IDAA."
+
+#: js/pages/program_page/components/program_period.js:185
+msgid ""
+"The indicator tracking end date must be earlier than or equal to the IDAA end "
+"date."
+msgstr ""
+"La date de fin de suivi des indicateurs doit être antérieure ou égale à la "
+"date de fin d’IDAA."
+
+#: js/pages/program_page/components/program_period.js:296
+msgid ""
+"Error. Could not retrieve data from server. Please report this to the Tola "
+"team."
+msgstr ""
+"Erreur. Impossible de récupérer les données à partir du serveur. Veuillez le "
+"signaler à l’équipe de Tola."
+
+#. Translators: This is the text of an alert that is triggered upon a successful change to the the start and end dates of the reporting period
+#: js/pages/program_page/components/program_period.js:339
+msgid "Indicator tracking period is updated."
+msgstr "La période de suivi des indicateurs est mise à jour."
+
+#: js/pages/program_page/components/program_period.js:371
+msgid "There was a problem saving your changes."
+msgstr "Un problème est survenu lors de l’enregistrement de vos modifications."
+
+#: js/pages/program_page/components/program_period.js:381
+msgid ""
+"This action may result in changes to your periodic targets. If you have "
+"already set up periodic targets for your indicators, you may need to enter "
+"additional target values to cover the entire indicator tracking period. For "
+"future reference, please provide a reason for modifying the indicator "
+"tracking period."
+msgstr ""
+"Cette action peut entraîner des modifications de vos cibles périodiques. Si "
+"vous avez déjà défini des cibles périodiques pour vos indicateurs, vous "
+"devrez peut-être saisir des valeurs cibles supplémentaires pour couvrir la "
+"totalité de la période de suivi de l’indicateur. Pour référence future, "
+"veuillez fournir une raison pour la modification de la période de suivi de "
+"l’indicateur."
+
+#: js/pages/program_page/components/program_period.js:440
+msgid ""
+"The program period is used as the default for the initial setup of time-based "
+"target periods (e.g., annually, quarterly, etc.) and in the Indicator "
+"Performance Tracking Tables (IPTTs). The Program Period is based on the "
+"program’s official start and end dates as recorded in the Identification "
+"Assignment Assistant (IDAA) system and cannot be adjusted in TolaData."
+msgstr ""
+"La période du programme est utilisée comme valeur par défaut pour la "
+"configuration initiale des périodes cibles basées sur le temps (par exemple, "
+"annuellement, trimestriellement, etc.) et dans les tableaux de suivi des "
+"performances des indicateurs (IPTTs). La période du programme est basée sur "
+"les dates officielles de début et de fin du programme telles qu’enregistrées "
+"dans le système Assistant pour l’Attribution de l’Identification (IDAA) et ne "
+"peut pas être ajustée dans TolaData."
+
+#: js/pages/program_page/components/program_period.js:446
+msgid "IDAA program dates"
+msgstr "Dates du programme IDAA"
+
+#: js/pages/program_page/components/program_period.js:449
+#: js/pages/program_page/components/program_period.js:469
+msgid "Start date"
+msgstr "Date de début"
+
+#: js/pages/program_page/components/program_period.js:450
+#: js/pages/program_page/components/program_period.js:454
+msgid "Unavailable"
+msgstr "Non disponible"
+
+#: js/pages/program_page/components/program_period.js:453
+#: js/pages/program_page/components/program_period.js:480
+msgid "End date"
+msgstr "Date de fin"
+
+#: js/pages/program_page/components/program_period.js:465
+msgid "Indicator tracking period"
+msgstr "Période de suivi des indicateurs"
+
+#: js/pages/program_page/components/program_period.js:500
+#: js/pages/tola_management_pages/country/components/edit_country_profile.js:101
+#: js/pages/tola_management_pages/country/components/edit_country_profile.js:108
+#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:530
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:120
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:126
+#: js/pages/tola_management_pages/organization/components/edit_organization_history.js:69
+#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:210
+#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:217
+#: js/pages/tola_management_pages/program/components/program_history.js:64
+#: js/pages/tola_management_pages/program/components/program_settings.js:130
+#: js/pages/tola_management_pages/user/components/edit_user_history.js:74
+msgid "Save Changes"
+msgstr "Enregistrer les modifications"
+
+#: js/pages/program_page/components/program_period.js:504
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:121
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:127
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:553
+msgid "Cancel changes"
+msgstr "Annuler les changements"
+
#. Translators: Explains how performance is categorized as close to the target or not close to the target
#: js/pages/program_page/components/resultsTable.js:41
msgid ""
@@ -1251,10 +1448,10 @@ msgid ""
"of change when thinking about whether the indicator is on track."
msgstr ""
"La valeur réelle représente %(percent)s de la valeur cible."
-"strong> Un indicateur est sur la bonne voie si le résultat n’est ni "
-"inférieur à 85 % de la cible, ni supérieur à 115 % de la cible. "
-"p>Pensez à prendre en compte la direction du changement souhaité "
-"lorsque vous réfléchissez au statut d’un indicateur.
"
+"strong> Un indicateur est sur la bonne voie si le résultat n’est ni inférieur "
+"à 85 % de la cible, ni supérieur à 115 % de la cible.
Pensez à "
+"prendre en compte la direction du changement souhaité lorsque vous "
+"réfléchissez au statut d’un indicateur.
"
#. Translators: Label for an indicator that is within a target range
#: js/pages/program_page/components/resultsTable.js:47
@@ -1290,29 +1487,28 @@ msgid ""
msgstr ""
"Les cibles, les réelles, et les résultats sont non-cumulatifs."
"strong> Les réelles de la période cible sont la somme de tous les résultats "
-"de cette période cible. Les cibles et les réelles de la vie du programme "
-"sont la somme de toutes les périodes cibles."
+"de cette période cible. Les cibles et les réelles de la vie du programme sont "
+"la somme de toutes les périodes cibles."
#. Translators: brief description of summing rules a series of numbers
#: js/pages/program_page/components/resultsTable.js:238
msgid "Targets and actuals are cumulative; results are non-cumulative."
msgstr ""
-"Les cibles et les réelles sont cumulatives; les résultats sont non-"
-"cumulatifs."
+"Les cibles et les réelles sont cumulatives; les résultats sont non-cumulatifs."
#. Translators: explanation of the summing rules for the totals row on a list of results
#: js/pages/program_page/components/resultsTable.js:240
msgid ""
"Targets and actuals are cumulative; results are non-cumulative."
-"strong> Target period actuals are the sum of the results from the current "
-"and all previous target periods. The Life of Program target mirrors the last "
+"strong> Target period actuals are the sum of the results from the current and "
+"all previous target periods. The Life of Program target mirrors the last "
"target, and the Life of Program actual mirrors the most recent actual."
msgstr ""
"Les cibles et les réelles sont cumulatives; les résultats sont non-"
"cumulatifs. Les réelles de la période cible sont la somme des "
"résultats de la période cible actuelle et de toutes les périodes cibles "
-"précédentes. La cible de la vie du programme reflète la dernière cible, et "
-"la réelle de la vie du programme reflète la réelle la plus récente."
+"précédentes. La cible de la vie du programme reflète la dernière cible, et la "
+"réelle de la vie du programme reflète la réelle la plus récente."
#. Translators: brief description of summing rules a series of numbers
#: js/pages/program_page/components/resultsTable.js:244
@@ -1323,10 +1519,9 @@ msgstr "Les cibles, les réelles, et les résultats sont cumulatifs."
#: js/pages/program_page/components/resultsTable.js:246
msgid ""
"Targets, actuals, and results are cumulative. Target period "
-"actuals mirror the most recent result for that target period; no "
-"calculations are performed with results or actuals. The Life of Program "
-"target mirrors the last target, and the Life of Program actual mirrors the "
-"most recent actual."
+"actuals mirror the most recent result for that target period; no calculations "
+"are performed with results or actuals. The Life of Program target mirrors the "
+"last target, and the Life of Program actual mirrors the most recent actual."
msgstr ""
"Les cibles, les réelles, et les résultats sont cumulatifs. "
"Les réelles de la période cible reflètent le résultat le plus récent pour "
@@ -1389,8 +1584,8 @@ msgstr ""
"Attention : cette action est irréversible. Voulez-vous vraiment supprimer ce "
"rapport épinglé ?"
-#: js/pages/results_form_PC/components/ActualValueFields.js:20
-#: js/pages/results_form_PC/resultsFormPC.js:101
+#: js/pages/results_form_PC/components/ActualValueFields.js:26
+#: js/pages/results_form_PC/resultsFormPC.js:102
msgid ""
"Direct/indirect without double counting should be equal to or lower than "
"direct/indirect with double counting."
@@ -1398,11 +1593,11 @@ msgstr ""
"Le champ Direct/indirect sans double comptage doit être inférieur ou égal au "
"champ Direct/indirect avec double comptage."
-#: js/pages/results_form_PC/components/ActualValueFields.js:34
+#: js/pages/results_form_PC/components/ActualValueFields.js:40
msgid "Total Participant Actual Values"
msgstr "Valeurs réelles du total de participants"
-#: js/pages/results_form_PC/components/ActualValueFields.js:36
+#: js/pages/results_form_PC/components/ActualValueFields.js:42
msgid ""
"Include the participants with double counting on the left and participants "
"without double counting across programs on the right. Double counting a "
@@ -1411,10 +1606,9 @@ msgid ""
"participants, only discount double counting in one program!
Direct participants – are those who have received a "
"tangible benefit from the program, either as the actual program participants "
-"or the intended recipients of the program benefits.
Indirect participants – are those who received a tangible "
-"benefit through their proximity to or contact with program participants or "
-"activities."
+"or the intended recipients of the program benefits.
Indirect "
+"participants – are those who received a tangible benefit through "
+"their proximity to or contact with program participants or activities."
msgstr ""
"Intégrez les participants en double comptage sur la gauche et les "
"participants en comptage unique dans les programmes sur la droite. Compter "
@@ -1428,29 +1622,28 @@ msgstr ""
"strong> sont ceux qui ont reçu un avantage tangible basé sur leur lien avec "
"des activités ou des participants du programme."
-#: js/pages/results_form_PC/components/ActualValueFields.js:40
-#: js/pages/results_form_PC/components/DisaggregationFields.js:100
+#: js/pages/results_form_PC/components/ActualValueFields.js:46
+#: js/pages/results_form_PC/components/DisaggregationFields.js:106
msgid "Without double counting across programs"
msgstr "Sans double comptage dans les programmes"
-#: js/pages/results_form_PC/components/ActualValueFields.js:41
-#: js/pages/results_form_PC/components/DisaggregationFields.js:102
+#: js/pages/results_form_PC/components/ActualValueFields.js:47
+#: js/pages/results_form_PC/components/DisaggregationFields.js:108
msgid "With double counting across programs"
msgstr "Avec double comptage dans les programmes"
-#: js/pages/results_form_PC/components/ActualValueFields.js:99
+#: js/pages/results_form_PC/components/ActualValueFields.js:105
msgid "Total Participants"
msgstr "Nombre total de participants"
#: js/pages/results_form_PC/components/CommonFields.js:47
-#: js/pages/results_form_PC/resultsFormPC.js:80
+#: js/pages/results_form_PC/resultsFormPC.js:81
msgid "This date should be within the fiscal year of the reporting period."
msgstr ""
-"Cette date doit être comprise dans l’année fiscale de la période de "
-"reporting."
+"Cette date doit être comprise dans l’année fiscale de la période de reporting."
#: js/pages/results_form_PC/components/CommonFields.js:56
-#: js/pages/results_form_PC/resultsFormPC.js:88
+#: js/pages/results_form_PC/resultsFormPC.js:89
msgid "Please complete this field. You can select more than one outcome theme."
msgstr ""
"Veuillez compléter ce champ. Vous pouvez sélectionner plus d’un thème de "
@@ -1466,9 +1659,9 @@ msgid ""
"was collected. If data collection occurred after the end of the fiscal year, "
"enter the last day of the fiscal year (June 30)."
msgstr ""
-"Si la collecte de données est réalisée au cours de l’année fiscale, "
-"saisissez la date à laquelle les données sont collectées. Si cette collecte "
-"est réalisée après la fin de l’année fiscale, saisissez le dernier jour de "
+"Si la collecte de données est réalisée au cours de l’année fiscale, saisissez "
+"la date à laquelle les données sont collectées. Si cette collecte est "
+"réalisée après la fin de l’année fiscale, saisissez le dernier jour de "
"l’année fiscale (le 30 juin)."
#: js/pages/results_form_PC/components/CommonFields.js:84
@@ -1478,14 +1671,14 @@ msgstr "Année fiscale"
#: js/pages/results_form_PC/components/CommonFields.js:86
msgid "Fiscal years run from July 1 to June 30 of the following year."
msgstr ""
-"Les années fiscales correspondent aux périodes comprises entre le "
-"1er juillet et le 30 juin de l’année suivante."
+"Les années fiscales correspondent aux périodes comprises entre le 1er juillet "
+"et le 30 juin de l’année suivante."
-#: js/pages/results_form_PC/components/CommonFields.js:104
+#: js/pages/results_form_PC/components/CommonFields.js:105
msgid "Outcome theme"
msgstr "Thème de résultat"
-#: js/pages/results_form_PC/components/CommonFields.js:106
+#: js/pages/results_form_PC/components/CommonFields.js:107
msgid ""
"Outcome themes are the main areas of a program. Refer to MEL Tip Sheet: "
"Guidelines on Counting and Reporting Participant Numbers [link: https://library.mercycorps.org/record/16929?ln=en] for a "
"description of outcome themes."
msgstr ""
-"Les thèmes de résultat correspondent aux principales sections d’un "
-"programme. Pour obtenir une description des thèmes de résultat, veuillez "
-"consulter le guide: Guidelines on Counting and Reporting Participant Numbers "
-"[link: https://library.mercycorps.org/record/16929?ln=en]"
-"a> (Compter et consigner les nombres de participants) rédigé par MEL."
+"Les thèmes de résultat correspondent aux principales sections d’un programme. "
+"Pour obtenir une description des thèmes de résultat, veuillez consulter le "
+"guide: Guidelines on Counting and Reporting Participant Numbers [link: https://library.mercycorps.org/record/16929?ln=en] "
+"(Compter et consigner les nombres de participants) rédigé par MEL."
#. Translators: This is the default option for a dropdown menu
#. Translators: Nothing selected by user
-#: js/pages/results_form_PC/components/CommonFields.js:110
+#: js/pages/results_form_PC/components/CommonFields.js:111
#: js/pages/tola_management_pages/country/views.js:24
#: js/pages/tola_management_pages/country/views.js:36
#: js/pages/tola_management_pages/country/views.js:48
@@ -1518,7 +1711,7 @@ msgstr ""
#: js/pages/tola_management_pages/program/views.js:59
#: js/pages/tola_management_pages/program/views.js:76
#: js/pages/tola_management_pages/program/views.js:88
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:203
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:204
#: js/pages/tola_management_pages/user/views.js:16
msgid "None Selected"
msgstr "Aucun sélectionné"
@@ -1539,14 +1732,14 @@ msgid ""
"record/16929?ln=en] for a description of sectors."
msgstr ""
"Indiquez une désagrégation de participants atteinte par secteur. Indiquez "
-"uniquement les chiffres avec un double comptage. Pour obtenir une "
-"description des secteurs, veuillez consulter le guide: Guidelines on "
-"Counting and Reporting Participant Numbers [link: https://library."
-"mercycorps.org/record/16929?ln=en] (Compter et consigner les nombres de "
-"participants) rédigé par MEL."
-
-#: js/pages/results_form_PC/components/DisaggregationFields.js:55
+"uniquement les chiffres avec un double comptage. Pour obtenir une description "
+"des secteurs, veuillez consulter le guide: Guidelines on Counting and "
+"Reporting Participant Numbers [link: https://library.mercycorps.org/"
+"record/16929?ln=en] (Compter et consigner les nombres de participants) "
+"rédigé par MEL."
+
+#: js/pages/results_form_PC/components/DisaggregationFields.js:61
msgid ""
"The 'SADD without double counting' value should be less than or equal to the "
"'Direct without double counting' value."
@@ -1554,8 +1747,8 @@ msgstr ""
"La somme du champ Données ‘SADD sans double comptage’ doit être égale à la "
"somme du champ ‘Direct sans double comptage’."
-#: js/pages/results_form_PC/components/DisaggregationFields.js:72
-#: js/pages/results_form_PC/resultsFormPC.js:116
+#: js/pages/results_form_PC/components/DisaggregationFields.js:78
+#: js/pages/results_form_PC/resultsFormPC.js:117
msgid ""
"Sector values should be less than or equal to the 'Direct/Indirect with "
"double counting' value."
@@ -1563,38 +1756,38 @@ msgstr ""
"Les valeurs des secteurs doivent être inférieures ou égales à la valeur "
"“Direct/Indirect avec double comptage”."
-#: js/pages/results_form_PC/components/DisaggregationFields.js:87
+#: js/pages/results_form_PC/components/DisaggregationFields.js:93
msgid "SADD (including unknown)"
msgstr "SADD (inconnu)"
-#: js/pages/results_form_PC/components/DisaggregationFields.js:95
+#: js/pages/results_form_PC/components/DisaggregationFields.js:101
msgid "Needs Attention"
msgstr "Requiert votre attention"
-#: js/pages/results_form_PC/components/DisaggregationFields.js:138
+#: js/pages/results_form_PC/components/DisaggregationFields.js:144
msgid "Sum"
msgstr "Somme"
-#: js/pages/results_form_PC/components/DisaggregationFields.js:154
+#: js/pages/results_form_PC/components/DisaggregationFields.js:160
msgid "Total Direct Participants"
msgstr "Total de participantes directs"
-#: js/pages/results_form_PC/components/DisaggregationFields.js:154
+#: js/pages/results_form_PC/components/DisaggregationFields.js:160
msgid "Total Indirect Participants"
msgstr "Total de participantes indirects"
#: js/pages/results_form_PC/components/EvidenceFields.js:16
-#: js/pages/results_form_PC/resultsFormPC.js:131
+#: js/pages/results_form_PC/resultsFormPC.js:132
msgid "Please enter a valid evidence link."
msgstr "Veuillez entrer un lien de preuve valide."
#: js/pages/results_form_PC/components/EvidenceFields.js:19
-#: js/pages/results_form_PC/resultsFormPC.js:134
+#: js/pages/results_form_PC/resultsFormPC.js:135
msgid "A record name must be included along with the link."
msgstr "Le nom de l’enregistrement doit être inclus avec le lien."
#: js/pages/results_form_PC/components/EvidenceFields.js:23
-#: js/pages/results_form_PC/resultsFormPC.js:138
+#: js/pages/results_form_PC/resultsFormPC.js:139
msgid "A link must be included along with the record name."
msgstr "Un lien doit être inclus avec le nom de l’enregistrement."
@@ -1639,7 +1832,7 @@ msgid "Give your record a short name that is easy to remember."
msgstr ""
"Attribuez un nom court et facilement mémorisable à votre enregistrement."
-#: js/pages/results_form_PC/resultsFormPC.js:65
+#: js/pages/results_form_PC/resultsFormPC.js:66
msgid ""
"The sum of 'SADD with double counting' should be equal to the sum of 'Direct "
"with double counting'."
@@ -1647,7 +1840,7 @@ msgstr ""
"La somme du champ ‘Données SADD avec double comptage’ doit être égale à la "
"somme du champ ‘Direct avec double comptage’."
-#: js/pages/results_form_PC/resultsFormPC.js:68
+#: js/pages/results_form_PC/resultsFormPC.js:69
msgid ""
"The sum of 'SADD without double counting' should be equal to the sum of "
"'Direct without double counting'."
@@ -1655,21 +1848,21 @@ msgstr ""
"La somme du champ Données ‘SADD sans double comptage’ doit être égale à la "
"somme du champ ‘Direct sans double comptage’."
-#: js/pages/results_form_PC/resultsFormPC.js:84
-msgid "You cannot change the fiscal year during the current reporting period. "
+#: js/pages/results_form_PC/resultsFormPC.js:85
+msgid "You cannot change the fiscal year during the current reporting period."
msgstr ""
"Vous ne pouvez pas modifier l’année fiscale pendant la période de reporting "
"actuelle."
-#: js/pages/results_form_PC/resultsFormPC.js:95
+#: js/pages/results_form_PC/resultsFormPC.js:96
msgid ""
-"Direct total participants with double counting is required. Please "
-"complete these fields."
+"Direct total participants with double counting is required. Please complete "
+"these fields."
msgstr ""
-"Le champ Total de participants directs avec double comptage est "
-"requis. Veuillez renseigner ces champs."
+"Le champ Total de participants directs avec double comptage est requis. "
+"Veuillez renseigner ces champs."
-#: js/pages/results_form_PC/resultsFormPC.js:276
+#: js/pages/results_form_PC/resultsFormPC.js:279
#: js/pages/results_framework/components/level_cards.js:406
msgid ""
"Your changes will be recorded in a change log. For future reference, please "
@@ -1679,11 +1872,11 @@ msgstr ""
"titre de référence, veuillez partager votre justification pour ces "
"modifications."
-#: js/pages/results_form_PC/resultsFormPC.js:302
+#: js/pages/results_form_PC/resultsFormPC.js:305
msgid "Participant Count"
msgstr "Nombre de participants"
-#: js/pages/results_form_PC/resultsFormPC.js:376
+#: js/pages/results_form_PC/resultsFormPC.js:379
#: js/pages/results_framework/components/level_cards.js:575
msgid "Save and close"
msgstr "Enregistrer et fermer"
@@ -1697,8 +1890,8 @@ msgstr "Importer l’objectif du programme"
#: js/pages/results_framework/components/level_cards.js:68
msgid ""
"Import text from a Program Objective. Make sure to remove levels and numbers from "
-"your text, because they are automatically displayed."
+"import__popover-strong-text'>Make sure to remove levels and numbers from your "
+"text, because they are automatically displayed."
msgstr ""
"Importer le texte d’un objectif de programme. Assurez-vous de supprimer les niveaux "
@@ -1800,14 +1993,13 @@ msgstr "Excel"
#. Translators: A alert to let users know that instead of entering indicators one at a time, they can use an Excel template to enter multiple indicators at the same time. First step is to build the result framework below, then click the 'Import indicators' button above
#: js/pages/results_framework/components/level_list.js:207
msgid ""
-"Instead of entering indicators one at a time, use an Excel template to "
-"import multiple indicators! First, build your results framework below. Next, "
-"click the “Import indicators” button above."
+"Instead of entering indicators one at a time, use an Excel template to import "
+"multiple indicators! First, build your results framework below. Next, click "
+"the “Import indicators” button above."
msgstr ""
-"Au lieu de saisir les indicateurs un par un, utilisez un modèle Excel pour "
-"en importer plusieurs à la fois. Commencez par créer votre cadre de "
-"résultats ci-dessous, puis cliquez sur le bouton « Importer des "
-"indicateurs » ci-dessus."
+"Au lieu de saisir les indicateurs un par un, utilisez un modèle Excel pour en "
+"importer plusieurs à la fois. Commencez par créer votre cadre de résultats ci-"
+"dessous, puis cliquez sur le bouton « Importer des indicateurs » ci-dessus."
#. Translators: this refers to an imperative verb on a button ("Apply filters")*/}
#: js/pages/results_framework/components/level_tier_lists.js:32
@@ -1815,7 +2007,7 @@ msgstr ""
#: js/pages/tola_management_pages/country/views.js:66
#: js/pages/tola_management_pages/organization/views.js:83
#: js/pages/tola_management_pages/program/views.js:143
-#: js/pages/tola_management_pages/program/views.js:200
+#: js/pages/tola_management_pages/program/views.js:202
#: js/pages/tola_management_pages/user/views.js:162
#: js/pages/tola_management_pages/user/views.js:230
msgid "Apply"
@@ -1845,9 +2037,9 @@ msgstr ""
"Le modèle de cadre de résultats se "
"verrouille dès que le premier %(secondTier)s est enregistré. "
"Pour modifier les modèles, tous les niveaux enregistrés doivent être "
-"supprimés, à l'exception du %(firstTier)s original. Un niveau peut "
-"uniquement être supprimé lorsqu'il ne dispose d'aucun sous-niveau ni "
-"d'indicateur associé."
+"supprimés, à l'exception du %(firstTier)s original. Un niveau peut uniquement "
+"être supprimé lorsqu'il ne dispose d'aucun sous-niveau ni d'indicateur "
+"associé."
#: js/pages/results_framework/components/leveltier_picker.js:66
msgid "Results framework template"
@@ -1942,7 +2134,7 @@ msgstr "Utilisateur"
#: js/pages/tola_management_pages/audit_log/views.js:244
#: js/pages/tola_management_pages/organization/views.js:110
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:195
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:196
#: js/pages/tola_management_pages/user/views.js:202
#: js/pages/tola_management_pages/user/views.js:261
msgid "Organization"
@@ -1972,15 +2164,15 @@ msgstr "entrées"
#: js/pages/tola_management_pages/country/components/country_editor.js:23
#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:114
#: js/pages/tola_management_pages/organization/components/organization_editor.js:26
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:70
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:278
#: js/pages/tola_management_pages/program/components/program_editor.js:27
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:144
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:145
#: js/pages/tola_management_pages/user/components/user_editor.js:26
msgid "Profile"
msgstr "Profil"
#: js/pages/tola_management_pages/country/components/country_editor.js:32
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:216
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:217
msgid "Strategic Objectives"
msgstr "Objectifs stratégiques"
@@ -2000,9 +2192,6 @@ msgstr "Nom du pays"
#: js/pages/tola_management_pages/country/components/edit_country_profile.js:80
#: js/pages/tola_management_pages/country/components/edit_objectives.js:94
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:108
-#, fuzzy
-#| msgid "Description/Notes"
msgid "Description"
msgstr "Description/Notes"
@@ -2010,40 +2199,21 @@ msgstr "Description/Notes"
msgid "Country Code"
msgstr "Code pays"
-#: js/pages/tola_management_pages/country/components/edit_country_profile.js:101
-#: js/pages/tola_management_pages/country/components/edit_country_profile.js:108
-#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:530
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:120
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:125
-#: js/pages/tola_management_pages/organization/components/edit_organization_history.js:69
-#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:210
-#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:217
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:141
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:148
-#: js/pages/tola_management_pages/program/components/program_history.js:64
-#: js/pages/tola_management_pages/program/components/program_settings.js:130
-#: js/pages/tola_management_pages/user/components/edit_user_history.js:74
-msgid "Save Changes"
-msgstr "Enregistrer les modifications"
-
#. Translators: Button label. Allows users to undo whatever changes they have made.
#: js/pages/tola_management_pages/country/components/edit_country_profile.js:103
#: js/pages/tola_management_pages/country/components/edit_country_profile.js:109
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:533
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:126
#: js/pages/tola_management_pages/country/views.js:67
#: js/pages/tola_management_pages/organization/components/edit_organization_history.js:70
#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:212
#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:218
#: js/pages/tola_management_pages/organization/views.js:84
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:143
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:149
#: js/pages/tola_management_pages/program/components/program_history.js:65
#: js/pages/tola_management_pages/program/components/program_settings.js:131
-#: js/pages/tola_management_pages/program/views.js:201
+#: js/pages/tola_management_pages/program/views.js:203
#: js/pages/tola_management_pages/user/components/edit_user_history.js:75
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:261
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:267
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:262
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:268
#: js/pages/tola_management_pages/user/views.js:231
msgid "Reset"
msgstr "Réinitialiser"
@@ -2054,8 +2224,8 @@ msgstr "Supprimer"
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:63
msgid ""
-"This category cannot be edited or removed because it was used to "
-"disaggregate a result."
+"This category cannot be edited or removed because it was used to disaggregate "
+"a result."
msgstr ""
"Cette catégorie ne peut pas être modifiée ou supprimée car elle a été "
"utilisée pour désagréger un résultat."
@@ -2067,15 +2237,15 @@ msgstr "Explication justifiant l'absence d'un bouton de suppression"
#. Translators: This is text provided when a user clicks a help link. It allows users to select which elements they want to apply the changes to.
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:228
msgid ""
-"Select a program if you plan to disaggregate all or most of its "
-"indicators by these categories.
This bulk assignment cannot be undone. But you "
-"can always manually remove the disaggregation from individual indicators.
"
+"Select a program if you plan to disaggregate all or most of its indicators "
+"by these categories.
This bulk "
+"assignment cannot be undone. But you can always manually "
+"remove the disaggregation from individual indicators.
"
msgstr ""
"Sélectionnez un programme si vous souhaitez désagréger tous ou la plupart "
"de ses indicateurs en fonction de ces catégories.
Ce bloc ne peut être annulé. Cependant, "
-"vous pouvez supprimer manuellement la désagrégation à partir d'indicateurs "
+"danger\">Ce bloc ne peut être annulé.
Cependant, vous "
+"pouvez supprimer manuellement la désagrégation à partir d'indicateurs "
"individuels."
#. Translators: This feature allows a user to apply changes to existing programs as well as ones created in the future */}
@@ -2109,8 +2279,8 @@ msgid ""
"default for every program in %s. The disaggregation can be manually removed "
"from an indicator on the indicator setup form."
msgstr ""
-"Lors de l’ajout d’un nouvel indicateur de programme, cette désagrégation "
-"sera sélectionnée par défaut pour chaque programme dans %s. La désagrégation "
+"Lors de l’ajout d’un nouvel indicateur de programme, cette désagrégation sera "
+"sélectionnée par défaut pour chaque programme dans %s. La désagrégation "
"pourra être supprimée manuellement d’un indicateur à partir du formulaire de "
"configuration de l’indicateur."
@@ -2149,10 +2319,10 @@ msgid "Archive disaggregation"
msgstr "Archiver la désagrégation"
#: js/pages/tola_management_pages/country/components/edit_disaggregations.js:590
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:160
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:161
#: js/pages/tola_management_pages/country/models.js:262
#: js/pages/tola_management_pages/organization/models.js:115
-#: js/pages/tola_management_pages/program/models.js:73
+#: js/pages/tola_management_pages/program/models.js:78
#: js/pages/tola_management_pages/user/models.js:192
msgid "You have unsaved changes. Are you sure you want to discard them?"
msgstr ""
@@ -2212,8 +2382,8 @@ msgstr "Proposé"
#: js/pages/tola_management_pages/organization/views.js:190
#: js/pages/tola_management_pages/program/components/program_history.js:9
#: js/pages/tola_management_pages/program/views.js:66
-#: js/pages/tola_management_pages/program/views.js:158
-#: js/pages/tola_management_pages/program/views.js:164
+#: js/pages/tola_management_pages/program/views.js:160
+#: js/pages/tola_management_pages/program/views.js:166
#: js/pages/tola_management_pages/user/components/edit_user_history.js:8
#: js/pages/tola_management_pages/user/models.js:75
#: js/pages/tola_management_pages/user/views.js:355
@@ -2240,19 +2410,19 @@ msgstr "Nom court"
#: js/pages/tola_management_pages/organization/views.js:113
#: js/pages/tola_management_pages/program/components/program_history.js:53
#: js/pages/tola_management_pages/program/views.js:70
-#: js/pages/tola_management_pages/program/views.js:233
+#: js/pages/tola_management_pages/program/views.js:237
#: js/pages/tola_management_pages/user/components/edit_user_history.js:64
#: js/pages/tola_management_pages/user/views.js:211
#: js/pages/tola_management_pages/user/views.js:265
msgid "Status"
msgstr "Statut"
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:193
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:194
msgid "Delete Strategic Objective?"
msgstr "Supprimer l’objectif stratégique ?"
#. Translators: This is a button that allows the user to add a strategic objective. */}
-#: js/pages/tola_management_pages/country/components/edit_objectives.js:235
+#: js/pages/tola_management_pages/country/components/edit_objectives.js:236
msgid "Add strategic objective"
msgstr "Ajouter un objectif stratégique"
@@ -2276,7 +2446,7 @@ msgstr[1] ""
#: js/pages/tola_management_pages/country/models.js:215
#: js/pages/tola_management_pages/country/models.js:219
#: js/pages/tola_management_pages/organization/models.js:111
-#: js/pages/tola_management_pages/program/models.js:195
+#: js/pages/tola_management_pages/program/models.js:200
#: js/pages/tola_management_pages/user/models.js:208
msgid "Successfully saved"
msgstr "Enregistré avec succès"
@@ -2284,7 +2454,7 @@ msgstr "Enregistré avec succès"
#. Translators: Saving to the server failed
#: js/pages/tola_management_pages/country/models.js:226
#: js/pages/tola_management_pages/organization/models.js:106
-#: js/pages/tola_management_pages/program/models.js:200
+#: js/pages/tola_management_pages/program/models.js:205
#: js/pages/tola_management_pages/user/models.js:203
msgid "Saving failed"
msgstr "Échec de l’enregistrement"
@@ -2368,7 +2538,7 @@ msgstr "Rechercher un pays"
#: js/pages/tola_management_pages/country/views.js:96
#: js/pages/tola_management_pages/organization/views.js:89
#: js/pages/tola_management_pages/program/views.js:42
-#: js/pages/tola_management_pages/program/views.js:231
+#: js/pages/tola_management_pages/program/views.js:235
msgid "Organizations"
msgstr "Organisations"
@@ -2376,7 +2546,7 @@ msgstr "Organisations"
#: js/pages/tola_management_pages/country/views.js:97
#: js/pages/tola_management_pages/organization/views.js:30
#: js/pages/tola_management_pages/organization/views.js:111
-#: js/pages/tola_management_pages/program/views.js:206
+#: js/pages/tola_management_pages/program/views.js:208
#: js/pages/tola_management_pages/user/views.js:59
#: js/pages/tola_management_pages/user/views.js:262
msgid "Programs"
@@ -2384,14 +2554,14 @@ msgstr "Programmes"
#: js/pages/tola_management_pages/country/views.js:72
#: js/pages/tola_management_pages/organization/views.js:89
-#: js/pages/tola_management_pages/program/views.js:206
+#: js/pages/tola_management_pages/program/views.js:208
#: js/pages/tola_management_pages/user/views.js:236
msgid "Admin:"
msgstr "Administrateur :"
#: js/pages/tola_management_pages/country/views.js:72
#: js/pages/tola_management_pages/organization/views.js:18
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:118
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:371
#: js/pages/tola_management_pages/program/views.js:30
msgid "Countries"
msgstr "Pays"
@@ -2403,7 +2573,7 @@ msgstr "Ajouter un pays"
#: js/pages/tola_management_pages/country/views.js:98
#: js/pages/tola_management_pages/organization/views.js:112
#: js/pages/tola_management_pages/program/views.js:18
-#: js/pages/tola_management_pages/program/views.js:232
+#: js/pages/tola_management_pages/program/views.js:236
#: js/pages/tola_management_pages/user/views.js:236
msgid "Users"
msgstr "Utilisateurs"
@@ -2441,7 +2611,7 @@ msgstr "0 programme"
#. Translators: preceded by a number, i.e. "3 users" or "1 user"
#: js/pages/tola_management_pages/country/views.js:229
#: js/pages/tola_management_pages/organization/views.js:182
-#: js/pages/tola_management_pages/program/views.js:320
+#: js/pages/tola_management_pages/program/views.js:327
#, python-format
msgid "%s user"
msgid_plural "%s users"
@@ -2451,7 +2621,7 @@ msgstr[1] "%s utilisateurs"
#. Translators: when no users are connected to the item
#: js/pages/tola_management_pages/country/views.js:234
#: js/pages/tola_management_pages/organization/views.js:187
-#: js/pages/tola_management_pages/program/views.js:324
+#: js/pages/tola_management_pages/program/views.js:331
msgid "0 users"
msgstr "0 utilisateur"
@@ -2464,8 +2634,8 @@ msgstr "pays"
#: js/pages/tola_management_pages/organization/views.js:190
#: js/pages/tola_management_pages/program/components/program_history.js:10
#: js/pages/tola_management_pages/program/views.js:67
-#: js/pages/tola_management_pages/program/views.js:159
-#: js/pages/tola_management_pages/program/views.js:164
+#: js/pages/tola_management_pages/program/views.js:161
+#: js/pages/tola_management_pages/program/views.js:166
#: js/pages/tola_management_pages/user/components/edit_user_history.js:9
#: js/pages/tola_management_pages/user/models.js:76
#: js/pages/tola_management_pages/user/views.js:355
@@ -2497,7 +2667,7 @@ msgid "Primary Contact Phone Number"
msgstr "Numéro de téléphone du contact principal"
#: js/pages/tola_management_pages/organization/components/edit_organization_profile.js:200
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:248
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:249
msgid "Preferred Mode of Contact"
msgstr "Moyen de contact préféré"
@@ -2525,17 +2695,117 @@ msgstr "Ajouter une organisation"
msgid "organizations"
msgstr "organisations"
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:73
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:112
+msgid "This field may not be left blank."
+msgstr "Ce champ ne peut pas être laissé vide."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:127
+msgid "The program start date may not be more than 10 years in the past."
+msgstr ""
+"La date de début du programme ne doit pas se situer plus de 10 ans dans le "
+"passé."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:131
+msgid "The program start date may not be after the program end date."
+msgstr ""
+"La date de début du programme ne doit pas être postérieure à la date de fin "
+"du programme."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:137
+msgid "The program end date may not be more than 10 years in the future."
+msgstr ""
+"La date de fin du programme ne doit pas se situer plus de 10 ans dans le "
+"futur."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:141
+msgid "The program end date may not be before the program start date."
+msgstr ""
+"La date de fin du programme ne doit pas être antérieure à la date de début du "
+"programme."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:157
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:176
+msgid "GAIT IDs may not be left blank."
+msgstr "IDs GAIT ne peut pas être laissé vide."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:165
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:166
+msgid "Duplicate GAIT ID numbers are not allowed."
+msgstr "Les doublons de numéros d’identification GAIT ne sont pas autorisés."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:186
+msgid "Fund codes may only be 5 digits long."
+msgstr "Les codes de fonds ne peuvent être composés que de 5 chiffres."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:190
+msgid "Fund codes may only begin with a 3, 7, or 9 (e.g., 30000)."
+msgstr ""
+"Les codes de fonds ne peuvent commencer que par un 3, 7, ou 9 (par exemple, "
+"30000)."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:282
+msgid ""
+"The fields on this tab are auto-populated with data from Identification "
+"Assignment Assistant (IDAA). These fields cannot be edited in TolaData. If "
+"changes to this program information are required, then these changes must be "
+"reflected in IDAA first."
+msgstr ""
+"Les champs de cet onglet sont remplis automatiquement avec les données de "
+"l’Assistant pour l’Attribution d’Identification (IDAA). Ces champs ne peuvent "
+"pas être modifiés dans TolaData. Si des modifications de ces informations de "
+"programme sont nécessaires, elles doivent d’abord être reflétées dans l’IDAA."
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:288
msgid "Program name"
msgstr "Nom du programme"
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:84
-msgid "GAIT ID"
-msgstr "ID GAIT"
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:303
+msgid "Program ID"
+msgstr "Identifiant du programme"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:318
+msgid "Program start date"
+msgstr "Date de début du programme"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:338
+msgid "Program end date"
+msgstr "Date de fin du programme"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:358
+msgid "Program funding status"
+msgstr "Statut de financement du programme"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:414
+msgid "Outcome themes"
+msgstr "Thèmes de résultats"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:439
+msgid "GAIT IDs"
+msgstr "IDs GAIT"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:442
+msgid "Fund codes"
+msgstr "Codes de fonds"
+
+#. Translators: One of several choices for specifying what type of Indicator is being created. An Indicator is a performance measure e.g. "We will distribute 1000 food packs over the next two months"
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:445
+#: tola/db_translations.js:132
+msgid "Donor"
+msgstr "Donateur"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:449
+msgid "Donor dept"
+msgstr "Département des bailleurs de fonds"
+
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:546
+msgid "Add another row"
+msgstr "Ajouter une autre rangée"
-#: js/pages/tola_management_pages/program/components/edit_program_profile.js:96
-msgid "Fund Code"
-msgstr "Code du fonds"
+#: js/pages/tola_management_pages/program/components/edit_program_profile.js:552
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:260
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:267
+msgid "Save changes"
+msgstr "Enregistrer les modifications"
#: js/pages/tola_management_pages/program/components/program_settings.js:69
msgid "Indicator grouping"
@@ -2553,10 +2823,10 @@ msgid ""
"setting affects the program page, indicator plan, and IPTT reports."
msgstr ""
"Une fois que vous avez défini un cadre de résultats pour ce programme et que "
-"des indicateurs lui ont été attribués, sélectionnez cette option pour "
-"retirer les niveaux d’indicateurs originaux et afficher les indicateurs en "
-"fonction des niveaux du cadre de résultats. Ce réglage affecte la page du "
-"programme, le plan des indicateurs et les rapports IPTT."
+"des indicateurs lui ont été attribués, sélectionnez cette option pour retirer "
+"les niveaux d’indicateurs originaux et afficher les indicateurs en fonction "
+"des niveaux du cadre de résultats. Ce réglage affecte la page du programme, "
+"le plan des indicateurs et les rapports IPTT."
#: js/pages/tola_management_pages/program/components/program_settings.js:92
msgid "Indicator numbering"
@@ -2581,8 +2851,8 @@ msgstr "Numéroter manuellement les indicateurs"
#: js/pages/tola_management_pages/program/components/program_settings.js:123
msgid ""
-"If your donor requires a special numbering convention, you can enter a "
-"custom number for each indicator."
+"If your donor requires a special numbering convention, you can enter a custom "
+"number for each indicator."
msgstr ""
"Si votre donateur nécessite une convention de numérotation spécifique, vous "
"pouvez saisir un numéro personnalisé pour chaque indicateur."
@@ -2597,42 +2867,36 @@ msgstr ""
"d’affichage."
#. Translators: Notify user that the program start and end date were successfully retrieved from the GAIT service and added to the newly saved Program
-#: js/pages/tola_management_pages/program/models.js:205
+#: js/pages/tola_management_pages/program/models.js:210
msgid "Successfully synced GAIT program start and end dates"
msgstr ""
"Les dates de début et de fin du programme GAIT ont été synchronisées avec "
"succès"
#. Translators: Notify user that the program start and end date failed to be retrieved from the GAIT service with a specific reason appended after the :
-#: js/pages/tola_management_pages/program/models.js:211
+#: js/pages/tola_management_pages/program/models.js:216
msgid "Failed to sync GAIT program start and end dates: "
msgstr ""
"Échec de la synchronisation des dates de début et de fin du programme GAIT : "
#. Translators: A request failed, ask the user if they want to try the request again
-#: js/pages/tola_management_pages/program/models.js:219
+#: js/pages/tola_management_pages/program/models.js:224
msgid "Retry"
msgstr "Réessayer"
#. Translators: button label - ignore the current warning modal on display
-#: js/pages/tola_management_pages/program/models.js:228
+#: js/pages/tola_management_pages/program/models.js:233
msgid "Ignore"
msgstr "Ignorer"
-#: js/pages/tola_management_pages/program/models.js:275
+#: js/pages/tola_management_pages/program/models.js:288
msgid "The GAIT ID for this program is shared with at least one other program."
-msgstr ""
-"L’ID GAIT de ce programme est partagé avec au moins un autre programme."
+msgstr "L’ID GAIT de ce programme est partagé avec au moins un autre programme."
-#: js/pages/tola_management_pages/program/models.js:276
+#: js/pages/tola_management_pages/program/models.js:289
msgid "View programs with this ID in GAIT."
msgstr "Afficher les programmes avec cet ID dans GAIT."
-#. Translators: error message when trying to connect to the server
-#: js/pages/tola_management_pages/program/models.js:316
-msgid "There was a network or server connection error."
-msgstr "Une erreur réseau ou de connexion du serveur est survenue."
-
#: js/pages/tola_management_pages/program/views.js:83
msgid "Find a Program"
msgstr "Rechercher un programme"
@@ -2652,21 +2916,29 @@ msgstr "Sélectionner…"
msgid "No options"
msgstr "Aucune option"
-#: js/pages/tola_management_pages/program/views.js:168
+#: js/pages/tola_management_pages/program/views.js:156
+msgid "Funded"
+msgstr "Financé"
+
+#: js/pages/tola_management_pages/program/views.js:156
+msgid "Completed"
+msgstr "Complété"
+
+#: js/pages/tola_management_pages/program/views.js:170
msgid "Set program status"
msgstr "Définir le statut du programme"
-#: js/pages/tola_management_pages/program/views.js:212
+#: js/pages/tola_management_pages/program/views.js:215
msgid "Add Program"
msgstr "Ajouter un programme"
#. Translators: Label for a freshly created program before the name is entered
-#: js/pages/tola_management_pages/program/views.js:294
-#: js/pages/tola_management_pages/program/views.js:307
+#: js/pages/tola_management_pages/program/views.js:301
+#: js/pages/tola_management_pages/program/views.js:314
msgid "New Program"
msgstr "Nouveau programme"
-#: js/pages/tola_management_pages/program/views.js:334
+#: js/pages/tola_management_pages/program/views.js:341
msgid "programs"
msgstr "programmes"
@@ -2679,36 +2951,31 @@ msgstr "Renvoyer l’e-mail d’inscription"
msgid "Mercy Corps -- managed by Okta"
msgstr "Mercy Corps — géré par Okta"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:147
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:148
msgid "Preferred First Name"
msgstr "Prénom d’usage"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:163
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:164
msgid "Preferred Last Name"
msgstr "Nom d’usage"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:179
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:180
msgid "Username"
msgstr "Nom d’utilisateur"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:212
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:213
msgid "Title"
msgstr "Titre"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:223
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:224
msgid "Email"
msgstr "Adresse e-mail"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:238
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:239
msgid "Phone"
msgstr "Numéro de téléphone"
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:259
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:266
-msgid "Save changes"
-msgstr "Enregistrer les modifications"
-
-#: js/pages/tola_management_pages/user/components/edit_user_profile.js:260
+#: js/pages/tola_management_pages/user/components/edit_user_profile.js:261
msgid "Save And Add Another"
msgstr "Enregistrer et ajouter un autre"
@@ -2842,50 +3109,50 @@ msgstr "Super administrateur"
msgid "users"
msgstr "utilisateurs"
-#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.js:2
-msgid "By training"
-msgstr "Par formation"
-
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:4
-msgid "Endline"
-msgstr "Mesure de fin de programme"
+msgid "By distribution"
+msgstr "Par répartition"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.js:6
-msgid "Weekly"
-msgstr "Hebdomadaire"
+#: tola/db_translations.js:8
+msgid "Post shock"
+msgstr "Après impact"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:10
-msgid "Final evaluation"
-msgstr "Évaluation finale"
+msgid "By event"
+msgstr "Par événement"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.js:14
-msgid "Midline"
-msgstr "Mesure de mi-parcours"
+#: tola/db_translations.js:16
+msgid "By training"
+msgstr "Par formation"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:18
-msgid "By distribution"
-msgstr "Par répartition"
+msgid "Final evaluation"
+msgstr "Évaluation finale"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:20
-msgid "By batch"
-msgstr "Par lot"
+msgid "Midline"
+msgstr "Mesure de mi-parcours"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
-#: tola/db_translations.js:24
-msgid "By event"
-msgstr "Par événement"
+#: tola/db_translations.js:22
+msgid "Endline"
+msgstr "Mesure de fin de programme"
#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
#: tola/db_translations.js:26
-msgid "Post shock"
-msgstr "Après impact"
+msgid "Weekly"
+msgstr "Hebdomadaire"
+
+#. Translators: One of several options for specifying how often data is collected or reported on over the life of a program
+#: tola/db_translations.js:28
+msgid "By batch"
+msgstr "Par lot"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#: tola/db_translations.js:30
@@ -2894,7 +3161,7 @@ msgstr "Agro-industrie"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:32 tola/db_translations.js:154
+#: tola/db_translations.js:32 tola/db_translations.js:150
msgid "Agriculture"
msgstr "Agriculture"
@@ -2986,7 +3253,7 @@ msgstr "Alimentation"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: The main area of a program
-#: tola/db_translations.js:68 tola/db_translations.js:144
+#: tola/db_translations.js:68 tola/db_translations.js:142
msgid "Food Security"
msgstr "Sécurité alimentaire"
@@ -3102,7 +3369,7 @@ msgstr "Questions urbaines"
#. Translators: One of several choices for what sector (i.e. development domain) a program is most closely associated with
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:114 tola/db_translations.js:176
+#: tola/db_translations.js:114 tola/db_translations.js:172
msgid "WASH"
msgstr "Eau, assainissement et hygiène"
@@ -3141,11 +3408,6 @@ msgstr "DIG - de l’agence"
msgid "DIG - Testing"
msgstr "DIG - en cours de validation"
-#. Translators: One of several choices for specifying what type of Indicator is being created. An Indicator is a performance measure e.g. "We will distribute 1000 food packs over the next two months"
-#: tola/db_translations.js:132
-msgid "Donor"
-msgstr "Donateur"
-
#. Translators: One of several choices for specifying what type of Indicator is being created. An Indicator is a performance measure e.g. "We will distribute 1000 food packs over the next two months"
#: tola/db_translations.js:134
msgid "Key Performance Indicator (KPI)"
@@ -3167,24 +3429,12 @@ msgid "Economic Opportunity"
msgstr "Opportunité économique"
#. Translators: The main area of a program
-#: tola/db_translations.js:142
-msgid "Economic Opportunity / Opportunité économique / Oportunidad económica"
-msgstr ""
-
-#. Translators: The main area of a program
-#: tola/db_translations.js:146
+#: tola/db_translations.js:144
msgid "Good Governance and Peace"
msgstr "Bonne gouvernance et paix"
#. Translators: The main area of a program
-#: tola/db_translations.js:148
-msgid ""
-"Good Governance and Peace / Bonne gouvernance et paix / Buena gobernanza y "
-"paz"
-msgstr ""
-
-#. Translators: The main area of a program
-#: tola/db_translations.js:150
+#: tola/db_translations.js:146
msgid ""
"Resilience approach (tick this box if the program used a resilience approach)"
msgstr ""
@@ -3192,60 +3442,69 @@ msgstr ""
"approche de la résilience)"
#. Translators: The main area of a program
-#: tola/db_translations.js:152
+#: tola/db_translations.js:148
msgid "Water Security"
msgstr "Sécurité de l’eau"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:156
+#: tola/db_translations.js:152
msgid "Cash and Voucher Assistance"
msgstr "Aide en transferts monétaires et bons d’alimentation"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:158
+#: tola/db_translations.js:154
msgid "Direct"
msgstr "Direct"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:160
+#: tola/db_translations.js:156
msgid "Employment"
msgstr "Emploi"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:162
+#: tola/db_translations.js:158
msgid "Environment (DRR, Energy and Water)"
msgstr "Environnement (ressources renouvelables distribuées, énergie et eau)"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:164
+#: tola/db_translations.js:160
msgid "Financial Services"
msgstr "Services financiers"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:166
+#: tola/db_translations.js:162
msgid "Indirect"
msgstr "Indirect"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:168
+#: tola/db_translations.js:164
msgid "Infrastructure (non - WASH, non - energy)"
msgstr "Infrastructure (ne se rapporte ni à WASH ni à l’énergie)"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:170
+#: tola/db_translations.js:166
msgid "Nutrition"
msgstr "Nutrition"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:172
+#: tola/db_translations.js:168
msgid "Peace, Governance and Partnership"
msgstr "Paix, gouvernance, et partenariats"
#. Translators: One of several choices for what label/sector (i.e. development domain) a program is most closely associated with
-#: tola/db_translations.js:174
+#: tola/db_translations.js:170
msgid "Public Health (non - nutrition, non - WASH)"
msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
+#~ msgid "Donors"
+#~ msgstr "Bailleurs de fonds"
+
+#~ msgid "Fund Code"
+#~ msgstr "Code du fonds"
+
+#~ msgid "There was a network or server connection error."
+#~ msgstr "Une erreur réseau ou de connexion du serveur est survenue."
+
#, fuzzy
#~| msgid "Description"
#~ msgid "noscript"
@@ -3283,10 +3542,10 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "program participants or activities."
#~ msgstr ""
#~ "Les participants directs sont ceux qui ont reçu des avantages tangibles "
-#~ "dans le cadre du programme, en tant que participant actuel du programme "
-#~ "ou destinataire des avantages du programme prévu. Les participants "
-#~ "indirects sont ceux qui ont reçu un avantage tangible basé sur leur lien "
-#~ "avec des activités ou des participants du programme."
+#~ "dans le cadre du programme, en tant que participant actuel du programme ou "
+#~ "destinataire des avantages du programme prévu. Les participants indirects "
+#~ "sont ceux qui ont reçu un avantage tangible basé sur leur lien avec des "
+#~ "activités ou des participants du programme."
#~ msgid ""
#~ "Results are cumulative. The Life of Program result mirrors the latest "
@@ -3315,9 +3574,9 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "%s indicators have missing or invalid information. Please update your "
#~ "indicator template and upload again."
#~ msgstr[0] ""
-#~ "Les informations relatives à %s indicateur sont manquantes ou non "
-#~ "valides. Veuillez mettre à jour votre modèle d’indicateur avant de le "
-#~ "charger à nouveau."
+#~ "Les informations relatives à %s indicateur sont manquantes ou non valides. "
+#~ "Veuillez mettre à jour votre modèle d’indicateur avant de le charger à "
+#~ "nouveau."
#~ msgstr[1] ""
#~ "Les informations relatives à %s indicateurs sont manquantes ou non "
#~ "valides. Veuillez mettre à jour votre modèle d’indicateur avant de le "
@@ -3355,10 +3614,10 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "enregistrées"
#~ msgid ""
-#~ "Choose your results framework "
-#~ "template carefully! Once you begin building your "
-#~ "framework, it will not be possible to change templates without first "
-#~ "deleting all saved levels."
+#~ "Choose your results framework template "
+#~ "carefully! Once you begin building your framework, it will "
+#~ "not be possible to change templates without first deleting all saved "
+#~ "levels."
#~ msgstr ""
#~ "Choisissez bien la structure de votre "
#~ "cadre de résultats ! Lorsque vous commencez à concevoir "
@@ -3389,8 +3648,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "Choose your results framework template "
-#~ "carefully! Once you begin building your framework, it will not "
-#~ "be possible to change templates without first deleting all saved levels."
+#~ "carefully! Once you begin building your framework, it will not be "
+#~ "possible to change templates without first deleting all saved levels."
#~ msgstr ""
#~ "Choisissez bien la structure de votre "
#~ "cadre de résultats ! Lorsque vous commencez à concevoir votre "
@@ -3398,8 +3657,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "niveaux enregistrés au préalable."
#~ msgid ""
-#~ "If we make these changes, %s data record will no longer be associated "
-#~ "with the Life of Program target, and will need to be reassigned to a new "
+#~ "If we make these changes, %s data record will no longer be associated with "
+#~ "the Life of Program target, and will need to be reassigned to a new "
#~ "target.\n"
#~ "\n"
#~ " Proceed anyway?"
@@ -3443,10 +3702,9 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "Provide any additional details about how data quality will be ensured for "
-#~ "this specific indicator. Additional details may include specific roles "
-#~ "and responsibilities of team members for ensuring data quality and/or "
-#~ "specific data sources to be verified, reviewed, or triangulated, for "
-#~ "example."
+#~ "this specific indicator. Additional details may include specific roles and "
+#~ "responsibilities of team members for ensuring data quality and/or specific "
+#~ "data sources to be verified, reviewed, or triangulated, for example."
#~ msgstr ""
#~ "Fournissez des informations supplémentaires sur la façon dont la qualité "
#~ "des données sera assurée pour cet indicateur spécifique. Ces informations "
@@ -3483,9 +3741,9 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "1. Indicator rows are provided for each result level. You can delete "
#~ "indicator rows you do not need. You can also leave them empty and they "
#~ "will be ignored.\n"
-#~ "2. Required columns are highlighted with a dark background and an "
-#~ "asterisk (*) in the header row. Unrequired columns can be left empty but "
-#~ "cannot be deleted.\n"
+#~ "2. Required columns are highlighted with a dark background and an asterisk "
+#~ "(*) in the header row. Unrequired columns can be left empty but cannot be "
+#~ "deleted.\n"
#~ "3. When you are done, upload the template to the results framework or "
#~ "program page."
#~ msgstr ""
@@ -3502,8 +3760,7 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Enter indicators"
#~ msgstr "Saisir des indicateurs"
-#~ msgid ""
-#~ "This number is automatically generated through the results framework."
+#~ msgid "This number is automatically generated through the results framework."
#~ msgstr ""
#~ "Ce numéro est automatiquement généré par le biais du cadre de résultats."
@@ -3514,8 +3771,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "The {field_name} you selected is unavailable. Please select a different "
#~ "{field_name}."
#~ msgstr ""
-#~ "Le {field_name} sélectionné n’est pas disponible. Veuillez sélectionner "
-#~ "un autre {field_name}."
+#~ "Le {field_name} sélectionné n’est pas disponible. Veuillez sélectionner un "
+#~ "autre {field_name}."
#~ msgid "Indicator rows cannot be skipped."
#~ msgstr "Les lignes d’indicateurs ne peuvent pas être ignorées."
@@ -3576,9 +3833,6 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Category"
#~ msgstr "Catégorie"
-#~ msgid "Program ID"
-#~ msgstr "Identifiant du programme"
-
#~ msgid "Indicator ID"
#~ msgstr "Identifiant de l’indicateur"
@@ -3599,8 +3853,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "Indicators are currently grouped by an older version of indicator levels. "
-#~ "To group indicators according to the results framework, an admin will "
-#~ "need to adjust program settings."
+#~ "To group indicators according to the results framework, an admin will need "
+#~ "to adjust program settings."
#~ msgstr ""
#~ "Les indicateurs sont actuellement regroupés selon une précédente version "
#~ "de niveaux d’indicateur. Afin de regrouper les indicateurs selon le cadre "
@@ -3611,8 +3865,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "This disaggregation cannot be unselected, because it was already used in "
#~ "submitted program results."
#~ msgstr ""
-#~ "Cette désagrégation a déjà été utilisée au sein des résultats du "
-#~ "programme envoyés, c'est pourquoi elle ne peut pas être désélectionnée."
+#~ "Cette désagrégation a déjà été utilisée au sein des résultats du programme "
+#~ "envoyés, c'est pourquoi elle ne peut pas être désélectionnée."
#~ msgid "%(country_name)s disaggregations"
#~ msgstr "Désagrégations %(country_name)s"
@@ -3642,8 +3896,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "You can begin entering results on {program_start_date}, the program start "
#~ "date"
#~ msgstr ""
-#~ "Vous pouvez commencer à saisir des résultats le {program_start_date}, "
-#~ "date de début du programme"
+#~ "Vous pouvez commencer à saisir des résultats le {program_start_date}, date "
+#~ "de début du programme"
#~ msgid ""
#~ "Please select a date between {program_start_date} and {program_end_date}"
@@ -3886,20 +4140,17 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "administrator."
#~ msgstr ""
#~ "Identifier les objectifs stratégiques du pays auquel un indicateur "
-#~ "contribue nous permet de filtrer et d’analyser les ensembles "
-#~ "d’indicateurs liés. Les objectifs stratégiques du pays sont gérés par "
-#~ "l’administrateur de pays TolaData."
+#~ "contribue nous permet de filtrer et d’analyser les ensembles d’indicateurs "
+#~ "liés. Les objectifs stratégiques du pays sont gérés par l’administrateur "
+#~ "de pays TolaData."
#~ msgid ""
-#~ "Provide an indicator statement of the precise information needed to "
-#~ "assess whether intended changes have occurred."
+#~ "Provide an indicator statement of the precise information needed to assess "
+#~ "whether intended changes have occurred."
#~ msgstr ""
#~ "Fournir un relevé d’indicateur des informations précises nécessaires pour "
#~ "évaluer si les changements prévus ont eu lieu."
-#~ msgid "Number"
-#~ msgstr "Nombre"
-
#~ msgid ""
#~ "This number is displayed in place of the indicator number automatically "
#~ "generated through the results framework. An admin can turn on auto-"
@@ -3958,8 +4209,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "Select all relevant disaggregations. Disaggregations are managed by the "
-#~ "TolaData country administrator. Mercy Corps required disaggregations (e."
-#~ "g. SADD) are selected by default, but can be deselected when they are not "
+#~ "TolaData country administrator. Mercy Corps required disaggregations (e.g. "
+#~ "SADD) are selected by default, but can be deselected when they are not "
#~ "applicable to the indicator."
#~ msgstr ""
#~ "Sélectionnez toutes les désagrégations pertinentes. Les désagrégations "
@@ -3975,8 +4226,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr ""
#~ "Veuillez saisir une valeur numérique pour la mesure de base. Si vous ne "
#~ "connaissez pas encore la mesure de base ou si elle n’est pas applicable, "
-#~ "veuillez saisir un zéro ou cocher la case « Non applicable ». La mesure "
-#~ "de base pourra être modifiée plus tard."
+#~ "veuillez saisir un zéro ou cocher la case « Non applicable ». La mesure de "
+#~ "base pourra être modifiée plus tard."
#~ msgid "Life of Program (LoP) target"
#~ msgstr "Cible de la vie du programme (LoP)"
@@ -4053,12 +4304,12 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "utilisées par l’indicateur pour la collecte de données."
#~ msgid ""
-#~ "How frequently will you collect data for this indicator? The frequency "
-#~ "and timing of data collection should be based on how often data are "
-#~ "needed for management purposes, the cost of data collection, and the pace "
-#~ "of change anticipated. If an indicator requires multiple data sources "
-#~ "collected at varying frequencies, then it is recommended to select the "
-#~ "frequency at which all data will be collected for calculation."
+#~ "How frequently will you collect data for this indicator? The frequency and "
+#~ "timing of data collection should be based on how often data are needed for "
+#~ "management purposes, the cost of data collection, and the pace of change "
+#~ "anticipated. If an indicator requires multiple data sources collected at "
+#~ "varying frequencies, then it is recommended to select the frequency at "
+#~ "which all data will be collected for calculation."
#~ msgstr ""
#~ "À quelle fréquence comptez-vous recueillir des données pour cet "
#~ "indicateur ? Établissez votre calendrier de collecte des données en "
@@ -4070,12 +4321,11 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "seront collectées et traitées."
#~ msgid ""
-#~ "List all data points required for reporting. While some indicators "
-#~ "require a single data point (# of students attending training), others "
-#~ "require multiple data points for calculation. For example, to calculate "
-#~ "the % of students graduated from a training course, the two data points "
-#~ "would be # of students graduated (numerator) and # of students enrolled "
-#~ "(denominator)."
+#~ "List all data points required for reporting. While some indicators require "
+#~ "a single data point (# of students attending training), others require "
+#~ "multiple data points for calculation. For example, to calculate the % of "
+#~ "students graduated from a training course, the two data points would be # "
+#~ "of students graduated (numerator) and # of students enrolled (denominator)."
#~ msgstr ""
#~ "Établissez une liste de tous les points de données nécessaires à la "
#~ "présentation du rapport. Bien que certains indicateurs ne requirent qu’un "
@@ -4102,28 +4352,28 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "The method of analysis should be detailed enough to allow an auditor or "
-#~ "third party to reproduce the analysis or calculation and generate the "
-#~ "same result."
+#~ "third party to reproduce the analysis or calculation and generate the same "
+#~ "result."
#~ msgstr ""
#~ "La méthode d’analyse doit être suffisamment détaillée pour permettre à un "
-#~ "auditeur ou à une tierce partie de reproduire l’analyse ou le calcul et "
-#~ "de générer le même résultat."
+#~ "auditeur ou à une tierce partie de reproduire l’analyse ou le calcul et de "
+#~ "générer le même résultat."
#~ msgid ""
-#~ "Describe the primary uses of the indicator and its intended audience. "
-#~ "This is the most important field in an indicator plan, because it "
-#~ "explains the utility of the indicator. If an indicator has no clear "
-#~ "informational purpose, then it should not be tracked or measured. By "
-#~ "articulating who needs the indicator data, why and what they need it for, "
-#~ "teams ensure that only useful indicators are included in the program."
+#~ "Describe the primary uses of the indicator and its intended audience. This "
+#~ "is the most important field in an indicator plan, because it explains the "
+#~ "utility of the indicator. If an indicator has no clear informational "
+#~ "purpose, then it should not be tracked or measured. By articulating who "
+#~ "needs the indicator data, why and what they need it for, teams ensure that "
+#~ "only useful indicators are included in the program."
#~ msgstr ""
#~ "Décrivez les principales utilisations qui sont faites de l’indicateur et "
#~ "de son public cible. Ce champ est le plus important dans un plan "
-#~ "d’indicateurs car il justifie l’utilité de l’indicateur. Un indicateur "
-#~ "qui ne possède aucun but informatif clair ne devrait pas être suivi ou "
-#~ "mesuré. En précisant qui a besoin des données de l’indicateur, pour "
-#~ "quelle raison et dans quel but, les équipes peuvent s’assurer que seuls "
-#~ "les indicateurs utiles sont ajoutés au programme."
+#~ "d’indicateurs car il justifie l’utilité de l’indicateur. Un indicateur qui "
+#~ "ne possède aucun but informatif clair ne devrait pas être suivi ou mesuré. "
+#~ "En précisant qui a besoin des données de l’indicateur, pour quelle raison "
+#~ "et dans quel but, les équipes peuvent s’assurer que seuls les indicateurs "
+#~ "utiles sont ajoutés au programme."
#~ msgid ""
#~ "This frequency should make sense in relation to the data collection "
@@ -4138,15 +4388,15 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "List any limitations of the data used to calculate this indicator (e.g., "
#~ "issues with validity, reliability, accuracy, precision, and/or potential "
-#~ "for double counting.) Data issues can be related to indicator design, "
-#~ "data collection methods, and/or data analysis methods. Please be specific "
-#~ "and explain how data issues were addressed."
+#~ "for double counting.) Data issues can be related to indicator design, data "
+#~ "collection methods, and/or data analysis methods. Please be specific and "
+#~ "explain how data issues were addressed."
#~ msgstr ""
#~ "Établissez la liste des données utilisées pour calculer cet indicateur "
#~ "(par ex. : les problèmes de validité, de fiabilité, d’exactitude, de "
#~ "précision et/ou en cas de double comptage). Les problèmes relatifs aux "
-#~ "données peuvent être liés à la conception de l’indicateur, aux méthodes "
-#~ "de collecte de données et/ou aux méthodes d’analyse des données. Veuillez "
+#~ "données peuvent être liés à la conception de l’indicateur, aux méthodes de "
+#~ "collecte de données et/ou aux méthodes d’analyse des données. Veuillez "
#~ "être le plus précis possible et expliquer comment ces problèmes ont été "
#~ "abordés."
@@ -4206,12 +4456,6 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Period"
#~ msgstr "Période"
-#~ msgid "Start date"
-#~ msgstr "Date de début"
-
-#~ msgid "End date"
-#~ msgstr "Date de fin"
-
#~ msgid "Customsort"
#~ msgstr "Customsort"
@@ -4389,9 +4633,9 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr ""
#~ "\n"
#~ "\n"
-#~ " Un problème est survenu lors du chargement de cette page, "
-#~ "probablement à cause de la demande envoyée par votre navigateur Web. Nous "
-#~ "sommes désolés pour la gêne occasionnée.\n"
+#~ " Un problème est survenu lors du chargement de cette page, probablement "
+#~ "à cause de la demande envoyée par votre navigateur Web. Nous sommes "
+#~ "désolés pour la gêne occasionnée.\n"
#~ "
\n"
#~ "\n"
#~ " Veuillez essayer de recharger la page. Si ce problème persiste, \n"
#~ "\n"
#~ " If you need assistance, please contact the TolaData "
-#~ "team.\n"
+#~ "index.php/TOLA:Section_06/en\" target=\"_blank\">contact the TolaData team."
+#~ "
\n"
#~ "
\n"
#~ "\n"
#~ " [Error 500: internal server error]"
@@ -4465,9 +4709,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr ""
#~ "\n"
#~ "\n"
-#~ " Un problème est survenu lors du chargement de cette page, "
-#~ "probablement avec le serveur. Nous sommes désolés pour la gêne "
-#~ "occasionnée.\n"
+#~ " Un problème est survenu lors du chargement de cette page, probablement "
+#~ "avec le serveur. Nous sommes désolés pour la gêne occasionnée.\n"
#~ "
\n"
#~ "\n"
#~ " Si vous avez besoin d'aide, veuillez for target periods completed to date"
#~ msgstr ""
-#~ "Les statistiques du programme pour les périodes cibles complétées "
-#~ "à cette date"
+#~ "Les statistiques du programme pour les périodes cibles complétées à "
+#~ "cette date"
#~ msgid ""
#~ "\n"
@@ -4689,8 +4931,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ " "
#~ msgstr ""
#~ "\n"
-#~ " Tous les indicateurs ont des cibles "
-#~ "manquantes.
\n"
+#~ " Tous les indicateurs ont des cibles manquantes."
+#~ "
\n"
#~ " Rendez-vous sur la page du programme pour définir des cibles."
#~ "p>\n"
@@ -4812,8 +5054,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "All details about this indicator and results recorded to the indicator "
-#~ "will be permanently removed. For future reference, please provide a "
-#~ "reason for deleting this indicator."
+#~ "will be permanently removed. For future reference, please provide a reason "
+#~ "for deleting this indicator."
#~ msgstr ""
#~ "Les détails concernant cet indicateur ainsi que les résultats enregistrés "
#~ "seront définitivement supprimés. À titre de référence, veuillez justifier "
@@ -4823,9 +5065,9 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "Modifying target values will affect program metrics for this indicator. "
#~ "For future reference, please provide a reason for modifying target values."
#~ msgstr ""
-#~ "La modification des valeurs cibles affectera les statistiques du "
-#~ "programme pour cet indicateur. À titre de référence, veuillez justifier "
-#~ "la modification des valeurs cibles."
+#~ "La modification des valeurs cibles affectera les statistiques du programme "
+#~ "pour cet indicateur. À titre de référence, veuillez justifier la "
+#~ "modification des valeurs cibles."
#~ msgid "All details about this indicator will be permanently removed."
#~ msgstr ""
@@ -4843,8 +5085,7 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "For future reference, please provide a reason for deleting this target."
-#~ msgstr ""
-#~ "À titre de référence, veuillez justifier la suppression de la cible."
+#~ msgstr "À titre de référence, veuillez justifier la suppression de la cible."
#~ msgid "This indicator is missing required details and cannot be saved."
#~ msgstr ""
@@ -4853,8 +5094,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "Modifying target values will affect program metrics for this indicator."
#~ msgstr ""
-#~ "La modification des valeurs cibles affectera les statistiques du "
-#~ "programme pour cet indicateur."
+#~ "La modification des valeurs cibles affectera les statistiques du programme "
+#~ "pour cet indicateur."
#~ msgid "Your changes will be recorded in a change log."
#~ msgstr ""
@@ -4873,14 +5114,14 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr "Indicateurs en pourcentage (%%)"
#~ msgid ""
-#~ "Life of Program (LoP) targets are now automatically displayed. The "
-#~ "current LoP target does not match what was manually entered in the past "
-#~ "-- %%s. You may need to update your target values."
+#~ "Life of Program (LoP) targets are now automatically displayed. The current "
+#~ "LoP target does not match what was manually entered in the past -- %%s. "
+#~ "You may need to update your target values."
#~ msgstr ""
#~ "Les cibles de vie du programme (LoP) s’affichent désormais "
#~ "automatiquement. La cible LoP actuelle ne correspond pas aux données "
-#~ "précédemment saisies — %%s. Il se peut que vos valeurs cibles "
-#~ "nécessitent une mise à jour."
+#~ "précédemment saisies — %%s. Il se peut que vos valeurs cibles nécessitent "
+#~ "une mise à jour."
#~ msgid ""
#~ "This program previously had a LoP target of %%s. Life of Program (LoP) "
@@ -4920,8 +5161,7 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr "Veuillez remplir tous les champs obligatoires dans l’onglet Résumé."
#~ msgid "Please complete all required fields in the Performance tab."
-#~ msgstr ""
-#~ "Veuillez compléter tous les champs requis dans l’onglet Performance."
+#~ msgstr "Veuillez compléter tous les champs requis dans l’onglet Performance."
#~ msgid "Summary"
#~ msgstr "Résumé"
@@ -4938,46 +5178,20 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Indicator Plan"
#~ msgstr "Plan de l’indicateur"
-#~ msgid "Program period"
-#~ msgstr "Période du programme"
-
-#~ msgid ""
-#~ "Program reporting dates are required in order to view program metrics"
+#~ msgid "Program reporting dates are required in order to view program metrics"
#~ msgstr ""
#~ "Les dates de rapport du programme sont requises pour afficher les "
#~ "statistiques du programme"
-#~ msgid ""
-#~ "The program period is used in the setup of periodic targets and in "
-#~ "Indicator Performance Tracking Tables (IPTT). TolaData initially sets the "
-#~ "program period to include the program’s official start and end dates, as "
-#~ "recorded in the Grant and Award Information Tracker (GAIT) system. The "
-#~ "program period may be adjusted to align with the program’s indicator plan."
-#~ msgstr ""
-#~ "La période de déclaration du programme est utilisée dans l’établissement "
-#~ "des cibles périodiques et dans les tableaux de suivi des performances des "
-#~ "indicateurs (IPTT). TolaData définit initialement la période de "
-#~ "déclaration pour inclure les dates de début et de fin officielles du "
-#~ "programme, telles qu’elles sont enregistrées dans le système de suivi des "
-#~ "informations sur les subventions et les récompenses (GAIT). La période de "
-#~ "déclaration peut être ajustée pour s’harmoniser avec le plan "
-#~ "d’indicateurs du programme."
-
-#~ msgid "GAIT program dates"
-#~ msgstr "Dates du programme GAIT"
-
-#~ msgid "Program start and end dates"
-#~ msgstr "Les dates de début et de fin de déclaration de votre programme"
-
#~ msgid ""
#~ "\n"
#~ " While a program may begin and end any day "
-#~ "of the month, program periods must begin on the first day of the month "
-#~ "and end on the last day of the month. Please note that the program start "
-#~ "date can only be adjusted before periodic "
-#~ "targets are set up and a program begins submitting performance results."
-#~ "span> The program end date can be moved later at any time, but can't be "
-#~ "moved earlier once periodic targets are set up.\n"
+#~ "of the month, program periods must begin on the first day of the month and "
+#~ "end on the last day of the month. Please note that the program start date "
+#~ "can only be adjusted before periodic targets are "
+#~ "set up and a program begins submitting performance results. The "
+#~ "program end date can be moved later at any time, but can't be moved "
+#~ "earlier once periodic targets are set up.\n"
#~ " "
#~ msgstr ""
#~ "\n"
@@ -4995,68 +5209,28 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "\n"
#~ " While a program may begin and end any day "
-#~ "of the month, program periods must begin on the first day of the month "
-#~ "and end on the last day of the month. Please note that the program start "
-#~ "date can only be adjusted before targets are "
-#~ "set up and a program begins submitting performance results. "
-#~ "Because this program already has periodic targets set up, only the "
-#~ "program end date can be moved later.\n"
+#~ "of the month, program periods must begin on the first day of the month and "
+#~ "end on the last day of the month. Please note that the program start date "
+#~ "can only be adjusted before targets are set up "
+#~ "and a program begins submitting performance results. Because this "
+#~ "program already has periodic targets set up, only the program end date can "
+#~ "be moved later.\n"
#~ " "
#~ msgstr ""
#~ "\n"
-#~ " Alors qu’un programme peut commencer et "
-#~ "se terminer n’importe quel jour du mois, les périodes du programme "
-#~ "doivent débuter le premier jour du mois et se terminer le dernier jour du "
-#~ "mois. Veuillez noter que la date de début du programme peut seulement "
-#~ "être ajustée avant que des cibles ont été "
-#~ "spécifiées et qu’un programme commence à transmettre des résultats de "
-#~ "performance. Puisque ce programme a déjà des cibles périodiques "
-#~ "définies, seule la date de fin de programme peut être déplacée "
-#~ "ultérieurement.\n"
+#~ " Alors qu’un programme peut commencer et se "
+#~ "terminer n’importe quel jour du mois, les périodes du programme doivent "
+#~ "débuter le premier jour du mois et se terminer le dernier jour du mois. "
+#~ "Veuillez noter que la date de début du programme peut seulement être "
+#~ "ajustée avant que des cibles ont été spécifiées "
+#~ "et qu’un programme commence à transmettre des résultats de performance."
+#~ "span> Puisque ce programme a déjà des cibles périodiques définies, seule "
+#~ "la date de fin de programme peut être déplacée ultérieurement.\n"
#~ " "
#~ msgid "Back to Homepage"
#~ msgstr "Retour à la page d’accueil"
-#~ msgid ""
-#~ "Error. Could not retrieve data from server. Please report this to the "
-#~ "Tola team."
-#~ msgstr ""
-#~ "Erreur. Impossible de récupérer les données à partir du serveur. Veuillez "
-#~ "le signaler à l’équipe de Tola."
-
-#~ msgid "Unavailable"
-#~ msgstr "Non disponible"
-
-#~ msgid ""
-#~ "This action may result in changes to your periodic targets. If you have "
-#~ "already set up periodic targets for your indicators, you may need to "
-#~ "enter additional target values to cover the entire reporting period. For "
-#~ "future reference, please provide a reason for modifying the reporting "
-#~ "period."
-#~ msgstr ""
-#~ "Cette action peut modifier vos cibles périodiques. Si des cibles "
-#~ "périodiques ont déjà été définies pour vos indicateurs, vous devrez "
-#~ "entrer de nouvelles valeurs de cibles afin de couvrir l’ensemble de la "
-#~ "période du rapport. À titre de référence, veuillez fournir une "
-#~ "justification pour la modification de la période du rapport."
-
-#~ msgid ""
-#~ "You must enter values for the reporting start and end dates before saving."
-#~ msgstr ""
-#~ "Vous devez saisir des valeurs pour les dates de début et de fin du "
-#~ "rapport avant d’enregistrer."
-
-#~ msgid "The end date must come after the start date."
-#~ msgstr "La date de fin vient toujours après la date de démarrage."
-
-#~ msgid "Reporting period updated"
-#~ msgstr "Période de déclaration mise à jour"
-
-#~ msgid "There was a problem saving your changes."
-#~ msgstr ""
-#~ "Un problème est survenu lors de l’enregistrement de vos modifications."
-
#~ msgid ""
#~ "\n"
#~ " %(get_target_frequency_label)s targets\n"
@@ -5080,24 +5254,24 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ " "
#~ msgstr ""
#~ "\n"
-#~ " Non cumulatif (NC) : Les résultats "
-#~ "de la période cible sont calculés automatiquement à partir des données "
+#~ " Non cumulatif (NC) : Les résultats de "
+#~ "la période cible sont calculés automatiquement à partir des données "
#~ "collectées durant la période. Le résultat de la vie du programme est la "
#~ "somme des valeurs de la période cible.\n"
#~ " "
#~ msgid ""
#~ "\n"
-#~ " Cumulative (C): Target period "
-#~ "results automatically include data from previous periods. The Life of "
-#~ "Program result mirrors the latest period value.\n"
+#~ " Cumulative (C): Target period results "
+#~ "automatically include data from previous periods. The Life of Program "
+#~ "result mirrors the latest period value.\n"
#~ " "
#~ msgstr ""
#~ "\n"
#~ " Cumulatif (C) : Les résultats de la "
#~ "période cible incluent automatiquement les données des périodes "
-#~ "précédentes. Le résultat de la vie du programme reflète la dernière "
-#~ "valeur de période.\n"
+#~ "précédentes. Le résultat de la vie du programme reflète la dernière valeur "
+#~ "de période.\n"
#~ " "
#~ msgid ""
@@ -5108,9 +5282,9 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ " "
#~ msgstr ""
#~ "\n"
-#~ " Cumulatif (C) : Le résultat de la "
-#~ "vie du programme reflète le dernier résultat de période. Aucun calcul "
-#~ "n’est effectué avec les résultats.\n"
+#~ " Cumulatif (C) : Le résultat de la vie "
+#~ "du programme reflète le dernier résultat de période. Aucun calcul n’est "
+#~ "effectué avec les résultats.\n"
#~ " "
#~ msgid ""
@@ -5147,16 +5321,15 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr "Créer un rapport IPTT"
#~ msgid "Reports will be available after the program start date."
-#~ msgstr ""
-#~ "Les rapports seront disponibles après la date de début du programme."
+#~ msgstr "Les rapports seront disponibles après la date de début du programme."
#~ msgid "Program setup"
#~ msgstr "Installation du programme"
#~ msgid ""
#~ "\n"
-#~ " Before adding indicators and performance results, we need to know "
-#~ "your program's\n"
+#~ " Before adding indicators and performance results, we need to know your "
+#~ "program's\n"
#~ " target period in which you want the result to appear."
+#~ "occurred after the target period ended, we recommend entering the last day "
+#~ "of the target period in which you want the result to appear."
#~ msgstr ""
#~ "Cette date détermine l’endroit où le résultat apparaît dans les tableaux "
#~ "de suivi des indicateurs de performance. Si la collecte des données a eu "
#~ "lieu pendant la période cible, nous vous recommandons de renseigner le "
-#~ "dernier jour où vous avez collecté des données. Si la collecte des "
-#~ "données a eu lieu après la fin de la période cible, nous vous "
-#~ "recommandons de renseigner le dernier jour de la période cible au sein "
-#~ "de laquelle vous souhaitez voir apparaître le résultat"
+#~ "dernier jour où vous avez collecté des données. Si la collecte des données "
+#~ "a eu lieu après la fin de la période cible, nous vous recommandons de "
+#~ "renseigner le dernier jour de la période cible au sein de laquelle vous "
+#~ "souhaitez voir apparaître le résultat"
#~ msgid ""
#~ "All results for this indicator will be measured against the Life of "
@@ -5402,21 +5575,21 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "The actual value matches the target value, plus or minus 15%%. So if your "
#~ "target is 100 and your result is 110, the indicator is 10%% above target "
-#~ "and on track.
Please note that if your indicator has a "
-#~ "decreasing direction of change, then “above” and “below” are switched. In "
-#~ "that case, if your target is 100 and your result is 200, your indicator "
-#~ "is 50%% below target and not on track.
See our documentation for more information."
-#~ msgstr ""
-#~ "La valeur réelle correspond à la valeur cible à 15%% près. Ainsi, si "
-#~ "votre cible est 100 et votre résultat 110, l’indicateur est 10%% au-"
-#~ "dessus de la cible et est donc sur la bonne voie.
Veuillez noter "
-#~ "que si le sens de changement de votre indicateur est décroissant, les "
-#~ "indicateurs « au-dessus » et « en dessous » sont alors inversés. Dans ce "
-#~ "cas, si votre cible est 100 et votre résultat 200, votre indicateur est "
-#~ "50%% en dessous de la cible, ce qui veut dire qu’il n’est pas sur la "
-#~ "bonne voie.
See our "
+#~ "documentation for more information."
+#~ msgstr ""
+#~ "La valeur réelle correspond à la valeur cible à 15%% près. Ainsi, si votre "
+#~ "cible est 100 et votre résultat 110, l’indicateur est 10%% au-dessus de la "
+#~ "cible et est donc sur la bonne voie.
Veuillez noter que si le "
+#~ "sens de changement de votre indicateur est décroissant, les indicateurs « "
+#~ "au-dessus » et « en dessous » sont alors inversés. Dans ce cas, si votre "
+#~ "cible est 100 et votre résultat 200, votre indicateur est 50%% en dessous "
+#~ "de la cible, ce qui veut dire qu’il n’est pas sur la bonne voie.
Consultez "
#~ "notre documentation pour plus d’informations."
@@ -5427,8 +5600,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ " "
#~ msgstr ""
#~ "\n"
-#~ " %(low)s %% sont >%(margin)s%% "
-#~ "en dessous de la cible\n"
+#~ " %(low)s %% sont >%(margin)s%% en "
+#~ "dessous de la cible\n"
#~ " "
#~ msgid ""
@@ -5447,8 +5620,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ " data-read-only=\"%(read_only)s\">\n"
#~ " Program period\n"
#~ "
\n"
-#~ " is
%(program."
-#~ "percent_complete)s%% complete\n"
+#~ " is
%(program.percent_complete)s"
+#~ "%% complete\n"
#~ " "
#~ msgstr ""
#~ "\n"
@@ -5480,18 +5653,17 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ " "
#~ msgstr ""
#~ "\n"
-#~ "
La valeur réelle représente %(percent_met)s%% de "
-#~ "la valeur cible. Un indicateur est en bonne voie si le résultat "
-#~ "n’est ni inférieur à 85%% de la cible, ni supérieur à 115%% de la cible. "
-#~ "
\n"
+#~ " La valeur réelle représente %(percent_met)s%% de la "
+#~ "valeur cible. Un indicateur est en bonne voie si le résultat "
+#~ "n’est ni inférieur à 85%% de la cible, ni supérieur à 115%% de la cible. "
+#~ "p>\n"
#~ "
Pensez à prendre en compte la direction du changement "
#~ "souhaité lorsque vous réfléchissez au statut d’un indicateur.
\n"
#~ " "
#~ msgid "An error occured while logging in with your Okta account."
#~ msgstr ""
-#~ "Une erreur est survenue lors de la connexion à l’aide de votre compte "
-#~ "Okta."
+#~ "Une erreur est survenue lors de la connexion à l’aide de votre compte Okta."
#~ msgid "Please contact the TolaData team for assistance."
#~ msgstr "Veuillez contacter l’équipe TolaData pour obtenir de l’aide."
@@ -5515,8 +5687,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "You can request an account from your TolaData administrator."
#~ msgstr ""
-#~ "Vous pouvez faire une demande de compte en contactant votre "
-#~ "administrateur TolaData."
+#~ "Vous pouvez faire une demande de compte en contactant votre administrateur "
+#~ "TolaData."
#~ msgid ""
#~ "\n"
@@ -5554,16 +5726,16 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "\n"
-#~ " Please enter a correct username and password. Note "
-#~ "that both fields may be case-sensitive. Did you forget your password? Click here to reset it.
\n"
+#~ " Please enter a correct username and password. Note that "
+#~ "both fields may be case-sensitive. Did you forget your password? Click here to reset it.
\n"
#~ " "
#~ msgstr ""
#~ "\n"
-#~ " Veuillez saisir un nom d’utilisateur et un mot de "
-#~ "passe valides. Notez que chaque champ peut être sensible à la casse. Vous "
-#~ "avez oublié votre mot de passe ? Cliquez ici pour le réinitialiser.
\n"
+#~ " Veuillez saisir un nom d’utilisateur et un mot de passe "
+#~ "valides. Notez que chaque champ peut être sensible à la casse. Vous avez "
+#~ "oublié votre mot de passe ? Cliquez ici "
+#~ "pour le réinitialiser.
\n"
#~ " "
#~ msgid "Need help logging in?"
@@ -5586,8 +5758,7 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "\n"
#~ " Your password has been changed.
\n"
-#~ " Log in"
-#~ "p>\n"
+#~ "
Log in
\n"
#~ " "
#~ msgstr ""
#~ "\n"
@@ -5614,8 +5785,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ " \n"
#~ " - Check your spam or junk mail folder.
\n"
#~ " - Verify that you entered your email address correctly.
\n"
-#~ " - Verify that you entered the email address associated with "
-#~ "your TolaData account.
\n"
+#~ " - Verify that you entered the email address associated with your "
+#~ "TolaData account.
\n"
#~ "
\n"
#~ "\n"
#~ " If you are using a mercycorps.org address to log in:
\n"
@@ -5629,8 +5800,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ " "
#~ msgstr ""
#~ "\n"
-#~ " Nous avons envoyé un e-mail à l’adresse que vous nous avez "
-#~ "indiquée.
\n"
+#~ " Nous avons envoyé un e-mail à l’adresse que vous nous avez indiquée."
+#~ "
\n"
#~ "\n"
#~ " Si vous n’avez pas reçu d’e-mail, veuillez suivre la procédure "
#~ "suivante :
\n"
@@ -5638,23 +5809,22 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ " \n"
#~ " - Sur votre compte e-mail, vérifiez les dossiers Spams ou "
#~ "Courrier indésirable.
\n"
-#~ " - Assurez-vous d’avoir correctement saisi votre adresse e-mail."
-#~ "
\n"
+#~ " - Assurez-vous d’avoir correctement saisi votre adresse e-mail."
+#~ "li>\n"
#~ "
- Assurez-vous d’avoir saisi l’adresse e-mail associée à votre "
#~ "compte TolaData.
\n"
#~ "
\n"
#~ "\n"
#~ " Si vous vous connectez à l’aide d’une adresse e-mail mercycorps."
#~ "org :
\n"
-#~ " Retournez sur la page de connexion "
-#~ "et cliquez sur Se connecter avec une adresse e-mail mercycorps."
-#~ "org.
\n"
+#~ " Retournez sur la page de connexion et "
+#~ "cliquez sur Se connecter avec une adresse e-mail mercycorps.org."
+#~ "strong>
\n"
#~ "\n"
-#~ " Si vous vous connectez à l’aide d’une adresse e-mail Gmail :"
-#~ "h4>\n"
-#~ "
Retournez sur la page de connexion "
-#~ "et cliquez sur Se connecter avec Gmail. Nous ne "
-#~ "pouvons pas réinitialiser votre mot de passe Gmail.
\n"
+#~ " Si vous vous connectez à l’aide d’une adresse e-mail Gmail :
\n"
+#~ " Retournez sur la page de connexion et "
+#~ "cliquez sur Se connecter avec Gmail. Nous ne pouvons "
+#~ "pas réinitialiser votre mot de passe Gmail.
\n"
#~ " "
#~ msgid ""
@@ -5674,8 +5844,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "général, cela se produit lorsque vous cliquez sur le lien « oubli du mot "
#~ "de passe ».\n"
#~ "\n"
-#~ "Si vous n’êtes pas à l’origine de cette demande, vous pouvez ignorer cet "
-#~ "e-mail.\n"
+#~ "Si vous n’êtes pas à l’origine de cette demande, vous pouvez ignorer cet e-"
+#~ "mail.\n"
#~ "\n"
#~ "Si vous souhaitez modifier votre mot de passe, veuillez cliquer sur le "
#~ "lien suivant et définir un nouveau mot de passe :\n"
@@ -5712,8 +5882,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr ""
#~ "Votre sélection de langue détermine le format de nombre attendu lorsque "
#~ "vous saisissez des cibles et des résultats. Votre langue détermine "
-#~ "également la façon dont les nombres sont affichés sur la page du "
-#~ "programme et les rapports, y compris les exportations Excel."
+#~ "également la façon dont les nombres sont affichés sur la page du programme "
+#~ "et les rapports, y compris les exportations Excel."
#~ msgid "Number formatting conventions"
#~ msgstr "Conventions de formatage des nombres"
@@ -5750,8 +5920,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr "Espace"
#~ msgid ""
-#~ "Warning: This may be a badly formatted web address. It should be "
-#~ "something like https://domain.com/path/to/file or https://docs.google.com/"
+#~ "Warning: This may be a badly formatted web address. It should be something "
+#~ "like https://domain.com/path/to/file or https://docs.google.com/"
#~ "spreadsheets/d/OIjwljwoihgIHOEies"
#~ msgstr ""
#~ "Avertissement : Cette adresse Web semble ne pas être formatée "
@@ -5771,9 +5941,9 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "on your hard drive. The link you provided does not appear to be a file "
#~ "path or web link."
#~ msgstr ""
-#~ "Vous devez fournir un emplacement ou un chemin du fichier qui ne se "
-#~ "trouve pas sur votre disque dur local. Le lien que vous avez fourni ne "
-#~ "semble pas être un chemin du fichier ni un lien Web."
+#~ "Vous devez fournir un emplacement ou un chemin du fichier qui ne se trouve "
+#~ "pas sur votre disque dur local. Le lien que vous avez fourni ne semble pas "
+#~ "être un chemin du fichier ni un lien Web."
#~ msgid "Filter by:"
#~ msgstr "Filtrer par :"
@@ -5934,9 +6104,6 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Indicator created"
#~ msgstr "Indicateur créé"
-#~ msgid "Indicator changed"
-#~ msgstr "Indicateur modifié"
-
#~ msgid "Indicator deleted"
#~ msgstr "Indicateur supprimé"
@@ -5958,9 +6125,6 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Percentage"
#~ msgstr "Pourcentage (%)"
-#~ msgid "Funding status"
-#~ msgstr "Statut de financement"
-
#~ msgid "Cost center"
#~ msgstr "Centre de coût"
@@ -6038,8 +6202,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "connecter en utilisant leur nom d’utilisateur et leur mot de passe Okta."
#~ msgid ""
-#~ "Mercy Corps accounts are managed by Okta. Mercy Corps employees should "
-#~ "log in using their Okta username and password."
+#~ "Mercy Corps accounts are managed by Okta. Mercy Corps employees should log "
+#~ "in using their Okta username and password."
#~ msgstr ""
#~ "Les comptes Mercy Corps sont gérés par Okta. Les employés de Mercy Corps "
#~ "doivent se connecter en utilisant leur nom d’utilisateur et leur mot de "
@@ -6079,9 +6243,6 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Places"
#~ msgstr "Lieux"
-#~ msgid "Map"
-#~ msgstr "Carte"
-
#~ msgid "Demographic Information"
#~ msgstr "Informations démographiques"
@@ -6179,12 +6340,6 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Enable Public Dashboard"
#~ msgstr "Activer le tableau de bord public"
-#~ msgid "Program Start Date"
-#~ msgstr "Date de début du programme"
-
-#~ msgid "Program End Date"
-#~ msgstr "Date de fin du programme"
-
#~ msgid "Reporting Period Start Date"
#~ msgstr "Date de début de la période de déclaration"
@@ -6488,9 +6643,6 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "User programs updated"
#~ msgstr "Programmes de l’utilisateur mis à jour"
-#~ msgid "This field must be unique"
-#~ msgstr "Ce champ doit être unique"
-
#~ msgid "Direction of change (not applicable)"
#~ msgstr "Direction du changement (non applicable)"
@@ -6546,8 +6698,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid ""
#~ "Standard disaggregations are entered by the administrator for the entire "
-#~ "organizations. If you are not seeing any here, please contact your "
-#~ "system administrator."
+#~ "organizations. If you are not seeing any here, please contact your system "
+#~ "administrator."
#~ msgstr ""
#~ "Les désagrégations standard sont entrées par l’administrateur pour "
#~ "l’ensemble des organisations. Si vous n’en voyez aucun ici, veuillez "
@@ -6683,8 +6835,7 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Filtered by (Status): %(status|default_if_none:'')s"
#~ msgstr "Filtré par (Status) : %(status|default_if_none:'')s b>"
-#~ msgid ""
-#~ "Filtered by (Program): %(filtered_program|default_if_none:'')s"
+#~ msgid "Filtered by (Program): %(filtered_program|default_if_none:'')s"
#~ msgstr ""
#~ "Filtré par (Programme) : %(filtered_program|default_if_none:'')s b>"
@@ -6829,15 +6980,9 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "Contact"
#~ msgstr "Contact"
-#~ msgid "Fund code"
-#~ msgstr "Code du fonds"
-
#~ msgid "User with Approval Authority"
#~ msgstr "Utilisateur avec autorité d’approbation"
-#~ msgid "Fund"
-#~ msgstr "Fonds"
-
#~ msgid "Tola Approval Authority"
#~ msgstr "Autorité d’approbation de Tola"
@@ -6920,8 +7065,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr "Date de demande"
#~ msgid ""
-#~ "Please be specific in your name. Consider that your Project Name "
-#~ "includes WHO, WHAT, WHERE, HOW"
+#~ "Please be specific in your name. Consider that your Project Name includes "
+#~ "WHO, WHAT, WHERE, HOW"
#~ msgstr ""
#~ "Veuillez être précis dans votre nom. Considérez que votre nom de projet "
#~ "inclut QUI, QUOI, OÙ, COMMENT"
@@ -6995,8 +7140,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr "Nombre estimé de bénéficiaires indirects"
#~ msgid ""
-#~ "This is a calculation - multiply direct beneficiaries by average "
-#~ "household size"
+#~ "This is a calculation - multiply direct beneficiaries by average household "
+#~ "size"
#~ msgstr ""
#~ "C’est un calcul - multipliez les bénéficiaires directs par la taille "
#~ "moyenne des ménages"
@@ -7243,9 +7388,6 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgid "site"
#~ msgstr "site"
-#~ msgid "Complete"
-#~ msgstr "Achevée"
-
#~ msgid "Project Components"
#~ msgstr "Composants du projet"
@@ -7299,8 +7441,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ "de rapport se situe dans le futur."
#~ msgid ""
-#~ "Your program administrator must initialize this program before you will "
-#~ "be able to view or edit it"
+#~ "Your program administrator must initialize this program before you will be "
+#~ "able to view or edit it"
#~ msgstr ""
#~ "Ce programme doit être initialisé par votre administrateur de programme "
#~ "avant de pouvoir être visible ou modifié"
@@ -7433,8 +7575,8 @@ msgstr "Santé publique (ne se rapporte ni à la nutrition ni à WASH)"
#~ msgstr "Cibles vs réels"
#~ msgid ""
-#~ "View results organized by target period for indicators that share the "
-#~ "same target frequency."
+#~ "View results organized by target period for indicators that share the same "
+#~ "target frequency."
#~ msgstr ""
#~ "Voir les résultats organisés par période cible pour les indicateurs qui "
#~ "partagent la même fréquence cible."
diff --git a/tola/management/commands/alias_user_emails.py b/tola/management/commands/alias_user_emails.py
new file mode 100644
index 000000000..12f80b69b
--- /dev/null
+++ b/tola/management/commands/alias_user_emails.py
@@ -0,0 +1,78 @@
+from django.core.management.base import BaseCommand
+from django.contrib.auth.models import User
+import socket
+
+
+class Command(BaseCommand):
+ help = "Command to alias user emails with the tola@mercycorps.org email"
+ production_host_name = 'neikeata'
+ alias_email = 'tola+'
+ domain = '@mercycorps.org'
+ # Matches string that start with tola+ and end with @mercycorps.org
+ regex = r'^tola\+[a-zA-Z0-9._%+-]+@mercycorps\.org$'
+
+ def add_arguments(self, parser):
+ parser.add_argument(
+ '--execute', action='store_true', help='Without this flag, the command will only be a dry run'
+ )
+ parser.add_argument(
+ '--supress_output', action='store_true', help='Hide text output'
+ )
+
+ def get_users(self):
+ """
+ Returns Users that have the following conditions:
+ Email has not already been aliased (checked from the regex)
+ User is not a superuser
+ Email is not null
+ Email is not blank
+ """
+ return User.objects.exclude(email__iregex=self.regex).exclude(is_superuser=True).exclude(email__isnull=True).exclude(email__exact='')
+
+ def slugify_non_mc_email(self, email):
+ chars = ['@', '.', '+']
+ for char in chars:
+ email = email.replace(char, '_')
+ return email
+
+ def handle_non_mc_email(self, email):
+ """
+ Slugify non mercycorps emails then add the @mercycorps.org domain
+ """
+ email = self.slugify_non_mc_email(email)
+ email += self.domain
+ return email
+
+ def handle(self, *args, **options):
+ """
+ Loops through Users and prefixes each email with tola+
+ """
+ emails_aliased = 0
+
+ if not options['supress_output'] and not options['execute']:
+ self.stdout.write('Missing execute flag. This will be a dry run.')
+
+ # Prevent the script from running on production
+ if socket.gethostname() == self.production_host_name:
+ if not options['supress_output']:
+ self.stdout.write('Production environment skipping the command.')
+ return
+
+ users = self.get_users()
+
+ if not options['supress_output']:
+ self.stdout.write(f'Emails to be aliased: {len(users)}')
+
+ for user in users:
+ email = user.email
+
+ if not user.email.endswith(self.domain):
+ email = self.handle_non_mc_email(email)
+
+ if options['execute']:
+ user.email = self.alias_email + email
+ user.save()
+ emails_aliased += 1
+
+ if not options['supress_output']:
+ self.stdout.write(f'Emails Aliased: {emails_aliased}')
diff --git a/tola/settings/base.py b/tola/settings/base.py
index 5da9d3d37..9819d0a05 100644
--- a/tola/settings/base.py
+++ b/tola/settings/base.py
@@ -265,6 +265,7 @@
'safedelete',
'django_mysql',
'adminsortable2',
+ 'admin_auto_filters',
)
# Apps specific for this project go here.
@@ -385,6 +386,18 @@
'filename': 'django_info.log',
'formatter': 'standard'
},
+ 'sharepoint_file': {
+ 'level': 'INFO',
+ 'class': 'logging.FileHandler',
+ 'filename': 'sharepoint_info.log',
+ 'formatter': 'standard'
+ },
+ 'program_upload': {
+ 'level': 'INFO',
+ 'class': 'logging.FileHandler',
+ 'filename': 'program_upload.log',
+ 'formatter': 'standard'
+ },
'admin_email': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
@@ -402,6 +415,16 @@
'level': 'ERROR',
'propagate': True,
},
+ 'workflow.utils': {
+ 'handlers': ['sharepoint_file'],
+ 'level': 'INFO',
+ 'propagate': True
+ },
+ 'workflow.management.commands.upload_IDAA_programs': {
+ 'handlers': ['program_upload'],
+ 'level': 'INFO',
+ 'propagate': True
+ },
'indicators': {
'handlers': ['file', 'admin_email'],
'level': 'ERROR',
diff --git a/tola/settings/local.py b/tola/settings/local.py
index 1edbcdc3b..ffd3f29df 100644
--- a/tola/settings/local.py
+++ b/tola/settings/local.py
@@ -108,6 +108,7 @@ def read_yaml(yaml_path):
SERVER_EMAIL = app_settings['SERVER_EMAIL']
EMAIL_BACKEND = app_settings.get('EMAIL_BACKEND', 'django.core.mail.backends.smtp.EmailBackend')
+SKIP_USER_EMAILS = app_settings.get('SKIP_USER_EMAILS', True)
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
@@ -122,6 +123,8 @@ def read_yaml(yaml_path):
LOGGING['handlers']['file']['filename'] = app_settings['LOGFILE']
LOGGING['handlers']['info_file']['filename'] = os.path.join(dirname(app_settings['LOGFILE']), 'django_info.log')
+LOGGING['handlers']['sharepoint_file']['filename'] = os.path.join(dirname(app_settings['LOGFILE']), 'sharepoint_info.log')
+LOGGING['handlers']['program_upload']['filename'] = os.path.join(dirname(app_settings['LOGFILE']), 'program_upload.log')
# Sets the current year for participant count reporting
REPORTING_YEAR_START_DATE = app_settings['REPORTING_YEAR_START_DATE']
@@ -141,6 +144,16 @@ def read_yaml(yaml_path):
MCAPI_BASE_URL = app_settings.get('MCAPI_BASE_URL', None)
PROGRAM_API_TOKEN = app_settings['PROGRAM_API_TOKEN']
+MS_TENANT_ID = app_settings['MS_TENANT_ID']
+MS_TOLADATA_CLIENT_ID = app_settings['MS_TOLADATA_CLIENT_ID']
+MS_TOLADATA_CLIENT_SECRET = app_settings['MS_TOLADATA_CLIENT_SECRET']
+MSRCOMMS_ID = app_settings['MSRCOMMS_ID']
+PROGRAM_PROJECT_LIST_ID = app_settings['PROGRAM_PROJECT_LIST_ID']
+GAITID_LIST_ID = app_settings['GAITID_LIST_ID']
+COUNTRYCODES_LIST_ID = app_settings['COUNTRYCODES_LIST_ID']
+
+TOLA_DEVS_EMAIL = app_settings['TOLA_DEVS_EMAIL']
+
SOCIAL_AUTH_SAML_SP_ENTITY_ID = app_settings['SOCIAL_AUTH_SAML_SP_ENTITY_ID']
SOCIAL_AUTH_SAML_SP_PUBLIC_CERT = app_settings['SOCIAL_AUTH_SAML_SP_PUBLIC_CERT']
SOCIAL_AUTH_SAML_SP_PRIVATE_KEY = app_settings['SOCIAL_AUTH_SAML_SP_PRIVATE_KEY']
diff --git a/tola/settings/test.py b/tola/settings/test.py
index d7a600f90..9b35eb5d9 100644
--- a/tola/settings/test.py
+++ b/tola/settings/test.py
@@ -1,7 +1,34 @@
from tola.settings.base import *
import sys
-from os import path
import datetime
+import os
+import yaml
+
+
+def read_yaml(yaml_path):
+ with open(yaml_path) as f:
+ data = yaml.load(f, Loader=yaml.FullLoader)
+ return data
+
+
+SETTINGS_DIR = os.path.dirname(os.path.abspath(__file__))
+CONFIG_DIR = os.path.abspath(os.path.join(SETTINGS_DIR, os.pardir, os.pardir, 'config'))
+
+# This works only on local when settings.secret.yml is present
+# Comment out @skip in test_program_upload_class and test_management_commands when testing on local
+
+try:
+ app_settings = read_yaml(os.path.join(CONFIG_DIR, 'settings.secret.yml'))
+ MS_TENANT_ID = app_settings['MS_TENANT_ID']
+ MS_TOLADATA_CLIENT_ID = app_settings['MS_TOLADATA_CLIENT_ID']
+ MS_TOLADATA_CLIENT_SECRET = app_settings['MS_TOLADATA_CLIENT_SECRET']
+ MSRCOMMS_ID = app_settings['MSRCOMMS_ID']
+ PROGRAM_PROJECT_LIST_ID = app_settings['PROGRAM_PROJECT_LIST_ID']
+ GAITID_LIST_ID = app_settings['GAITID_LIST_ID']
+ COUNTRYCODES_LIST_ID = app_settings['COUNTRYCODES_LIST_ID']
+except FileNotFoundError:
+ pass
+
TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test'
@@ -52,6 +79,8 @@ def __getitem__(self, item):
DEBUG = False
+# SKIP_USER_EMAILS = app_settings.get('SKIP_USER_EMAILS', True)
+
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
diff --git a/tola/util.py b/tola/util.py
index ba614151b..508cab144 100755
--- a/tola/util.py
+++ b/tola/util.py
@@ -121,26 +121,6 @@ def formatFloat(value):
return ("%.2f" % value).rstrip('0').rstrip('.')
-# Get GAIT data from mcapi
-def get_GAIT_data(gait_ids):
- """
- May throw requests.exceptions.RequestException
- """
- cleaned_ids = []
- for gait_id in gait_ids:
- try:
- cleaned_ids.append(str(int(gait_id)))
- except ValueError:
- pass
-
- base_url = settings.PROGRAM_API_BASE_URL
- params = {'gaitid': ','.join(cleaned_ids)}
- headers = {'Authorization': 'Token {}'.format(settings.PROGRAM_API_TOKEN)}
- response = requests.get(base_url, params=params, headers=headers)
-
- return json.loads(response.content)['results']
-
-
def get_dates_from_gait_response(gait_response):
"""take a gait response (from get_GAIT_data) and parse out start and end dates, return dict"""
try:
@@ -157,38 +137,6 @@ def get_dates_from_gait_response(gait_response):
}
-def append_GAIT_dates(program):
- if not program.gaitid:
- return _('Program does not have a GAIT id')
-
- try:
- gait_data = get_GAIT_data([program.gaitid])
- except requests.exceptions.RequestException:
- logger.exception('Error reaching GAIT service. ')
- # Translators: There was a network or server error trying to reach the GAIT service
- return _('There was a problem connecting to the GAIT server.')
-
- if len(gait_data) != 1:
- # Translators: A request for {gait_id} to the GAIT server returned no results
- return _('The GAIT ID {gait_id} could not be found.').format(
- gait_id=program.gaitid)
-
- dates = get_dates_from_gait_response(gait_data[0])
- if not program.start_date:
- program.start_date = dates['start_date']
-
- if not program.end_date:
- program.end_date = dates['end_date']
- reporting_dates = get_reporting_dates(program)
- if not program.reporting_period_start:
- program.reporting_period_start = reporting_dates['reporting_period_start']
-
- if not program.reporting_period_end:
- program.reporting_period_end = reporting_dates['reporting_period_end']
-
- return None
-
-
def get_reporting_dates(program):
"""takes a program with start and end dates and returns default reporting_period start and end dates"""
if program.start_date is None:
diff --git a/tola_management/admin.py b/tola_management/admin.py
index 13be29d96..7882c0543 100755
--- a/tola_management/admin.py
+++ b/tola_management/admin.py
@@ -1,6 +1,84 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
-
from django.contrib import admin
+from admin_auto_filters.filters import AutocompleteFilter
+from tola_management.models import (
+ CountryAdminAuditLog,
+ OrganizationAdminAuditLog,
+ ProgramAdminAuditLog,
+ ProgramAuditLog,
+ UserManagementAuditLog,
+)
+
+
+######################
+# Autocomplete filters
+######################
+
+class AdminUserFilter(AutocompleteFilter):
+ title = 'Admin user'
+ field_name = 'admin_user'
+
+
+class UserFilter(AutocompleteFilter):
+ title = 'User'
+ field_name = 'user'
+
+
+class ProgramFilter(AutocompleteFilter):
+ title = 'Program'
+ field_name = 'program'
+
+
+class ModifiedUserFilter(AutocompleteFilter):
+ title = 'Modified User'
+ field_name = 'modified_user'
+
+
+######################
+# Custom admin screens
+######################
+
+@admin.register(UserManagementAuditLog)
+class UserManagementAuditLogAdmin(admin.ModelAdmin):
+ autocomplete_fields = ('admin_user', 'modified_user')
+ readonly_fields = ('date',)
+ list_display = ('date', 'admin_user', 'modified_user', 'change_type')
+ search_fields = ('admin_user', 'modified_user')
+ list_filter = ('change_type', AdminUserFilter, ModifiedUserFilter)
+
+
+@admin.register(ProgramAuditLog)
+class ProgramAuditLogAdmin(admin.ModelAdmin):
+ autocomplete_fields = ('program', 'user', 'indicator', 'level')
+ readonly_fields = ('rationale_selections', 'date')
+ list_display = ('date', 'change_type', 'user', 'program', 'indicator', 'level')
+ search_fields = ('user__name', 'program__name', 'indicator__name', 'level__name')
+ list_filter = ('change_type', UserFilter, ProgramFilter)
+
+
+@admin.register(ProgramAdminAuditLog)
+class ProgramAdminAuditLogAdmin(admin.ModelAdmin):
+ autocomplete_fields = ('program', 'admin_user')
+ readonly_fields = ('date',)
+ list_display = ('date', 'admin_user', 'program', 'change_type')
+ search_fields = ('admin_user__name', 'program__name',)
+ list_filter = ('change_type', AdminUserFilter, ProgramFilter)
+
+
+@admin.register(OrganizationAdminAuditLog)
+class OrganizationAdminAuditLogAdmin(admin.ModelAdmin):
+ autocomplete_fields = ('admin_user',)
+ readonly_fields = ('date',)
+ list_display = ('date', 'admin_user', 'organization', 'change_type')
+ search_fields = ('admin_user__name',)
+ list_filter = ('change_type', AdminUserFilter, 'organization__name')
+
-# Register your models here.
+@admin.register(CountryAdminAuditLog)
+class CountryAdminAuditLogAdmin(admin.ModelAdmin):
+ autocomplete_fields = ('admin_user', 'disaggregation_type')
+ readonly_fields = ('date',)
+ list_display = ('date', 'admin_user', 'country', 'change_type')
+ search_fields = ('admin_user__name', 'disaggregation_type__disaggregation_type')
+ list_filter = ('change_type', AdminUserFilter, 'country')
diff --git a/tola_management/apps.py b/tola_management/apps.py
index b4078ac76..1077ad9a8 100755
--- a/tola_management/apps.py
+++ b/tola_management/apps.py
@@ -6,3 +6,4 @@
class TolaManagementConfig(AppConfig):
name = 'tola_management'
+ verbose_name = 'Tola Management'
diff --git a/tola_management/migrations/0014_verbose_names.py b/tola_management/migrations/0014_verbose_names.py
new file mode 100644
index 000000000..811f9c56a
--- /dev/null
+++ b/tola_management/migrations/0014_verbose_names.py
@@ -0,0 +1,37 @@
+# Generated by Django 3.2.12 on 2022-10-06 18:44
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('tola_management', '0013_auto_20200928_1459'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='auditlogrationaleselection',
+ options={'verbose_name': 'Audit Log Rationale Selection', 'verbose_name_plural': 'Audit Log Rationale Selections'},
+ ),
+ migrations.AlterModelOptions(
+ name='countryadminauditlog',
+ options={'verbose_name': 'Country Admin Audit Log', 'verbose_name_plural': 'Country Admin Audit Logs'},
+ ),
+ migrations.AlterModelOptions(
+ name='organizationadminauditlog',
+ options={'verbose_name': 'Organization Admin Audit Log', 'verbose_name_plural': 'Organization Admin Audit Logs'},
+ ),
+ migrations.AlterModelOptions(
+ name='programadminauditlog',
+ options={'verbose_name': 'Program Admin Audit Log', 'verbose_name_plural': 'Program Admin Audit Logs'},
+ ),
+ migrations.AlterModelOptions(
+ name='programauditlog',
+ options={'verbose_name': 'Program Audit Log', 'verbose_name_plural': 'Program Audit Logs'},
+ ),
+ migrations.AlterModelOptions(
+ name='usermanagementauditlog',
+ options={'verbose_name': 'User Management Audit Log', 'verbose_name_plural': 'User Management Audit Logs'},
+ ),
+ ]
diff --git a/tola_management/models.py b/tola_management/models.py
index 98844167c..b180d3f89 100755
--- a/tola_management/models.py
+++ b/tola_management/models.py
@@ -125,6 +125,8 @@ class Meta:
),
)
]
+ verbose_name = _("User Management Audit Log")
+ verbose_name_plural = _("User Management Audit Logs")
@property
def field_map(self):
@@ -336,6 +338,10 @@ class AuditLogRationaleSelection(models.Model):
# Translators: this is one option in a dropdown list of reasons to change a program's details while in progress
implementation_delays = models.BooleanField(_('Implementation delays'), default=False)
+ class Meta:
+ verbose_name = _("Audit Log Rationale Selection")
+ verbose_name_plural = _("Audit Log Rationale Selections")
+
@classmethod
def ordered_options(cls):
"""orders options by translated name, OTHER last"""
@@ -371,6 +377,9 @@ def pretty_list(self):
"""returns list of selected value names, human readable"""
return [_(label) for (option, field, label) in self.ordered_options() if getattr(self, field, False)]
+ def __str__(self):
+ return ', '.join(self.pretty_list)
+
class ProgramAuditLog(models.Model, DiffableLog):
program = models.ForeignKey(Program, on_delete=models.CASCADE, related_name="audit_logs")
@@ -385,6 +394,10 @@ class ProgramAuditLog(models.Model, DiffableLog):
rationale = models.TextField(null=True)
rationale_selections = models.OneToOneField(AuditLogRationaleSelection, null=True, on_delete=models.SET_NULL)
+ class Meta:
+ verbose_name = _("Program Audit Log")
+ verbose_name_plural = _("Program Audit Logs")
+
@property
def field_map(self):
return {
@@ -801,16 +814,26 @@ class ProgramAdminAuditLog(models.Model, DiffableLog):
previous_entry = models.TextField()
new_entry = models.TextField()
+ class Meta:
+ verbose_name = _("Program Admin Audit Log")
+ verbose_name_plural = _("Program Admin Audit Logs")
+
@property
def field_map(self):
return {
'gaitid': _("GAIT ID"),
- 'name': _("Name"),
+ 'name': _("Program name"),
'funding_status': _("Funding status"),
'cost_center': _("Cost center"),
'description': _("Description"),
'sectors': _("Sectors"),
- 'countries': _("Countries")
+ 'countries': _("Countries"),
+ 'external_program_id': _('Program ID'),
+ 'start_date': _('Program start date'),
+ 'end_date': _('Program end date'),
+ 'outcome_themes': _('Outcome themes'),
+ 'donors': _('Donors'),
+ 'fund_codes': _('Fund codes')
}
@property
@@ -858,6 +881,10 @@ class OrganizationAdminAuditLog(models.Model, DiffableLog):
previous_entry = models.TextField()
new_entry = models.TextField()
+ class Meta:
+ verbose_name = _("Organization Admin Audit Log")
+ verbose_name_plural = _("Organization Admin Audit Logs")
+
@property
def field_map(self):
return {
@@ -917,6 +944,10 @@ class CountryAdminAuditLog(models.Model, DiffableLog):
previous_entry = models.TextField()
new_entry = models.TextField()
+ class Meta:
+ verbose_name = _("Country Admin Audit Log")
+ verbose_name_plural = _("Country Admin Audit Logs")
+
@property
def field_map(self):
return {
@@ -930,6 +961,8 @@ def field_map(self):
"is_archived": _("Archived"),
# Translators: Heading for list of disaggregation categories in a particular disaggregation type.
"disaggregation_type": _("Disaggregation"),
+ "country_name": _("Country name"),
+ "country_code": _("Country code")
}
@property
@@ -947,6 +980,7 @@ def change_type_map(self):
"country_disaggregation_unarchived": _("Country disaggregation unarchived"),
# Translators: Heading for data that tracks when the categories of a data disaggregation that has been assigned to country have been updated.
"country_disaggregation_categories_updated": _("Country disaggregation categories updated"),
+ "country_created": _("Country created")
}
@property
@@ -970,3 +1004,14 @@ def diff_list(self):
"new": json.loads(self.new_entry)['disaggregation_type']
})
return diffs
+
+ @classmethod
+ def created(cls, created_by, country):
+ new_entry = json.dumps(country.admin_logged_fields)
+ entry = cls(
+ admin_user=created_by,
+ new_entry=new_entry,
+ country=country,
+ change_type='country_created'
+ )
+ entry.save()
diff --git a/tola_management/programadmin.py b/tola_management/programadmin.py
index f5a030d2e..164081765 100644
--- a/tola_management/programadmin.py
+++ b/tola_management/programadmin.py
@@ -2,7 +2,6 @@
from collections import OrderedDict
import pytz
from django.db import transaction
-#from django.db.models import Q, Count, Subquery, OuterRef
from django.db import models
from django.http import HttpResponse, JsonResponse
from django.utils import timezone
@@ -18,14 +17,19 @@
IntegerField,
ValidationError,
BooleanField,
+ DateField,
DateTimeField,
- SerializerMethodField
+ SerializerMethodField,
+ JSONField
)
from openpyxl import Workbook, utils
from openpyxl.cell import Cell
from openpyxl.styles import Alignment, Font, PatternFill
+from dateutil.relativedelta import relativedelta
+from datetime import date
+
from workflow.models import (
Program,
TolaUser,
@@ -34,11 +38,15 @@
Sector,
ProgramAccess,
CountryAccess,
+ GaitID,
+ FundCode,
+ IDAASector
)
from indicators.models import (
Indicator,
Level,
+ IDAAOutcomeTheme
)
from tola_management.models import (
@@ -48,10 +56,6 @@
from tola_management.permissions import HasProgramAdminAccess
-from tola.util import append_GAIT_dates
-
-
-
def get_audit_log_workbook(ws, program):
@@ -218,12 +222,12 @@ def get_paginated_response(self, data):
return response
-class NestedSectorSerializer(Serializer):
+class NestedIDAASectorSerializer(Serializer):
def to_representation(self, sector):
return sector.id
def to_internal_value(self, data):
- sector = Sector.objects.get(pk=data)
+ sector = IDAASector.objects.get(pk=data)
return sector
@@ -237,45 +241,125 @@ def to_internal_value(self, data):
return country
+class NestedFundCodeSerializer(ModelSerializer):
+ fund_code = IntegerField(max_value=99999)
+
+ class Meta:
+ model = FundCode
+ fields = ('fund_code',)
+
+ def to_representation(self, instance):
+ return instance.fund_code
+
+ def to_internal_value(self, data):
+ return data
+
+
+class NestedGaitIDSerializer(ModelSerializer):
+ gaitid = IntegerField(max_value=99999)
+ donor = CharField(max_length=255, required=False, allow_blank=True, allow_null=True)
+ donor_dept = CharField(required=False, allow_blank=True, allow_null=True)
+ fund_code = NestedFundCodeSerializer(many=True, required=False)
+
+ class Meta:
+ model = GaitID
+ fields = ('gaitid', 'donor', 'donor_dept', 'fund_code')
+
+ def to_representation(self, instance):
+ return {
+ 'gaitid': instance.gaitid,
+ 'donor': instance.donor,
+ 'donor_dept': instance.donor_dept,
+ 'fund_code': [fc.fund_code for fc in instance.fundcode_set.all()]
+ }
+
+
+class NestedIDAAOutcomeThemeSerializer(Serializer):
+
+ def to_representation(self, outcome_theme):
+ return outcome_theme.id
+
+ def to_internal_value(self, data):
+ if type(data) is list:
+ pk = data[0]
+ else:
+ pk = data
+ idaa_outcome_theme = IDAAOutcomeTheme.objects.get(pk=pk)
+ return idaa_outcome_theme
+
+
class ProgramAdminSerializer(ModelSerializer):
- id = IntegerField(allow_null=True, required=False)
- name = CharField(required=True, max_length=255)
- funding_status = CharField(required=True)
- gaitid = CharField(required=False, allow_blank=True, allow_null=True)
- fundCode = CharField(required=False, allow_blank=True, allow_null=True, source='cost_center')
- description = CharField(allow_null=True, allow_blank=True)
- sector = NestedSectorSerializer(required=True, many=True)
+ id = IntegerField(read_only=True)
+ external_program_id = IntegerField(required=False, allow_null=True, max_value=99999)
+ gaitid = NestedGaitIDSerializer(required=False, many=True)
+ idaa_sector = NestedIDAASectorSerializer(required=False, many=True)
country = NestedCountrySerializer(required=True, many=True)
auto_number_indicators = BooleanField(required=False)
- #organizations = IntegerField(source='organization_count', read_only=True)
- #program_users = IntegerField(source='program_users_count', read_only=True)
- #onlyOrganizationId = IntegerField(source='only_organization_id', read_only=True)
organizations = SerializerMethodField()
program_users = SerializerMethodField()
onlyOrganizationId = SerializerMethodField()
_using_results_framework = IntegerField(required=False, allow_null=True)
+ start_date = DateField(required=False, allow_null=True)
+ end_date = DateField(required=False, allow_null=True)
+ idaa_outcome_theme = NestedIDAAOutcomeThemeSerializer(many=True, required=False)
def validate_country(self, values):
if not values:
- raise ValidationError("This field may not be blank.")
+ raise ValidationError(_("This field may not be blank."))
+ return values
+
+ def validate_dates(self, start_date, end_date):
+ if start_date and end_date:
+ if start_date > end_date:
+ raise ValidationError(_("The program start date may not be after the program end date."))
+ if end_date < start_date:
+ raise ValidationError(_("The program end date may not be before the program start date."))
+
+ def validate(self, data):
+ if data.get('start_date') and data.get('end_date'):
+ self.validate_dates(data['start_date'], data['end_date'])
+ return super().validate(data)
+
+ # def validate_start_date(self, value):
+ # past_limit = date.today() - relativedelta(years=10)
+ # if value and value < past_limit:
+ # raise ValidationError(_("The program start date may not be more than 10 years in the past."))
+ # return value
+ #
+ # def validate_end_date(self, value):
+ # future_limit = date.today() + relativedelta(years=10)
+ # if value and value > future_limit:
+ # raise ValidationError(_("The program end date may not be more than 10 years in the future."))
+
+ def validate_gaitid(self, values):
+ checked_gaitids = []
+ for gid in values:
+ if gid['gaitid'] in checked_gaitids:
+ # error
+ raise ValidationError(_("Duplicate GAIT ID numbers are not allowed."))
+ else:
+ checked_gaitids.append(gid['gaitid'])
+
return values
class Meta:
model = Program
fields = (
'id',
+ 'external_program_id',
'name',
'funding_status',
'gaitid',
- 'fundCode',
- 'description',
- 'sector',
+ 'idaa_sector',
'country',
'organizations',
'program_users',
'onlyOrganizationId',
'auto_number_indicators',
- '_using_results_framework'
+ '_using_results_framework',
+ 'start_date',
+ 'end_date',
+ 'idaa_outcome_theme'
)
@staticmethod
@@ -321,18 +405,35 @@ def create(self, validated_data):
validated_data['_using_results_framework'] is None:
validated_data.pop('_using_results_framework')
country = validated_data.pop('country')
- sector = validated_data.pop('sector')
- if not validated_data['gaitid']:
- validated_data.pop('gaitid')
+ sector = validated_data.pop('idaa_sector', [])
+ gaitid_data = validated_data.pop('gaitid', [])
+ idaa_outcome_theme = validated_data.pop('idaa_outcome_theme', [])
program = super(ProgramAdminSerializer, self).create(validated_data)
program.country.add(*country)
- program.sector.add(*sector)
+ program.idaa_sector.add(*sector)
+ program.idaa_outcome_theme.add(*idaa_outcome_theme)
program.save()
+
+ for gid in gaitid_data:
+ gaitid = GaitID.objects.create(gaitid=gid['gaitid'], program_id=program.id)
+ if gid.get('donor'):
+ gaitid.donor = gid['donor']
+ if gid.get('donor_dept'):
+ gaitid.donor_dept = gid['donor_dept']
+ gaitid.save()
+
+ if gid.get('fund_code'):
+ for fund_code in gid['fund_code']:
+ if fund_code:
+ new_fund_code = FundCode(fund_code=fund_code, gaitid=gaitid)
+ new_fund_code.save()
+
ProgramAdminAuditLog.created(
program=program,
created_by=self.context.get('request').user.tola_user,
entry=program.admin_logged_fields,
)
+
return program
@transaction.atomic
@@ -353,15 +454,46 @@ def update(self, instance, validated_data):
added_countries = [x for x in incoming_countries if x not in original_countries]
removed_countries = [x for x in original_countries if x not in incoming_countries]
- original_sectors = instance.sector.all()
- incoming_sectors = validated_data.pop('sector')
+ original_sectors = instance.idaa_sector.all()
+ incoming_sectors = validated_data.pop('idaa_sector', [])
added_sectors = [x for x in incoming_sectors if x not in original_sectors]
removed_sectors = [x for x in original_sectors if x not in incoming_sectors]
+ original_outcome_theme = instance.idaa_outcome_theme.all()
+ incoming_outcome_theme = validated_data.pop('idaa_outcome_theme', [])
+ added_outcome_theme = [x for x in incoming_outcome_theme if x not in original_outcome_theme]
+ removed_outcome_theme = [x for x in original_outcome_theme if x not in incoming_outcome_theme]
+
+ gaitid_data = validated_data.pop('gaitid', [])
+
+ for gid in gaitid_data:
+ gaitid_obj, created = GaitID.objects.get_or_create(gaitid=gid['gaitid'], program_id=instance.id)
+ if gid.get('donor'):
+ gaitid_obj.donor = gid['donor']
+ if gid.get('donor_dept'):
+ gaitid_obj.donor_dept = gid['donor_dept']
+ gaitid_obj.save()
+
+ if gid.get('fund_code'):
+ for fund_code in gid['fund_code']:
+ _ = FundCode.objects.get_or_create(fund_code=fund_code, gaitid=gaitid_obj)
+
+ if not created:
+ for previous_fund_code in gaitid_obj.fundcode_set.all():
+ if previous_fund_code.fund_code not in gid['fund_code']:
+ previous_fund_code.delete()
+
+ for previous_gaitid in instance.gaitid.all():
+ if previous_gaitid.gaitid not in [gid['gaitid'] for gid in gaitid_data]:
+ previous_gaitid.delete()
+
+
instance.country.remove(*removed_countries)
instance.country.add(*added_countries)
- instance.sector.remove(*removed_sectors)
- instance.sector.add(*added_sectors)
+ instance.idaa_sector.remove(*removed_sectors)
+ instance.idaa_sector.add(*added_sectors)
+ instance.idaa_outcome_theme.remove(*removed_outcome_theme)
+ instance.idaa_outcome_theme.add(*added_outcome_theme)
ProgramAccess.objects.filter(program=instance, country__in=removed_countries).delete()
@@ -474,6 +606,14 @@ def base_queryset(cls):
'sector',
queryset=Sector.objects.select_related(None).order_by().only('id')
),
+ models.Prefetch(
+ 'idaa_outcome_theme',
+ queryset=IDAAOutcomeTheme.objects.select_related(None).order_by().only('id', 'name')
+ ),
+ models.Prefetch(
+ 'idaa_sector',
+ queryset=IDAASector.objects.select_related(None).order_by().only('id')
+ ),
models.Prefetch(
'country',
queryset=Country.objects.select_related(None).order_by().only('id')
@@ -497,6 +637,15 @@ def base_queryset(cls):
),
),
to_attr='country_with_users'
+ ),
+ models.Prefetch(
+ 'gaitid',
+ queryset=GaitID.objects.select_related(None).order_by().prefetch_related(
+ models.Prefetch(
+ 'fundcode_set',
+ queryset=FundCode.objects.order_by().only('fund_code')
+ )
+ )
)
)
return queryset
@@ -524,9 +673,9 @@ def get_queryset(self):
if countryFilter:
queryset = queryset.filter(country__in=countryFilter)
- sectorFilter = params.getlist('sectors[]')
+ sectorFilter = params.getlist('idaa_sectors[]')
if sectorFilter:
- queryset = queryset.filter(sector__in=sectorFilter)
+ queryset = queryset.filter(idaa_sector__in=sectorFilter)
usersFilter = params.getlist('users[]')
if usersFilter:
@@ -642,16 +791,3 @@ def gait(self, request, pk=None, gaitid=None):
'&q=&kw=&GrantNumber=&CostCenter=&GrantID={0}&GrantMin=&SSD=&USD=&'
'SED=&UED=&Emergency=').format(gaitid)
return JsonResponse(response)
-
- @action(detail=True, methods=['put'], url_path='sync_gait_dates')
- def sync_gait_dates(self, request, pk):
- program = Program.objects.get(pk=pk)
-
- # TODO: do something better than strings here...
- gait_error = append_GAIT_dates(program)
-
- program.save()
-
- return JsonResponse({
- 'gait_error': gait_error,
- })
diff --git a/tola_management/tests/test_programadmin_serializer.py b/tola_management/tests/test_programadmin_serializer.py
new file mode 100644
index 000000000..d9519ae8e
--- /dev/null
+++ b/tola_management/tests/test_programadmin_serializer.py
@@ -0,0 +1,196 @@
+from django import test
+from workflow.models import Country, IDAASector, Program
+from indicators.models import IDAAOutcomeTheme
+from rest_framework.test import APIClient
+from factories.workflow_models import UserFactory
+from django.shortcuts import reverse
+from unittest import skip
+
+
+class TestProgramAdminSerializer(test.TestCase):
+ list_url = 'tolamanagementprograms-list'
+ detail_url = 'tolamanagementprograms-detail'
+ error_messages = {
+ 'external_program_id': ['This field may not be null.'],
+ 'name': ['This field may not be blank.'],
+ 'funding_status': ['This field may not be blank.'],
+ 'country': ['This field may not be blank.'],
+ 'start_date': ['Date has wrong format. Use one of these formats instead: YYYY-MM-DD.', 'The program start date may not be more than 10 years in the past.'],
+ 'end_date': ['Date has wrong format. Use one of these formats instead: YYYY-MM-DD.', 'The program end date may not be more than 10 years in the future.'],
+ 'gaitid': ['Duplicate GAIT ID numbers are not allowed.', 'A valid integer is required.', 'Ensure this value is less than or equal to 99999.']
+ }
+
+ def setUp(self):
+ self.default_sector = IDAASector(sector='Agriculture')
+ self.default_sector.save()
+
+ self.default_outcome_theme = IDAAOutcomeTheme(name='Food Security')
+ self.default_outcome_theme.save()
+
+ self.default_country = Country(country='Afghanistan', code='AF')
+ self.default_country.save()
+
+ user = UserFactory(first_name="first", last_name="last", username="program-admin-test", is_superuser=True)
+ user.set_password('password')
+ user.save()
+
+ self.client = APIClient()
+ self.client.login(username="program-admin-test", password="password")
+
+ @property
+ def empty_program(self):
+ return {
+ "external_program_id": None,
+ "name": "",
+ "funding_status": "",
+ "start_date": "",
+ "end_date": "",
+ "gaitid": [],
+ "country": [],
+ "idaa_sector": [],
+ "idaa_outcome_theme": []
+ }
+
+ @property
+ def default_program(self):
+ return {
+ "external_program_id": 1234,
+ "name": "Program Test",
+ "funding_status": "Funded",
+ "start_date": "2022-01-01",
+ "end_date": "2024-01-01",
+ "gaitid": [
+ {
+ "gaitid": 1234,
+ "donor": "donor",
+ "donor_dept": "donordept",
+ "fund_code": [30123, 30321]
+ },
+ {
+ "gaitid": 4321,
+ "donor": "donor",
+ "donor_dept": "donordept",
+ "fund_code": [30111, 30222]
+ }
+ ],
+ "country": [self.default_country.id],
+ "idaa_sector": [self.default_sector.id],
+ "idaa_outcome_theme": [self.default_outcome_theme.id],
+ }
+
+ @property
+ def demo_program(self):
+ return {
+ "name": "Program Test",
+ "funding_status": "Funded",
+ "country": [self.default_country.id],
+ "gaitid": [
+ {
+ "gaitid": 7654,
+ }]
+ }
+
+ def assert_errors(self, response):
+ for key, _ in self.empty_program.items():
+ if key in self.error_messages and key in response:
+ for error_message in response[key]:
+ self.assertIn(error_message, self.error_messages[key])
+
+ def test_create(self):
+ response = self.client.post(reverse(self.list_url), data=self.default_program, format='json')
+
+ self.assertEqual(response.status_code, 201)
+
+ def test_create_program_with_empty_fields(self):
+ data = self.demo_program
+ response = self.client.post(reverse(self.list_url), data=data, format='json')
+
+ self.assertEqual(response.status_code, 201)
+
+ def test_invalid_create(self):
+ data = self.empty_program
+ response = self.client.post(reverse(self.list_url), data=data, format='json')
+
+ self.assertEqual(response.status_code, 400)
+
+ self.assert_errors(response.json())
+
+ @skip("Not currently limiting start and end date")
+ def test_invalid_values(self):
+ data = self.default_program
+ data['start_date'] = '2000-01-01'
+ data['end_date'] = '2050-01-01'
+ response = self.client.post(reverse(self.list_url), data=data, format='json')
+
+ self.assertEqual(response.status_code, 400)
+
+ self.assert_errors(response.json())
+
+ def test_duplicate_gaitids(self):
+ data = self.default_program
+ data['gaitid'].append(data['gaitid'][0])
+ response = self.client.post(reverse(self.list_url), data=data, format='json')
+
+ self.assertEqual(response.status_code, 400)
+
+ self.assert_errors(response.json())
+
+ def test_nan_gaitid_fundcodes(self):
+ data = self.default_program
+ data['gaitid'][0]['gaitid'] = 'aaaa'
+ data['gaitid'][0]['fund_code'].append('aaaa')
+ response = self.client.post(reverse(self.list_url), data=data, format='json')
+
+ self.assertEqual(response.status_code, 400)
+
+ self.assert_errors(response.json()['gaitid'])
+
+ def test_max_value_gaitid_fundcodes(self):
+ data = self.default_program
+ data['gaitid'][0]['gaitid'] = 999999
+ data['gaitid'][0]['fund_code'].append(999999)
+ response = self.client.post(reverse(self.list_url), data=data, format='json')
+
+ self.assertEqual(response.status_code, 400)
+
+ self.assert_errors(response.json()['gaitid'])
+
+ def test_update_program(self):
+ data = self.default_program
+
+ response = self.client.post(reverse(self.list_url), data=data, format='json')
+
+ self.assertEqual(response.status_code, 201)
+
+ data['name'] = 'Program Update'
+ data['gaitid'].pop(1)
+ data['gaitid'].append({
+ "gaitid": 2233,
+ "donor": "donor",
+ "donor_dept": "donordept",
+ "fund_code": [30123, 30321]
+ })
+
+ response = self.client.put(reverse(self.detail_url, kwargs={'pk': response.json()['id']}), data=data, format='json')
+
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(len(response.json()['gaitid']), 2)
+ self.assertEqual(response.json()['name'], 'Program Update')
+
+ def test_update_program_with_empty_fields(self):
+ data = self.demo_program
+
+ response = self.client.post(reverse(self.list_url), data=data, format='json')
+
+ self.assertEqual(response.status_code, 201)
+
+ data['start_date'] = '2022-2-1'
+ data['end_date'] = '2023-12-28'
+ data['gaitid'].pop()
+
+ response = self.client.put(reverse(self.detail_url, kwargs={'pk': response.json()['id']}), data=data,
+ format='json')
+
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(len(response.json()['gaitid']), 0)
+ self.assertEqual(response.json()['name'], 'Program Test')
diff --git a/tola_management/tests/test_programadmin_viewset.py b/tola_management/tests/test_programadmin_viewset.py
index d61d1a151..498aff56f 100644
--- a/tola_management/tests/test_programadmin_viewset.py
+++ b/tola_management/tests/test_programadmin_viewset.py
@@ -11,6 +11,7 @@
OrganizationFactory,
CountryFactory,
SectorFactory,
+ IDAASectorFactory,
TolaUserFactory,
grant_program_access,
grant_country_access,
@@ -40,19 +41,18 @@ def test_base_program_info(self):
data = ProgramAdminSerializer(queryset, many=True).data[0]
self.assertEqual(data['name'], SPECIAL_CHARS)
self.assertEqual(data['funding_status'], 'funded')
- self.assertEqual(data['gaitid'], '123456')
- self.assertEqual(data['description'], 'A description')
+ self.assertEqual(data['gaitid'][0]['gaitid'], 123456)
self.assertEqual(data['id'], program.pk)
def test_program_sector_info(self):
- sector1 = SectorFactory()
- sector2 = SectorFactory()
- _ = SectorFactory()
+ sector1 = IDAASectorFactory()
+ sector2 = IDAASectorFactory()
+ _ = IDAASectorFactory()
program = RFProgramFactory()
- program.sector.set([sector1, sector2])
+ program.idaa_sector.set([sector1, sector2])
queryset = ProgramAdminViewSet.base_queryset().all()
data = ProgramAdminSerializer(queryset, many=True).data[0]
- self.assertEqual(set(data['sector']), set([sector1.pk, sector2.pk]))
+ self.assertEqual(set(data['idaa_sector']), set([sector1.pk, sector2.pk]))
def test_program_country_info(self):
program = RFProgramFactory()
@@ -124,9 +124,9 @@ class TestProgramFieldsStressTest(test.TestCase):
def setUpTestData(cls):
CountryFactory.reset_sequence()
cls.outcountry = CountryFactory(code="XX", country="No programs country")
- cls.in_sector1 = SectorFactory()
- cls.in_sector2 = SectorFactory()
- cls.out_sector = SectorFactory()
+ cls.in_sector1 = IDAASectorFactory()
+ cls.in_sector2 = IDAASectorFactory()
+ cls.out_sector = IDAASectorFactory()
cls.no_mc_country = CountryFactory(code="NM", country="No MC Users")
cls.countries = [CountryFactory(code=f'T{x}', country=f'Country {x}') for x in range(20)]
cls.superusers = [TolaUserFactory(mc_staff=True, superadmin=True) for x in range(8)]
@@ -155,15 +155,15 @@ def setUpTestData(cls):
cls.country_users[country.pk] = [user1, user2]
bonus_program = RFProgramFactory()
bonus_program.country.set([country])
- bonus_program.sector.set([cls.out_sector])
+ bonus_program.idaa_sector.set([cls.out_sector])
cls.partner_org1 = OrganizationFactory()
cls.partner_org2 = OrganizationFactory()
cls.only_mc_program = RFProgramFactory()
cls.only_mc_program.country.set([cls.countries[0]])
- cls.only_mc_program.sector.set([cls.in_sector1])
+ cls.only_mc_program.idaa_sector.set([cls.in_sector1])
cls.only_partner_program = RFProgramFactory()
cls.only_partner_program.country.set([cls.no_mc_country])
- cls.only_partner_program.sector.set([cls.in_sector1, cls.in_sector2])
+ cls.only_partner_program.idaa_sector.set([cls.in_sector1, cls.in_sector2])
cls.with_superuser_program = RFProgramFactory()
cls.with_superuser_program.country.set([cls.countries[4]])
cls.superuser_country_admin.country = cls.countries[4]
@@ -179,7 +179,7 @@ def setUpTestData(cls):
grant_program_access(user, cls.only_partner_program, cls.no_mc_country, PROGRAM_ROLE_CHOICES[0][0])
cls.two_org_program = RFProgramFactory()
cls.two_org_program.country.set([cls.countries[1]])
- cls.two_org_program.sector.set([cls.in_sector2])
+ cls.two_org_program.idaa_sector.set([cls.in_sector2])
for x in range(5):
admin1 = TolaUserFactory(mc_staff=False, superadmin=False, organization=cls.partner_org1)
grant_program_access(admin1, cls.two_org_program, cls.countries[1], PROGRAM_ROLE_CHOICES[1][0])
@@ -189,7 +189,7 @@ def setUpTestData(cls):
grant_program_access(user, cls.two_org_program, cls.countries[1], PROGRAM_ROLE_CHOICES[0][0])
cls.two_country_program = RFProgramFactory()
cls.two_country_program.country.set([cls.countries[2], cls.countries[3]])
- cls.two_country_program.sector.set([cls.in_sector1])
+ cls.two_country_program.idaa_sector.set([cls.in_sector1])
for x in range(5):
admin1 = TolaUserFactory(mc_staff=False, superadmin=False, organization=cls.partner_org1)
grant_program_access(admin1, cls.two_country_program, cls.countries[2], PROGRAM_ROLE_CHOICES[1][0])
@@ -207,7 +207,7 @@ def get_program(self, program_pk):
def get_data(self, program_qs):
# 3 queries: program with annotations, prefetched sectors, prefetched countries
- with self.assertNumQueries(6):
+ with self.assertNumQueries(9):
return ProgramAdminSerializer(program_qs, many=True).data[0]
def get_users_filtered_data(self, program_pk):
@@ -276,7 +276,7 @@ def test_with_superusers_program(self):
self.assertEqual(users_data['count'], 14)
def test_query_count_on_multiple(self):
- with self.assertNumQueries(7):
+ with self.assertNumQueries(11):
program_qs = ProgramAdminViewSet.base_queryset().all()
data = ProgramAdminSerializer(program_qs, many=True).data
self.assertEqual(len(data), 25)
@@ -285,7 +285,7 @@ def test_api_call(self):
client = test.Client()
client.force_login(user=self.superusers[0].user)
response = client.get(
- f'/api/tola_management/program/?page=1§ors[]={self.in_sector1.pk}§ors[]={self.in_sector2.pk}')
+ f'/api/tola_management/program/?page=1&idaa_sectors[]={self.in_sector1.pk}&idaa_sectors[]={self.in_sector2.pk}')
self.assertEqual(response.status_code, 200)
response_json = response.json()
self.assertEqual(response_json['count'], 4)
@@ -304,7 +304,7 @@ def test_api_call(self):
self.assertEqual(results[pk]['organizations'], organizations)
self.assertEqual(results[pk]['program_users'], program_users)
self.assertEqual(results[pk]['onlyOrganizationId'], onlyOrganizationId)
- self.assertEqual(results[pk]['sector'], sectors)
+ self.assertEqual(results[pk]['idaa_sector'], sectors)
self.assertEqual(results[pk]['country'], countries)
class TestProgramAdminFilters(test.TestCase):
diff --git a/tola_management/views.py b/tola_management/views.py
index dae021a7c..087c48310 100755
--- a/tola_management/views.py
+++ b/tola_management/views.py
@@ -37,6 +37,7 @@
from django.contrib.auth.models import User
from workflow.models import (
+ IDAASector,
TolaUser,
Organization,
Program,
@@ -48,7 +49,7 @@
COUNTRY_ROLE_CHOICES,
PROGRAM_ROLE_CHOICES
)
-
+from indicators.models import IDAAOutcomeTheme
from tola_management.models import (
UserManagementAuditLog,
OrganizationAdminAuditLog
@@ -201,6 +202,20 @@ def get_program_page_context(request):
} for sector in Sector.objects.all() if sector.sector
]
+ idaa_sectors = [
+ {
+ 'id': sector.id,
+ 'name': sector.sector
+ } for sector in IDAASector.objects.all() if sector.sector
+ ]
+
+ idaa_outcome_themes = [
+ {
+ 'id': outcome_theme.id,
+ 'name': outcome_theme.name
+ } for outcome_theme in IDAAOutcomeTheme.objects.all() if outcome_theme.name
+ ]
+
users = {
user.id: {
'id': user.id,
@@ -215,6 +230,8 @@ def get_program_page_context(request):
'users': users,
'programFilterPrograms': programs,
'sectors': sectors,
+ 'idaa_sectors': idaa_sectors,
+ 'idaa_outcome_themes': idaa_outcome_themes,
'country_filter': country_filter,
'organization_filter': organization_filter,
'users_filter': users_filter,
diff --git a/workflow/admin.py b/workflow/admin.py
index c9e816ca3..b54561976 100755
--- a/workflow/admin.py
+++ b/workflow/admin.py
@@ -5,30 +5,56 @@
from import_export.widgets import ForeignKeyWidget
from import_export.admin import ImportExportModelAdmin, ExportMixin
+from admin_auto_filters.filters import AutocompleteFilterFactory
+
#from tola.util import getCountry, get_GAIT_data
from tola import util
from .models import (
- Country, SiteProfile,
- Program, TolaUser, ProfileType, TolaUserProxy,
- Organization, Sector,
- OrganizationAdmin,
+ Country,
+ CountryAccess,
+ FundCode,
+ GaitID,
+ IDAASector,
+ Organization,
+ ProfileType,
+ Program,
ProgramAccess,
- TolaUserAdmin,
- Region
+ ProgramDiscrepancy,
+ Region,
+ Sector,
+ SiteProfile,
+ TolaUser,
+ TolaUserProxy,
)
-# Resource for CSV export
-class CountryResource(resources.ModelResource):
+##########################
+# Resources for CSV export
+##########################
+class CountryResource(resources.ModelResource):
class Meta:
model = Country
-class CountryAdmin(ImportExportModelAdmin):
- resource_class = CountryResource
- list_display = ('country','code','organization','create_date', 'edit_date')
- list_filter = ('country','organization__name')
+class SiteProfileResource(resources.ModelResource):
+ country = fields.Field(column_name='country', attribute='country', widget=ForeignKeyWidget(Country, 'country'))
+ type = fields.Field(column_name='type', attribute='type', widget=ForeignKeyWidget(ProfileType, 'profile'))
+
+ class Meta:
+ model = SiteProfile
+ skip_unchanged = True
+ report_skipped = False
+ # import_id_fields = ['id']
+
+
+################
+# Inline editors
+################
+
+class CountryAccessInline(admin.TabularInline):
+ model = CountryAccess
+ ordering = ('country',)
class CountryInLineAdmin(admin.StackedInline):
@@ -44,26 +70,9 @@ class Media:
css = {"all": ("css/admin/inline_forms.css",)}
-# Resource for CSV export
-class SiteProfileResource(resources.ModelResource):
- country = fields.Field(column_name='country', attribute='country', widget=ForeignKeyWidget(Country, 'country'))
- type = fields.Field(column_name='type', attribute='type', widget=ForeignKeyWidget(ProfileType, 'profile'))
-
- class Meta:
- model = SiteProfile
- skip_unchanged = True
- report_skipped = False
- # import_id_fields = ['id']
-
-
-class SiteProfileAdmin(ImportExportModelAdmin):
- resource_class = SiteProfileResource
- list_display = ('name', 'country')
- list_filter = ('country__country',)
- search_fields = ('country__country',)
-
class ProgramAccessInline(admin.TabularInline):
model = ProgramAccess
+ autocomplete_fields = ('tolauser',)
#the goal here is to limit the valid country choices to those associated with the related program
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
@@ -76,13 +85,120 @@ def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
return field
+class GaitIDInlineAdmin(admin.StackedInline):
+ model = GaitID
+ fields = ('gaitid', 'donor', 'donor_dept', 'fund_codes',)
+ readonly_fields = ('fund_codes',)
+ extra = 0
+
+
+class FundCodeInlineAdmin(admin.TabularInline):
+ model = FundCode
+ extra = 1
+
+
+#########################
+# Customized model admins
+#########################
+
+@admin.register(Organization)
+class OrganizationAdmin(admin.ModelAdmin):
+ list_display = ('name', 'create_date', 'edit_date')
+ readonly_fields = ('create_date', 'edit_date',)
+
+
+@admin.register(Country)
+class CountryAdmin(ImportExportModelAdmin):
+ resource_class = CountryResource
+ list_display = ('country','code','organization','create_date', 'edit_date')
+ list_filter = ('country','organization__name')
+ search_fields = ('country',)
+ readonly_fields = ('create_date', 'edit_date',)
+
+
+@admin.register(TolaUser)
+class TolaUserAdmin(admin.ModelAdmin):
+ list_display = ('name', 'country', 'create_date', 'edit_date',)
+ list_filter = ('country', 'user__is_staff',)
+ search_fields = ('name', 'country__country', 'title')
+ inlines = (CountryAccessInline, )
+ readonly_fields = ('create_date', 'edit_date',)
+
+
+@admin.register(SiteProfile)
+class SiteProfileAdmin(ImportExportModelAdmin):
+ resource_class = SiteProfileResource
+ list_display = ('name', 'country', 'create_date', 'edit_date',)
+ list_filter = ('country__country',)
+ search_fields = ('country__country',)
+ readonly_fields = ('create_date', 'edit_date',)
+
+
+@admin.register(Program)
class ProgramAdmin(admin.ModelAdmin):
- list_display = ('countries', 'name', 'gaitid', 'description', 'budget_check', 'funding_status')
- search_fields = ('name', 'gaitid')
- list_filter = ('funding_status', 'country', 'budget_check', 'funding_status')
- display = 'Program'
- readonly_fields = ('start_date', 'end_date', 'reporting_period_start', 'reporting_period_end', )
- inlines = (ProgramAccessInline,)
+ list_display = (
+ 'name',
+ 'countries',
+ 'gaitids',
+ 'budget_check',
+ 'funding_status',
+ 'create_date',
+ 'edit_date',
+ )
+ search_fields = ('name', 'gaitid__gaitid')
+ list_filter = ('funding_status', 'country', 'budget_check', 'funding_status', 'sector')
+ inlines = (GaitIDInlineAdmin, ProgramAccessInline,)
+ fieldsets = (
+ ('Program profile', {
+ 'fields': (
+ 'name',
+ 'external_program_id',
+ 'start_date',
+ 'end_date',
+ 'funding_status',
+ 'country',
+ 'idaa_sector',
+ 'idaa_outcome_theme',
+ )
+ }),
+ ('Program settings', {
+ 'fields': (
+ 'reporting_period_start',
+ 'reporting_period_end',
+ 'auto_number_indicators',
+ '_using_results_framework',
+ )
+ }),
+ ('Legacy', {
+ 'fields': (
+ 'legacy_gaitid',
+ 'cost_center',
+ 'description',
+ 'sector',
+ 'budget_check',
+ 'public_dashboard',
+ )
+ }),
+ ('Change history', {
+ 'fields': (
+ 'create_date',
+ 'edit_date',
+ )
+ }),
+ )
+ autocomplete_fields = ('sector', 'idaa_sector', 'idaa_outcome_theme', 'country')
+ readonly_fields = (
+ # Deprecated fields:
+ 'legacy_gaitid',
+ 'cost_center', # legacy Fund Code field
+ 'description',
+ 'sector', # legacy (non-IDAA) sector
+ 'budget_check', # aka Enable approval authority
+ 'public_dashboard',
+ # non-editable date fields:
+ 'create_date',
+ 'edit_date',
+ )
#we need a reference for the inline to limit country choices properly
def get_form(self, request, obj=None, **kwargs):
@@ -90,15 +206,6 @@ def get_form(self, request, obj=None, **kwargs):
request._obj_ = obj
return super(ProgramAdmin, self).get_form(request, obj, **kwargs)
- # Non-destructively save the GAIT start and end dates based on the value entered in the ID field.
- # Non-destructively populate the reporting start and end dates based on the GAIT dates.
- def save_model(self, request, obj, form, change):
- message = util.append_GAIT_dates(obj)
- if message:
- messages.add_message(request, messages.ERROR, message)
-
- super(ProgramAdmin, self).save_model(request, obj, form, change)
-
@admin.register(Region)
class RegionAdmin(admin.ModelAdmin):
@@ -106,10 +213,49 @@ class RegionAdmin(admin.ModelAdmin):
inlines = [CountryInLineAdmin]
-admin.site.register(Organization, OrganizationAdmin)
-admin.site.register(Country, CountryAdmin)
-admin.site.register(Program, ProgramAdmin)
-admin.site.register(Sector)
-admin.site.register(SiteProfile, SiteProfileAdmin)
-admin.site.register(ProfileType)
-admin.site.register(TolaUser,TolaUserAdmin)
+@admin.register(Sector)
+class SectorAdmin(admin.ModelAdmin):
+ list_display = ('sector', 'create_date', 'edit_date')
+ search_fields =('sector',)
+ readonly_fields = ('create_date', 'edit_date',)
+
+
+@admin.register(ProfileType)
+class ProfileTypeAdmin(admin.ModelAdmin):
+ list_display = ('profile', 'create_date', 'edit_date')
+ readonly_fields = ('create_date', 'edit_date',)
+
+
+@admin.register(IDAASector)
+class IDAASectorAdmin(admin.ModelAdmin):
+ list_display = ('sector', 'create_date', 'edit_date')
+ search_fields =('sector',)
+ readonly_fields = ('create_date', 'edit_date',)
+
+
+@admin.register(ProgramDiscrepancy)
+class ProgramDiscrepancyAdmin(admin.ModelAdmin):
+ list_display = ('idaa_program_name', 'create_date', 'edit_date')
+ autocomplete_fields = ('program',)
+ search_fields = ('program__name', 'idaa_json', 'discrepancies')
+ readonly_fields = ('create_date', 'edit_date',)
+
+
+@admin.register(GaitID)
+class GaitIDAdmin(admin.ModelAdmin):
+ list_display = ('gaitid', 'program', 'create_date', 'edit_date',)
+ search_fields = ('gaitid', 'program__name',)
+ inlines = (FundCodeInlineAdmin,)
+ autocomplete_fields = ('program',)
+ list_filter = (AutocompleteFilterFactory('Program', 'program'),)
+ readonly_fields = ('create_date', 'edit_date',)
+
+
+@admin.register(FundCode)
+class FundCodeAdmin(admin.ModelAdmin):
+ list_display = ('fund_code', 'gaitid', 'program', 'create_date', 'edit_date')
+ autocomplete_fields = ('gaitid',)
+ search_fields = ('fund_code', 'gaitid__gaitid')
+ list_filter = (AutocompleteFilterFactory('Program', 'gaitid__program'),)
+ readonly_fields = ('program','create_date', 'edit_date',)
+
diff --git a/workflow/discrepancy_report.py b/workflow/discrepancy_report.py
new file mode 100644
index 000000000..ca5539c42
--- /dev/null
+++ b/workflow/discrepancy_report.py
@@ -0,0 +1,409 @@
+from workflow.models import ProgramDiscrepancy
+from openpyxl.styles.borders import Border, Side
+from openpyxl.styles import Alignment, Font
+from workflow.program import convert_date
+from openpyxl.utils import get_column_letter
+from openpyxl import workbook
+from datetime import date
+from os import path
+
+
+class DiscrepancyReportTab:
+ discrepancies = []
+ columns = []
+ title = ''
+ discrepancy_to_columns = []
+ wide_cell_width = 60
+ standard_cell_width = 25
+ small_cell_width = 15
+ column_font = Font(bold=True, size='12')
+
+ @staticmethod
+ def comma_separate_list(separate_list):
+ try:
+ if type(separate_list[0]) is int:
+ # Need to convert int to str to use .join
+ separate_list = [str(x) for x in separate_list]
+ except IndexError:
+ pass
+
+ return ','.join(separate_list)
+
+ def get_idaa_gaitids(self, idaa_json):
+ return self.comma_separate_list([str(gaitid['LookupValue']).split('.')[0] for gaitid in idaa_json['GaitIDs']])
+
+ def get_idaa_countries(self, idaa_json):
+ return self.comma_separate_list([country['LookupValue'] for country in idaa_json['Country']])
+
+ def get_discrepancy_reasons(self, worksheet_discrepancies):
+ return ','.join([ProgramDiscrepancy.DISCREPANCY_REASONS[discrepancy] for discrepancy in worksheet_discrepancies])
+
+ def format_worksheet(self, worksheet, wide_cells=None, small_cells=None):
+ """
+ Method for formatting the worksheet
+ """
+ if wide_cells is None:
+ wide_cells = [0, 1]
+
+ if small_cells is None:
+ small_cells = [2]
+
+ for index in range(len(self.columns)):
+ if index in wide_cells:
+ width = self.wide_cell_width
+ elif index in small_cells:
+ width = self.small_cell_width
+ else:
+ width = self.standard_cell_width
+
+ column_letter = get_column_letter(index + 1)
+ worksheet.column_dimensions[column_letter].width = width
+
+ # Add custom font to column headers
+ for column in worksheet["1:1"]:
+ column.font = self.column_font
+
+ def after_populate_format(self, worksheet):
+ """
+ Some cells can't be formatted until data is inserted. Override this method in the tab that needs special formatting
+ """
+ pass
+
+ def create_worksheet(self, wb):
+ worksheet = wb.create_sheet(self.title)
+ worksheet.title = self.title
+
+ if type(self.columns) is list:
+ worksheet.append(self.columns)
+
+ self.format_worksheet(worksheet)
+
+ def populate(self, program_discrepancy, *args, **kwargs):
+ """
+ Returns a list to be appended to the worksheet
+ """
+ idaa_json = program_discrepancy.idaa_json
+ idaa_gaitids = self.get_idaa_gaitids(idaa_json)
+
+ if len(idaa_json['Country']) == 0:
+ country = ""
+ else:
+ country = self.get_idaa_countries(idaa_json)
+
+ return [
+ idaa_json.get('ProgramName', 'N/A'), idaa_json['id'], idaa_gaitids, country, convert_date(idaa_json.get('ProgramStartDate', None), readable=True),
+ convert_date(idaa_json.get('ProgramEndDate', None), readable=True), idaa_json.get('ProgramStatus', 'N/A'), ''
+ ]
+
+
+class IDAAInvalidFieldsTab(DiscrepancyReportTab):
+ discrepancies = ["ProgramName", "id", "ProgramStartDate", "ProgramEndDate", "Country", "ProgramStatus", "funded", "gaitid"]
+ columns = [
+ "Discrepancy Reasons", "IDAA Program Name", "IDAA Program ID", "IDAA GAIT IDs", "IDAA Countries", "IDAA Start Date",
+ "IDAA End Date", "IDAA Program Status", "Notes"
+ ]
+ title = "IDAA Program Has Missing Data"
+ discrepancy_to_columns = [
+ {"discrepancy": "funded", "columns": ['IDAA Program Status']},
+ {"discrepancy": "gaitid", "columns": ['IDAA GAIT IDs']},
+ {"discrepancy": "ProgramName", "columns": ['IDAA Program Name']},
+ {"discrepancy": "ID", "columns": ["IDAA Program ID"]},
+ {"discrepancy": "ProgramStartDate", "columns": ['IDAA Start Date']},
+ {"discrepancy": "ProgramEndDate", "columns": ['IDAA End Date']},
+ {"discrepancy": "Country", "columns": ["IDAA Countries"]},
+ {"discrepancy": "ProgramStatus", "columns": ['IDAA Program Status']}
+ ]
+
+ def after_populate_format(self, worksheet):
+ last_row = worksheet.max_row
+ coord = f"A{last_row}"
+
+ worksheet[coord].alignment = Alignment(wrap_text=True)
+
+ def populate(self, program_discrepancy, worksheet_discrepancies):
+ reasons = self.get_discrepancy_reasons(worksheet_discrepancies)
+
+ row = [reasons]
+
+ row.extend(super().populate(program_discrepancy, worksheet_discrepancies))
+
+ return row
+
+
+class MismatchingFieldsTab(DiscrepancyReportTab):
+ discrepancies = ["funding_status", "end_date", "start_date", "countries", "out_of_bounds_tracking_dates"]
+ columns = [
+ "Discrepancy Reasons", "TolaData Program Name", "TolaData GAIT IDs", "TolaData Countries", "TolaData Start Date", "TolaData End Date",
+ "TolaData Indicator Tracking Start Date", "TolaData Indicator Tracking End Date", "TolaData Funding Status", "IDAA Program Name", "IDAA Program ID",
+ "IDAA GAIT IDs", "IDAA Countries", "IDAA Start Date", "IDAA End Date", "IDAA Program Status", "Notes"
+ ]
+ title = "MisMatching Fields"
+ discrepancy_to_columns = [
+ {"discrepancy": "funding_status", "columns": ['IDAA Program Status', 'TolaData Funding Status']},
+ {"discrepancy": "end_date", "columns": ['IDAA End Date', 'TolaData End Date']},
+ {"discrepancy": "start_date", "columns": ['IDAA Start Date', 'TolaData Start Date']},
+ {"discrepancy": "countries", "columns": ['IDAA Countries', 'TolaData Countries']},
+ {"discrepancy": "out_of_bounds_tracking_dates", "columns": [
+ 'IDAA Start Date', 'IDAA End Date', 'TolaData Indicator Tracking Start Date', 'TolaData Indicator Tracking End Date'
+ ]}
+ ]
+
+ def format_worksheet(self, worksheet):
+ wide_cells = [
+ self.columns.index('Discrepancy Reasons'),
+ self.columns.index('IDAA Program Name'),
+ self.columns.index('TolaData Program Name')
+ ]
+
+ super().format_worksheet(worksheet, wide_cells)
+
+ def after_populate_format(self, worksheet):
+ last_row = worksheet.max_row
+ coord = f"A{last_row}"
+
+ worksheet[coord].alignment = Alignment(wrap_text=True)
+
+ def populate(self, program_discrepancy, worksheet_discrepancies):
+ tola_program = program_discrepancy.program.first()
+ reasons = self.get_discrepancy_reasons(worksheet_discrepancies)
+
+ row = [
+ reasons, tola_program.name, self.comma_separate_list(tola_program.gaitids), tola_program.countries,
+ convert_date(str(tola_program.start_date), readable=True), convert_date(str(tola_program.end_date), readable=True),
+ convert_date(str(tola_program.reporting_period_start), readable=True), convert_date(str(tola_program.reporting_period_end), readable=True),
+ tola_program.funding_status
+ ]
+
+ row.extend(super().populate(program_discrepancy, worksheet_discrepancies))
+
+ return row
+
+
+class MultipleProgramsTab(DiscrepancyReportTab):
+ discrepancies = ["multiple_programs"]
+ columns = [
+ "TolaData Program Name", "TolaData GAIT IDs", "TolaData Countries", "TolaData Funding Status",
+ "IDAA Program Name", "IDAA Program ID", "IDAA GAIT IDs", "IDAA Countries", "IDAA Funding Status", "Notes"
+ ]
+ title = "IDAA Program to Multiple TolaDa" # Max character length of 31
+
+ def format_worksheet(self, worksheet):
+ wide_cells = [self.columns.index('TolaData Program Name'), self.columns.index('IDAA Program Name')]
+ small_cells = [self.columns.index('IDAA Program ID')]
+
+ super().format_worksheet(worksheet, wide_cells, small_cells)
+
+ def populate(self, idaa_json, tola_program):
+ return [
+ tola_program.name, self.comma_separate_list(tola_program.gaitids), tola_program.countries, tola_program.funding_status,
+ idaa_json['ProgramName'], idaa_json['id'], self.get_idaa_gaitids(idaa_json), self.get_idaa_countries(idaa_json),
+ idaa_json['ProgramStatus'], ''
+ ]
+
+
+class DuplicateIDAAProgramsTab(DiscrepancyReportTab):
+ columns = [
+ "IDAA Program Name", "IDAA Program ID", "IDAA GAIT IDs", "IDAA Countries", "IDAA Start Date",
+ "IDAA End Date", "IDAA Program Status", "Notes"
+ ]
+ title = "Duplicate IDAA Programs"
+ discrepancies = ["duplicate_gaitid"]
+
+ def format_worksheet(self, worksheet, wide_cells=None, small_cells=None):
+ wide_cells = [self.columns.index('IDAA Program Name')]
+ small_cells = [self.columns.index('IDAA Program ID')]
+ return super().format_worksheet(worksheet, wide_cells, small_cells)
+
+ def sort_by_gaitids(self, programs):
+ """
+ Takes a list of programs formatted from super().populate()
+ Sorts the programs to have duplicates show as the next list item
+ """
+ sorted_programs = []
+ checked_ids = []
+ gaitid_key = self.columns.index('IDAA GAIT IDs')
+ id_key = self.columns.index('IDAA Program ID')
+ for program in programs:
+ gaitids = [int(gaitid) for gaitid in program[gaitid_key].split(',')]
+ if program[id_key] in checked_ids:
+ continue
+ checked_ids.append(program[1])
+ sorted_programs.append(program)
+ for gaitid in gaitids:
+ for other_program in programs:
+ if other_program[id_key] in checked_ids:
+ continue
+ other_gaitids = [int(gaitid) for gaitid in other_program[gaitid_key].split(',')]
+ if gaitid in other_gaitids:
+ sorted_programs.append(other_program)
+ checked_ids.append(other_program[1])
+
+ return sorted_programs
+
+
+class OverviewTab(DiscrepancyReportTab):
+ columns = range(2) # columns as a range to work with inherited formating methods
+ wide_cell_width = 120
+ title = "Discrepancy Report Overview"
+ static_text = [
+ {
+ "header": "ORIENTATION",
+ "body": [
+ "The Discrepancy Report is divided into 5 tabs:",
+ "The first tab, titled Discrepancy Report Overview, provides explanation and instruction on what this Discrepancy Report is and how to use this to improve program data quality and consistency in TolaData (and IDAA).",
+ "The second tab, titled IDAA Program to Multiple TolaData, identifies duplicated programs in TolaData, where there is one program in IDAA but this single program is broken out into multiple programs in TolaData. This often happens with multi-country programs, where each individual country decided to make their own version of the program in TolaData.",
+ "The third tab, titled MisMatching Fields, identifies existing programs in TolaData whose Countries and/or Indicator Tracking dates do not match the data and information in IDAA. These discrepancies are not automatically corrected by the system given their sensitive nature. As a result, these discrepancies must be dealt with manually on a case-by-case basis.",
+ "The fourth tab, titled IDAA Program Has Missing Data, identifies programs in IDAA, which cannot be added or updated in TolaData due to data quality issues. These issues need to be addressed directly in IDAA before these programs can be added or updated in TolaData.",
+ "The fifth tab, titled Duplicate IDAA Programs, identifies programs in IDAA that have the same GAIT ID(s) assigned to them. A GAIT ID should only ever be assigned to one program. A single program may have multiple GAIT IDs associated to it, but a single GAIT ID should never be assigned to multiple programs. This check also attempts to address or prevent two possible undesirable scenarios: 1) many IDAA programs to one TolaData program and 2) many IDAA programs to many TolaData programs."
+ ]
+ },
+ {
+ "header": "PURPOSE & USE",
+ "body": [
+ "The purpose of this Discrepancy Report is to provide HQ and Regional MEL/PAQ/Standards Advisors, Regional Program Team (RPT) members, and Country and Program Teams with data and information regarding discrepancies found across IDAA and TolaData with the goal of correcting these discrepancies.",
+ "Most discrepancies between IDAA and TolaData will be addressed by the systems automatically, but there are a handful of sensitive issues that merit special review and handling by people, not systems. This report attempts to identify those issues that require manual review and correction by team members. For example, the countries assigned to a program in TolaData determines in which country portfolio the program appears and, as a result, which users see and have access to that program. Changing Indicator Tracking Dates impacts time-based indicators with periodic targets and any results associated with periodic targets. Therefore, updating these dates should only be done by or with authorization from the program team.",
+ "The Discrepancy Report is generated by the TolaData Development Team at the beginning and middle of every month and is shared with the HQ MEL and Standards Teams for communication and dissemination to the relevant teams. Issues in TolaData may be addressed by anyone with authority and authorization to do so, such as the Country or Program Teams with support from the HQ and Regional MEL Advisors. Issues in IDAA will need to be addressed by those responsible for data entry and maintenance in that system, namely the RPT and/or the Country or Program Teams with support from the HQ Standards Advisors and IDAA Product Owner. It is ultimately up to these respective teams on when, how, and if these issues are addressed."
+ ]
+ }
+ ]
+
+ def format_worksheet(self, worksheet):
+ wide_cells = [1]
+ small_cells = [0]
+
+ worksheet.sheet_view.showGridLines = False
+
+ super().format_worksheet(worksheet, wide_cells, small_cells)
+
+ def after_populate_format(self, worksheet):
+ last_row = worksheet.max_row
+ coord = f"B{last_row}"
+
+ worksheet[coord].alignment = Alignment(wrap_text=True)
+
+ def populate_static(self, worksheet):
+ """
+ Method for populating the worksheet with static data.
+ """
+ for static_text in self.static_text:
+ worksheet.append([static_text['header']])
+ for body_text in static_text['body']:
+ worksheet.append(['', body_text])
+ self.after_populate_format(worksheet)
+ worksheet.append([])
+
+
+class GenerateDiscrepancyReport:
+ file_path = path.join(path.dirname(path.abspath(__file__)), f'discrepancy_report_{date.today().isoformat()}.xlsx')
+ _worksheet_mapper = [
+ OverviewTab, MultipleProgramsTab, MismatchingFieldsTab, IDAAInvalidFieldsTab, DuplicateIDAAProgramsTab
+ ]
+ discrepancy_highlight = '40 % - Accent2'
+ discrepancy_border = Border(left=Side(style='thin', color='fff00000'),
+ right=Side(style='thin', color='fff00000'),
+ top=Side(style='thin', color='fff00000'),
+ bottom=Side(style='thin', color='fff00000'))
+
+ def __init__(self):
+ self.wb = workbook.Workbook()
+
+ self._create_worksheets()
+
+ def _create_worksheets(self):
+ # Delete the default worksheet
+ del self.wb['Sheet']
+
+ for worksheet_object in self._worksheet_mapper:
+ worksheet_object().create_worksheet(self.wb)
+
+ def discrepancies_to_worksheets(self, discrepancies):
+ """
+ returns a list of worksheets that a list of discrepancies are shown in
+ """
+ used_worksheets = set()
+
+ for worksheet_object in self._worksheet_mapper:
+ for discrepancy in discrepancies:
+ if discrepancy in worksheet_object.discrepancies:
+ used_worksheets.add(worksheet_object.title)
+
+ return list(used_worksheets)
+
+
+ def get_discrepancy_column_number(self, discrepancies, worksheet_object):
+ """
+ Returns the column number a discrepancy is located at
+ """
+ highlight_indexes = []
+
+ for discrepancy in discrepancies:
+ for discrepancy_column in worksheet_object.discrepancy_to_columns:
+ if discrepancy_column['discrepancy'] == discrepancy:
+ for column in discrepancy_column['columns']:
+ highlight_indexes.append(
+ worksheet_object.columns.index(column) + 1 # Excel coords are not zero indexed
+ )
+
+ return highlight_indexes
+
+ def highlight_discrepancies(self, worksheet, discrepancies, worksheet_object):
+ """
+ Highlights discrepancies on the worksheet
+ """
+ last_row = worksheet.max_row
+ column_indexes = self.get_discrepancy_column_number(discrepancies, worksheet_object)
+
+ for column_index in column_indexes:
+ column_letter = get_column_letter(column_index)
+ coord = f"{column_letter}{last_row}"
+ worksheet[coord].style = self.discrepancy_highlight
+ worksheet[coord].border = self.discrepancy_border
+
+ def generate(self):
+ """
+ Method to generate the discrepancy report
+ """
+ duplicated_idaa_programs = []
+ program_discrepancies = ProgramDiscrepancy.objects.all()
+ overview_tab = OverviewTab()
+ overview_tab.populate_static(self.wb[overview_tab.title])
+ duplicate_idaa_tab = DuplicateIDAAProgramsTab()
+ duplicate_idaa_worksheet = self.wb[duplicate_idaa_tab.title]
+
+ for program_discrepancy in program_discrepancies:
+ for worksheet_object in self._worksheet_mapper:
+ worksheet_discrepancies = []
+ worksheet = self.wb[worksheet_object.title]
+
+ for discrepancy in program_discrepancy.discrepancies:
+ if discrepancy in worksheet_object.discrepancies:
+ worksheet_discrepancies.append(discrepancy)
+
+ if len(worksheet_discrepancies) == 0:
+ continue
+
+ worksheet_tab = worksheet_object()
+
+ if isinstance(worksheet_tab, MultipleProgramsTab):
+ for tola_program in program_discrepancy.program.all():
+ row = worksheet_tab.populate(program_discrepancy.idaa_json, tola_program)
+
+ worksheet.append(row)
+ elif isinstance(worksheet_tab, DuplicateIDAAProgramsTab):
+ row = worksheet_tab.populate(program_discrepancy, worksheet_discrepancies)
+ duplicated_idaa_programs.append(row)
+ else:
+ row = worksheet_tab.populate(program_discrepancy, worksheet_discrepancies)
+
+ worksheet.append(row)
+
+ self.highlight_discrepancies(worksheet, worksheet_discrepancies, worksheet_object)
+
+ worksheet_tab.after_populate_format(worksheet)
+
+ rows = duplicate_idaa_tab.sort_by_gaitids(duplicated_idaa_programs)
+
+ for row in rows:
+ duplicate_idaa_worksheet.append(row)
+
+ self.wb.save(self.file_path)
diff --git a/workflow/management/commands/Xanadu_permissions.py b/workflow/management/commands/Xanadu_permissions.py
new file mode 100644
index 000000000..c065debff
--- /dev/null
+++ b/workflow/management/commands/Xanadu_permissions.py
@@ -0,0 +1,18 @@
+from django.core.management.base import BaseCommand
+from workflow.models import Country, CountryAccess, TolaUser, Organization
+
+
+class Command(BaseCommand):
+ help = "To be run on Demo server! Give all users in MC org basic_admin role for country Xanadu"
+
+ def handle(self, *args, **options):
+ xanadu = Country.objects.filter(country="Xanadu").first()
+ tola_users = TolaUser.objects.filter(organization_id=Organization.MERCY_CORPS_ID)
+ for tola_user in tola_users:
+ ca, created = CountryAccess.objects.get_or_create(
+ country=Country.objects.get(country=xanadu),
+ tolauser=tola_user
+ )
+ ca.role = 'basic_admin'
+ ca.save()
+
diff --git a/workflow/management/commands/create_IDAA_user.py b/workflow/management/commands/create_IDAA_user.py
new file mode 100644
index 000000000..51f2cb1dc
--- /dev/null
+++ b/workflow/management/commands/create_IDAA_user.py
@@ -0,0 +1,13 @@
+from django.core.management.base import BaseCommand
+from django.contrib.auth.models import User
+from workflow.models import TolaUser
+
+
+class Command(BaseCommand):
+ help = "Command to create a user with the name IDAA"
+
+ def handle(self, *args, **options):
+ user = User.objects.create(username='IDAA', first_name='IDAA', last_name='')
+ user.save()
+ tolauser = TolaUser.objects.create(user=user, organization_id=1)
+ tolauser.save()
diff --git a/workflow/management/commands/migrate_gaitid_fundcode.py b/workflow/management/commands/migrate_gaitid_fundcode.py
new file mode 100644
index 000000000..5614e1788
--- /dev/null
+++ b/workflow/management/commands/migrate_gaitid_fundcode.py
@@ -0,0 +1,96 @@
+from django.core.exceptions import ValidationError
+from workflow.models import Program, GaitID, FundCode
+from django.core.management.base import BaseCommand
+from django.db.utils import IntegrityError
+
+
+class Command(BaseCommand):
+ """
+ Command for moving saved gaitids under Program to a new GaitID table.
+ """
+ help = "Moves gaitids saved under Program to their own GaitID table"
+
+ def add_arguments(self, parser):
+ parser.add_argument('--execute', action='store_true', help='Without this flag, the command will only be a dry run')
+ parser.add_argument('--supress_output', action='store_true', help='Supresses the output so tests don\'t get too messy')
+ parser.add_argument('--clean', action='store_true', help='Cleans the database. Deletes GaitIDs and FundCodes created by execute.')
+
+ def valid_int(self, value):
+ if value is None:
+ return False
+ try:
+ int(value)
+ return True
+ except ValueError:
+ return False
+
+
+ def handle(self, *args, **options):
+ if not options['execute'] and not options['supress_output'] and not options['clean']:
+ print('Dry Run')
+
+ if options['clean']:
+ print('Cleaning the database')
+
+ programs = Program.objects.all()
+ counts = {
+ 'gaitid': {
+ 'created': 0,
+ 'skipped': 0,
+ 'deleted': 0,
+ 'invalid': 0
+ },
+ 'fund_code': {
+ 'created': 0,
+ 'skipped': 0,
+ 'deleted': 0,
+ 'invalid': 0
+ }
+ }
+
+ if options['execute']:
+ for program in programs:
+ if self.valid_int(program.legacy_gaitid):
+ try:
+ gait_id = GaitID(program=program, gaitid=program.legacy_gaitid)
+ gait_id.save()
+
+ counts['gaitid']['created'] += 1
+
+ if self.valid_int(program.cost_center):
+ try:
+ fund_code = FundCode(gaitid=gait_id, fund_code=program.cost_center)
+ fund_code.save()
+ counts['fund_code']['created'] += 1
+ except IntegrityError:
+ counts['fund_code']['skipped'] += 1
+ except ValidationError:
+ counts['fund_code']['invalid'] += 1
+ else:
+ counts['fund_code']['invalid'] +=1
+
+ # Integrity error is raised when the unique_together constraint placed on program, gaitid fails
+ except IntegrityError:
+ counts['gaitid']['skipped'] += 1
+ continue
+ else:
+ counts['gaitid']['invalid'] += 1
+
+
+ if options['clean']:
+ gait_ids = GaitID.objects.all()
+ for gait_id in gait_ids:
+ gait_id.delete()
+ counts['gaitid']['deleted'] += 1
+ # FundCodes get deleted if GaitID is deleted
+ counts['fund_code']['deleted'] += 1
+
+ if not options['supress_output']:
+ print('GAIT ids created: ', counts['gaitid']['created'])
+ print('Duplicate GAIT ids skipped: ', counts['gaitid']['skipped'])
+ print('GAIT ids deleted: ', counts['gaitid']['deleted'])
+ print('Gait ids invalid: ', counts['gaitid']['invalid'])
+ print('Fund codes created: ', counts['fund_code']['created'])
+ print('Duplicate fund codes skipped: ', counts['fund_code']['skipped'])
+ print('Fund codes deleted: ', counts['fund_code']['deleted'])
+ print('Fund codes invalid: ', counts['fund_code']['invalid'])
diff --git a/workflow/management/commands/upload_IDAA_programs.py b/workflow/management/commands/upload_IDAA_programs.py
new file mode 100644
index 000000000..11cca6225
--- /dev/null
+++ b/workflow/management/commands/upload_IDAA_programs.py
@@ -0,0 +1,143 @@
+from datetime import date, datetime
+from django.core.mail import send_mail
+from django.core.management.base import BaseCommand
+from django.conf import settings
+from workflow.program import ProgramUpload
+from workflow.discrepancy_report import GenerateDiscrepancyReport
+from workflow.utils import AccessMSR, check_IDAA_duplicates
+import logging
+
+
+logger = logging.getLogger(__name__)
+
+
+class Command(BaseCommand):
+ help = """
+ Call Sharepoint API. Get JSON data from ProgramProjectID list. This should run as a cron job
+ every day with --upload flag and twice a month with --create_discrepancies and --create_report
+ flags.
+ """
+
+ def add_arguments(self, parser):
+ parser.add_argument(
+ '--upload', action='store_true', help='Without this flag, the command will only be a dry run')
+ parser.add_argument(
+ '--create_discrepancies', action='store_true', help='Without this flag, the command will only be a dry run')
+ parser.add_argument(
+ '--create_report', action='store_true',
+ help='Without this flag, the command will only be a dry run')
+ parser.add_argument('--supress_output', action='store_true', help='Hide text output')
+
+ def handle(self, *args, **options):
+ """
+ API call to log into Microsoft account, generate access token.
+ API call to MS Graph to access data stored in ProgramProjectID Sharepoint list
+ """
+ start = datetime.now()
+ today = start.strftime("%m/%d/%Y")
+ start_time = start.strftime("%m/%d/%Y, %H:%M:%S")
+ uploaded_programs = {
+ 'created': [],
+ 'updated': []
+ }
+ created_countries = set()
+
+ idaa_programs = AccessMSR().program_project_list()
+ msr_country_codes_list = AccessMSR().countrycode_list()
+ msr_gaitid_list = AccessMSR().gaitid_list()
+
+ # Logs any duplicated gaitids
+ duplicated_gaitids = check_IDAA_duplicates(idaa_programs)
+
+ counts = {
+ 'created': 0,
+ 'invalid': 0,
+ 'updated': 0,
+ 'total': len(idaa_programs)
+ }
+
+ for index, program in enumerate(idaa_programs):
+ upload_program = ProgramUpload(
+ program['fields'], msr_country_codes_list=msr_country_codes_list,
+ msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=duplicated_gaitids
+ )
+ action = ''
+
+ if upload_program.is_valid():
+ if options['upload']:
+ upload_program.upload()
+ if upload_program.new_upload:
+ counts['created'] += 1
+ uploaded_programs['created'].append(upload_program.get_tola_programs())
+ action = 'created'
+ elif upload_program.program_updated:
+ if upload_program.multiple_tola_programs:
+ for updated_program in upload_program.tola_program:
+ counts['updated'] += 1
+ uploaded_programs['updated'].append(updated_program)
+ else:
+ counts['updated'] += 1
+ uploaded_programs['updated'].append(upload_program.tola_program)
+ action = 'updated'
+ else:
+ counts['invalid'] += 1
+ action = 'invalid'
+ if upload_program.created_countries:
+ created_countries.update(upload_program.created_countries)
+ if self.report_date() or options['create_discrepancies']:
+ upload_program.create_discrepancies()
+
+ # Invalid programs in IDAA might not have a ProgramName - removes line breaks
+ program_name = ''.join(program['fields']['ProgramName'].splitlines()) if 'ProgramName' in program['fields'] else 'N/A'
+
+ logger.info(f"({index + 1}/{len(idaa_programs)}) {action} program {program_name}. Program ID: {program['fields']['id']}")
+
+ if self.report_date() or options['create_report']:
+ report = GenerateDiscrepancyReport()
+ report.generate()
+
+ end_time = datetime.now().strftime("%m/%d/%Y, %H:%M:%S")
+ self.email_notifications(today, start_time, end_time, counts, uploaded_programs, created_countries)
+
+ if not options['supress_output']:
+ print(f"Total IDAA Programs: {counts['total']}")
+ print(f"Created Programs: {counts['created']}")
+ print(f"Updated Programs: {counts['updated']}")
+ print(f"Invalid Programs: {counts['invalid']}")
+ print(f"Created Countries: {len(created_countries)}")
+
+ @staticmethod
+ def report_date():
+ today = date.today()
+ report_day = False
+ if today.day == (1 or 15):
+ report_day = True
+ return report_day
+
+ @staticmethod
+ def email_notifications(today, start_time, end_time, counts, uploaded_programs, created_countries):
+ created_programs = '\n'.join([created.name for created in uploaded_programs['created']])
+ updated_programs = '\n'.join([updated.name for updated in uploaded_programs['updated']])
+ created_countries_str = '\n'.join([country.country for country in created_countries])
+ message = (f"Start time: {start_time}\n"
+ f"End time: {end_time}\n"
+ f"Total IDAA programs: {counts['total']}\n"
+ f"Programs created: {counts['created']}\n"
+ f"Programs updated: {counts['updated']}\n"
+ f"Invalid programs: {counts['invalid']}\n"
+ f"Created Countries: {len(created_countries)}"
+ )
+ if counts['created']:
+ message += f"\nPrograms created in TolaData:\n-----\n{created_programs}\n"
+ if counts['updated']:
+ message += f"\nPrograms updated in TolaData:\n-----\n{updated_programs}\n"
+ if created_countries:
+ message += f"\nCountries created in TolaData:\n----\n{created_countries_str}\n"
+ send_mail(
+ f'IDAA program upload report {today}',
+ message,
+ settings.DEFAULT_FROM_EMAIL,
+ [settings.TOLA_DEVS_EMAIL],
+ fail_silently=False,
+ )
+
diff --git a/workflow/migrations/0060_auto_20220420_1225.py b/workflow/migrations/0060_auto_20220420_1225.py
new file mode 100644
index 000000000..13662d44c
--- /dev/null
+++ b/workflow/migrations/0060_auto_20220420_1225.py
@@ -0,0 +1,48 @@
+# Generated by Django 3.2.12 on 2022-04-20 19:25
+
+from django.db import migrations, models
+import django.db.models.deletion
+import workflow.validators
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('workflow', '0059_program_external_program_id'),
+ ]
+
+ operations = [
+ migrations.RenameField(
+ model_name='program',
+ old_name='gaitid',
+ new_name='legacy_gaitid',
+ ),
+ migrations.CreateModel(
+ name='GaitID',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('gaitid', models.IntegerField()),
+ ('donor', models.TextField(null=True)),
+ ('donor_dept', models.TextField(null=True)),
+ ('create_date', models.DateTimeField(auto_now_add=True)),
+ ('edit_date', models.DateTimeField(auto_now=True)),
+ ('program', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='gaitid', to='workflow.program')),
+ ],
+ options={
+ 'unique_together': {('gaitid', 'program')},
+ },
+ ),
+ migrations.CreateModel(
+ name='FundCode',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('fund_code', models.IntegerField(validators=[workflow.validators.validate_fund_code])),
+ ('create_date', models.DateTimeField(auto_now_add=True)),
+ ('edit_date', models.DateTimeField(auto_now=True)),
+ ('gaitid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='workflow.gaitid')),
+ ],
+ options={
+ 'unique_together': {('fund_code', 'gaitid')},
+ },
+ ),
+ ]
diff --git a/workflow/migrations/0061_programdiscrepancy.py b/workflow/migrations/0061_programdiscrepancy.py
new file mode 100644
index 000000000..0010a1152
--- /dev/null
+++ b/workflow/migrations/0061_programdiscrepancy.py
@@ -0,0 +1,24 @@
+# Generated by Django 3.2.12 on 2022-05-27 17:20
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('workflow', '0060_auto_20220420_1225'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ProgramDiscrepancy',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('idaa_json', models.JSONField(default=dict)),
+ ('discrepancies', models.JSONField(default=list)),
+ ('create_date', models.DateTimeField(auto_now_add=True)),
+ ('edit_date', models.DateTimeField(auto_now=True)),
+ ('program', models.ManyToManyField(blank=True, to='workflow.Program')),
+ ],
+ ),
+ ]
diff --git a/workflow/migrations/0062_auto_20220615_0936.py b/workflow/migrations/0062_auto_20220615_0936.py
new file mode 100644
index 000000000..cd2986da1
--- /dev/null
+++ b/workflow/migrations/0062_auto_20220615_0936.py
@@ -0,0 +1,37 @@
+# Generated by Django 3.2.12 on 2022-06-15 16:36
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('indicators', '0111_idaaoutcometheme'),
+ ('workflow', '0061_programdiscrepancy'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='IDAASector',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('sector', models.CharField(max_length=255, verbose_name='Sector Name')),
+ ('create_date', models.DateTimeField(auto_now_add=True)),
+ ('edit_date', models.DateTimeField(auto_now=True)),
+ ],
+ options={
+ 'verbose_name': 'Sector',
+ 'ordering': ('sector',),
+ },
+ ),
+ migrations.AddField(
+ model_name='program',
+ name='idaa_outcome_theme',
+ field=models.ManyToManyField(blank=True, to='indicators.IDAAOutcomeTheme'),
+ ),
+ migrations.AddField(
+ model_name='program',
+ name='idaa_sector',
+ field=models.ManyToManyField(blank=True, to='workflow.IDAASector', verbose_name='Sector'),
+ ),
+ ]
diff --git a/workflow/migrations/0063_populate_idaasector.py b/workflow/migrations/0063_populate_idaasector.py
new file mode 100644
index 000000000..8d5fdedf2
--- /dev/null
+++ b/workflow/migrations/0063_populate_idaasector.py
@@ -0,0 +1,27 @@
+# Generated by Django 3.2.12 on 2022-08-11 19:39
+
+from django.db import migrations
+
+
+idaa_sectors = [
+ "Agriculture", "Cash, Goods and Voucher Assistance", "Employment",
+ "Environment (DRR, Energy and Water)", "Financial Services", "Infrastructure (non-WASH, non-energy)"
+]
+
+
+def populate_idaa_sectors(apps, schema_editor):
+ idaa_sector_model = apps.get_model('workflow', 'IDAASector')
+
+ for idaa_sector in idaa_sectors:
+ idaa_sector_model.objects.get_or_create(sector=idaa_sector)
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('workflow', '0062_auto_20220615_0936'),
+ ]
+
+ operations = [
+ migrations.RunPython(populate_idaa_sectors)
+ ]
diff --git a/workflow/migrations/0064_verbose_names.py b/workflow/migrations/0064_verbose_names.py
new file mode 100644
index 000000000..be6abd49b
--- /dev/null
+++ b/workflow/migrations/0064_verbose_names.py
@@ -0,0 +1,110 @@
+# Generated by Django 3.2.12 on 2022-10-06 18:44
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('indicators', '0114_verbose_names'),
+ ('workflow', '0063_populate_idaasector'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='country',
+ options={'ordering': ('country',), 'verbose_name': 'Country', 'verbose_name_plural': 'Countries'},
+ ),
+ migrations.AlterModelOptions(
+ name='fundcode',
+ options={'verbose_name': 'Fund Code', 'verbose_name_plural': 'Fund Codes'},
+ ),
+ migrations.AlterModelOptions(
+ name='gaitid',
+ options={'verbose_name': 'GAIT ID', 'verbose_name_plural': 'GAIT IDs'},
+ ),
+ migrations.AlterModelOptions(
+ name='historicalsiteprofile',
+ options={'get_latest_by': 'history_date', 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical Site Profile'},
+ ),
+ migrations.AlterModelOptions(
+ name='idaasector',
+ options={'ordering': ('sector',), 'verbose_name': 'IDAA Sector', 'verbose_name_plural': 'IDAA Sectors'},
+ ),
+ migrations.AlterModelOptions(
+ name='organization',
+ options={'ordering': ('name',), 'verbose_name': 'Organization', 'verbose_name_plural': 'Organizations'},
+ ),
+ migrations.AlterModelOptions(
+ name='profiletype',
+ options={'ordering': ('profile',), 'verbose_name': 'Profile Type', 'verbose_name_plural': 'Profile Types'},
+ ),
+ migrations.AlterModelOptions(
+ name='program',
+ options={'ordering': ('name',), 'verbose_name': 'Program', 'verbose_name_plural': 'Programs'},
+ ),
+ migrations.AlterModelOptions(
+ name='programaccess',
+ options={'verbose_name': 'Program Access', 'verbose_name_plural': 'Program Access'},
+ ),
+ migrations.AlterModelOptions(
+ name='programdiscrepancy',
+ options={'verbose_name': 'Program Discrepancy', 'verbose_name_plural': 'Program Discrepancies'},
+ ),
+ migrations.AlterModelOptions(
+ name='region',
+ options={'verbose_name': 'Region', 'verbose_name_plural': 'Regions'},
+ ),
+ migrations.AlterModelOptions(
+ name='sector',
+ options={'ordering': ('sector',), 'verbose_name': 'Sector', 'verbose_name_plural': 'Sectors'},
+ ),
+ migrations.AlterModelOptions(
+ name='siteprofile',
+ options={'ordering': ('name',), 'verbose_name': 'Site Profile', 'verbose_name_plural': 'Site Profiles'},
+ ),
+ migrations.AlterModelOptions(
+ name='tolauser',
+ options={'ordering': ('name',), 'verbose_name': 'Tola User', 'verbose_name_plural': 'Tola Users'},
+ ),
+ migrations.AlterField(
+ model_name='idaasector',
+ name='sector',
+ field=models.CharField(max_length=255, unique=True, verbose_name='Sector Name'),
+ ),
+ migrations.AlterField(
+ model_name='program',
+ name='end_date',
+ field=models.DateField(null=True, verbose_name='Program End Date'),
+ ),
+ migrations.AlterField(
+ model_name='program',
+ name='funding_status',
+ field=models.CharField(max_length=255, verbose_name='Funding Status'),
+ ),
+ migrations.AlterField(
+ model_name='program',
+ name='idaa_outcome_theme',
+ field=models.ManyToManyField(blank=True, to='indicators.IDAAOutcomeTheme', verbose_name='IDAA Outcome Theme'),
+ ),
+ migrations.AlterField(
+ model_name='program',
+ name='idaa_sector',
+ field=models.ManyToManyField(blank=True, to='workflow.IDAASector', verbose_name='IDAA Sector'),
+ ),
+ migrations.AlterField(
+ model_name='program',
+ name='legacy_gaitid',
+ field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Legacy GAIT ID'),
+ ),
+ migrations.AlterField(
+ model_name='program',
+ name='name',
+ field=models.CharField(max_length=255, verbose_name='Program Name'),
+ ),
+ migrations.AlterField(
+ model_name='program',
+ name='start_date',
+ field=models.DateField(null=True, verbose_name='Program Start Date'),
+ ),
+ ]
diff --git a/workflow/migrations/0065_gaitid_optional_fields.py b/workflow/migrations/0065_gaitid_optional_fields.py
new file mode 100644
index 000000000..4b6e01b3e
--- /dev/null
+++ b/workflow/migrations/0065_gaitid_optional_fields.py
@@ -0,0 +1,23 @@
+# Generated by Django 3.2.12 on 2022-10-06 19:29
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('workflow', '0064_verbose_names'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='gaitid',
+ name='donor',
+ field=models.TextField(blank=True, null=True),
+ ),
+ migrations.AlterField(
+ model_name='gaitid',
+ name='donor_dept',
+ field=models.TextField(blank=True, null=True),
+ ),
+ ]
diff --git a/workflow/models.py b/workflow/models.py
index 720720b4c..6317f2e6b 100755
--- a/workflow/models.py
+++ b/workflow/models.py
@@ -1,14 +1,13 @@
# -*- coding: utf-8 -*-
from django.db import models
-from django.contrib import admin
from django.core.exceptions import SuspiciousOperation
from django.contrib.auth.models import User
from decimal import Decimal
import uuid
from django.utils.translation import ugettext_lazy as _
-
+from workflow import validators
from django.conf import settings
from django.db.models import Count, Max, Min, Subquery, OuterRef, Q
from django.db.models.signals import post_save
@@ -37,6 +36,7 @@ class Sector(models.Model):
class Meta:
verbose_name = _("Sector")
+ verbose_name_plural = _("Sectors")
ordering = ('sector',)
# on save add create date or update edit date
@@ -51,6 +51,20 @@ def __str__(self):
return self.sector
+class IDAASector(models.Model):
+ sector = models.CharField(_("Sector Name"), unique=True, max_length=255)
+ create_date = models.DateTimeField(auto_now_add=True)
+ edit_date = models.DateTimeField(auto_now=True)
+
+ class Meta:
+ verbose_name = _("IDAA Sector")
+ verbose_name_plural = _("IDAA Sectors")
+ ordering = ('sector',)
+
+ def __str__(self):
+ return self.sector
+
+
class Organization(models.Model):
MERCY_CORPS_ID = 1
name = models.CharField(_("Organization Name"), max_length=255, blank=False, default="TolaData")
@@ -69,6 +83,7 @@ class Organization(models.Model):
class Meta:
ordering = ('name',)
+ verbose_name = _("Organization")
verbose_name_plural = _("Organizations")
app_label = 'workflow'
@@ -102,15 +117,14 @@ def mercy_corps(cls):
return cls.objects.get(pk=cls.MERCY_CORPS_ID)
-class OrganizationAdmin(admin.ModelAdmin):
- list_display = ('name', 'create_date', 'edit_date')
- display = 'Organization'
-
-
class Region(models.Model):
name = models.CharField(_("Region Name"), max_length=255)
gait_region_id = models.PositiveIntegerField(blank=True, null=True)
+ class Meta:
+ verbose_name = _("Region")
+ verbose_name_plural = _("Regions")
+
def __str__(self):
return self.name
@@ -130,6 +144,7 @@ class Country(models.Model):
class Meta:
ordering = ('country',)
+ verbose_name = _("Country")
verbose_name_plural = _("Countries")
app_label = 'workflow'
@@ -144,6 +159,13 @@ def save(self, *args, **kwargs):
def __str__(self):
return self.country
+ @property
+ def admin_logged_fields(self):
+ return {
+ "country_name": self.country,
+ "country_code": self.code
+ }
+
@property
def name(self):
"""Standardize Object.name as returning the object's name for all models"""
@@ -187,6 +209,7 @@ class TolaUser(models.Model):
class Meta:
verbose_name = _("Tola User")
+ verbose_name_plural = _("Tola Users")
ordering = ('name',)
def __str__(self):
@@ -422,24 +445,6 @@ class Meta:
proxy = True
-class CountryAccessInline(admin.TabularInline):
- model = CountryAccess
- ordering = ('country',)
-
-class TolaUserAdmin(admin.ModelAdmin):
-
- list_display = ('name', 'country')
- display = 'Tola User'
- list_filter = ('country', 'user__is_staff',)
- search_fields = ('name', 'country__country', 'title')
- inlines = (CountryAccessInline, )
-
-
-class SectorAdmin(admin.ModelAdmin):
- list_display = ('sector', 'create_date', 'edit_date')
- display = 'Sector'
-
-
class ActiveProgramsMixin:
"""eliminates all non active programs"""
qs_name = 'ActivePrograms'
@@ -516,13 +521,23 @@ class Program(models.Model):
MIGRATED = 2 # programs created before satsuma which have switched to new RF levels
RF_ALWAYS = 3 # programs created after satsuma release - on new RF levels with no option
- gaitid = models.CharField(_("ID"), max_length=255, null=True, blank=True)
+ legacy_gaitid = models.CharField(_("Legacy GAIT ID"), max_length=255, null=True, blank=True)
external_program_id = models.IntegerField(_('External program id'), null=True, blank=False)
- name = models.CharField(_("Program Name"), max_length=255, blank=True)
- funding_status = models.CharField(_("Funding Status"), max_length=255, blank=True)
- cost_center = models.CharField(_("Fund Code"), max_length=255, blank=True, null=True)
+ name = models.CharField(_("Program Name"), max_length=255, blank=False)
+ funding_status = models.CharField(_("Funding Status"), max_length=255, blank=False)
+ cost_center = models.CharField(_("Fund Code"), max_length=255, blank=True, null=True) # Deprecated use program.gaitid.fund_code
description = models.TextField(_("Program Description"), max_length=765, null=True, blank=True)
sector = models.ManyToManyField(Sector, blank=True, verbose_name=_("Sector"))
+ idaa_sector = models.ManyToManyField(
+ IDAASector,
+ blank=True,
+ verbose_name=_('IDAA Sector'))
+ # NOTE: Participant Count "sectors" do not refer to either of these sector fields, but are actually disaggregation categories (DisaggregationLabel)
+ idaa_outcome_theme = models.ManyToManyField(
+ 'indicators.IDAAOutcomeTheme',
+ blank=True,
+ verbose_name=_('IDAA Outcome Theme')
+ )
create_date = models.DateTimeField(null=True, blank=True)
edit_date = models.DateTimeField(null=True, blank=True)
budget_check = models.BooleanField(_("Enable Approval Authority"), default=False)
@@ -535,8 +550,8 @@ class Program(models.Model):
through_fields=('program', 'tolauser')
)
public_dashboard = models.BooleanField(_("Enable Public Dashboard"), default=False)
- start_date = models.DateField(_("Program Start Date"), null=True, blank=True)
- end_date = models.DateField(_("Program End Date"), null=True, blank=True)
+ start_date = models.DateField(_("Program Start Date"), null=True, blank=False)
+ end_date = models.DateField(_("Program End Date"), null=True, blank=False)
reporting_period_start = models.DateField(_("Reporting Period Start Date"), null=True, blank=True)
reporting_period_end = models.DateField(_("Reporting Period End Date"), null=True, blank=True)
auto_number_indicators = models.BooleanField(
@@ -560,6 +575,7 @@ class Program(models.Model):
class Meta:
verbose_name = _("Program")
+ verbose_name_plural = _("Programs")
ordering = ('name',)
# on save add create date or update edit date
@@ -613,29 +629,37 @@ def program_page_url(self):
"""
return reverse('program_page', kwargs={'program': self.pk})
- @property
- def gait_url(self):
- """if program has a gait ID, returns url https://gait.mercycorps.org/editgrant.vm?GrantID=####
- otherwise returns false
- """
- if self.gaitid is None:
- return None
-
- try:
- gaitid = int(self.gaitid)
- except ValueError:
- gaitid = False
- if gaitid and gaitid != 0 and len(str(gaitid)) > 2 and len(str(gaitid)) < 5:
- # gaitid exists, is numeric, is nonzero, and is a 3 or 4 digit number:
- return 'https://gait.mercycorps.org/editgrant.vm?GrantID={gaitid}'.format(
- gaitid=gaitid)
- return None
-
def get_sites(self):
indicator_ids = Indicator.objects.filter(program__in=[self.id]).values_list('id')
results = Result.objects.filter(indicator__id__in=indicator_ids)
return SiteProfile.objects.filter(result__id__in=results).distinct()
+ @property
+ def gaitids(self):
+ """
+ Property to help with backwards compatibility with new GaitID table
+ """
+ return list(self.gaitid.values_list('gaitid', flat=True))
+
+ @property
+ def donors(self):
+ """
+ Returns a list of donors for the programs gaitid
+ If the gaitid has a donor_dept append the donor_dept to the donor
+ """
+ donors = []
+ for gaitid in self.gaitid.all():
+ if gaitid.donor:
+ if gaitid.donor_dept:
+ donors.append(f'{gaitid.donor} - {gaitid.donor_dept}')
+ else:
+ donors.append(gaitid.donor)
+ return donors
+
+ @property
+ def fund_codes(self):
+ return [fundcode.fund_code for gaitid in self.gaitid.all() for fundcode in gaitid.fundcode_set.all() if fundcode.fund_code]
+
@property
def collected_record_count(self):
return Program.objects.filter(pk=self.pk).annotate(num_data=Count('indicator__result')) \
@@ -685,6 +709,11 @@ def has_time_aware_targets(self):
target_frequency__in=Indicator.REGULAR_TARGET_FREQUENCIES
).exists()
+ @property
+ def has_indicators(self):
+ """returns true if this program has any indicators - used in program reporting period date validation"""
+ return self.indicator_set.all().exists()
+
@property
def last_time_aware_indicator_start_date(self):
"""returns None if no time aware indicators, otherwise returns the most recent start date of all targets for
@@ -707,13 +736,29 @@ def target_frequencies(self):
@property
def admin_logged_fields(self):
return {
- 'gaitid': self.gaitid,
+ 'gaitid': self.gaitids,
'name': self.name,
'funding_status': self.funding_status,
'cost_center': self.cost_center,
'description': self.description,
- 'sectors': ','.join([s.sector for s in self.sector.all()]),
- 'countries': ','.join([c.country for c in self.country.all()])
+ 'sectors': ','.join(sorted([s.sector for s in self.sector.all()])),
+ 'countries': ','.join(sorted([c.country for c in self.country.all()]))
+ }
+
+ @property
+ def idaa_logged_fields(self):
+ return {
+ "gaitid": self.gaitids,
+ "donors": self.donors,
+ "name": self.name,
+ "funding_status": self.funding_status,
+ "fund_codes": self.fund_codes,
+ "external_program_id": self.external_program_id,
+ "start_date": str(self.start_date),
+ "end_date": str(self.end_date),
+ "sectors": ','.join(sorted([s.sector for s in self.idaa_sector.all()])),
+ 'countries': ','.join(sorted([c.country for c in self.country.all()])),
+ 'outcome_themes': ','.join(sorted([ot.name for ot in self.idaa_outcome_theme.all()]))
}
@property
@@ -767,6 +812,84 @@ def manual_numbering(self):
return not self.results_framework or not self.auto_number_indicators
+class ProgramDiscrepancy(models.Model):
+ DISCREPANCY_REASONS = {
+ "out_of_bounds_tracking_dates": "TolaData start and or end dates were updated. Please verify the indicator tracking dates.",
+ "countries": "TolaData program countries does not match IDAA Country",
+ "multiple_programs": "Multiple TolaData programs retrieved from IDAA program",
+ "gaitid": "IDAA program has invalid Gait ID",
+ "duplicate_gaitid": "IDAA program has a duplicated gaitid",
+ "ProgramName": "IDAA program is missing ProgramName",
+ "id": "IDAA program is missing ID",
+ "ProgramStartDate": "IDAA program is missing ProgramStartDate",
+ "ProgramEndDate": "IDAA program is missing ProgramEndDate",
+ "ProgramStatus": "IDAA program is missing ProgramStatus",
+ "Country": "IDAA program is missing Country or has an Invalid Country"
+ }
+
+ # Example idaa_json can be seen from workflow/tests/idaa_sample_data/idaa_sample.json
+ idaa_json = models.JSONField(default=dict)
+ program = models.ManyToManyField(Program, blank=True)
+ # Example discrepancy list is ['funding_status', 'gaitid']
+ discrepancies = models.JSONField(default=list)
+ create_date = models.DateTimeField(auto_now_add=True)
+ edit_date = models.DateTimeField(auto_now=True)
+
+ class Meta:
+ verbose_name = _('Program Discrepancy')
+ verbose_name_plural = _('Program Discrepancies')
+
+ @property
+ def idaa_program_name(self):
+ result = self.idaa_json.get('ProgramName', None)
+ return result if result else _('(None)')
+
+ def __str__(self):
+ # Without str(_('')) this throws a TypeError when ProgramName is not found
+ return self.idaa_json.get('ProgramName', str(_('(None)')))
+
+
+class GaitID(models.Model):
+ gaitid = models.IntegerField()
+ program = models.ForeignKey(Program, on_delete=models.CASCADE, related_name='gaitid')
+ donor = models.TextField(null=True, blank=True)
+ donor_dept = models.TextField(null=True, blank=True)
+ create_date = models.DateTimeField(auto_now_add=True)
+ edit_date = models.DateTimeField(auto_now=True)
+
+ class Meta:
+ unique_together = ['gaitid', 'program']
+ verbose_name = _('GAIT ID')
+ verbose_name_plural = _('GAIT IDs')
+
+ def fund_codes(self):
+ """
+ Returns a list of fund_code fields for FundCodes related to this GAIT ID. Does not return a list of FundCode objects, or a Query object.
+ """
+ return list(FundCode.objects.filter(gaitid=self).values_list('fund_code', flat=True))
+
+ def __str__(self):
+ return str(self.gaitid)
+
+
+class FundCode(models.Model):
+ fund_code = models.IntegerField(validators=[validators.validate_fund_code])
+ gaitid = models.ForeignKey(GaitID, on_delete=models.CASCADE)
+ create_date = models.DateTimeField(auto_now_add=True)
+ edit_date = models.DateTimeField(auto_now=True)
+
+ @property
+ def program(self):
+ return self.gaitid.program
+
+ class Meta:
+ unique_together = ['fund_code', 'gaitid']
+ verbose_name = _("Fund Code")
+ verbose_name_plural = _("Fund Codes")
+
+ def __str__(self):
+ return str(self.fund_code)
+
PROGRAM_ROLE_CHOICES = (
# Translators: Refers to a user permission role with limited access to view data only
@@ -793,6 +916,8 @@ class ProgramAccess(models.Model):
class Meta:
db_table = 'workflow_program_user_access'
unique_together = ('program', 'tolauser', 'country')
+ verbose_name = _('Program Access')
+ verbose_name_plural = _('Program Access') # Same as singular
class ProfileType(models.Model):
@@ -802,6 +927,7 @@ class ProfileType(models.Model):
class Meta:
verbose_name = _("Profile Type")
+ verbose_name_plural = _("Profile Types")
ordering = ('profile',)
# on save add create date or update edit date
@@ -816,12 +942,8 @@ def __str__(self):
return self.profile
-class ProfileTypeAdmin(admin.ModelAdmin):
- list_display = ('profile', 'create_date', 'edit_date')
- display = 'ProfileType'
-
-
# Add land classification - 'Rural', 'Urban', 'Peri-Urban', tola-help issue #162
+# TODO this may be unused? No data in the DB
class LandType(models.Model):
classify_land = models.CharField(_("Land Classification"), help_text=_("Rural, Urban, Peri-Urban"), max_length=100, blank=True)
create_date = models.DateTimeField(null=True, blank=True)
@@ -843,11 +965,6 @@ def __str__(self):
return self.classify_land
-class LandTypeAdmin(admin.ModelAdmin):
- list_display = ('classify_land', 'create_date', 'edit_date')
- display = 'Land Type'
-
-
class SiteProfileManager(models.Manager):
def get_queryset(self):
return super(SiteProfileManager, self).get_queryset().prefetch_related().select_related('country','type')
@@ -928,7 +1045,8 @@ class SiteProfile(models.Model):
class Meta:
ordering = ('name',)
- verbose_name_plural = "Site Profiles"
+ verbose_name = _("Site Profile")
+ verbose_name_plural = _("Site Profiles")
# on save add create date or update edit date
def save(self, *args, **kwargs):
@@ -946,13 +1064,6 @@ def __str__(self):
return new_name
-class SiteProfileAdmin(admin.ModelAdmin):
- list_display = ('name', 'code', 'country', 'cluster', 'longitude', 'latitude', 'create_date', 'edit_date')
- list_filter = ('country__country')
- search_fields = ('code', 'country__country')
- display = 'SiteProfile'
-
-
# importing at the bottom of the file so that there is not circular imports
from indicators.models import Indicator, PeriodicTarget, Result
diff --git a/workflow/program.py b/workflow/program.py
new file mode 100644
index 000000000..cb9f74942
--- /dev/null
+++ b/workflow/program.py
@@ -0,0 +1,921 @@
+from django.core.exceptions import ObjectDoesNotExist
+from django.db import transaction
+from django.db.models.query import QuerySet
+from django.template import loader
+from tola import util
+from workflow import models
+from tola_management.models import ProgramAdminAuditLog, CountryAdminAuditLog
+from indicators.models import IDAAOutcomeTheme
+from django.core.mail import send_mail
+from smtplib import SMTPException, SMTPRecipientsRefused
+from django.conf import settings
+import datetime
+import calendar
+import re
+import logging
+
+
+logger = logging.getLogger(__name__)
+
+def convert_date(date, readable=False):
+ """
+ Converts date to either a readable format or to django's format
+
+ params:
+ date - date to be formatted
+ readable - boolean should the date be converted to a readable format
+
+ returns formatted date string
+ """
+ idaa_format = '%Y-%m-%dT%H:%M:%SZ'
+ django_format = '%Y-%m-%d'
+ readable_format = '%m/%d/%Y'
+
+ if date == '' or date is None or date == 'None':
+ return ''
+
+ if readable:
+ try:
+ return datetime.datetime.strptime(date, idaa_format).strftime(readable_format)
+ except ValueError:
+ return datetime.datetime.strptime(date, django_format).strftime(readable_format)
+
+ return datetime.datetime.strptime(date, idaa_format).strftime(django_format)
+
+def clean_idaa_gaitid(gaitid):
+ return str(gaitid).split('.')[0]
+
+def get_gaitid_details(gaitid, complete_gaitid_details):
+ """
+ Returns details for a given gaitid
+
+ params
+ gaitid: idaa gaitid to get details for
+ complete_gaitid_details: The full gaitid list returned from utils.AccessMSR.gaitid_list
+
+ returns a dictionary of details for the given gaitid or None if the gaitid is not found in complete_gaitid_details
+ """
+ for gaitid_detail in complete_gaitid_details:
+ if gaitid == clean_idaa_gaitid(gaitid_detail['fields']['GaitID']):
+ return gaitid_detail['fields']
+
+ return None
+
+
+class ProgramDiscrepancies:
+
+ def __init__(self):
+ self._discrepancies = set()
+
+ @property
+ def discrepancies(self):
+ """
+ Returns a list of discrepancies
+ """
+ return list(self._discrepancies)
+
+ @property
+ def discrepancy_reasons(self):
+ """
+ Returns a list of discrepancy reasons for the program
+ """
+ return self._get_discrepancy_reasons()
+
+ @property
+ def discrepancy_count(self):
+ """
+ Returns the number of discrepancies for the program
+ """
+ return len(self._discrepancies)
+
+ def clear_discrepancies(self):
+ """
+ Clears all discrepancies for the program
+ """
+ self._discrepancies = set()
+
+ def has_discrepancy(self, discrepancy):
+ """
+ Returns True or False if the program has a certain discrepancy
+ """
+ return discrepancy in self._discrepancies
+
+ def _get_discrepancy_reasons(self):
+ """
+ Returns a list of discrepancy reasons
+ """
+ reasons = []
+
+ for discrepancy in self._discrepancies:
+ reasons.append(models.ProgramDiscrepancy.DISCREPANCY_REASONS[discrepancy])
+
+ return reasons
+
+ def add_discrepancy(self, discrepancy):
+ """
+ Add a discrepancy to the objects set
+ """
+ # Programs with the discrepancy mulitple_programs should not have any other discrepancies attached
+ if not self.has_discrepancy('multiple_programs'):
+ self._discrepancies.add(discrepancy)
+
+ def get_program_discrepancies(self):
+ """
+ Returns the record from the ProgramDiscrepancy table or False if one does not exist
+ """
+ try:
+ return models.ProgramDiscrepancy.objects.get(idaa_json__id=self.idaa_program['id'])
+ except models.ProgramDiscrepancy.DoesNotExist:
+ return False
+
+ def create_discrepancies(self):
+ """
+ Adds the discrepancies to the database
+ """
+ if self.discrepancy_count > 0:
+ program_discrepancies = self.get_program_discrepancies()
+
+ if program_discrepancies:
+ program_discrepancies.discrepancies = self.discrepancies
+ program_discrepancies.idaa_json = self.idaa_program
+
+ program_discrepancies.save()
+
+ discrepancy = program_discrepancies
+ else:
+ discrepancy = models.ProgramDiscrepancy(
+ idaa_json=self.idaa_program,
+ discrepancies=self.discrepancies
+ )
+
+ discrepancy.save()
+
+ # self.tola_program will be type QuerySet when there are multiple programs
+ if isinstance(self.tola_program, QuerySet):
+ for tola_program in self.tola_program:
+ discrepancy.program.add(tola_program)
+ else:
+ discrepancy.program.add(self.tola_program)
+
+
+class ProgramValidation(ProgramDiscrepancies):
+ funded_str = 'Funded'
+
+ def __init__(self, idaa_program, msr_country_codes_list, msr_gaitid_list, duplicated_gaitids):
+ self.idaa_program = idaa_program
+ self._validated = False
+
+ self.msr_country_codes_list = msr_country_codes_list
+ self.msr_gaitid_list = msr_gaitid_list
+
+ self.duplicated_gaitids = [clean_idaa_gaitid(gaitid) for gaitid in duplicated_gaitids]
+
+ super().__init__()
+
+ @property
+ def tola_program_exists(self):
+ return not self.tola_program is None
+
+ @property
+ def validated(self):
+ """
+ Property to check that is_valid was called
+ """
+ return self._validated
+
+ def compressed_idaa_gaitids(self):
+ try:
+ return [clean_idaa_gaitid(gaitid['LookupValue']) for gaitid in self.idaa_program['GaitIDs']]
+ except KeyError:
+ return []
+
+ def program_is_funded(self):
+ """
+ Checks that the IDAA program is funded
+ """
+ try:
+ funded = self.idaa_program['ProgramStatus'] == self.funded_str
+ except KeyError:
+ funded = False
+
+ return funded
+
+ def valid_gaitids(self):
+ """
+ Loops through IDAA gait ids and checks that each one is valid
+ """
+ valid = True
+ gaitids = self.compressed_idaa_gaitids()
+
+ if len(gaitids) == 0:
+ valid = False
+ else:
+ for gaitid in gaitids:
+ if gaitid == 0:
+ valid = False
+ else:
+ try:
+ int(gaitid)
+ except ValueError:
+ valid = False
+
+ if not valid:
+ self.add_discrepancy('gaitid')
+
+ return valid
+
+ def has_duplicated_gaitids(self):
+ """
+ Returns True if the program has a gaitid shared with another IDAA program else False
+ """
+ has_duplicates = False
+ gaitids = self.compressed_idaa_gaitids()
+
+ for gaitid in gaitids:
+ if gaitid in self.duplicated_gaitids:
+ self.add_discrepancy('duplicate_gaitid')
+ has_duplicates = True
+
+ return has_duplicates
+
+ def missing_fields(self):
+ """
+ Checks that idaa_program is not missing any fields
+ """
+ fields = ["id", "ProgramName", "ProgramStartDate", "ProgramEndDate", "ProgramStatus", "Country"]
+ missing = False
+
+ for field in fields:
+ if field not in self.idaa_program or self.idaa_program[field] == '' or self.idaa_program[field] is None:
+ self.add_discrepancy(field)
+ missing = True
+ elif type(self.idaa_program[field]) is list and len(self.idaa_program[field]) == 0:
+ self.add_discrepancy(field)
+ missing = True
+
+ return missing
+
+ def valid_idaa_program(self):
+ """
+ Validation for idaa programs
+ - program has valid gaitid
+ - program has no missing fields
+ """
+ missing_fields = self.missing_fields()
+
+ valid_gaitids = self.valid_gaitids()
+ # Check duplicated gaitids
+ if valid_gaitids:
+ has_duplicates = self.has_duplicated_gaitids()
+
+ self.matching_countries()
+
+ return not missing_fields and valid_gaitids and not has_duplicates and not self.has_discrepancy('Country')
+
+ def matching_countries(self):
+ """
+ Checks if the IDAA and Tola programs have the same countries
+ """
+ tola_program_country_codes = []
+ idaa_countries = [country['LookupValue'] for country in self.idaa_program['Country']]
+ discrepancy = 'countries' if self.tola_program_exists else 'Country'
+ matching = True
+
+ if self.tola_program_exists:
+ if isinstance(self.tola_program, QuerySet):
+ tola_program_country_codes = []
+ for tola_program in self.tola_program:
+ tola_program_country_codes.extend([country.code for country in tola_program.country.all()])
+ else:
+ tola_program_country_codes = [country.code for country in self.tola_program.country.all()]
+
+ # Convert to a set to remove duplicated codes in the cases of mulitple_programs
+ tola_program_country_codes = set(tola_program_country_codes)
+
+ if len(tola_program_country_codes) == 0 and self.tola_program_exists:
+ self.add_discrepancy(discrepancy)
+ matching = False
+ else:
+ for idaa_country in idaa_countries:
+ tola_country_obj = self.get_tola_country(idaa_country)
+ if tola_country_obj:
+ if self.tola_program_exists:
+ if tola_country_obj.code in tola_program_country_codes:
+ # Countries matched, remove from tola_program_country_codes
+ tola_program_country_codes.remove(tola_country_obj.code)
+ else:
+ self.add_discrepancy(discrepancy)
+ matching = False
+
+ else:
+ # Could not find a matching tola_country_obj add a discrepancy
+ self.add_discrepancy(discrepancy)
+ matching = False
+
+ # If tola_program_country_codes still has items, then the countries did not fully match
+ if len(tola_program_country_codes) > 0:
+ self.add_discrepancy(discrepancy)
+ matching = False
+
+ return matching
+
+ def valid_tola_program(self):
+ """
+ Validation for tola programs
+ - countries match
+ """
+ self.matching_countries()
+
+ def valid_tracking_dates(self, tola_program):
+ """
+ Called from update in the case of a Tola program updating the start and or end dates.
+ Checks if the programs editable dates (reporting_period_) falls in the range of the uneditable dates
+ """
+ valid = False
+ first_day = 1
+ last_day = calendar.monthrange(tola_program.end_date.year, tola_program.end_date.month)[1]
+ first_of_month = datetime.date(tola_program.start_date.year, tola_program.start_date.month, first_day)
+ last_of_month = datetime.date(tola_program.end_date.year, tola_program.end_date.month, last_day)
+
+ try:
+ if (first_of_month <= tola_program.reporting_period_start <= last_of_month) \
+ and (first_of_month <= tola_program.reporting_period_end <= last_of_month):
+
+ valid = True
+ except TypeError:
+ valid = False
+
+ if not valid:
+ self.add_discrepancy('out_of_bounds_tracking_dates')
+ self.create_discrepancies()
+
+ return valid
+
+ def is_valid(self):
+ """
+ Method for checking if the program upload is valid. Checks the IDAA program and if possible the Tola program aswell.
+ """
+ if not self.program_is_funded():
+ # Non funded programs shouldn't show up in the discrepancy report.
+ # There is a case when a non-funded program can already have discrepancies at this point.
+ # Clear all discrepancies just in case.
+ self.clear_discrepancies()
+ self.has_duplicated_gaitids()
+
+ # If a program was Funded with discrepancies then updated to a non funded status the discrepancies will continue to show up in the report
+ # To prevent that check if non-funded programs have a discrepancy and delete
+ discrepancies = self.get_program_discrepancies()
+
+ if discrepancies:
+ discrepancies.delete()
+
+ return False
+
+ # These discrepancies can come up while trying to retrieve the Tola program
+ if self.has_discrepancy('gaitid'):
+ self.has_duplicated_gaitids()
+
+ valid_idaa_program = self.valid_idaa_program()
+
+ # Validate the Tola program if one exists
+ if self.tola_program_exists:
+ self.valid_tola_program()
+
+ self._validated = valid_idaa_program
+
+ return valid_idaa_program
+
+ self._validated = valid_idaa_program
+
+ return valid_idaa_program
+
+
+class ProgramUpload(ProgramValidation):
+
+ def __init__(self, idaa_program, msr_country_codes_list, msr_gaitid_list, duplicated_gaitids=None):
+ self.idaa_program = idaa_program
+
+ self.msr_country_codes_list = msr_country_codes_list
+ self.msr_gaitid_list = msr_gaitid_list
+
+ self.duplicated_gaitids = duplicated_gaitids
+
+ super().__init__(
+ idaa_program, msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list,
+ duplicated_gaitids=duplicated_gaitids
+ )
+
+ self.tola_program = self.get_tola_programs()
+ self.program_updated = False
+ self._created_countries = set()
+
+ @property
+ def new_upload(self):
+ return not self.tola_program_exists
+
+ @property
+ def multiple_tola_programs(self):
+ return isinstance(self.tola_program, QuerySet)
+
+ @property
+ def created_countries(self):
+ return self._created_countries
+
+ def get_region(self, idaa_region_numeric):
+ """
+ Returns the matching TolaData Region based on the IDAA RegionNumeric
+
+ Params:
+ idaa_region_numeric: The RegionNumeric value from self.msr_country_codes_list
+
+ Returns:
+ Either None if a matching Region was not found else the Region object
+ """
+ no_region_assigned_id = 0
+
+ if idaa_region_numeric == no_region_assigned_id:
+ return None
+
+ try:
+ return models.Region.objects.get(gait_region_id=idaa_region_numeric)
+ except models.Region.DoesNotExist:
+ logger.exception(f'Could not find matching Region in TolaData. IDAA RegionID={idaa_region_numeric}')
+
+ return None
+
+ def create_tola_country(self, country_name, country_code, idaa_region_numeric):
+ """
+ Creates the country in TolaData after creating the country log the country in CountryAdminAuditLog
+
+ Params:
+ country_name: country name as string
+ country_code: Alpha 2 country code
+ idaa_region_numeric: The RegionNumeric value from self.msr_country_codes_list
+
+ Returns:
+ None if the country was not created else the country object
+ """
+ region_object = self.get_region(idaa_region_numeric)
+
+ if not region_object:
+ return None
+
+ country = models.Country(country=country_name, region=region_object, code=country_code, organization_id=models.Organization.MERCY_CORPS_ID)
+ country.save()
+
+ idaa_user = self.get_idaa_user()
+
+ CountryAdminAuditLog.created(created_by=idaa_user, country=country)
+
+ self._created_countries.add(country)
+
+ return country
+
+ def get_tola_country(self, idaa_country):
+ """
+ Attempts to find a matching Tola country for the idaa country.
+ If a matching country was not found then calls self.create_tola_country
+ """
+ additional_countries = [
+ {
+ 'idaa_name': 'HQ',
+ 'country_code': 'HQ'
+ },
+ {
+ 'idaa_name': 'Mercy Corps NW',
+ 'country_code': 'US'
+ },
+ {
+ 'idaa_name': 'United Kingdom of Great Britain and Northern Ireland (the)',
+ 'country_code': 'UK'
+ }
+ ]
+
+ for country in additional_countries:
+ if idaa_country == country['idaa_name']:
+ return models.Country.objects.get(code=country['country_code'])
+
+ idaa_country_object = self.get_idaa_country_object(idaa_country)
+
+ if idaa_country_object is None:
+ return None
+
+ country_code = idaa_country_object['field_2']
+
+ try:
+ return models.Country.objects.get(code=country_code)
+ except models.Country.DoesNotExist:
+ region_id = int(idaa_country_object['RegionNumeric'])
+ return self.create_tola_country(idaa_country, country_code, region_id)
+
+ def get_country_admin_emails(self, program):
+ """
+ Returns a list of emails for each country admin for the tola_program
+
+ Excludes: mel admins and superusers
+ """
+ # TODO: This can possibly be removed with the MEL Admin role introduced in Manticore
+ mel_admins = [
+ 'atran@mercycorps.org', 'fhaddad@mercycorps.org', 'hcamp@mercycorps.org', 'mghorkhmazyan@mercycorps.org', 'tscialfa@mercycorps.org',
+ 'ajoce@mercycorps.org'
+ ]
+ admin_emails = []
+ for country in program.country.all():
+ country_admin_emails = models.CountryAccess.objects.filter(country=country, role='basic_admin').exclude(tolauser__user__is_superuser=True).exclude(tolauser__user__email__in=mel_admins).values_list('tolauser__user__email', flat=True)
+ admin_emails.extend(country_admin_emails)
+
+ return admin_emails
+
+
+ def get_tola_programs(self):
+ """
+ Queries the Program table for Tola programs that have the IDAA program gait ids
+ """
+ gaitids = self.compressed_idaa_gaitids()
+ # Exclude programs in the Countries TolaLand and Xanadu
+ excluded_country_codes = ['TT', 'XU']
+ try:
+ program = models.Program.objects.filter(gaitid__gaitid__in=gaitids).exclude(country__code__in=excluded_country_codes).distinct()
+
+ if len(gaitids) == 0:
+ self.add_discrepancy('gaitid')
+
+ if program.count() == 0:
+ return None
+ elif program.count() > 1:
+ self.add_discrepancy('multiple_programs')
+ return program
+
+ return program.first()
+ except ValueError:
+ # IDAA gait id is invalid (not an int)
+ self.add_discrepancy('gaitid')
+ except KeyError:
+ # IDAA's json response did not include a gait id
+ self.add_discrepancy('gaitid')
+
+ def get_country_code(self, country, countrycodes_list):
+ for entry in countrycodes_list:
+ if entry['fields']['CountryDisplay'] == country or entry['fields']['field_1'] == country:
+ country_code_2 = entry['fields']['field_2']
+ country_code_3 = entry['fields']['field_3']
+ return country_code_2, country_code_3
+ return None, None
+
+ def get_idaa_country_object(self, country):
+ """
+ Returns the IDAA country object from self.msr_country_codes_list
+
+ Params
+ country: IDAA country name as a string
+ """
+ for entry in self.msr_country_codes_list:
+ if entry['fields']['CountryDisplay'] == country or entry['fields']['field_1'] == country:
+ return entry['fields']
+ return None
+
+ def get_idaa_user(self):
+ try:
+ return models.TolaUser.objects.get(name='IDAA')
+ except models.TolaUser.DoesNotExist:
+ logger.exception('Could not find IDAA TolaUser')
+ return None
+
+ @transaction.atomic
+ def update(self, tola_program):
+ """
+ Updates an existing Tola program with data from IDAA
+ """
+ program_fields = [
+ {'idaa': 'ProgramName', 'tola': 'name'},
+ {'idaa': 'id', 'tola': 'external_program_id'},
+ {'idaa': 'ProgramStatus', 'tola': 'funding_status'},
+ {'idaa': 'ProgramStartDate', 'tola': 'start_date'},
+ {'idaa': 'ProgramEndDate', 'tola': 'end_date'}
+ ]
+ idaa_gaitids = self.compressed_idaa_gaitids()
+ program_before_update = tola_program.idaa_logged_fields
+ program_before_update_old_sectors = tola_program.admin_logged_fields
+ idaa_user = self.get_idaa_user()
+ # Boolean to track if the program in TolaData had updates to either the start_date or end_date
+ updated_dates = False
+ program_updated = False
+
+ # Remove old sectors from the tola_program and log the change in the ProgramAdminAuditLog (Status & History Log)
+ if tola_program.sector.all():
+ tola_program.sector.clear()
+ ProgramAdminAuditLog.updated(tola_program, idaa_user, program_before_update_old_sectors, tola_program.admin_logged_fields)
+
+ for program_field in program_fields:
+ idaa_value = self.idaa_program[program_field['idaa']]
+
+ if program_field['idaa'] == 'ProgramStartDate' or program_field['idaa'] == 'ProgramEndDate':
+ idaa_value = datetime.datetime.strptime(idaa_value, '%Y-%m-%dT%H:%M:%SZ').date()
+ elif program_field['idaa'] == 'ProgramName' and self.multiple_tola_programs:
+ # In the case of 1 IDAA program to multiple TolaData programs we do not want to update the program name in TolaData
+ continue
+
+ tola_value = getattr(tola_program, program_field['tola'])
+
+ if str(tola_value) != str(idaa_value):
+ setattr(tola_program, program_field['tola'], idaa_value)
+ program_updated = True
+
+ tola_program.save()
+
+ if isinstance(tola_value, datetime.date):
+ updated_dates = True
+
+ if updated_dates:
+ self.valid_tracking_dates(tola_program)
+
+ if 'Sector' in self.idaa_program:
+ idaa_sectors = [sector['LookupValue'] for sector in self.idaa_program['Sector']]
+
+ # Get or create sectors then add to tola program
+ for sector in idaa_sectors:
+ sector_obj, _ = models.IDAASector.objects.get_or_create(sector=sector)
+
+ if sector_obj not in tola_program.idaa_sector.all():
+ tola_program.idaa_sector.add(sector_obj.id)
+ program_updated = True
+
+ # Tola program has more sectors than the idaa program. Need to delete the extra from the Tola program
+ if tola_program.idaa_sector.all().count() > len(idaa_sectors):
+ for tola_sector in tola_program.idaa_sector.all():
+ if tola_sector.sector not in idaa_sectors:
+ tola_program.idaa_sector.remove(tola_sector)
+ program_updated = True
+
+ if '_x0032_030OutcomeTheme' in self.idaa_program:
+ idaa_outcome_themes = self.idaa_program['_x0032_030OutcomeTheme']
+
+ for outcome_theme in idaa_outcome_themes:
+ outcome_theme_obj, _ = IDAAOutcomeTheme.objects.get_or_create(name=outcome_theme)
+
+ if outcome_theme_obj not in tola_program.idaa_outcome_theme.all():
+ tola_program.idaa_outcome_theme.add(outcome_theme_obj.id)
+ program_updated = True
+
+ tola_outcome_themes = tola_program.idaa_outcome_theme.all()
+
+ # Tola program has more outcome themes than the idaa program. Need to delete the extra from the Tola program
+ if tola_outcome_themes.count() > len(idaa_outcome_themes):
+ for tola_outcome_theme in tola_outcome_themes:
+ if tola_outcome_theme.name not in idaa_outcome_themes:
+ tola_program.idaa_outcome_theme.remove(tola_outcome_theme)
+ program_updated = True
+
+ for idaa_gaitid in idaa_gaitids:
+ gaitid_details = get_gaitid_details(idaa_gaitid, self.msr_gaitid_list)
+
+ gaitid_obj, created = models.GaitID.objects.get_or_create(gaitid=idaa_gaitid, program=tola_program)
+
+ if created:
+ program_updated = True
+
+ if 'Donor' in gaitid_details and gaitid_obj.donor != gaitid_details['Donor']:
+ gaitid_obj.donor = gaitid_details['Donor']
+ program_updated = True
+
+ if 'DonorDept' in gaitid_details and gaitid_obj.donor_dept != gaitid_details['DonorDept']:
+ gaitid_obj.donor_dept = gaitid_details['DonorDept']
+ program_updated = True
+
+ gaitid_obj.save()
+
+ if 'FundCode' in gaitid_details:
+ idaa_fund_codes = []
+
+ for idaa_fund_code in gaitid_details['FundCode'].split(','):
+ try:
+ idaa_fund_codes.append(int(idaa_fund_code))
+ except ValueError:
+ logger.exception(f'Received invalid fundcode {idaa_fund_code}. IDAA program id {self.idaa_program["id"]}')
+ continue
+
+ tola_fund_codes = models.FundCode.objects.filter(gaitid=gaitid_obj).values_list('fund_code', flat=True).distinct()
+
+ fundcodes_to_add = [x for x in idaa_fund_codes if x not in tola_fund_codes]
+ fundcodes_to_delete = [x for x in tola_fund_codes if x not in idaa_fund_codes]
+
+ for fund_code in fundcodes_to_add:
+ fundcode_obj, created = models.FundCode.objects.get_or_create(fund_code=fund_code, gaitid=gaitid_obj)
+
+ if created:
+ program_updated = True
+
+ for fund_code in fundcodes_to_delete:
+ old_fund_code = models.FundCode.objects.get(fund_code=fund_code, gaitid=gaitid_obj)
+ old_fund_code.delete()
+ program_updated = True
+
+ else:
+ # If FundCode is not in gaitid_details delete any fundcodes attached to the gaitid in TolaData
+ for tola_fund_code in gaitid_obj.fundcode_set.all():
+ tola_fund_code.delete()
+ program_updated = True
+
+ # Compare gaitids between Tola and IDAA
+ for tola_gaitid in tola_program.gaitid.all():
+ # Tola gaitid is not in idaa_gaitids delete the tola gaitid
+ if str(tola_gaitid.gaitid) not in idaa_gaitids:
+ # Need to delete gaitid
+ tola_gaitid.delete()
+ program_updated = True
+
+ program_discrepancies = self.get_program_discrepancies()
+
+ # Check valid_tracking_dates for cases where the program has the discrepancy, but the tracking dates were manually updated
+ if program_discrepancies and self.valid_tracking_dates(tola_program):
+ program_discrepancies.delete()
+
+ if updated_dates:
+ subject_line = "Attention: Official program dates were updated in TolaData - Attention: Les dates officielles du programme ont été mises à jour dans TolaData - Atención: Las fechas oficiales del programa fueron actualizadas en TolaData"
+ context = {'program_name': tola_program.name}
+ text_email_template_name = 'workflow/updated_dates_email_notification.txt'
+ html_email_template_name = 'workflow/updated_dates_email_notification.html'
+ text_email = loader.render_to_string(text_email_template_name, context)
+ html_email = loader.render_to_string(html_email_template_name, context)
+ admin_emails = self.get_country_admin_emails(tola_program)
+ if len(admin_emails) > 0:
+ try:
+ if not settings.SKIP_USER_EMAILS:
+ send_mail(subject_line, text_email, settings.DEFAULT_FROM_EMAIL, admin_emails, html_message=html_email, fail_silently=False)
+ else:
+ # For QA log the email
+ logger.info(f"To:{admin_emails}\n{subject_line}\n{text_email}")
+ except SMTPException as e:
+ logger.exception(f"Unknown Error When Sending Email for Updated Dates.\nTolaData Program ID: {tola_program.id}\nReciepent List: {admin_emails}\nException: {e}")
+ else:
+ context['no_basic_admin'] = f"No Basic Administrators are assigned to {tola_program.countries}. Please assign a Basic Administrator(s) to this country."
+ text_email = loader.render_to_string(text_email_template_name, context)
+ logger.exception(f"{subject_line}\n{text_email}")
+
+ if program_updated:
+ ProgramAdminAuditLog.updated(tola_program, idaa_user, program_before_update, tola_program.idaa_logged_fields)
+
+ if not self.program_updated:
+ self.program_updated = program_updated
+
+ def bulk_update(self):
+ for tola_program in self.tola_program:
+ self.update(tola_program)
+
+ @transaction.atomic
+ def create(self):
+ """
+ Creates a new program for each JSON program object from IDAA with the following parameters:
+ external_program_id, name, funding_status, start_date and end_date.
+
+ Calls method to create reporting_period_start and reporting_period_end.
+
+ Adds sectors and outcome themes to newly created program if present in IDAA.
+
+ Adds country to newly created program:
+ Gets list of countries from IDAA ProgramProjectID
+ Retrieves the country codes from IDAA CountryCodes
+ Finds country in Tola db and adds it to program
+
+ Adds GaitID to Tola GaitID table:
+ Retrieves GaitIDs from IDAA ProgramProjectID and creates or retrieves a GaitID in Tola
+ Retrieves GaitID entries from IDAA GaitID list
+ Retrieves fund codes and donor information from this IDAA GaitID list (if existent)
+ Adds donor information to GaitID in Tola
+ Add fund codes in Tola
+
+ """
+ program = self.idaa_program
+
+ # Get IDAA data and create new program
+ external_program_id = program['id']
+ name = program['ProgramName']
+ funding_status = 'Funded'
+ start_date = datetime.datetime.strptime(program['ProgramStartDate'], '%Y-%m-%dT%H:%M:%SZ').date()
+ end_date = datetime.datetime.strptime(program['ProgramEndDate'], '%Y-%m-%dT%H:%M:%SZ').date()
+ new_tola_program, created = models.Program.objects.get_or_create(external_program_id=external_program_id, name=name,
+ funding_status=funding_status, start_date=start_date,
+ end_date=end_date)
+
+ # Get default reporting dates and add them to newly created program
+ reporting_dates = util.get_reporting_dates(new_tola_program)
+ new_tola_program.reporting_period_start = reporting_dates['reporting_period_start']
+ new_tola_program.reporting_period_end = reporting_dates['reporting_period_end']
+
+ # Get IDAA sectors and add them to programs
+ if program['Sector']:
+ sectors = [item['LookupValue'] for item in program['Sector']]
+ for sector in sectors:
+ idaa_sector, _ = models.IDAASector.objects.get_or_create(sector=sector)
+
+ new_tola_program.idaa_sector.add(idaa_sector)
+
+ # Get outcome themes and add them to program
+ if '_x0032_030OutcomeTheme' in program:
+ outcome_themes = program['_x0032_030OutcomeTheme']
+ for outcome_theme in outcome_themes:
+ idaa_outcome_theme, _ = IDAAOutcomeTheme.objects.get_or_create(name=outcome_theme)
+
+ new_tola_program.idaa_outcome_theme.add(idaa_outcome_theme)
+
+ # Get IDAA country code from CountryCodes list
+ idaa_countries = [country['LookupValue'] for country in self.idaa_program['Country']]
+ # Try and find country in Tola
+ for idaa_country in idaa_countries:
+ country = self.get_tola_country(idaa_country)
+
+ if country:
+ new_tola_program.country.add(country)
+
+ new_tola_program.save()
+
+ # Get or create GaitID objects for this program
+ idaa_gaitids = self.compressed_idaa_gaitids()
+
+ # Save gaitIDs in GaitID table
+ for gaitid in idaa_gaitids:
+ gid, created = models.GaitID.objects.get_or_create(gaitid=int(gaitid), program=new_tola_program)
+ # Get or create FundCode objects for individual GaitIDs
+ for entry in self.msr_gaitid_list:
+ if int(str(entry['fields']['GaitID']).split('.')[0]) == int(gaitid):
+ if 'FundCode' in entry['fields']:
+ fundcodes = entry['fields']['FundCode'].split(',')
+ for fundcode in fundcodes:
+ try:
+ fund_code = int(fundcode)
+ models.FundCode.objects.get_or_create(fund_code=fund_code, gaitid=gid)
+ except ValueError:
+ logger.exception(f"Fund code for {name} with gaitid {int(gaitid)} "
+ f"has the wrong format: {fundcode}")
+ donor = entry['fields']['Donor'] if 'Donor' in entry['fields'] else None
+ donor_dept = entry['fields']['DonorDept'] if 'DonorDept' in entry['fields'] else None
+ if donor:
+ gid.donor = donor
+ if donor_dept:
+ gid.donor_dept = donor_dept
+ gid.save()
+
+ program_discrepancies = self.get_program_discrepancies()
+
+ if program_discrepancies:
+ program_discrepancies.delete()
+
+ idaa_user = self.get_idaa_user()
+ ProgramAdminAuditLog.created(new_tola_program, idaa_user, new_tola_program.idaa_logged_fields)
+
+ # Email notification
+ subject_line = "Attention: A new program was added to TolaData - Attention: Un nouveau programme a été ajouté à TolaData - Atención: Se ha añadido un nuevo programa a TolaData"
+ countries = ", ".join(country.country for country in new_tola_program.country.all())
+ gaitids = ", ".join(gid for gid in idaa_gaitids)
+ fundcode_list = []
+ fundcodes = None
+ for gid in idaa_gaitids:
+ for entry in self.msr_gaitid_list:
+ if int(str(entry['fields']['GaitID']).split('.')[0]) == int(gid):
+ if 'FundCode' in entry['fields']:
+ fcs = entry['fields']['FundCode'].split(',')
+ for fc in fcs:
+ fundcode_list.append(fc)
+ fundcodes = ", ".join(f for f in fundcode_list)
+ donor = entry['fields']['Donor'] if 'Donor' in entry['fields'] else ''
+ donor_dept = entry['fields']['DonorDept'] if 'DonorDept' in entry['fields'] else ''
+ if donor and donor_dept:
+ donors = donor + ", " + donor_dept
+ else:
+ donors = donor + "" + donor_dept
+ c = {'program_name': name, 'program_start_date': start_date, 'program_end_date': end_date, 'Countries': countries, 'gaitids': gaitids, 'fundcodes': fundcodes, 'donors': donors}
+ text_email_template_name = 'workflow/new_program_email_notification.txt'
+ html_email_template_name = 'workflow/new_program_email_notification.html'
+ text_email = loader.render_to_string(text_email_template_name, c)
+ html_email = loader.render_to_string(html_email_template_name, c)
+ admin_emails = self.get_country_admin_emails(new_tola_program)
+ if len(admin_emails) > 0:
+ try:
+ if not settings.SKIP_USER_EMAILS:
+ send_mail(subject=subject_line, message=text_email, from_email=settings.DEFAULT_FROM_EMAIL,
+ recipient_list=admin_emails, fail_silently=False, html_message=html_email)
+ else:
+ # For QA log the email
+ logger.info(f"To:{admin_emails}\n{subject_line}\n{text_email}")
+ except SMTPException as e:
+ logger.exception(
+ f"Unknown Error When Sending Email new program creation.\nTolaData Program ID: {new_tola_program.id}\nRecipient List: {admin_emails}\nException: {e}")
+ else:
+ c['no_basic_admin'] = f"No Basic Administrators are assigned to {countries}. Please assign a Basic Administrator(s) to this country."
+ text_email = loader.render_to_string(text_email_template_name, c)
+ logger.exception(
+ f"{subject_line}\n{text_email}")
+
+
+ def upload(self):
+ # TODO: Before creating or updating need to clean fields
+ if not self.validated:
+ raise Exception(f"Can not upload program. {self.idaa_program['ProgramName']} is either invalid or the method is_valid() has not been called yet.")
+
+ if self.new_upload:
+ self.create()
+ else:
+ if self.multiple_tola_programs:
+ self.bulk_update()
+ else:
+ self.update(self.tola_program)
diff --git a/workflow/serializers_new/program_page_program_serializers.py b/workflow/serializers_new/program_page_program_serializers.py
index 1af090c16..396502077 100644
--- a/workflow/serializers_new/program_page_program_serializers.py
+++ b/workflow/serializers_new/program_page_program_serializers.py
@@ -58,7 +58,6 @@ class ProgramPageMixin:
needs_additional_target_periods = serializers.BooleanField()
site_count = serializers.ReadOnlyField(source='num_sites')
has_levels = serializers.SerializerMethodField()
- gait_url = serializers.CharField()
target_period_info = serializers.SerializerMethodField()
class Meta:
@@ -67,17 +66,11 @@ class Meta:
'needs_additional_target_periods',
'site_count',
'has_levels',
- 'gait_url',
'target_period_info',
]
# Class methods used to instantiate serializer with queryset and context to minimize queries
- @classmethod
- def _get_query_fields(cls):
- """Extends parent's list of DB fields needed for included fields"""
- return super()._get_query_fields() + ['gaitid']
-
@classmethod
def get_queryset(cls, **kwargs):
"""Loads program with annotations specific for program page display (note program_page_objects manager)"""
diff --git a/workflow/serializers_new/program_period_serializer.py b/workflow/serializers_new/program_period_serializer.py
new file mode 100644
index 000000000..3f481ce3d
--- /dev/null
+++ b/workflow/serializers_new/program_period_serializer.py
@@ -0,0 +1,105 @@
+from datetime import date, timedelta
+from rest_framework import serializers
+from django.utils.translation import ugettext_lazy as _
+from workflow.models import Program
+
+
+class ProgramPeriodSerializerUpdate(serializers.ModelSerializer):
+ rationale = serializers.CharField(required=False, allow_blank=True)
+ has_indicators = serializers.BooleanField(required=False)
+
+ class Meta:
+ model = Program
+ fields = [
+ 'pk',
+ 'start_date',
+ 'end_date',
+ 'reporting_period_start',
+ 'reporting_period_end',
+ 'rationale',
+ 'has_indicators',
+ 'has_time_aware_targets',
+ 'last_time_aware_indicator_start_date'
+ ]
+
+ def validate(self, data):
+
+ if ('rationale' not in data or not data['rationale']) and self.instance.has_indicators:
+ # Translators: Text of an error message that appears when a user hasn't provided a justification for the
+ # change they are making to some data
+ raise serializers.ValidationError({'rationale': _('Reason for change is required')})
+
+ if 'reporting_period_start' in data:
+ if self.instance.start_date:
+ earliest_date = self.instance.start_date
+ adjusted_start_date = date(earliest_date.year, earliest_date.month, 1)
+ if data['reporting_period_start'] < adjusted_start_date:
+ raise serializers.ValidationError(
+ {'reporting_period_start': _('Indicator tracking period cannot be outside of the IDAA program dates.')})
+ if data['reporting_period_start'].day != 1:
+ raise serializers.ValidationError(
+ {'reporting_period_start': _('Indicator tracking period must start on the first of the month.')})
+ elif data['reporting_period_start'] == self.instance.reporting_period_start:
+ pass
+ elif self.instance.has_time_aware_targets:
+ raise serializers.ValidationError(
+ {'reporting_period_start':
+ _('Indicator tracking period start date cannot be changed while time-aware periodic targets are in place.')}
+ )
+
+ if 'reporting_period_end' in data:
+ if self.instance.end_date:
+ latest_date = self.instance.end_date
+ # Get last day of the month of end_date
+ adjusted_end_date = date(
+ latest_date.year + latest_date.month // 12, latest_date.month % 12 + 1, 1) - timedelta(days=1)
+ if data['reporting_period_end'] > adjusted_end_date:
+ raise serializers.ValidationError(
+ {'reporting_period_end': _('Indicator tracking period cannot be outside of the IDAA program dates.')})
+ next_day = data['reporting_period_end'] + timedelta(days=1)
+ if next_day.day != 1:
+ raise serializers.ValidationError(
+ {'reporting_period_end': _('Indicator tracking period must end on the last day of the month.')})
+ elif data['reporting_period_end'] == self.instance.reporting_period_end:
+ pass
+ elif (self.instance.last_time_aware_indicator_start_date and
+ data['reporting_period_end'] < self.instance.last_time_aware_indicator_start_date):
+ raise serializers.ValidationError(
+ {'reporting_period_end': _('Indicator tracking period must end after the start of the last target period.')})
+ if data['reporting_period_start'] and data['reporting_period_start'] >= data['reporting_period_end']:
+ raise serializers.ValidationError(
+ {'reporting_period_end': _('Indicator tracking period start date must be before the indicator tracking period end date.')})
+
+ else:
+ raise serializers.ValidationError({'reporting_period_end': _('You must select an indicator tracking period end date.')})
+
+ return data
+
+ def update(self, instance, validated_data):
+ instance.reporting_period_start = validated_data.get('reporting_period_start', instance.reporting_period_start)
+ instance.reporting_period_end = validated_data.get('reporting_period_end', instance.reporting_period_end)
+ instance.save()
+ return instance
+
+
+class ProgramPeriodSerializerRead(serializers.ModelSerializer):
+ readonly = serializers.SerializerMethodField()
+
+ class Meta:
+ model = Program
+ fields = [
+ 'pk',
+ 'start_date',
+ 'end_date',
+ 'reporting_period_start',
+ 'reporting_period_end',
+ 'readonly',
+ 'has_time_aware_targets',
+ ]
+
+ def __init__(self, *args, **kwargs):
+ self.readonly = kwargs.pop('read_only')
+ super().__init__(*args, **kwargs)
+
+ def get_readonly(self, obj):
+ return self.readonly
diff --git a/workflow/tests/idaa_sample_data/idaa_invalid_sample.json b/workflow/tests/idaa_sample_data/idaa_invalid_sample.json
new file mode 100644
index 000000000..154a92c10
--- /dev/null
+++ b/workflow/tests/idaa_sample_data/idaa_invalid_sample.json
@@ -0,0 +1,156 @@
+{
+ "value": [
+ {
+ "fields": {
+ "id": 0,
+ "ProgramName": "Program not funded",
+ "GaitIDs": [
+ {"LookupValue": "10234.0000000000"}
+ ],
+ "ProgramStatus": "Rejected",
+ "Country": [
+ {"LookupValue": "Colombia"}
+ ],
+ "ProgramStartDate": "2022-05-01T01:00:00Z",
+ "ProgramEndDate": "2023-05-01T01:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 1,
+ "ProgramName": "Program missing GaitIDs",
+ "GaitIDs": [
+ {"LookupValue": ""}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "Colombia"}
+ ],
+ "ProgramStartDate": "2022-05-01T01:00:00Z",
+ "ProgramEndDate": "2023-05-01T01:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 2,
+ "ProgramName": "Program has multiple discrepancies",
+ "GaitIDs": [
+ {"LookupValue": "7283.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": ""}
+ ],
+ "ProgramStartDate": "2022-05-01T01:00:00Z",
+ "ProgramEndDate": "2023-05-01T01:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 3,
+ "ProgramName": "Program matches to multiple Tola",
+ "GaitIDs": [
+ {"LookupValue": "54321.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "Colombia"}
+ ],
+ "ProgramStartDate": "2022-05-01T01:00:00Z",
+ "ProgramEndDate": "2023-05-01T01:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 4,
+ "ProgramName": "Program has mismatched countries",
+ "GaitIDs": [
+ {"LookupValue": "67890.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "Haiti"}
+ ],
+ "ProgramStartDate": "2022-05-01T01:00:00Z",
+ "ProgramEndDate": "2023-05-01T01:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 5,
+ "ProgramName": "IDAA program missing required fields",
+ "GaitIDs": [
+ {"LookupValue": "77665.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "Colombia"}
+ ],
+ "ProgramStartDate": "",
+ "ProgramEndDate": "2023-05-01T01:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 6,
+ "ProgramName": "",
+ "GaitIDs": [
+ {"LookupValue": "78923.0000000000"},
+ {"LookupValue": "9787.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": ""}
+ ],
+ "ProgramStartDate": "",
+ "ProgramEndDate": ""
+ }
+ },
+ {
+ "fields": {
+ "id": 7,
+ "ProgramName": "Test missing program status",
+ "GaitIDs": [
+ {"LookupValue": "6732.0000000000"}
+ ],
+ "ProgramStatus": "",
+ "Country": [
+ {"LookupValue": "Colombia"}
+ ],
+ "ProgramStartDate": "2022-05-01T01:00:00Z",
+ "ProgramEndDate": "2023-05-01T01:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 8,
+ "ProgramName": "Test Duplicate IDAA Progam",
+ "GaitIDs": [
+ {"LookupValue": "1111.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "Colombia"}
+ ],
+ "ProgramStartDate": "2022-05-01T01:00:00Z",
+ "ProgramEndDate": "2023-05-01T01:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 9,
+ "ProgramName": "Test Duplicate IDAA Progam2",
+ "GaitIDs": [
+ {"LookupValue": "1111.0000000000"},
+ {"LookupValue": "1222.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "Colombia"}
+ ],
+ "ProgramStartDate": "2022-05-01T01:00:00Z",
+ "ProgramEndDate": "2023-05-01T01:00:00Z"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/workflow/tests/idaa_sample_data/idaa_sample.json b/workflow/tests/idaa_sample_data/idaa_sample.json
new file mode 100644
index 000000000..475d9fa6b
--- /dev/null
+++ b/workflow/tests/idaa_sample_data/idaa_sample.json
@@ -0,0 +1,157 @@
+{
+ "value": [
+ {
+ "fields": {
+ "id": 1554,
+ "ProgramName": "[CN] Annual Process for Responding to Humanitarian Situations 2020",
+ "GaitIDs": [
+ {"LookupValue": "10347.0000000000"}
+ ],
+ "ProgramStatus": "Rejected",
+ "Country": [
+ {"LookupValue": "Colombia"}
+ ],
+ "ProgramStartDate": "2022-07-29T07:00:00Z",
+ "ProgramEndDate": "2023-07-29T07:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 1575,
+ "ProgramName": "2021 TIDES/Upwork Foundation Grant",
+ "GaitIDs": [
+ {"LookupValue": "10864.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "Palestine, State of"}
+ ],
+ "Region": "Middle East",
+ "ProgramStartDate": "2022-07-29T07:00:00Z",
+ "ProgramEndDate": "2023-07-29T07:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 1576,
+ "ProgramName": "2021 Timor-Leste Cyclone Seroja Flood Response",
+ "GaitIDs": [
+ {"LookupValue": "10476.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "Timor-Leste"}
+ ],
+ "Region": "Asia",
+ "ProgramStartDate": "2022-07-29T07:00:00Z",
+ "ProgramEndDate": "2023-07-29T07:00:00Z",
+ "_x0032_030OutcomeTheme": ["test", "outcome", "theme"]
+ }
+ },
+ {
+ "fields": {
+ "id": 1609,
+ "ProgramName": "AI for Social Good",
+ "GaitIDs": [
+ {"LookupValue": "10521.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "HQ"}
+ ],
+ "Region": "HQ Managed",
+ "ProgramStartDate": "2022-07-29T07:00:00Z",
+ "ProgramEndDate": "2023-07-29T07:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 1000,
+ "ProgramName": "Multiple GAIT ids test",
+ "GaitIDs": [
+ {"LookupValue": "10254.0000000000"},
+ {"LookupValue": "10974.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "HQ"}
+ ],
+ "Region": "HQ Managed",
+ "ProgramStartDate": "2022-07-29T07:00:00Z",
+ "ProgramEndDate": "2023-07-29T07:00:00Z"
+ }
+ },
+ {
+ "fields": {
+ "id": 1234,
+ "ProgramName": "Program Create Test ",
+ "GaitIDs": [
+ {"LookupValue": "12345.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "HQ"}
+ ],
+ "Region": "HQ Managed",
+ "ProgramStartDate": "2023-04-29T07:00:00Z",
+ "ProgramEndDate": "2025-09-29T07:00:00Z",
+ "_x0032_030OutcomeTheme": ["new", "program"],
+ "Sector": []
+ }
+ },
+ {
+ "fields": {
+ "id": 1525,
+ "ProgramName": "Program Create Test ",
+ "GaitIDs": [
+ {"LookupValue": "99999.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "HQ"}
+ ],
+ "Region": "HQ Managed",
+ "ProgramStartDate": "2023-04-29T07:00:00Z",
+ "ProgramEndDate": "2025-09-29T07:00:00Z",
+ "_x0032_030OutcomeTheme": ["new", "program"],
+ "Sector": []
+ }
+ },
+ {
+ "fields": {
+ "id": 9720,
+ "ProgramName": "Test idaa program to multiple",
+ "GaitIDs": [
+ {"LookupValue": "8425.0000000000"},
+ {"LookupValue": "10726.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "HQ"}
+ ],
+ "Region": "HQ Managed",
+ "ProgramStartDate": "2023-04-29T07:00:00Z",
+ "ProgramEndDate": "2025-09-29T07:00:00Z",
+ "_x0032_030OutcomeTheme": ["new", "program"],
+ "Sector": []
+ }
+ },
+ {
+ "fields": {
+ "id": 9172,
+ "ProgramName": "Test new country created",
+ "GaitIDs": [
+ {"LookupValue": "10521.0000000000"}
+ ],
+ "ProgramStatus": "Funded",
+ "Country": [
+ {"LookupValue": "Yemen"}
+ ],
+ "ProgramStartDate": "2023-04-29T07:00:00Z",
+ "ProgramEndDate": "2025-09-29T07:00:00Z",
+ "_x0032_030OutcomeTheme": [],
+ "Sector": []
+ }
+ }
+ ]
+}
diff --git a/workflow/tests/idaa_sample_data/msr_gaitid_sample.json b/workflow/tests/idaa_sample_data/msr_gaitid_sample.json
new file mode 100644
index 000000000..548214432
--- /dev/null
+++ b/workflow/tests/idaa_sample_data/msr_gaitid_sample.json
@@ -0,0 +1,11 @@
+[
+ {
+ "fields": {
+ "GaitID": "12345.0000000",
+ "FundCode": "5678",
+ "Donor": "Testdonor",
+ "DonorDept": ""
+ }
+ }
+]
+
diff --git a/workflow/tests/serializer_tests/program_page_program_serializers.py b/workflow/tests/serializer_tests/program_page_program_serializers.py
index 0d402769b..3ae42677e 100644
--- a/workflow/tests/serializer_tests/program_page_program_serializers.py
+++ b/workflow/tests/serializer_tests/program_page_program_serializers.py
@@ -128,17 +128,6 @@ def test_level_count_nonzero(self):
data = self.get_program_data(tiers=['Tier1', 'Tier2'], levels=2)
self.assertTrue(data['has_levels'])
- def test_gait_url_empty(self):
- data = self.get_program_data(gaitid=None)
- self.assertEqual(data['gait_url'], None)
-
- def test_gait_url(self):
- data = self.get_program_data(gaitid=1423)
- self.assertEqual(
- data['gait_url'],
- 'https://gait.mercycorps.org/editgrant.vm?GrantID=1423'
- )
-
def test_time_period_info_non_time_aware(self):
p = RFProgramFactory()
for frequency in [Indicator.LOP, Indicator.MID_END]:
diff --git a/workflow/tests/serializer_tests/program_period_serializer_test.py b/workflow/tests/serializer_tests/program_period_serializer_test.py
new file mode 100644
index 000000000..e48c126b3
--- /dev/null
+++ b/workflow/tests/serializer_tests/program_period_serializer_test.py
@@ -0,0 +1,295 @@
+import datetime
+import json
+from django import test
+from django.shortcuts import reverse
+from factories import (
+ workflow_models as w_factories,
+ indicators_models as i_factories
+)
+from rest_framework.test import APIClient
+from indicators.models import Indicator
+from workflow.models import Program
+from workflow.serializers_new import program_period_serializer
+
+
+class TestPCResultSerializerWriteValidation(test.TestCase):
+ serializer = program_period_serializer.ProgramPeriodSerializerUpdate
+ error_messages = {
+ 'rationale': 'Reason for change is required',
+ 'wrong_start_day': 'Indicator tracking period must start on the first of the month.',
+ 'time_aware_targets': 'Indicator tracking period start date cannot be changed while time-aware periodic targets are in place.',
+ 'no_end_date': 'You must select an indicator tracking period end date.',
+ 'time_aware_indicator': 'Indicator tracking period must end after the start of the last target period.',
+ 'wrong_end_day': 'Indicator tracking period must end on the last day of the month.',
+ 'end_greater': 'Indicator tracking period start date must be before the indicator tracking period end date.',
+ 'outside_IDAA_dates': 'Indicator tracking period cannot be outside of the IDAA program dates.'
+ }
+
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.country = w_factories.CountryFactory()
+ cls.program = w_factories.ProgramFactory(
+ country=[cls.country],
+ start_date=datetime.date(2021, 1, 10),
+ end_date=datetime.date(2026, 12, 10),
+ reporting_period_start=datetime.date(2022, 1, 1),
+ reporting_period_end=datetime.date(2023, 12, 31))
+
+ def setUp(self):
+ # Set is_superuser to False in order to test functionality for lower permissions levels.
+ self.user = w_factories.UserFactory(first_name="FN", last_name="LN", username="pp_update_tester", is_superuser=True)
+ self.user.set_password('password')
+ self.user.save()
+
+ self.tola_user = w_factories.TolaUserFactory(user=self.user, country=self.country)
+ w_factories.grant_program_access(self.tola_user, self.program, self.country, 'low')
+ self.tola_user.save()
+
+ self.client = APIClient()
+ self.client.login(username='pp_update_tester', password='password')
+
+ def test_reporting_period_updates_get(self):
+ response = self.client.get(reverse('program_period_update', kwargs={'pk': self.program.pk}))
+ self.assertEqual(response.status_code, 200)
+ program = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(program.start_date, datetime.date(2021, 1, 10))
+ self.assertEqual(program.end_date, datetime.date(2026, 12, 10))
+ self.assertEqual(program.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(program.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_reporting_period_updates_put_with_good_start_data(self):
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2023-01-01',
+ 'reporting_period_end': '2023-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(json.loads(response.content)['message'], 'success')
+ self.assertEqual(response.status_code, 200)
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2023, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_reporting_period_updates_put_with_good_end_data(self):
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2023-01-01',
+ 'reporting_period_end': '2024-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(json.loads(response.content)['message'], 'success')
+ self.assertEqual(response.status_code, 200)
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2023, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2024, 12, 31))
+
+ def test_reporting_period_updates_put_with_good_start_end_data(self):
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2021-01-01',
+ 'reporting_period_end': '2025-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(json.loads(response.content)['message'], 'success')
+ self.assertEqual(response.status_code, 200)
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2021, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2025, 12, 31))
+
+ def test_reporting_period_does_not_update_with_bad_start_data(self):
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2021-01-15',
+ 'reporting_period_end': '2025-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['reporting_period_start'], [self.error_messages['wrong_start_day']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_reporting_period_does_not_update_with_bad_end_data(self):
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2021-01-01',
+ 'reporting_period_end': '2025-12-15',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['reporting_period_end'], [self.error_messages['wrong_end_day']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_reporting_period_does_not_update_earlier_than_IDAA_start(self):
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2020-01-01',
+ 'reporting_period_end': '2023-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['reporting_period_start'], [self.error_messages['outside_IDAA_dates']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_reporting_period_does_not_update_later_than_IDAA_end(self):
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2022-01-01',
+ 'reporting_period_end': '2027-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['reporting_period_end'], [self.error_messages['outside_IDAA_dates']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_reporting_period_does_not_update_with_inverse_dates(self):
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2023-01-01',
+ 'reporting_period_end': '2022-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['reporting_period_end'], [self.error_messages['end_greater']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_reporting_period_does_not_update_with_no_dates(self):
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['reporting_period_end'], [self.error_messages['no_end_date']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_start_date_may_not_change_if_time_aware_target_set(self):
+ indicator = i_factories.IndicatorFactory(
+ target_frequency=Indicator.ANNUAL,
+ program=self.program
+ )
+ for start, end in [(datetime.date(2022, 1, 1), datetime.date(2023, 12, 31)),
+ (datetime.date(2023, 1, 1), datetime.date(2023, 12, 31))]:
+ i_factories.PeriodicTargetFactory(
+ start_date=start,
+ end_date=end,
+ indicator=indicator
+ )
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2023-01-01',
+ 'reporting_period_end': '2023-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['reporting_period_start'],
+ [self.error_messages['time_aware_targets']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_start_date_does_change_if_no_time_aware_target_set(self):
+ indicator = i_factories.IndicatorFactory(
+ target_frequency=Indicator.MID_END,
+ program=self.program
+ )
+ i_factories.PeriodicTargetFactory(
+ start_date=None,
+ end_date=None,
+ customsort=0,
+ indicator=indicator
+ )
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2023-01-01',
+ 'reporting_period_end': '2024-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 200)
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2023, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2024, 12, 31))
+
+ def test_end_date_will_not_change_to_before_last_time_aware_target_set(self):
+ indicator = i_factories.IndicatorFactory(
+ target_frequency=Indicator.ANNUAL,
+ program=self.program
+ )
+ for start, end in [(datetime.date(2022, 1, 1), datetime.date(2023, 12, 31)),
+ (datetime.date(2023, 1, 1), datetime.date(2023, 12, 31))]:
+ i_factories.PeriodicTargetFactory(
+ start_date=start,
+ end_date=end,
+ indicator=indicator
+ )
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2022-01-01',
+ 'reporting_period_end': '2022-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['reporting_period_end'],
+ [self.error_messages['time_aware_indicator']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_end_date_will_change_to_after_last_time_aware_target_set(self):
+ indicator = i_factories.IndicatorFactory(
+ target_frequency=Indicator.ANNUAL,
+ program=self.program
+ )
+ for start, end in [(datetime.date(2022, 1, 1), datetime.date(2023, 12, 31)),
+ (datetime.date(2023, 1, 1), datetime.date(2023, 12, 31))]:
+ i_factories.PeriodicTargetFactory(
+ start_date=start,
+ end_date=end,
+ indicator=indicator
+ )
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2022-01-01',
+ 'reporting_period_end': '2024-12-31',
+ 'rationale': 'test'}, format='json')
+ self.assertEqual(response.status_code, 200)
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2024, 12, 31))
+
+ def test_end_date_will_not_change_without_rationale(self):
+ indicator = i_factories.IndicatorFactory(
+ target_frequency=Indicator.ANNUAL,
+ program=self.program
+ )
+ for start, end in [(datetime.date(2022, 1, 1), datetime.date(2023, 12, 31)),
+ (datetime.date(2023, 1, 1), datetime.date(2023, 12, 31))]:
+ i_factories.PeriodicTargetFactory(
+ start_date=start,
+ end_date=end,
+ indicator=indicator
+ )
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2022-01-01',
+ 'reporting_period_end': '2024-12-31',
+ }, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['rationale'],
+ [self.error_messages['rationale']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+ def test_end_date_will_not_change_with_empty_rationale(self):
+ indicator = i_factories.IndicatorFactory(
+ target_frequency=Indicator.ANNUAL,
+ program=self.program
+ )
+ for start, end in [(datetime.date(2022, 1, 1), datetime.date(2023, 12, 31)),
+ (datetime.date(2023, 1, 1), datetime.date(2023, 12, 31))]:
+ i_factories.PeriodicTargetFactory(
+ start_date=start,
+ end_date=end,
+ indicator=indicator
+ )
+ response = self.client.put(reverse('program_period_update', kwargs={'pk': self.program.pk}),
+ {'reporting_period_start': '2022-01-01',
+ 'reporting_period_end': '2024-12-31',
+ 'rationale': ''}, format='json')
+ self.assertEqual(response.status_code, 422)
+ self.assertEqual(json.loads(response.content)['rationale'],
+ [self.error_messages['rationale']])
+ refreshed = Program.objects.get(pk=self.program.pk)
+ self.assertEqual(refreshed.reporting_period_start, datetime.date(2022, 1, 1))
+ self.assertEqual(refreshed.reporting_period_end, datetime.date(2023, 12, 31))
+
+
+
+
+
+
diff --git a/workflow/tests/test_discrepancy_report.py b/workflow/tests/test_discrepancy_report.py
new file mode 100644
index 000000000..0bb472d86
--- /dev/null
+++ b/workflow/tests/test_discrepancy_report.py
@@ -0,0 +1,121 @@
+from workflow import discrepancy_report
+from factories import workflow_models
+from workflow import program, models, utils
+from datetime import date
+from django import test
+from unittest import skip
+import openpyxl
+import json
+
+
+# Prevents an exception when ran on github
+try:
+ msr_country_codes_list = utils.AccessMSR().countrycode_list()
+ msr_gaitid_list = utils.AccessMSR().gaitid_list()
+except AttributeError:
+ pass
+
+
+@skip('Tests will fail on GitHub without the secret_keys')
+class TestDiscrepancyReport(test.TestCase):
+ idaa_sample_data_path = 'workflow/tests/idaa_sample_data/idaa_invalid_sample.json'
+ discrepancy_report_path = f'workflow/discrepancy_report_{date.today().isoformat()}.xlsx'
+ idaa_json = None
+ duplicated_gaitids = ["1111.0000000000"]
+
+ def setUp(self):
+ with open(self.idaa_sample_data_path) as file:
+ self.idaa_json = json.load(file)
+
+ # Need to create tola programs based on pre_create_idaa_programs
+ colombia = workflow_models.CountryFactory(country='Colombia', code='CO')
+ haiti = workflow_models.CountryFactory(country='Haiti', code='HT')
+
+ idaa_program_multiple_discrepancies_index = 2
+ idaa_program_mulitple_discrepancies_json = self.idaa_json['value'][idaa_program_multiple_discrepancies_index]['fields']
+ tola_program = models.Program(
+ start_date="2025-01-01", end_date="2027-01-01", name="Tola program test",
+ funding_status=idaa_program_mulitple_discrepancies_json['ProgramStatus']
+ )
+ tola_program.save()
+ tola_program.country.add(colombia)
+ tola_program_gaitid = models.GaitID(gaitid=program.clean_idaa_gaitid(idaa_program_mulitple_discrepancies_json['GaitIDs'][0]['LookupValue']), program_id=tola_program.id)
+ tola_program_gaitid.save()
+
+ idaa_program_matches_multiple_index = 3
+ idaa_program_matches_multiple_json = self.idaa_json['value'][idaa_program_matches_multiple_index]['fields']
+ for number in range(2):
+ new_program = models.Program(
+ start_date=program.convert_date(idaa_program_matches_multiple_json['ProgramStartDate']),
+ end_date=program.convert_date(idaa_program_matches_multiple_json['ProgramEndDate']),
+ name=f"{idaa_program_matches_multiple_json['ProgramName']}-{number}", funding_status=idaa_program_matches_multiple_json['ProgramStatus']
+ )
+ new_program.save()
+ new_program.country.add(colombia)
+ gaitid = models.GaitID(gaitid=program.clean_idaa_gaitid(idaa_program_matches_multiple_json['GaitIDs'][0]['LookupValue']), program_id=new_program.id)
+ gaitid.save()
+
+ tola_program_mismatched_countries_index = 4
+ tola_program_mismatched_countries_json = self.idaa_json['value'][tola_program_mismatched_countries_index]['fields']
+ tola_program_mismatched_countries = models.Program(
+ start_date=program.convert_date(tola_program_mismatched_countries_json['ProgramStartDate']),
+ end_date=program.convert_date(tola_program_mismatched_countries_json['ProgramEndDate']),
+ name=tola_program_mismatched_countries_json['ProgramName'], funding_status=tola_program_mismatched_countries_json['ProgramStatus'],
+ )
+ tola_program_mismatched_countries.save()
+ tola_program_mismatched_countries.country.add(haiti, colombia)
+ tola_program_mismatched_countries_gaitid = models.GaitID(
+ gaitid=program.clean_idaa_gaitid(tola_program_mismatched_countries_json['GaitIDs'][0]['LookupValue']), program_id=tola_program_mismatched_countries.id
+ )
+ tola_program_mismatched_countries_gaitid.save()
+
+ def test_discrepancy_report(self):
+ for idaa_program in self.idaa_json['value']:
+ upload_program = program.ProgramUpload(idaa_program=idaa_program['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ valid_program = upload_program.is_valid()
+
+ # multiple_programs and countries discrepancies are still valid since we are going to update everything but the programs country
+ if upload_program.has_discrepancy('multiple_programs') or upload_program.has_discrepancy('countries'):
+ self.assertTrue(valid_program)
+ else:
+ self.assertFalse(valid_program)
+
+ upload_program.create_discrepancies()
+
+ discrepancy_report_obj = discrepancy_report.GenerateDiscrepancyReport()
+ discrepancy_report_obj.generate()
+
+ workbook = openpyxl.load_workbook(self.discrepancy_report_path)
+ self.assert_workbook(workbook)
+
+ def assert_workbook(self, workbook):
+ worksheets = [
+ {'class': discrepancy_report.OverviewTab, 'expected_rows': 20, 'id_col': None, 'expected_ids': None},
+ {'class': discrepancy_report.MultipleProgramsTab, 'expected_rows': 3, 'id_col': 'F', 'expected_ids': [3, 3]},
+ {'class': discrepancy_report.MismatchingFieldsTab, 'expected_rows': 3, 'id_col': 'K', 'expected_ids': [2, 4]},
+ {'class': discrepancy_report.IDAAInvalidFieldsTab, 'expected_rows': 4, 'id_col': 'C', 'expected_ids': [1, 5, 6]},
+ {'class': discrepancy_report.DuplicateIDAAProgramsTab, 'expected_rows': 3, 'id_col': 'B', 'expected_ids': [8, 9]}
+ ]
+
+ self.assertEquals(len(worksheets), len(workbook.worksheets))
+
+ for index, worksheet in enumerate(workbook.worksheets):
+ worksheet_tab = worksheets[index]['class']
+ expected_rows = worksheets[index]['expected_rows']
+ id_col = worksheets[index]['id_col']
+ expected_ids = worksheets[index]['expected_ids']
+
+ self.assertEquals(worksheet.title, worksheet_tab.title)
+ self.assertEquals(worksheet.max_column, len(worksheet_tab.columns))
+ self.assertEquals(worksheet.max_row, expected_rows)
+
+ if id_col:
+ self.assert_programs_displayed(worksheet, id_col, expected_ids)
+
+ def assert_programs_displayed(self, worksheet, id_col, expected_ids):
+ # Checks that programs are displayed on the correct worksheet tab
+ for index in range(2, worksheet.max_row + 1):
+ self.assertEquals(worksheet[f'{id_col}{index}'].value, expected_ids[index - 2])
diff --git a/workflow/tests/test_gaitid.py b/workflow/tests/test_gaitid.py
new file mode 100644
index 000000000..c939bf2af
--- /dev/null
+++ b/workflow/tests/test_gaitid.py
@@ -0,0 +1,42 @@
+from factories.workflow_models import ProgramFactory
+from workflow.models import GaitID
+from django.db import transaction
+from django.test import TestCase
+
+
+class GaitIDTests(TestCase):
+
+ def setUp(self):
+ self.program = ProgramFactory()
+ return super().setUp()
+
+ def get_program_gaitid_count(self):
+ return GaitID.objects.filter(program=self.program).count()
+
+ def create_gaitids(self, gaitid_list):
+ for gaitid in gaitid_list:
+ try:
+ with transaction.atomic():
+ gait = GaitID(program=self.program, gaitid=gaitid)
+ gait.save()
+ except ValueError:
+ continue
+
+ def test_one_gaitid(self):
+ expected_gaitid_count = 1
+
+ self.assertEqual(self.get_program_gaitid_count(), expected_gaitid_count)
+
+ def test_multiple_gaitids(self):
+ gaitid_list = ['1234', '4555', '9743', '3456']
+ expected_gaitid_count = 5 # 1 from the ProgramFactory and 4 from the list
+ self.create_gaitids(gaitid_list)
+
+ self.assertEqual(self.get_program_gaitid_count(), expected_gaitid_count)
+
+ def test_multiple_gaitids_some_invalid(self):
+ gaitid_list = ['abc', '1234', '8643', '1-a']
+ expected_gaitid_count = 3
+ self.create_gaitids(gaitid_list)
+
+ self.assertEqual(self.get_program_gaitid_count(), expected_gaitid_count)
diff --git a/workflow/tests/test_management_commands.py b/workflow/tests/test_management_commands.py
index 43ccfbe78..17a8456af 100644
--- a/workflow/tests/test_management_commands.py
+++ b/workflow/tests/test_management_commands.py
@@ -1,17 +1,33 @@
"""Ensure reporting_period_start and reporting_period_end can only be set with first and last of the month dates
respectively"""
-import datetime
+from io import StringIO
from os import path
from django import test
from django.core.management import call_command
from unittest import skip
from factories import workflow_models as w_factories
-from workflow.models import Program
from workflow.management.commands.upload_programs import process_file
-from pathlib import Path, PurePath
+from django.contrib.auth.models import User
+@skip('Tests will fail on GitHub without the secret_keys')
+class TestUploadIDAAPrograms(test.TestCase):
+
+ def setUp(self):
+ w_factories.CountryFactory(country="HQ", code="HQ")
+ w_factories.CountryFactory(country="Mercy Corps NW", code="US")
+
+ def test_dry_run(self):
+ output = StringIO()
+ call_command(
+ 'upload_IDAA_programs', upload=False, create_discrepancies=False, create_report=False,
+ supress_output=False, verbosity=0, stdout=output)
+ # Command should not output anything. Program upload class is tested separately.
+ self.assertEqual('', output.getvalue())
+
+
+@skip('This has been replaced by upload_IDAA_programs command')
class TestProgramUpload(test.TestCase):
# @classmethod
@@ -40,7 +56,6 @@ def setUp(self):
program4s = w_factories.RFProgramFactory(gaitid=4, country=[syria])
program4i = w_factories.RFProgramFactory(gaitid=4, country=[indonesia])
- @skip
def test_base_upload(self):
events = process_file(
path.join(path.dirname(path.abspath(__file__)), 'fixtures/program_upload_data.csv'), 'initial')
@@ -55,14 +70,57 @@ def test_base_upload(self):
self.assertEqual(len(events['no_change']), 0)
self.assertEqual(len(events['country_mismatch']), 2)
- @skip
def test_extra_fund_code_generates_warning(self):
pass
- @skip
def test_no_countries_prevents_upload(self):
pass
- @skip
def test_validates_csv_file_structure(self):
pass
+
+
+class TestXanaduPermissions(test.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.mc_organization = w_factories.OrganizationFactory(pk=1, name='Mercy Corps')
+ cls.non_mc_organization = w_factories.OrganizationFactory()
+ cls.homecountry = w_factories.CountryFactory(country="USA", code="US")
+ cls.xanadu = w_factories.CountryFactory(country="Xanadu", code="XA")
+ cls.mc_tolauser = w_factories.TolaUserFactory(organization=cls.mc_organization)
+ w_factories.CountryAccessFactory(tolauser=cls.mc_tolauser, country=cls.homecountry, role='basic_admin')
+ cls.non_mc_tolauser = w_factories.TolaUserFactory(organization=cls.non_mc_organization)
+
+ def test_access_to_xanadu(self):
+ # Test that mc_tolauser initially has one managed country, non_mc_tolauser has none
+ self.assertEqual(len(self.mc_tolauser.managed_countries), 1)
+ self.assertEqual(len(self.non_mc_tolauser.managed_countries), 0)
+ output = StringIO()
+ call_command('Xanadu_permissions', verbosity=0, stdout=output)
+ # Test that after management command mc_tolauser has Xanadu added as managed country, non_mc_tolauser has not
+ self.assertEqual(len(self.mc_tolauser.managed_countries), 2)
+ xa = self.mc_tolauser.countries.filter(country="Xanadu").exists()
+ self.assertEqual(xa, True)
+ self.assertEqual(len(self.non_mc_tolauser.managed_countries), 0)
+
+
+class TestAliasUserEmails(test.TestCase):
+ alias = 'tola+'
+ users_to_create = 5
+
+ def setUp(self):
+ organization = w_factories.OrganizationFactory(pk=1, name='Mercy Corps')
+
+ for _ in range(self.users_to_create):
+ w_factories.TolaUserFactory(organization=organization)
+
+ def test_command(self):
+ call_command('alias_user_emails', execute=True)
+
+ users = User.objects.all()
+
+ for user in users:
+ self.assertEqual(user.email[0:len(self.alias)], self.alias)
+ self.assertTrue(user.email.endswith('@mercycorps.org'))
diff --git a/workflow/tests/test_model_validators.py b/workflow/tests/test_model_validators.py
new file mode 100644
index 000000000..b9e356c4a
--- /dev/null
+++ b/workflow/tests/test_model_validators.py
@@ -0,0 +1,45 @@
+from factories.workflow_models import ProgramFactory
+from django.core.exceptions import ValidationError
+from workflow.models import FundCode, GaitID
+from django.test import TestCase
+
+
+class FundCodeValidatorTest(TestCase):
+
+ def setUp(self):
+ self.program = ProgramFactory()
+ self.gaitid = GaitID.objects.get(program_id=self.program.id)
+ return super().setUp()
+
+ def fund_code_len(self):
+ return FundCode.objects.filter(gaitid=self.gaitid).count()
+
+ def test_invalid_fund_code(self):
+ invalid_fund_codes = [45000, 'abc', 0.245, '12345']
+
+ for invalid_fund_code in invalid_fund_codes:
+ fund_code = FundCode(gaitid=self.gaitid, fund_code=invalid_fund_code)
+
+ self.assertRaises(ValidationError, fund_code.full_clean)
+ self.assertEqual(self.fund_code_len(), 0)
+
+ def test_valid_fund_code(self):
+ valid_fund_code = 35000
+ fund_code = FundCode(gaitid=self.gaitid, fund_code=valid_fund_code)
+
+ try:
+ fund_code.full_clean()
+ fund_code.save()
+ except ValidationError:
+ self.fail('Received ValidationError on FundCodeValidatorTest.test_valid_fund_code')
+
+ self.assertEqual(self.fund_code_len(), 1)
+
+ def test_multiple_valid_fund_code(self):
+ valid_fund_codes = [33000, 34000, 35000, 74000, 92000]
+
+ for valid_fund_code in valid_fund_codes:
+ fund_code = FundCode(gaitid=self.gaitid, fund_code=valid_fund_code)
+ fund_code.save()
+
+ self.assertEqual(self.fund_code_len(), 5)
diff --git a/workflow/tests/test_program_dates_validation.py b/workflow/tests/test_program_dates_validation.py
index a6ef3bcda..27a414e12 100644
--- a/workflow/tests/test_program_dates_validation.py
+++ b/workflow/tests/test_program_dates_validation.py
@@ -16,6 +16,8 @@
from workflow.models import Program
from tola import util
+
+# TODO skip this test once program period react modal replaces this functionality
class TestReportingPeriodDatesValidate(test.TestCase):
@classmethod
diff --git a/workflow/tests/test_program_update_funding_status.py b/workflow/tests/test_program_update_funding_status.py
index acd1d3747..fd6eaa75c 100644
--- a/workflow/tests/test_program_update_funding_status.py
+++ b/workflow/tests/test_program_update_funding_status.py
@@ -18,7 +18,12 @@ def setUp(self):
IndicatorTypeFactory(indicator_type=IndicatorType.PC_INDICATOR_TYPE)
ReportingFrequencyFactory(frequency=ReportingFrequency.PC_REPORTING_FREQUENCY)
# Creating a program than spans three fiscal years
- self.program = ProgramFactory(funding_status="Completed", reporting_period_start=date(2022, 1, 1), reporting_period_end=date(2024, 1, 1))
+ start_year = date.today().year if date.today().month < 7 else date.today().year + 1
+ end_year = start_year + 2
+ start_date = date(start_year, 1, 1)
+ end_date = date(end_year, 1, 1)
+ self.period_names = ['FY' + str(start_year), 'FY' + str(start_year + 1), 'FY' + str(end_year)]
+ self.program = ProgramFactory(funding_status="Completed", reporting_period_start=start_date, reporting_period_end=end_date)
def has_rf(self):
"""
@@ -39,10 +44,12 @@ def has_periodic_targets(self):
pc_indicator = self.program.indicator_set.filter(admin_type=Indicator.ADMIN_PARTICIPANT_COUNT).first()
pts = pc_indicator.periodictargets.all()
pts_count = pts.count()
- periods = [pts_count]
+ values = [pts_count]
+ periods = []
for pt in pts:
periods.append(pt.period)
- return periods
+ values.append(periods)
+ return values
def create_disaggs(self):
"""
@@ -79,4 +86,4 @@ def test_program_updated_funding_status_with_rf(self):
self.assertTrue(self.has_rf())
self.assertTrue(self.has_pc())
- self.assertTrue(self.has_periodic_targets() == [3, 'FY2022', 'FY2023', 'FY2024'])
+ self.assertTrue(self.has_periodic_targets() == [3, self.period_names])
diff --git a/workflow/tests/test_program_upload_class.py b/workflow/tests/test_program_upload_class.py
new file mode 100644
index 000000000..89b62726b
--- /dev/null
+++ b/workflow/tests/test_program_upload_class.py
@@ -0,0 +1,422 @@
+from django.core import mail
+from factories import workflow_models
+from workflow import program, models, utils
+from tola_management.models import ProgramAdminAuditLog, CountryAdminAuditLog
+from unittest import skip
+from django import test
+import json
+import copy
+
+# Prevents an exception when ran on github
+try:
+ msr_country_codes_list = utils.AccessMSR().countrycode_list()
+ msr_gaitid_list = utils.AccessMSR().gaitid_list()
+except AttributeError:
+ pass
+
+
+# TODO ATTENTION! The test_program_create method includes testing email notifications. In order for the test to work,
+# the "django.core.mail.backends.smtp.EmailBackend" has to be enabled and SKIP_USER_EMAILS has to be set to FALSE in
+# settings!
+
+@skip('Tests will fail on GitHub without the secret_keys')
+class TestProgramUpload(test.TestCase):
+ idaa_sample_data_path = 'workflow/tests/idaa_sample_data/idaa_sample.json'
+ msr_sample_data_path = 'workflow/tests/idaa_sample_data/msr_gaitid_sample.json'
+ create_idaa_program_index = 2
+ new_idaa_program_index = 5
+ idaa_json = None
+ msr_json = None
+ duplicated_gaitids = ["99999.0000000000"]
+
+ def setUp(self):
+ """
+ Need to create a program that is from the idaa sample
+ """
+ self._create_IDAA_user()
+ # Create admin_user for country HQ
+ self._create_admin_user()
+
+ with open(self.idaa_sample_data_path) as file:
+ self.idaa_json = json.load(file)
+
+ with open(self.msr_sample_data_path) as file:
+ self.msr_json = json.load(file)
+
+ target_idaa_program = self.idaa_json['value'][self.create_idaa_program_index]['fields']
+
+ new_program = self._create_tola_program(target_idaa_program, fields={
+ "name": target_idaa_program['ProgramName'],
+ "funding_status": target_idaa_program['ProgramStatus'],
+ "start_date": program.convert_date(target_idaa_program['ProgramStartDate']),
+ "end_date": program.convert_date(target_idaa_program['ProgramEndDate'])
+ }, create_country=False)
+
+ new_country = workflow_models.CountryFactory(country='Timor-Leste', code='TL')
+
+ new_program.country.add(new_country)
+
+ workflow_models.CountryFactory(country='HQ', code='HQ')
+ workflow_models.CountryFactory(country='Palestine (West Bank / Gaza)', code='PS')
+
+ region = models.Region(name='Middle East', gait_region_id=7)
+ region.save()
+
+ def _create_IDAA_user(self):
+ user = workflow_models.UserFactory(username='IDAA', first_name='IDAA', last_name='')
+ user.save()
+ tola_user = workflow_models.TolaUserFactory(user=user, organization_id=1)
+ tola_user.save()
+
+ def _create_tola_program(self, idaa_program, fields, create_country=True):
+ """
+ Creates a Tola program
+ """
+ if create_country:
+ country = workflow_models.CountryFactory(
+ country=idaa_program['Country'],
+ code='HQ'
+ )
+ fields['countries'] = [country]
+
+ new_program = workflow_models.ProgramFactory(**fields)
+
+ for gaitid in idaa_program['GaitIDs']:
+ clean_gaitid = str(gaitid['LookupValue']).split('.')[0]
+
+ new_gaitid = models.GaitID(gaitid=clean_gaitid, program_id=new_program.id)
+ new_gaitid.save()
+
+ return new_program
+
+ def _create_admin_user(self):
+ mc = workflow_models.OrganizationFactory(pk=1, name="MC")
+ hq = workflow_models.CountryFactory(code="HQ", country="HQ")
+ admin_user = workflow_models.UserFactory(username="admin_user")
+ tola_admin_user = workflow_models.TolaUserFactory(user=admin_user, country=hq, organization=mc)
+ workflow_models.grant_country_access(tola_admin_user, hq, role='basic_admin')
+
+ def test_validation_idaa_not_funded(self):
+ """
+ Test validation when an IDAA program is not funded
+ """
+ idaa_not_funded_index = 0
+
+ upload_program = program.ProgramUpload(idaa_program=self.idaa_json['value'][idaa_not_funded_index]['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertFalse(upload_program.is_valid())
+
+ def test_validation_idaa_valid_and_exists(self):
+ """
+ Test validation when an IDAA program is valid and exists in Tola
+ """
+ expected_discrepancies = 0
+
+ upload_program = program.ProgramUpload(idaa_program=self.idaa_json['value'][self.create_idaa_program_index]['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertTrue(upload_program.is_valid())
+ self.assertTrue(upload_program.tola_program_exists)
+ self.assertEquals(upload_program.discrepancy_count, expected_discrepancies)
+
+ def test_validation_idaa_valid_and_does_not_exists(self):
+ """
+ Test validation when an IDAA program is valid and does not exist in Tola
+ """
+ idaa_index = 1
+ expected_discrepancies = 0
+
+ upload_program = program.ProgramUpload(idaa_program=self.idaa_json['value'][idaa_index]['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertTrue(upload_program.is_valid())
+ self.assertFalse(upload_program.tola_program_exists)
+ self.assertEquals(upload_program.discrepancy_count, expected_discrepancies)
+
+ def test_invalid_countries_tola_program(self):
+ """
+ Test validation when a Tola program has mismatching countries to the IDAA program
+ """
+ idaa_index = 3
+ expected_discrepancies = 1
+
+ idaa_program = self.idaa_json['value'][idaa_index]['fields']
+
+ self._create_tola_program(idaa_program, fields={
+ "name": idaa_program['ProgramName'],
+ "funding_status": idaa_program['ProgramStatus'],
+ "start_date": program.convert_date(idaa_program['ProgramStartDate']),
+ "end_date": program.convert_date(idaa_program['ProgramEndDate']),
+ }, create_country=False)
+
+ upload_program = program.ProgramUpload(idaa_program=idaa_program,
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+ self.assertTrue(upload_program.is_valid())
+ self.assertTrue(upload_program.tola_program_exists)
+ self.assertEquals(upload_program.discrepancy_count, expected_discrepancies)
+ self.assertTrue(upload_program.has_discrepancy('countries'))
+
+ def test_one_idaa_to_multiple_tola_programs(self):
+ """
+ Test validation when an IDAA program matches to multiple TolaData programs
+ """
+ idaa_index = 7
+ expected_discrepancies = 1
+
+ idaa_program = self.idaa_json['value'][idaa_index]['fields']
+
+ for x in range(2):
+ self._create_tola_program(idaa_program, fields={
+ "name": f"multiple toladata program {x}",
+ "funding_status": idaa_program['ProgramStatus'],
+ "start_date": program.convert_date(idaa_program['ProgramStartDate']),
+ "end_date": program.convert_date(idaa_program['ProgramEndDate']),
+ }, create_country=True)
+
+ upload_program = program.ProgramUpload(idaa_program=idaa_program,
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertTrue(upload_program.is_valid())
+ upload_program.upload()
+ self.assertTrue(upload_program.tola_program_exists)
+ self.assertTrue(upload_program.multiple_tola_programs)
+ self.assertEqual(upload_program.discrepancy_count, expected_discrepancies)
+ self.assertTrue(upload_program.has_discrepancy('multiple_programs'))
+
+ tola_programs = upload_program.get_tola_programs()
+
+ for tola_program in tola_programs:
+ self.assertNotEqual(tola_program.name, idaa_program['ProgramName'])
+
+ def test_invalid_gaitid_idaa_program(self):
+ """
+ Test validation when an IDAA program has invalid GaitIDs
+ """
+ idaa_index = 3
+ expected_discrepancies = 1
+
+ idaa_program = self.idaa_json['value'][idaa_index]['fields']
+
+ idaa_program['GaitIDs'][0] = {'LookupValue': '1237a'}
+
+ upload_program = program.ProgramUpload(idaa_program=idaa_program,
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertFalse(upload_program.is_valid())
+ self.assertEquals(upload_program.discrepancy_count, expected_discrepancies)
+ self.assertTrue(upload_program.has_discrepancy('gaitid'))
+
+ def test_missing_gaitid_idaa_program(self):
+ """
+ Test validation when an IDAA program does not have a Gait id
+ """
+ idaa_index = 3
+ expected_discrepancies = 1
+
+ idaa_program = self.idaa_json['value'][idaa_index]['fields']
+
+ idaa_program['GaitIDs'] = []
+
+ upload_program = program.ProgramUpload(idaa_program=idaa_program,
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertFalse(upload_program.is_valid())
+ self.assertEquals(upload_program.discrepancy_count, expected_discrepancies)
+ self.assertTrue(upload_program.has_discrepancy('gaitid'))
+
+ def test_each_field_empty_idaa_program(self):
+ """
+ Test validation when an IDAA program has an empty required field
+ """
+ fields = ["id", "ProgramName", "ProgramStartDate", "ProgramEndDate", "Country"]
+ idaa_index = 3
+ expected_discrepancies = 1
+
+ for field in fields:
+ idaa_program = copy.copy(self.idaa_json['value'][idaa_index]['fields'])
+
+ idaa_program[field] = ''
+
+ upload_program = program.ProgramUpload(idaa_program=idaa_program,
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertFalse(upload_program.is_valid())
+ self.assertEquals(upload_program.discrepancy_count, expected_discrepancies)
+ self.assertTrue(upload_program.has_discrepancy(field))
+
+ def test_mulitple_idaa_gaitids(self):
+ """
+ Test validation when an IDAA program has multiple gait ids
+ """
+ idaa_index = 4
+ expected_discrepancies = 0
+
+ upload_program = program.ProgramUpload(idaa_program=self.idaa_json['value'][idaa_index]['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertTrue(upload_program.is_valid())
+ self.assertEquals(upload_program.discrepancy_count, expected_discrepancies)
+
+ def test_skip_is_valid(self):
+ """
+ Test that upload raises correctly when is_valid was not called
+ """
+ idaa_index = 3
+
+ upload_program = program.ProgramUpload(idaa_program=self.idaa_json['value'][idaa_index]['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertRaises(Exception, upload_program.upload)
+
+ def test_duplicated_gaitid(self):
+ """
+ Test to check if a duplicated gaitid is properly assigned a discrepancy
+ """
+ idaa_index = 6
+
+ upload_program = program.ProgramUpload(idaa_program=self.idaa_json['value'][idaa_index]['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertFalse(upload_program.is_valid())
+ self.assertTrue(upload_program.has_discrepancy('duplicate_gaitid'))
+
+ def test_program_update(self):
+ """
+ Test that an existing Tola program is updated from IDAA
+ """
+ gaitid = 10476
+ tola_program = models.Program.objects.get(gaitid__gaitid=gaitid)
+ expected_donor = 'World Vision International'
+ expected_donor_dept = 'Bureau of Humanitarian Assistance (BHA)'
+ expected_name = '2021 Timor-Leste Cyclone Seroja Flood Response'
+ expected_fund_code = 33677
+
+ tola_program.name = 'test name change'
+ tola_program.save()
+
+ upload_program = program.ProgramUpload(idaa_program=self.idaa_json['value'][self.create_idaa_program_index]['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ if upload_program.is_valid():
+ upload_program.upload()
+
+ self.assertFalse(upload_program.new_upload)
+
+ tola_program = models.Program.objects.get(gaitid__gaitid=gaitid)
+ audit_log_count = ProgramAdminAuditLog.objects.filter(program=tola_program).count()
+
+ self.assertEquals(tola_program.country.all().count(), 1)
+ self.assertEquals(tola_program.gaitid.all().count(), 1)
+ self.assertEquals(tola_program.idaa_outcome_theme.all().count(), 3)
+ self.assertEquals(tola_program.gaitid.first().fundcode_set.first().fund_code, expected_fund_code)
+ self.assertEquals(tola_program.name, expected_name)
+ self.assertEquals(tola_program.gaitid.first().donor, expected_donor)
+ self.assertEquals(tola_program.gaitid.first().donor_dept, expected_donor_dept)
+ self.assertEquals(audit_log_count, 1)
+
+ def test_new_country_created(self):
+ """
+ Test that a new country is created if it does not exist in TolaData
+ """
+ idaa_index = 8
+
+ upload_program = program.ProgramUpload(
+ idaa_program=self.idaa_json['value'][idaa_index]['fields'], msr_country_codes_list=msr_country_codes_list,
+ msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ self.assertTrue(upload_program.is_valid())
+ upload_program.upload()
+ self.assertTrue(upload_program.new_upload)
+ self.assertEqual(len(upload_program.created_countries), 1)
+
+ created_program = upload_program.get_tola_programs()
+ audit_log_count = CountryAdminAuditLog.objects.filter(country=created_program.country.first()).count()
+
+ self.assertTrue(created_program.country.first().country, 'Yemen')
+ self.assertEqual(audit_log_count, 1)
+
+ def test_program_update_delete_mismatched_gaitid(self):
+ """
+ Test that a mismatched gaitid for Tola programs is deleted
+ """
+ removed_gaitid = 18021
+ gaitid = 10476
+ tola_program = models.Program.objects.get(gaitid__gaitid=gaitid)
+ new_gaitid = models.GaitID(gaitid=removed_gaitid, program=tola_program)
+ new_gaitid.save()
+
+ upload_program = program.ProgramUpload(idaa_program=self.idaa_json['value'][self.create_idaa_program_index]['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=msr_gaitid_list, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ if upload_program.is_valid():
+ upload_program.upload()
+
+ self.assertFalse(upload_program.new_upload)
+
+ tola_program = models.Program.objects.get(gaitid__gaitid=gaitid)
+ audit_log_count = ProgramAdminAuditLog.objects.filter(program=tola_program).count()
+
+ self.assertEquals(tola_program.gaitid.all().count(), 1)
+ self.assertEquals(tola_program.idaa_outcome_theme.all().count(), 3)
+ self.assertEquals(audit_log_count, 1)
+
+ def test_program_create(self):
+ """
+ Test that a new program is created if it does not exist in Tola. This test includes email notifications.
+ In order for the test to work, the "django.core.mail.backends.smtp.EmailBackend" has to be enabled and
+ SKIP_USER_EMAILS has to be set to FALSE in settings!
+ """
+
+ external_program_id = self.idaa_json['value'][self.new_idaa_program_index]['fields']['id']
+ expected_program_name = self.idaa_json['value'][self.new_idaa_program_index]['fields']['ProgramName']
+ gaitidvalue = self.idaa_json['value'][self.new_idaa_program_index]['fields']['GaitIDs'][0]['LookupValue']
+ expected_gaitid = int(str(gaitidvalue).split('.')[0])
+ expected_country = self.idaa_json['value'][self.new_idaa_program_index]['fields']['Country'][0]['LookupValue']
+
+ program_to_be_created = program.ProgramUpload(
+ idaa_program=self.idaa_json['value'][self.new_idaa_program_index]['fields'],
+ msr_country_codes_list=msr_country_codes_list, msr_gaitid_list=self.msr_json, duplicated_gaitids=self.duplicated_gaitids
+ )
+
+ if program_to_be_created.is_valid():
+ program_to_be_created.upload()
+
+ self.assertTrue(program_to_be_created.new_upload)
+
+ tola_program = models.Program.objects.get(external_program_id=external_program_id)
+ audit_log_count = ProgramAdminAuditLog.objects.filter(program=tola_program).count()
+
+ self.assertEquals(tola_program.name, expected_program_name)
+ self.assertEquals(tola_program.gaitid.first().gaitid, expected_gaitid)
+ self.assertEquals(tola_program.funding_status, 'Funded')
+ self.assertEquals(tola_program.country.first().country, expected_country)
+ self.assertEquals(tola_program.idaa_outcome_theme.all().count(), 2)
+ self.assertEquals(audit_log_count, 1)
+
+ # Verify that one message has been sent.
+ self.assertEqual(len(mail.outbox), 1)
+ # Verify to, from_email and message subject.
+ to = ['admin_user@testenv.com']
+ self.assertEqual(mail.outbox[0].to, to)
+ from_email = 'test@example.com'
+ self.assertEqual(mail.outbox[0].from_email, from_email)
+ subject = "Attention: A new program was added to TolaData - Attention: Un nouveau programme a été ajouté à TolaData - Atención: Se ha añadido un nuevo programa a TolaData"
+ self.assertEqual(mail.outbox[0].subject, subject)
+
+
+
diff --git a/workflow/urls.py b/workflow/urls.py
index 28b25a890..bfe5ff764 100755
--- a/workflow/urls.py
+++ b/workflow/urls.py
@@ -4,10 +4,15 @@
SiteProfileUpdate,
SiteProfileDelete,
IndicatorDataBySite,
- reportingperiod_update
+ reportingperiod_update,
+ program_period_update
)
-from django.urls import path
+from django.urls import path, include
+
+apipatterns = [
+ path('program_period_update//', program_period_update, name='program_period_update')
+]
urlpatterns = [
path('siteprofile_list///', SiteProfileList.as_view(), name='siteprofile_list'),
@@ -19,4 +24,7 @@
#ajax calls
path('reportingperiod_update//', reportingperiod_update, name='reportingperiod_update'),
+
+ # API (serializer-based) calls
+ path('api/', include(apipatterns)),
]
diff --git a/workflow/utils.py b/workflow/utils.py
new file mode 100644
index 000000000..577178295
--- /dev/null
+++ b/workflow/utils.py
@@ -0,0 +1,119 @@
+import requests
+from django.conf import settings
+import logging
+
+
+logger = logging.getLogger(__name__)
+admin_email_log = logging.getLogger('workflow')
+
+
+class AccessMSR:
+
+ def get_MSR_list(self, list_id):
+ tenant_id = settings.MS_TENANT_ID
+ client_id = settings.MS_TOLADATA_CLIENT_ID
+ client_secret = settings.MS_TOLADATA_CLIENT_SECRET
+ login_url = f'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token'
+ data = {'grant_type': 'client_credentials', 'scope': 'https://graph.microsoft.com/.default',
+ 'client_id': client_id, 'client_secret': client_secret}
+ access_token = requests.post(login_url, data=data)
+
+ logger.info(f'Access Token. Status Code: {access_token.status_code}. Response Time: {access_token.elapsed}')
+ try:
+ access_token.raise_for_status()
+ except requests.exceptions.HTTPError as e:
+ logger.exception(f'Failed SharePoint request when retrieving the Access Token. Error: {e}')
+
+ access_token = access_token.json()['access_token']
+ msrcomms_id = settings.MSRCOMMS_ID
+ base_url = f'https://graph.microsoft.com/v1.0/sites/{msrcomms_id}/lists/'
+ sharepoint_url = base_url + f'{list_id}/items'
+ params = {'expand': 'columns', 'Accept': 'application/json;odata=verbose',
+ 'Content_Type': 'application/json;odata=verbose'}
+ headers = {'Authorization': 'Bearer {}'.format(access_token)}
+ response = requests.get(sharepoint_url, headers=headers, params=params)
+
+ self.log_list_request(list_id, response)
+
+ json_data = response.json()['value']
+ next_url = response.json()['@odata.nextLink']
+ while next_url:
+ response = requests.get(next_url, headers=headers, params=params)
+ self.log_list_request(list_id, response)
+ json_data += response.json()['value']
+ next_url = response.json()['@odata.nextLink'] if '@odata.nextLink' in response.json() else None
+ return json_data
+
+ @staticmethod
+ def log_list_request(list_id, response):
+ logger.info(f'List ID: {list_id}. Status Code: {response.status_code}. Response Time: {response.elapsed}')
+ try:
+ response.raise_for_status()
+ except requests.exceptions.HTTPError as e:
+ logger.exception(f'Failed SharePoint request when retrieving list ID: {list_id}. Error: {e}')
+
+ def gaitid_list(self):
+ gaitid_list_id = settings.GAITID_LIST_ID
+ values = self.get_MSR_list(gaitid_list_id)
+ return values
+
+ def countrycode_list(self):
+ cc_list_id = settings.COUNTRYCODES_LIST_ID
+ values = self.get_MSR_list(cc_list_id)
+ return values
+
+ def program_project_list(self):
+ program_project_list_id = settings.PROGRAM_PROJECT_LIST_ID
+ values = self.get_MSR_list(program_project_list_id)
+ return values
+
+
+def check_IDAA_duplicates(idaa_programs):
+ """
+ Loops through all idaa programs.
+ Checks if the gaitid for each program is a duplicate.
+ There are two type of duplicates that are being checked against. Overall duplicates and duplicates for report.
+ The overall duplicates are checking regardless of program status and generates a sharepoint list url that gets added to the logger.
+ The duplicates for report are checking only programs with the status of Funded or Concluded
+
+ Returns:
+ A set of duplicated gaitids for the report
+ """
+ base_url = "https://mercycorpsemea.sharepoint.com/sites/MSRCommsSite/Lists/ProgramProjectID/AllItems.aspx?FilterFields1=GaitIDs&FilterTypes1=LookupMulti&FilterValues1="
+ checked_gaitids = set()
+ duplicated_gaitids = set()
+ gaitid_filter_values = set()
+ checked_for_report = set()
+ duplicates_for_report = set()
+
+ for idaa_program in idaa_programs:
+ idaa_fields = idaa_program['fields']
+ program_status = idaa_fields.get('ProgramStatus', None)
+ gaitids = [gaitid['LookupValue'] for gaitid in idaa_fields['GaitIDs']]
+
+ for gaitid in gaitids:
+ if program_status in ['Funded', 'Concluded']:
+ if gaitid in checked_for_report:
+ duplicates_for_report.add(gaitid)
+ else:
+ checked_for_report.add(gaitid)
+
+ if gaitid in checked_gaitids:
+ duplicated_gaitids.add(gaitid)
+ gaitid = gaitid.replace('.', '%2E')
+ gaitid_filter_values.add(gaitid)
+ else:
+ checked_gaitids.add(gaitid)
+
+ if len(duplicated_gaitids):
+ filter_values = "%3B%23".join(gaitid_filter_values)
+ '''
+ Log the duplicates to two loggers.
+ logger.info to prevent the following NoneType: None log (python was trying to include a traceback when using logger.exception)
+ admin_email_log to send the log to the tola-devs-errors slack channel
+ '''
+ log_str = f"Found {len(duplicated_gaitids)} duplicated gaitids\nSharePoint URL for duplicated GaitIDs: {base_url + filter_values}"
+ logger.info(log_str)
+ admin_email_log.exception(log_str)
+
+ return duplicates_for_report
diff --git a/workflow/validators.py b/workflow/validators.py
new file mode 100644
index 000000000..56cef1f8b
--- /dev/null
+++ b/workflow/validators.py
@@ -0,0 +1,12 @@
+from django.core.exceptions import ValidationError
+
+
+def validate_fund_code(value):
+ fund_code_ranges = [range(30000, 39999), range(70000, 79000), range(90000, 99999)]
+
+ for fund_code_range in fund_code_ranges:
+ if value in fund_code_range:
+ return True
+
+ # Not sure if this error should be translated. With the automatic program creation this error would only be present on the backend.
+ raise ValidationError('Received invalid fund code')
\ No newline at end of file
diff --git a/workflow/views.py b/workflow/views.py
index de7c8b4a2..dd1cfe9ef 100755
--- a/workflow/views.py
+++ b/workflow/views.py
@@ -4,6 +4,7 @@
"""
import logging
+import json
from datetime import timedelta
from dateutil.relativedelta import relativedelta
from dateutil import parser
@@ -31,6 +32,7 @@
from django.utils.decorators import method_decorator
from django.shortcuts import render
from django.contrib import messages
+from django.db import transaction
from django.db.models import Q, Max
from tola.util import getCountry, group_excluded
@@ -49,6 +51,8 @@
verify_program_access_level_of_any_program
)
+import workflow.serializers_new.program_period_serializer as pp_serializer
+
# Get an instance of a logger
logger = logging.getLogger(__name__)
@@ -285,6 +289,33 @@ def form_valid(self, form):
form_class = SiteProfileForm
+@login_required
+@api_view(['GET', 'PUT'])
+@transaction.atomic
+def program_period_update(request, pk):
+ # pk is program pk
+ program = Program.objects.get(pk=pk)
+ verify_program_access_level(request, program.pk, 'low')
+ old_dates = program.dates_for_logging
+ if request.method == 'PUT':
+ verify_program_access_level(request, pk, 'high')
+ result_data = request.data
+ result_serializer = pp_serializer.ProgramPeriodSerializerUpdate(program, data=result_data)
+ if result_serializer.is_valid():
+ result_serializer.save()
+ ProgramAuditLog.log_program_dates_updated(
+ request.user, program, old_dates, program.dates_for_logging, request.POST.get('rationale')
+ )
+
+ else:
+ return JsonResponse(result_serializer.errors, status=422)
+
+ return JsonResponse({'message': 'success'}, status=200)
+ role = request.user.tola_user.program_role(program.pk)
+ read_only = False if role == 'high' else True
+ return JsonResponse(pp_serializer.ProgramPeriodSerializerRead(program, read_only=read_only).data)
+
+
@login_required
@has_program_write_access
def reportingperiod_update(request, pk):