Add native CodeIgniter 4 report generation functionality replacing legacy spooler_db system. Provides centralized report generation with audit logging and multi-language support. New Features: - Report generation with Indonesian and English language support - Role-based access control (Lab, Admin, Superuser: generate; CS: print only) - Preview mode for validation workflow - Print audit logging to AUDIT_REQUESTS table - Multi-page report support with proper pagination - Dual unit system (Conventional and International units) Controllers: - ReportController: Main controller for report generation, preview, and print - generate(): Full report with audit logging - preview(): Preview mode without audit logging - print(): Print-only access for CS role - Home::printReport(): Route handler redirecting based on user role Libraries: - ReportHelper: Comprehensive report data retrieval - Patient information (name, MR number, demographics, referral) - Test results with reference ranges and unit conversions - Collection and reception data with timestamps - Validation status and validator information - Special handling for pending samples and Chinese translations Routes: - /report/(:num) - Generate report (Lab, Admin, Superuser) - /report/(:num)/preview - Preview without audit logging - /report/(:num)/eng - English language report - /report/print/(:num) - Print-only access (CS role) - /print/(:num) - Redirect based on role (all roles) Views: - report/template.php: Professional lab report template with Gleneagles branding - Header and footer images - Patient information table - Test results with dual unit columns - Collection and reception timestamps - Authorization signature area - Preview watermark Role Index Views: - Removed dialog_preview.php inclusion from all role dashboards - Consolidated print button directly linking to new report routes Assets: - Report-specific CSS files (normalize.min.css, style.css, pdf.css, style_qr.css) - Gleneagles header and footer images - Legacy spooler_db files preserved in public/spooler_db/ for reference Tests: - ReportTest.php: Unit tests for report generation functionality Database: - Uses existing tables: REQUESTS, TESTS, DICT_TESTS, SP_REQUESTS, PATIENTS - Inserts print audit records into AUDIT_REQUESTS table Security: - Parameterized queries throughout (SQL injection prevention) - Role-based access control enforced at route level - Proper output escaping with esc() in views
377 lines
14 KiB
JSON
377 lines
14 KiB
JSON
{
|
|
"requires": true,
|
|
"lockfileVersion": 1,
|
|
"dependencies": {
|
|
"@types/node": {
|
|
"version": "14.14.21",
|
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz",
|
|
"integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A=="
|
|
},
|
|
"anymatch": {
|
|
"version": "3.1.1",
|
|
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
|
|
"integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
|
|
"requires": {
|
|
"normalize-path": "^3.0.0",
|
|
"picomatch": "^2.0.4"
|
|
}
|
|
},
|
|
"balanced-match": {
|
|
"version": "1.0.0",
|
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
|
},
|
|
"binary-extensions": {
|
|
"version": "2.0.0",
|
|
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
|
|
"integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow=="
|
|
},
|
|
"brace-expansion": {
|
|
"version": "1.1.11",
|
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
|
"requires": {
|
|
"balanced-match": "^1.0.0",
|
|
"concat-map": "0.0.1"
|
|
}
|
|
},
|
|
"braces": {
|
|
"version": "3.0.2",
|
|
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
|
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
|
"requires": {
|
|
"fill-range": "^7.0.1"
|
|
}
|
|
},
|
|
"chokidar": {
|
|
"version": "3.3.0",
|
|
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
|
|
"integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
|
|
"requires": {
|
|
"anymatch": "~3.1.1",
|
|
"braces": "~3.0.2",
|
|
"fsevents": "~2.1.1",
|
|
"glob-parent": "~5.1.0",
|
|
"is-binary-path": "~2.1.0",
|
|
"is-glob": "~4.0.1",
|
|
"normalize-path": "~3.0.0",
|
|
"readdirp": "~3.2.0"
|
|
}
|
|
},
|
|
"chrome-launcher": {
|
|
"version": "0.13.2",
|
|
"resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.2.tgz",
|
|
"integrity": "sha512-zWD9RVVKd8Nx2xKGY4G08lb3nCD+2hmICxovvRE9QjBKQzHFvCYqGlsw15b4zUxLKq3wXEwVbR/yLtMbfk7JbQ==",
|
|
"requires": {
|
|
"@types/node": "*",
|
|
"escape-string-regexp": "^1.0.5",
|
|
"is-wsl": "^2.2.0",
|
|
"lighthouse-logger": "^1.0.0",
|
|
"mkdirp": "^0.5.3",
|
|
"rimraf": "^3.0.2"
|
|
},
|
|
"dependencies": {
|
|
"glob": {
|
|
"version": "7.1.6",
|
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
|
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
|
"requires": {
|
|
"fs.realpath": "^1.0.0",
|
|
"inflight": "^1.0.4",
|
|
"inherits": "2",
|
|
"minimatch": "^3.0.4",
|
|
"once": "^1.3.0",
|
|
"path-is-absolute": "^1.0.0"
|
|
}
|
|
},
|
|
"minimist": {
|
|
"version": "1.2.5",
|
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
|
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
|
|
},
|
|
"mkdirp": {
|
|
"version": "0.5.5",
|
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
|
|
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
|
|
"requires": {
|
|
"minimist": "^1.2.5"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"chrome-remote-interface": {
|
|
"version": "0.28.2",
|
|
"resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.28.2.tgz",
|
|
"integrity": "sha512-F7mjof7rWvRNsJqhVXuiFU/HWySCxTA9tzpLxUJxVfdLkljwFJ1aMp08AnwXRmmP7r12/doTDOMwaNhFCJsacw==",
|
|
"requires": {
|
|
"commander": "2.11.x",
|
|
"ws": "^7.2.0"
|
|
}
|
|
},
|
|
"commander": {
|
|
"version": "2.11.0",
|
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
|
|
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ=="
|
|
},
|
|
"concat-map": {
|
|
"version": "0.0.1",
|
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
|
},
|
|
"debug": {
|
|
"version": "2.6.9",
|
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
"requires": {
|
|
"ms": "2.0.0"
|
|
}
|
|
},
|
|
"escape-string-regexp": {
|
|
"version": "1.0.5",
|
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
|
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
|
},
|
|
"fill-range": {
|
|
"version": "7.0.1",
|
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
|
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
|
"requires": {
|
|
"to-regex-range": "^5.0.1"
|
|
}
|
|
},
|
|
"fs.realpath": {
|
|
"version": "1.0.0",
|
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
|
},
|
|
"fsevents": {
|
|
"version": "2.1.3",
|
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
|
|
"integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
|
|
"optional": true
|
|
},
|
|
"glob": {
|
|
"version": "6.0.4",
|
|
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
|
|
"integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
|
|
"requires": {
|
|
"inflight": "^1.0.4",
|
|
"inherits": "2",
|
|
"minimatch": "2 || 3",
|
|
"once": "^1.3.0",
|
|
"path-is-absolute": "^1.0.0"
|
|
}
|
|
},
|
|
"glob-parent": {
|
|
"version": "5.1.0",
|
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
|
|
"integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
|
|
"requires": {
|
|
"is-glob": "^4.0.1"
|
|
}
|
|
},
|
|
"html-pdf-chrome": {
|
|
"version": "0.6.1",
|
|
"resolved": "https://registry.npmjs.org/html-pdf-chrome/-/html-pdf-chrome-0.6.1.tgz",
|
|
"integrity": "sha512-WAdk9K1ZJpvZ0D1JfCML+rjPD5RhjsqXaLafoRtyboqxfv7z7NKy06VMEgGDsM7lbO1k2E3aUimUd+jPbLzGGw==",
|
|
"requires": {
|
|
"chrome-launcher": "0.13.2",
|
|
"chrome-remote-interface": "^0.28.0"
|
|
}
|
|
},
|
|
"inflight": {
|
|
"version": "1.0.6",
|
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
|
"requires": {
|
|
"once": "^1.3.0",
|
|
"wrappy": "1"
|
|
}
|
|
},
|
|
"inherits": {
|
|
"version": "2.0.4",
|
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
|
},
|
|
"is-binary-path": {
|
|
"version": "2.1.0",
|
|
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
|
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
|
"requires": {
|
|
"binary-extensions": "^2.0.0"
|
|
}
|
|
},
|
|
"is-docker": {
|
|
"version": "2.1.1",
|
|
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
|
|
"integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw=="
|
|
},
|
|
"is-extglob": {
|
|
"version": "2.1.1",
|
|
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
|
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
|
|
},
|
|
"is-glob": {
|
|
"version": "4.0.1",
|
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
|
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
|
"requires": {
|
|
"is-extglob": "^2.1.1"
|
|
}
|
|
},
|
|
"is-number": {
|
|
"version": "7.0.0",
|
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
|
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
|
|
},
|
|
"is-wsl": {
|
|
"version": "2.2.0",
|
|
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
|
|
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
|
|
"requires": {
|
|
"is-docker": "^2.0.0"
|
|
}
|
|
},
|
|
"lighthouse-logger": {
|
|
"version": "1.2.0",
|
|
"resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz",
|
|
"integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==",
|
|
"requires": {
|
|
"debug": "^2.6.8",
|
|
"marky": "^1.2.0"
|
|
}
|
|
},
|
|
"marky": {
|
|
"version": "1.2.1",
|
|
"resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz",
|
|
"integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ=="
|
|
},
|
|
"minimatch": {
|
|
"version": "3.0.4",
|
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
|
"requires": {
|
|
"brace-expansion": "^1.1.7"
|
|
}
|
|
},
|
|
"minimist": {
|
|
"version": "0.0.8",
|
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
|
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
|
|
},
|
|
"mkdirp": {
|
|
"version": "0.5.1",
|
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
|
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
|
"requires": {
|
|
"minimist": "0.0.8"
|
|
}
|
|
},
|
|
"moment": {
|
|
"version": "2.29.1",
|
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
|
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
|
|
},
|
|
"ms": {
|
|
"version": "2.0.0",
|
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
|
},
|
|
"mv": {
|
|
"version": "2.1.1",
|
|
"resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
|
|
"integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
|
|
"requires": {
|
|
"mkdirp": "~0.5.1",
|
|
"ncp": "~2.0.0",
|
|
"rimraf": "~2.4.0"
|
|
}
|
|
},
|
|
"ncp": {
|
|
"version": "2.0.0",
|
|
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
|
|
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M="
|
|
},
|
|
"node-cmd": {
|
|
"version": "3.0.0",
|
|
"resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz",
|
|
"integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28="
|
|
},
|
|
"node-run-cmd": {
|
|
"version": "1.0.1",
|
|
"resolved": "https://registry.npmjs.org/node-run-cmd/-/node-run-cmd-1.0.1.tgz",
|
|
"integrity": "sha1-F1XBJiS9/5INj0UkLWZC4hSj1AA="
|
|
},
|
|
"normalize-path": {
|
|
"version": "3.0.0",
|
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
|
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
|
|
},
|
|
"once": {
|
|
"version": "1.4.0",
|
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
|
"requires": {
|
|
"wrappy": "1"
|
|
}
|
|
},
|
|
"path-is-absolute": {
|
|
"version": "1.0.1",
|
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
|
},
|
|
"pdf-to-printer": {
|
|
"version": "1.1.0",
|
|
"resolved": "https://registry.npmjs.org/pdf-to-printer/-/pdf-to-printer-1.1.0.tgz",
|
|
"integrity": "sha512-+4v71/7HI1eL8I7orib8YiAiTC45qEL5WAQSKwL2YhmIXvNv+jiOkROtuO6MhFq9mfoUCCQd+ZrjC6bKUFGmxg=="
|
|
},
|
|
"picomatch": {
|
|
"version": "2.1.1",
|
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz",
|
|
"integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA=="
|
|
},
|
|
"readdirp": {
|
|
"version": "3.2.0",
|
|
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
|
|
"integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
|
|
"requires": {
|
|
"picomatch": "^2.0.4"
|
|
}
|
|
},
|
|
"rimraf": {
|
|
"version": "2.4.5",
|
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
|
|
"integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
|
|
"requires": {
|
|
"glob": "^6.0.1"
|
|
}
|
|
},
|
|
"to-regex-range": {
|
|
"version": "5.0.1",
|
|
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
|
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
|
"requires": {
|
|
"is-number": "^7.0.0"
|
|
}
|
|
},
|
|
"wrappy": {
|
|
"version": "1.0.2",
|
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
|
},
|
|
"ws": {
|
|
"version": "7.4.2",
|
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz",
|
|
"integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA=="
|
|
}
|
|
}
|
|
}
|