{"_id":"mongodb-ace-mode","_rev":"102-7fa75124160dd4fc15c39c4a7aca7068","name":"mongodb-ace-mode","dist-tags":{"latest":"2.0.1","experimental":"0.0.0-experimental-1c53312ce4905234885618d41ae95fde9c21aa18","next":"0.0.0-next-4216a27cdf41425fff35938bb42040bb93c2d246"},"versions":{"0.0.1":{"name":"mongodb-ace-mode","version":"0.0.1","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.0.1","maintainers":[{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"4ebcae61ae6935552c4e0eb93bfab82d66690d94","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.1.tgz","integrity":"sha512-+szyMTWtf6nxSI4u8fOkS8jwlOFiunD9T1vAACeHW2hnmmSkXqxQSKIqvyi1rlxYSh848yvUbqY0huohY494Pg==","signatures":[{"sig":"MEQCIC6v8rsG16mF/kv2nnNvDok+ZbupZtBBfoeoAzgaid7qAiBZBExTLI2UMjQgW5j/IFOcUVWyrIMEreFMJHWoFYfmKA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"4ebcae61ae6935552c4e0eb93bfab82d66690d94","gitHead":"0552063a586964e10dbe0794923d1a121bb21093","scripts":{},"_npmUser":{"name":"aherlihy","email":"anna@mongodb.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"4.2.0","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"7.9.0","_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode-0.0.1.tgz_1516629920488_0.04330137534998357","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"mongodb-ace-mode","version":"0.0.2","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.0.2","maintainers":[{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"christkv","email":"christkv@gmail.com"},{"name":"cilix","email":"matthewlevenstein@gmail.com"},{"name":"daprahamian","email":"dan.aprahamian@gmail.com"},{"name":"dpercy","email":"davetp425@gmail.com"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"glowe","email":"graham.lowe@gmail.com"},{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},{"name":"pzrq","email":"peter@peterjs.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"7c441566f070d6ab29a96927abca9d5da2c72811","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.2.tgz","fileCount":4,"integrity":"sha512-MjU/2beMmiSPRD+cVGFoe35kzvaugjByUP3YsBD28AYJNyTbqvYvEYP7gYNgMeOB1ICEz/kHtJcKocxxBX5CIQ==","signatures":[{"sig":"MEUCIF2x99dpumb8hXnuuOEuwDo/34IlGst3JQwDw8Sx7S6TAiEA3IsMKHX/CYwsBk66mEQ5tGPXVIj7yq0RzjnESEtv2JA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259357,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbI6dVCRA9TVsSAnZWagAAgkYP/0fRicmm5toH3P1WKvLF\nH5Sg2V685fVyP1VoOlDIihxlxnjvwzwPDD/s0xXwVFwnrNY1a4olx71sDv+e\nRPkodcngrxIJtJWC92PSxCEBfy0ig1B5HfBCPPpzIyN+kEa6uRdIgozX3nby\nAhfS+PthGyNc4mhZGu0ohiG9DLq9Kxe1bs7NXAd501BlmPZj3enSbhBnqkMg\nJFtM3gyVWkxp+oVFtKP+9vlVoeK74B4kdrCv4Iz4arUICh5r7HyRHi76vu/g\n7+UCOpZ65KBIWlZ6EknO5dVjT0fx3t/fmEI+U8ay+auXjgvys5zBIci1+qmy\nd+a/GFES1M/brsawDBcjnRAUhHr8vlJ+CGiq+L3PKblMuVCpRp8y2Wx9+tGE\nSrfodwOIEEglcc+745tJoTNM+thJ4ShOoDPDxkXI3Ksdm+Sob8sdkE1hrfNQ\nbx85kxksi0Iol+s4J8R+ZcHGQiDaJye8YYZGNsalQij8TrA0GH5ir25pKWMq\nU3ZjtyBzwaycoEwFaHHOFJygoROgn2x80SS06XDRJeS60+Kf4vzqSX+XgRhp\nsHFZ6KjiIrjiV0H+04JwtgbJIzho8iX574NfKgGmDIAPoljwJtk61Dm7dw6t\nvvC/wqwpaQXvH+5586c8wj156xNdY0FVLx4lOPec4A7EJSVzb9gZHbFgkBel\n0ZO5\r\n=EoXN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"4213dcb075626cbaaa086b3cf3ba0b5b2037a174","_npmUser":{"name":"durran","email":"durran@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.0.1","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"8.9.3","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.2_1529063253259_0.9165588528906183","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"mongodb-ace-mode","version":"0.1.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.1.0","maintainers":[{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"cilix","email":"matthewlevenstein@gmail.com"},{"name":"daprahamian","email":"dan.aprahamian@gmail.com"},{"name":"deafgoat","email":"deafgoat@gmail.com"},{"name":"deepshah","email":"deepcshah@gmail.com"},{"name":"dpercy","email":"davetp425@gmail.com"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"glowe","email":"graham.lowe@gmail.com"},{"name":"gregg.b","email":"gregg.brewster@mongodb.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"jimol","email":"jim.oleary@gmail.com"},{"name":"jon.franco","email":"jon.franco@mongodb.com"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"kay-kim","email":"kay@mongodb.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"micheal.parks","email":"michealparks1989@gmail.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"mpobrien","email":"mpobrien005@gmail.com"},{"name":"redondos","email":"aolivera@gmail.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"sampoonachot","email":"joy.sampoonachot@10gen.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"schwartzrw","email":"schwartzrw@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"terakilobyte","email":"terakilobyte@gmail.com"},{"name":"thomaslangston-mongodb","email":"thomas.langston@mongodb.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"0858036242b7ed9944aaeb2bb46274af436648a3","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.1.0.tgz","fileCount":4,"integrity":"sha512-y+NT7bgHXeknBKNuV1g/FX7sSv/TdnDjFIDcQzXPqVr/7W2VoeQWmZTGmILBUOrb70KimdiHwCNkyq0ba4m7+g==","signatures":[{"sig":"MEYCIQCqqXL9WV8ZsBtVeUxwulOc4yuNtllRyvjQ9VZFDlliTwIhAIc6tH5n5lTg7VXa9U4FKvMLpNKPcTsTGtAyHT8e7pPX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":263285,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcf9VRCRA9TVsSAnZWagAAIjoP/1OedtXCEEYbVN2PNdcS\nlrv5STU8ISvRM0MKTDurF/LOYKBxBCr7EBR85ImAnZU2gjXjpXtbSs+vHjRT\nZt6QVDW9QvkX1dWxkaLbTumtBaZUc90RKWsplPgX8bD+6nMShtA002CFG4Sa\nRDW80fFGbra/MWGPZpW62JaXwtnovV6xyWzHBmSQuvXpw6ydPe5i+IXDCOpy\nMfPnCjnIlgLzkpncRu9ah/DuxKyT7o3TIgqLftB9+LYSDqHPk+bJaEOGClCL\nd/4ESz3R2YvY3+5FbHSmb4owqsd32772b/20wajzMujU6KuZSMD81rziheQ5\nut/chcFlXNe5duQjgiLW4Xpji9oVV4gczHUeg964qh84fn+w5gOhBz0STI3c\npK24jyJk8mq52HLnevJ95h7LGUYLiC2FdUk87JW9xs67JYPGcDouH/fjuoxm\nXg325f8YQLseu2amQMyB0kODUW5s2bMTOtWdiPJ46gg6fvgxWvezKwl7fP6p\ntLKQCW5yD7AvjjlYGEp9jYAZUowtavOQt1zANLAjO4sPcUcJAqaXv+yEDXXB\ngPt3dNjcRk+5Rfi2KRjI2GA1jz9UDiSyEgq9HGlRVa6X75g4C+j/d0MEsAch\ntiOD0ZrFlOnv0krKso+jWp6EzJDUNiaDId+lvzNVRPeQNd8vFNfea32OVbj6\nD9fT\r\n=FW0c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"b36e3ee6d8fbf714c87a8cdec6c00683c3682d9a","_npmUser":{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.5.0","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"10.4.0","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.1.0_1551881553030_0.46600274584638113","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"mongodb-ace-mode","version":"0.2.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.2.0","maintainers":[{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"cilix","email":"matthewlevenstein@gmail.com"},{"name":"daprahamian","email":"dan.aprahamian@gmail.com"},{"name":"deafgoat","email":"deafgoat@gmail.com"},{"name":"deepshah","email":"deepcshah@gmail.com"},{"name":"dpercy","email":"davetp425@gmail.com"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"glowe","email":"graham.lowe@gmail.com"},{"name":"gregg.b","email":"gregg.brewster@mongodb.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"jimol","email":"jim.oleary@gmail.com"},{"name":"jon.franco","email":"jon.franco@mongodb.com"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"kay-kim","email":"kay@mongodb.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"micheal.parks","email":"michealparks1989@gmail.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"mpobrien","email":"mpobrien005@gmail.com"},{"name":"redondos","email":"aolivera@gmail.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"sampoonachot","email":"joy.sampoonachot@10gen.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"schwartzrw","email":"schwartzrw@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"terakilobyte","email":"terakilobyte@gmail.com"},{"name":"thomaslangston-mongodb","email":"thomas.langston@mongodb.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"41c7e51f7a8fcc2bc337f272fb545831872e066f","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.2.0.tgz","fileCount":5,"integrity":"sha512-4RuhC7xttqRayV+hPWKddm0S/2IfmnVruCv/75SO1YUQKYK/CsfQ+vv818wzYu6/7CKTdwuGNHpECZo6lthxhQ==","signatures":[{"sig":"MEUCIFK+S8ham/8Vp/OorrOjdd/UGNAmdiU6OIPThMsw7TmlAiEAjfiGz8+9xBw6sRop71uNVp6BlMe4sENg390EnD5AxUg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":272733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgD/5CRA9TVsSAnZWagAADvMP/39rrOAezm88N6sd8e3b\n4Tdo1kMN6qe1sPH2TJ6rXFz549ESjZXmqSexYarSzrnXpDhZx8gRjrTrGQet\ntNpTV/XoTquUc3uTDOpMI47M5Ymf2LcMqaNl5IpED1c+rwIcC1wKNYqKLCAw\nhbze7rrnkAq0VHjYB8s3JTFFhDaM+NaUoc+bVXnvdhHGJhCEm7aGP7yKBEl4\n5VcxR0d5nsHEFrk+U7smBPaHZhDSFrPpUfJ6+qhmv9xfnpw1Yy100tyLurzS\nTqAzo4a76yYxxWUPnfbYIi+lUiZt16907JjIcKYZxD6Y7qysUpgItmG+GwYT\nCmN81W36s+q0QRGikcRC6e8jv7ggBYlNgPSJGdfYUyv/+Mw/RyzGRMMK8mdA\nM3fxZZARIcrhXO5UMzXZ+qjoazCBPCvvIsykmjvPlWcL0FW0dCEp6hKi3Cr1\nFtvdY2OTiVMFgsrV6V/Qg+jDKb9cKxeHg/r34e2OZIyMrFaRZukr8yl9ORk2\nM/LsAVQjl1G5jYIiXSPsA/JMKg2q6hJX5QBO+NYU8Ja3wMz+czzhBiu43Teh\nIcunUDkLqw4t2rXMMBaebAgR5aiso6SfRuSsUX2z1doG+Ur8UxfvX1SDX2di\nDnfBxIizJICwqgUhVTeXwTvt2U6+yuTqKpHRrtpby0938EtJNdzG3KYjITfw\nZt1O\r\n=Jd2q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"e20832df79f95abb9c0fa1e5a8b7e7e889d3ee93","_npmUser":{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.5.0","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"10.4.0","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.2.0_1551908857150_0.19686128539152303","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"mongodb-ace-mode","version":"0.2.1","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.2.1","maintainers":[{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"cilix","email":"matthewlevenstein@gmail.com"},{"name":"daprahamian","email":"dan.aprahamian@gmail.com"},{"name":"deafgoat","email":"deafgoat@gmail.com"},{"name":"deepshah","email":"deepcshah@gmail.com"},{"name":"dpercy","email":"davetp425@gmail.com"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"glowe","email":"graham.lowe@gmail.com"},{"name":"gregg.b","email":"gregg.brewster@mongodb.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"jimol","email":"jim.oleary@gmail.com"},{"name":"jon.franco","email":"jon.franco@mongodb.com"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"kay-kim","email":"kay@mongodb.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"micheal.parks","email":"michealparks1989@gmail.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"mpobrien","email":"mpobrien005@gmail.com"},{"name":"redondos","email":"aolivera@gmail.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"sampoonachot","email":"joy.sampoonachot@10gen.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"schwartzrw","email":"schwartzrw@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"terakilobyte","email":"terakilobyte@gmail.com"},{"name":"thomaslangston-mongodb","email":"thomas.langston@mongodb.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"edb3b9cf267ccdb9a77a2de533abcb338c7b4324","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.2.1.tgz","fileCount":5,"integrity":"sha512-ThP9gVjnzNZD/EINgWAa5PYKkOYScZhnZn2OmE7a3BiZJdSvGdVg8kad1HFktB/06moHIXH9aktiJrcyHrOHkw==","signatures":[{"sig":"MEYCIQCtc0l3jRZlOpT9TQexCBVMX/kI4vCEEXehjSxuyiNOrQIhAL7gvi7aQOmoPwEm+EV2CV6g2xYhL93myfIEQzWjFfCB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":272730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmmw5CRA9TVsSAnZWagAAU8sQAJS1JeyI6+9rnMMy2tBB\nmCJ946SkLiDCyfOCUNcStG3bjbpsEiHFbJUD7r1kJMRQFPfayVWKF8re1eDH\naNluJe+xbbUDBdcHxy7jdxGD+MB0+9qIPxLT2EeAZar13DcvNqjZu3g+UHcO\nEEWvxbLXM6ZJhVQJNXpeY6rDv06PsYlIP5eDA8/AEK0uaj03czgkCTurirYy\ntQO/KRq28Jv2twUpncoF5dH9ryJglkyKzdyvFXVUOQUrBJxXO18zpXRfVk4Y\nnRyQj6TyHzOi2W6GqeIUM++WNBqNpLj4z8PhXSm/MtEzPZz1excQpDWLVkNW\nvyNFOfwNAFl8n/ir5tWEEWoiFOKE6IL/Hy9jPWOp/mjVOmDWio/A0rRjOS6f\ndokk+JVMPpWZXeXaf9TVnhVnAdre0X6RHJbFqHxiv6zlH4QWSliDrFtM5NFV\nf8awd6ku/SPoUpOQNs3I+OflNGogR5hTnt6I1/rQzJHLkIt/eGcXKEYrYJkq\no9bOwWOc+M5prcjGZtBecEapVeILAIZ3+Q/jXY1D+XsKxAfy5q3YTDWtuiZH\naxSxjs77tP2HT1G/CoMq0YEIcGbif8zywk5j/Tj4F7bhWViO5I4WXendzp/t\nGJJL0vzMz6djdm0m2/7XH7eihb+7YfWQ+vAk4ZlDPJHZS9bck7kYxwhvmsH8\nVdGj\r\n=GeaQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"5647050b6b19b4b157390bbf25c8830073750eb5","_npmUser":{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.9.0","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"11.11.0","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.2.1_1553624120085_0.7537559166242491","host":"s3://npm-registry-packages"}},"0.2.2":{"name":"mongodb-ace-mode","version":"0.2.2","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.2.2","maintainers":[{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"cilix","email":"matthewlevenstein@gmail.com"},{"name":"daprahamian","email":"dan.aprahamian@gmail.com"},{"name":"deafgoat","email":"deafgoat@gmail.com"},{"name":"deepshah","email":"deepcshah@gmail.com"},{"name":"dpercy","email":"davetp425@gmail.com"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"glowe","email":"graham.lowe@gmail.com"},{"name":"gregg.b","email":"gregg.brewster@mongodb.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"jimol","email":"jim.oleary@gmail.com"},{"name":"jon.franco","email":"jon.franco@mongodb.com"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"kay-kim","email":"kay@mongodb.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"micheal.parks","email":"michealparks1989@gmail.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"mpobrien","email":"mpobrien005@gmail.com"},{"name":"redondos","email":"aolivera@gmail.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"sampoonachot","email":"joy.sampoonachot@10gen.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"schwartzrw","email":"schwartzrw@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"terakilobyte","email":"terakilobyte@gmail.com"},{"name":"thomaslangston-mongodb","email":"thomas.langston@mongodb.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"63e002e22d02decab2ae492d995fa409b2104684","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.2.2.tgz","fileCount":4,"integrity":"sha512-MyZw3Zmp50V2XT98em6t31NHyqxRcgIGl5keIbtvez2iNHS0eGFJcFm2tttVFJDLQXu31MM5gGQRv4xy5Z3efw==","signatures":[{"sig":"MEUCIQCkEUNE6Mf2JAJGr/mfyZgCQGHSyzabsMFx5BpDOX9igQIgVrtGmSUMwKk72hWu0sGxo2YBqz1adtEViVoVqm9NN84=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":276943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJco255CRA9TVsSAnZWagAAMmEP/3bLgXlW+9U6CtVw9iPu\nJ02TeuPi+S6WMrCcrsopNtnOBIbyY8qeJnNzbTBfHUkK/8SV/U0J24BTwaHC\nts2EwBATf9Mz7RAfqnl8aF9YCC14tzMtFYLpNFdam3jn+C3VUhBUgdWlsr+1\nFIgJRqjzr8Dq4iq5IqcO+tm5+001Y9dctxOXeVku9dFUq3W1YqU08tzNaw99\nIVpp+/wNSkMlnUI7bsOWjvbQRkgqqeoDudi/9YZSzKt0MvNdUboXATYvoNwo\nD+MmhqHUjNoJjPTfcX4KANVWlQTYdx8saaS0gBzl2rpLisXdytfLBNB9W4vz\nGGtaoehNkIJBVu75joCiIV3tjlYAkaauLxOQh83nNCXDxRwcRNema7VTa6yd\n1+KdpbZZGhObeQS0AN5dzze2GcmVmsXHTwNSxajp1meptvRoRz7kVj3iKBk8\nFlZIVQEWZflBigzA38rKoXLfAfzD34hwweJ/sbUyE98b9suJtdKGuuj7KvYC\nhfOjyQczIrwe/evwxmX1Y1j5HZhtj4jr8gd+I921O4mkNQjaREVX5MXb6jXw\nwY3d2MAuU3uBXUNtK6BahmNR9Lgw2oCVGvIj5MhCyZTC1K3QVgzYLQww5p0B\nE8UlSZmqD1FJIEgrdiOt5csFvz6eNcHZRMrhdo1WzU10gbWuFqixZ/ZkcMHM\nUOZd\r\n=+hOB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"ab856466e78f9df07e67076acde1f5f6a63a4eb9","_npmUser":{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.9.0","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"10.4.0","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.2.2_1554214520516_0.6171477753932877","host":"s3://npm-registry-packages"}},"0.3.0":{"name":"mongodb-ace-mode","version":"0.3.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.3.0","maintainers":[{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"cilix","email":"matthewlevenstein@gmail.com"},{"name":"daprahamian","email":"dan.aprahamian@gmail.com"},{"name":"deafgoat","email":"deafgoat@gmail.com"},{"name":"deepshah","email":"deepcshah@gmail.com"},{"name":"dpercy","email":"davetp425@gmail.com"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"glowe","email":"graham.lowe@gmail.com"},{"name":"gregg.b","email":"gregg.brewster@mongodb.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"jimol","email":"jim.oleary@gmail.com"},{"name":"jon.franco","email":"jon.franco@mongodb.com"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"kay-kim","email":"kay@mongodb.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"micheal.parks","email":"michealparks1989@gmail.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"mpobrien","email":"mpobrien005@gmail.com"},{"name":"redondos","email":"aolivera@gmail.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"sampoonachot","email":"joy.sampoonachot@10gen.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"schwartzrw","email":"schwartzrw@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"terakilobyte","email":"terakilobyte@gmail.com"},{"name":"thomaslangston-mongodb","email":"thomas.langston@mongodb.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"ad1fc3934f27d5b6b4d129017ae84ca9f37d274d","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.3.0.tgz","fileCount":4,"integrity":"sha512-nZlS/NGz8S8AzRGb0YRwnb5HzxgblSGjNwNBpzVtA7Puij/Ko9QURuq2kHNLPxmw0xcAClnww5Fkm0FhamEQgw==","signatures":[{"sig":"MEQCIG+BdCTIxByI3JLNbTALqBkzhbUqBWV9Bv3SJGdMnXStAiBDQpzPVzrE5y+q+qpi5tkPtV3jwQAMmpwXc6tz7kGwjQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":276910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJco5yRCRA9TVsSAnZWagAAcB8P/iWk9zSE+DxkKBxpJv/b\n5+Dv6ubCBuNGgCrKolBHv73SqNrX+V6iw2to29cDQnI6JgILNCJ5Xak4hFC4\nOyYW9fjpZZ2/6Vru5ojvT2wv2ea+KhD41GWRH1nOzP3iXH7v+YP2gO+KHbBT\n7ElQTDA3mN5783XY7glzS35JOt6fSjDTDgWH4I/v2o/4Gzq9aaqxk26++P4H\n62oBqzqgrqCivx4ixJQnAxJgTp6s4NKyoKoA4CliFhgA+llxqHjRotpY92gj\n5gkfdIfunagxCyXQRVOhNC7bn9VucY+cxsnNxdCSbfd+sxhINcgVPZMUn+5A\nl//wNcw0t3Vmm72wyabZ4Bcb5ZunY9UU8vufKclbUv7a2JNQh1+cNyYh97xo\nfjAFTqD7yAn7XJdcsWFzEp0EjQc2nUskwWP3Fnft6OzVdLhneY7f/HHgjb4d\nMok8m72DgJTUZlc3l+qYgATB72GQQggEAaxzuoz6obyJY1T9hlaylocqHKY3\nxuboypLU7+nBpsc4YPkFDgby8U4yVPS8ITXjiqCCxdrgLLxQLzionDE911Xu\nWDWE4XzGTN0frZ3Yp4/jv38PYEkwCcTV1ZWcDCQ6XkcGxzFZKwhO6fLkE7k+\n/ibAiS0sqqTmhbEWAdAyWVJ1qI6OGisFGSwBvGuawgnHjaLQOkx6qKspX+Cf\nTcoZ\r\n=3Wok\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"d6848a54b3182382c5c305b4943afe6f4dd58f5a","_npmUser":{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.9.0","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"10.4.0","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.3.0_1554226320519_0.9718075483445194","host":"s3://npm-registry-packages"}},"0.4.0":{"name":"mongodb-ace-mode","version":"0.4.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.4.0","maintainers":[{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"cilix","email":"matthewlevenstein@gmail.com"},{"name":"daprahamian","email":"dan.aprahamian@gmail.com"},{"name":"deafgoat","email":"deafgoat@gmail.com"},{"name":"deepshah","email":"deepcshah@gmail.com"},{"name":"dpercy","email":"davetp425@gmail.com"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"glowe","email":"graham.lowe@gmail.com"},{"name":"gregg.b","email":"gregg.brewster@mongodb.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"jimol","email":"jim.oleary@gmail.com"},{"name":"jon.franco","email":"jon.franco@mongodb.com"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"kay-kim","email":"kay@mongodb.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"micheal.parks","email":"michealparks1989@gmail.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"mpobrien","email":"mpobrien005@gmail.com"},{"name":"redondos","email":"aolivera@gmail.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"ryantimmons","email":"ryan@rytim.com"},{"name":"sampoonachot","email":"joy.sampoonachot@10gen.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"schwartzrw","email":"schwartzrw@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"terakilobyte","email":"terakilobyte@gmail.com"},{"name":"thomaslangston-mongodb","email":"thomas.langston@mongodb.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"d0a5fd8fd47ba5deb2990849fd6a3bea481072ec","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.4.0.tgz","fileCount":4,"integrity":"sha512-jvww6NAcMT8el7CcDfY50AAlvLp+cBpHI0BrxcZ5d4yUS1TagU9DRY5bNVfGZT4p+RuWRclW7l1Auz8NkXdPJQ==","signatures":[{"sig":"MEYCIQCRveVG/MDSNKap9ay9sDwFL4LFmVPhEnIWP1igrKKhuAIhAKfPmQtKMLEeQf4g5r6R+SiK/QEcFn3rFgyViy9mguaf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":276923,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWo37CRA9TVsSAnZWagAAumUP/1vb5s4R/nJkaxZzsD16\nV8Id8/a3dwGwenKnm1D0obzgJGO188ibEz7hf89xxZ0McsauX+jvU+yl1Lq7\ny34N2h2tP8X8ZhI9u35lMUzCQf3Cy7+lgmdV9ONLYrH3tU5zYWCeUtgTQnNJ\npt7x+X6fkGsvSnQN5nry5/USi4RWCXmRzjHYp4LQQyp0nxpKtlacbcyq1/sk\nSsW6RtfIXWgPwOaYSm7+6A50USeBAMxqXhH5gIJ9fApJoSi1/alcvWOwrJfB\n43mAs18hhL8Ti9rzRHUvbHNbq4cgx0kNCSUMy883u0UtNCkm4+A9YxU31pr4\nPB6ohG0ZCo+eoROkBfWkevBr8s6ncPsKNGkkawlJ3n0CJaIgLy8S876R3z8N\neR7VKBy8Z1mPOKahAMkSxP3+CFTtI+Gy5eTTK87ttoqxH+WNsj4zCTWKi21r\noZwKxKGbQz2p1FxIzZDwLDQ3l9jSegG32fjD0dmTrpP0Vj8o6NIBy6hRqGJS\nVMdS15Wz9j77839Hff6qRTce+0iJhTL1hDUpAlcEKoBuZIn9nwUxeasaB6fX\nRGhkIbBkk3+D5dbaWxiqrQ250Q5wIsZ8ZT/ivzp26uqwU+VX5S6PITIppYf6\ndvzVZ4RF7rGpxgU2nRDXab73VVYKlsblvw+AqPLj8RKT/oXnkWVwaa5sXtoE\nihei\r\n=apz3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"057c13822aa8ed01326d518cb69fefd89a56e762","_npmUser":{"name":"durran","email":"durran@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.7.0","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"10.2.1","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.4.0_1566215674557_0.43974529006806073","host":"s3://npm-registry-packages"}},"0.4.1":{"name":"mongodb-ace-mode","version":"0.4.1","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.4.1","maintainers":[{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"cilix","email":"matthewlevenstein@gmail.com"},{"name":"daprahamian","email":"dan.aprahamian@gmail.com"},{"name":"dcoupal","email":"daniel.coupal@mongodb.com"},{"name":"deafgoat","email":"deafgoat@gmail.com"},{"name":"deepshah","email":"deepcshah@gmail.com"},{"name":"dpercy","email":"davetp425@gmail.com"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"glowe","email":"graham.lowe@gmail.com"},{"name":"gregg.b","email":"gregg.brewster@mongodb.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"imlucas","email":"hrabovsky.lucas@gmail.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"jimol","email":"jim.oleary@gmail.com"},{"name":"jon.franco","email":"jon.franco@mongodb.com"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"kay-kim","email":"kay@mongodb.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"micheal.parks","email":"michealparks1989@gmail.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"mpobrien","email":"mpobrien005@gmail.com"},{"name":"redondos","email":"aolivera@gmail.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"ryantimmons","email":"ryan@rytim.com"},{"name":"sampoonachot","email":"joy.sampoonachot@10gen.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"schwartzrw","email":"schwartzrw@gmail.com"},{"name":"scottsidwell","email":"developer@scottsidwell.id.au"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"srv-charts-read-only","email":"team-charts@10gen.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"terakilobyte","email":"terakilobyte@gmail.com"},{"name":"thomaslangston-mongodb","email":"thomas.langston@mongodb.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"a25cff3132132bea4a753a818767827e8a4b6b8f","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.4.1.tgz","fileCount":4,"integrity":"sha512-uYsDvIoaCdiGglfzlPLzQqdSE4O92V5ZcprLONMYcsQRnxX03OkHe1eJyRT96exLxBOppRZzQvi7DDugPVJACA==","signatures":[{"sig":"MEUCIQDzVBIH6ZkjvNnaJ0uNiLngaXb0Wj2pIkNKhD4ToeH0wgIgBCyr0Upt+JAEd6RpEWWX0gTCRy6SAWlTfsJiomRHjTQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":277182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdhjj6CRA9TVsSAnZWagAAIdcP/0k/LHeqa0ysxjiuFh6/\nLWrS2QiHKMpzRz4HbT0av/SCUTxRQIN/FnPgjO1gYUFAU+9jc8Dmd7Y2n5K8\nreFZZqWKpUeYyEW+MorbaPgkRZ9gpsdSWpgtPMKo+Sd2ftFyxneZg3tFRVXd\nKjLKAnSvApH86y7Ri3AOh4ps9uEbkzPGE9ACeamiQ5mVhjEDMWj7Ad2ne8nb\nZgIGUDwwJGAggCvQK3TzCMxsOKD38AkO2OKmNWjHCLwXk/fpukjbCT8UFjVn\nkD8hWzxbjdRrtiIp/eggZJjJgo9RJ2dJU7k53ygNE2XD1SDJODuO7TB27f9D\nJnRfr+1C8dxCoyJbjDDKyZOsrWVScx3hwOcbnwfH/vKyOJVyuaFNUZI3IBoD\nhL4b+tcN2/m5XKzfkGmLLxVc6pCTka+WJp6ugNdyIoEx+gJ+cGVmLTDOm0n6\nOg40smsVf5rzXdVarykCHmUc1jKUBjS+vGcaSLs9Gj9hSpKEWQAU/BLr9OxV\n4J/WfJzTpMAK4yLURrhzf0ymzVCUACUR0juraCOZ6YDnT20+JG8ud3Z6xYXY\nLY0Sh/0jnXyqx0AGbF5pN5M670Cy//oxBzj+UmIqPdugC2iVkx3zRrz1csyL\nSDRON7SPP5lS41iaO36XBkxd7D96wx2gRlG9sPqshOTprcFmkb/2272Jc7e+\nvy+N\r\n=xyzZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"9a5764c1a6ee6b5254b8a51ac7812341671869e3","_npmUser":{"name":"durran","email":"durran@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.4.1","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"10.2.1","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.4.1_1569077497731_0.34461109536694745","host":"s3://npm-registry-packages"}},"0.5.0":{"name":"mongodb-ace-mode","version":"0.5.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.5.0","maintainers":[{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"rosem","email":"michael_rose@gmx.de"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"6c9b0336d2ed08c6399f96157293acde6445260f","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.5.0.tgz","fileCount":5,"integrity":"sha512-wCzZHbPtpT5tbd7C3dLnJx6b8RwxgPdWcK6ymzIB1SKjtaiEfKkAFGak7XSOAYWFUYGUKsgrbtnI3YqZPyViXg==","signatures":[{"sig":"MEYCIQCoAK1hi+oEvmED4jGMXWeoqSRYTiw6J4ghUcIe530/3AIhAPpYwFmZE+Tpf2swyiZN2SRH1hLpuBXKipp5sWXmx8XQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":307846,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrog/CRA9TVsSAnZWagAAx3kP/ip0ITzz7ft8/A3fdQ+e\nxvvDybcPzFhAysNCtpXS7pPLQwpoZJP68vsmlNJRgN9t9qwIJBf9VZT2Qtrq\nLTjpcSLr8ZMZX0/89jm6zbKMOmvB1EGWH9G5gD17YyMPnX0B7VIdKMRW5F3R\n4HDXc4O/dN1vm88FZLWNuQfgBbB3CgjZDlnBnrXcYo0jg9cjFFJ7nWfgbLu+\nPoz+lG4OJLPt44GAVdmFpyEoOmG0cPlAHM3e8id5LW1njMnYgdWLGwiakH7r\nYyn7rISpm/gj366TWlKEhh0WAgZV4uLhsRdjzd9K7CiAJ+ZB3f9/D3bx0pCf\nJ+eVJwYj6LokljSHKLQCejL3Ut2qwfT3/VERZ5w9fJykfV6KKUWzKjy+DcEU\nq3/0QuEMbL9UFThfp3Ncub3lJaHI7U5oaxwMe92tALuMpe7p45av3vxavDn9\nzNvdjf/qyhJ61SpLOHWGGzE42HPGpy4k4tbFtoFde1KCqUlGEVtzDcCu8aUa\nFzejNFMLvaJnUGdRKhnUc9O4IptHsUDuaux++reLe4bMNVLrzlNSLKxvidJi\nsWp3OorVsqbksGx/v7Qyc4ePYvmGNsBKlGdaKviCHmW0CQbGToMunykGcgB9\nQ8LNSkQuv2XAQPXIhk4VnF+SokzjrM1qUuOjec1cXBIREzOUqFqNJ7vi9/1u\nticN\r\n=Xtv5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"bba8eefe38447ca02a5b3c5004977712943438ec","_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v12.18.4+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"12.18.4","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.5.0_1622050878704_0.4297976472975462","host":"s3://npm-registry-packages"}},"0.5.1":{"name":"mongodb-ace-mode","version":"0.5.1","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"Apache-2.0","_id":"mongodb-ace-mode@0.5.1","maintainers":[{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"rosem","email":"michael_rose@gmx.de"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"f722b1dd077bb2aadf34050aa23a727693d72320","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.5.1.tgz","fileCount":4,"integrity":"sha512-ecojSbLmTVVYQEh+VNekNRK0XRxOhHET6/nraGP01cucr5Hk1EwUFaWwpPdW0GibneRgtO/LEliwSbVKPxHALw==","signatures":[{"sig":"MEYCIQCS+02gGsNYufheT/fpSPOxG6p8qx4PZYUiAmjRXaWfwAIhAN2tUs9KtaUF+B5ZbtPztZ3gCPh3spT7T1Fqe+BdQKmB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":277182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgr6YVCRA9TVsSAnZWagAA1C4P/i2XtU6gNEVZrpC+R02C\nEpH0gGoXWz8VnsnUg+GYxFYOGHc0S1hv20Kf2K/aEot/rCdavqZqddfnaofB\nhx1wYZhxrEXWcEzqG4RxvESKsa4VB6nYBHXTMxId9lkRU8hO+48lEjIdvaO2\njEeyv66viHHB8u2igNdRVmfBTdVWJuDHCRi+M2FnR630TeHs0kpHPHTj/Qmq\nlhQ/ivpyGr+oYNYpHjRWZuKmwxZCyfJ2kzw108C2mOANJ/qimMgSTi0dB2rP\n1c6AYeyYG2CU5Wl7XYprqHq/cGKBzNhMKIgYmEKSdmBWbZzX3pjvcsTD+kzF\nOJEgGja7EHwUy23QuxvvsqXMd6P29cgghlnsa6jpwEWaWgBRig0gnznpWM4w\nfkHx92m7nV2IDinyEDyJpQy3FVctFO9QlNZvlYME5huzxL5mo9xru8MHP9bm\nSMAXFke7D5TpkUASIKkmyIeFmi4UfwohPzMRyp91B4td6xKfgy40VYv1y1Iz\n3zBtg7qJJnRWf7qbUThIkkaXd/D3oB3b2jH1GQrnJQ9RVIEkHWWJ8F066gZg\ndseooNoGy6AexGyk7RnkheReAdQOINmtjWtSZmvCfKFzinfCNWV+q7ik1Mh2\n5FIj7PRKid6Lizrb/XnvoPs43HyGwWEI4wWIhb/3n84qLL6WCW7PDHlIvKRk\ngIPV\r\n=wf4o\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.14.6","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"12.18.4","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.5.1_1622124053352_0.8488560778242389","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"mongodb-ace-mode","version":"1.0.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.0.0","maintainers":[{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"lrlna","email":"shestak.irina@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"rosem","email":"michael_rose@gmx.de"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"9e7fd4f127210d6e01dd005abafe88d8cf5a6c28","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.0.0.tgz","fileCount":4,"integrity":"sha512-jYjqShCzcNZBss2Gyw7c4RQ0e9qKhZnrXfNIkg8toMX9ZRBlN8P82l+LxHmCemQth+7pUMyMZF57rtBXaXf9Sg==","signatures":[{"sig":"MEYCIQDFaxHGHkIWtPlyi+wP+yMUJufgfimXmtz9+vrySQ2rtgIhAP2fiKcQlsR+kDKOcoH/sToUkKFtwfrFAE/jqvwhhy9+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":277176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguQkCCRA9TVsSAnZWagAA5PUP/1d9aZRp6eTEkHHkykCL\ndt6wyTCDMapypDQ1OxXpM5GxOdRrnpUZYarQ1BZ2ES5jw1ILOeddH4R2+SJz\nkznxNWz8lv1u+MPVwnYzyAS1arJRwnEcys2Vqbv3wAIKhNB0lHR/+4KUkI91\nfSLAnhSiHgN09eMHnxrt5HyEMxuHSQtaHL3oDw6N7MEQjlDzPmUtpFU4dFrk\nuNHIXphUZoB5IDiDYLXKYxmmIYGo+NPHEVKE+OMlBAjszAMAGuaTMlfVQ5zV\n8/137VLpqmDEMER2792RSxcbr0u4KtQh/3/pbrqNclOg8oGA6063TWu7uRTj\nyoCSwM9pw2TCEaNtEXenrVcCRwGSftVjPQ1T8TaP8t04Z/jRa2jstaTH9AiO\nLLmlOBl3Odrcbd5NsD9eCDXj+2n9pTlfflMSQwkT75aYq64zLgPAfnZVKBTR\niwoTEI/+RBVLnTm2TSgPNUTKJM9Kocdhs247Vyym5p4gH2MNOTg8NUM51WeF\nbaGiSNkGVcooOuHLNNz3YfG04DocPSHSWKjlEEYyHSy/dIu9YYRqAqq5oKiy\n0Qg6pmYBkqQKooM2lH4aBE7DfTxdj4cjKAUgz12TA5YkXVai9F2YJj0U1gdd\n/nuO7SZ1eiKqcZXfImRcLZ0IvDn7wF9v0YZp3ePfr9bGPtHMNT9YGfz/yhep\nkcr6\r\n=D58g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"6.14.6","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"12.18.4","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.0.0_1622739202742_0.7296327243897651","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"mongodb-ace-mode","version":"1.1.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.1.0","maintainers":[{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"rosem","email":"michael_rose@gmx.de"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"d0bae33b6f6a33bd12c2beb24fbfbac7f49ddf42","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.1.0.tgz","fileCount":5,"integrity":"sha512-CG2hqHzwnuF7tW5z/+YDibXSofF6RDnFZNUZo9HL53n0Gi0a9OvqUNWl1dNFSaWgPkz1FIZNXww+vOICjNnoBg==","signatures":[{"sig":"MEUCIHTPIcS2QNfd5WUSIxcNF83q9qduTcvtuZ6hRe1cXu1BAiEApmEevv2Ot46Xlh2RzgpwLKrw1PMfeEuYJKfV8i0Iuww=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":307816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyjbjCRA9TVsSAnZWagAAS0AP/iLr0/M4vlqVpKJOUy8b\nEkxNFRNEzL9Wzv+pHMnOMmEnYMRahvhlNZUbrxYTqcZdgRnrSYaF0y481eQ4\nBHCHIRCLLBeWbqkeyz+x13vZ4CAYbBPkEN1/0DVJsHp3DwA2UfjVmFRIbhEH\nJ1F8dVHS4dLo+mnDXqXY27ppO3n1CQRVwHS9wsg1b9B59tZNFpdqswdvthDq\nOPtF5SkkzVqVdXJuAEN7QOOoTMA0JG+NSe5jsMj/NZDFaIl2GDRLrVlq23Nx\nGD8++6hSmlWLzD0wRCe0G2reT503rJw5w6TBJwah67+aQfW2VXCqL1iN3Mvy\nU4NBZrQwYqMo2BWW0pcm8HlR3echNmA2Pb0E0sU3DujAuRhw31Bke1MWqvEV\nMdTkXkwlSJ0O0BWnyGem5biYYfBtAGTSEGOmwVCG8OSxeS2CGM+ExkMMpcQe\ntKDwjUfhQ9VavaHSGseOYkoavpMC8jXHO+TQxEDesDmg8uIVeZm0JBl0Flus\nVZTUEvC+paKwdM4xRIkX/DzQbFt7juXPTvIXdQjl773srUKsn3CuNe9jBvoj\n3I4u+P0rV7e9CzKIfHJ+FG/iMDjkw7h3h16B8VgSKqIVpRcGQG428sxiPvYp\n6lKZq3FzArEBIwOawIyyG621zQm3HKTTOFyRD12rJSGblCqc+k7JvQomhAD8\nesue\r\n=8Cc4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"cd0a29248dc71d8ab4e3428dcc04f534fcc48e3e","_npmUser":{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v12.22.1+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"12.22.1","_hasShrinkwrap":false,"devDependencies":{"babel-plugin-transform-decorators-legacy":"^1.3.5"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.1.0_1623865058520_0.5018270169632821","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"mongodb-ace-mode","version":"1.2.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.2.0","maintainers":[{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"rosem","email":"michael_rose@gmx.de"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/ace-mode#readme","bugs":{"url":"https://github.com/mongodb-js/ace-mode/issues"},"dist":{"shasum":"0190fe396ff921dce866c0030afb01f74a789039","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.2.0.tgz","fileCount":5,"integrity":"sha512-GyzBRGLjqN+ycPkU3f7YWhGfdFIbB6sbOAiSFHodsKw5lnOmBt86Z1oYZYx47Rh9QN4PIA9VN1Pb7Ejb9+342g==","signatures":[{"sig":"MEQCIAtzJgR1CrutJy9d57I3cMkEMZgv4qQN9LwTPBOX89KrAiBOuopBpE45IP4V36xHAj5eBCWqm9pyubRoUgOZIlUrKA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":307864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2Yz/CRA9TVsSAnZWagAATEQP/io0DWsmTVxyAmjStpCn\npvtuVqxVHvoQH30Uez1oDw36z5ye/O9P+H9oT8YjdNouoxt3lscmgwgAPZqw\nQ1CLMww3KcJt4t9OGDHcjm4ADaSS1goHr8FgpREs8yuIOvlFUFH0aJ7DUhn7\nYM4cF+ggna+sChzCc6NFlXa3Z3XLNg9i7fJpzcfayvu6i8L4FIqVgIlg1uZE\n9dEV93No3s1+/UTJttMmZ4s697FZOv+toAcVtDQ+bu3f0Vfr+NDNbEiXRQpf\n6me8TZZBx+xF3/G8eumftXHqlpFl8fjy1XHUl5XxqP85JYJ2NK1CqqmTlyIy\nXpDxyjAFu77WKjBEm+dafjp1cXJ9ZsT8yxFV52Az3yTTj3Xgo/43GrW/E1Z5\nwLpZNDdgqh+SS0oldBDgh4uZCy6BLcIjbeF+mk7qxkzjeLRQihpGgh8sfXlk\niceUdA+ug3bnQTwQerMosfrom7NmJFn3mUIvrNU7WWjVzpbSTux10ZQjl3vz\nr5kzWytVwpcnLyf8aBqbFA05w8bLUhCCEWsWopbJ137GqLJRtaUAn88wNeQE\np3nluWBCepjWNH842ndh3YXJXPbcfctqQWrAcU0gf/c9IYIYKB7XNQBUKqII\nHolplHJpM5jqHjp56Gueav1yRQjhnpfPvRuydCRoQwSrYAGWCsPO601eglJa\n2cWJ\r\n=GzuJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"0819b7be289d05d770a45071692cb772806e61f0","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/ace-mode.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v12.22.1+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"12.22.1","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.2.0_1624870143104_0.7303992499645515","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"mongodb-ace-mode","version":"1.2.1","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.2.1","maintainers":[{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"rosem","email":"michael_rose@gmx.de"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"1d9931f6aea4f980ac0fd5fef01578f13b8691cc","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.2.1.tgz","fileCount":5,"integrity":"sha512-Ohgxem1XbpHwiLsCexRFo+MTcJ1N5z57tpv7sNFnTvpBAIMT/zQDQwwX5YK7WiqcQrq9oiXf++ZNiiqtJHI6Rg==","signatures":[{"sig":"MEUCIDKUeNdZFZOZNgsytIslTJqadJ0LFXMGjeAmDRqGtW1/AiEAg0NORmIVLGq14qOH+uqCUaUFZKu+4ZBfhbAxe/acR+E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhC9JJCRA9TVsSAnZWagAA/BMP/1Cn0Fk7CBfgL9wd3Kva\nbLO6Dq6I38FwKFkvoVgZwDzAKxM1Y5kwe26VUA89dZrM/jEbuXX9lliFvkyA\n6QuOVn6fnYBFkwW5Ek+D9rG9wIsHokKkgBsbrXhuGTr0VCLySbyMwcw+1w2/\nsmAT3OXWcXz1jYtgfpC6fp7mxd0gpQRF2TyONscNVJlCJT+lu+gw2uZHPxgE\ngep5NAVHy4k3PDF7A6fIpAeaKVNWqnvIA0UIweMxjnxpxQy+Q6Zv0uY2V15h\nkiAgijJoykmJIs7z4fzJNgcgFi1gg0vfy06LhNIdkVZXeXgxtkQsYx+XBSMF\nABoa5s3KAKZ5Z4bxEv4p1fzJGlNqwDux/956roB6frbSACGcEy0+8cgh8zaZ\nGf8RIuok0zqZO4G8V4U5fP/WVADVR2WkVZVzq2inDduMfMHRFEzJ2lD5OvVr\nilh2FEZtXYX+kn6DrC2Bh7XmVVDrV3lBXkHwYxj0zdkc3c3+joslwH50yL6y\nkucyIv+v9cJMRDHzek6NRhwz27k3wOwQsv/tP0iLPDJ/QviW0FadRfc9a64j\nXWDzBhex/6+35hOpjgzCQFWBDhpYWqlZby/5pRXrWUMlZC9P0VGta0RdiKNr\nL2o94poUtLVBOWVmSVB6RlS5UW5AVGVBpgZiOIBMZefbBFVkkWHxqs3zeNrB\nhUWy\r\n=LjhU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"8ec19acfe461d3f9c3e6eddc550669aefc029180","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"addaleax","email":"anna@addaleax.net"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v12.22.1+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"12.22.1","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.2.1_1628164680925_0.3766727252990332","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"mongodb-ace-mode","version":"1.3.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.3.0","maintainers":[{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"rosem","email":"michael_rose@gmx.de"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"312d5fcff9a4d009024c3aec3ee0712b86bc5436","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.3.0.tgz","fileCount":5,"integrity":"sha512-BXvOyRs4Q3FtqhvGky9lTgReJr5wNSae7LjwxzNhxgaRRZXDSfDHqmFS93JKshHR5LKDWVz7vtCcBg7oXjDjHw==","signatures":[{"sig":"MEUCIA206TZQyLVOew7TYh7XNsC2TuiPjnhxNvRSupgS2Fx/AiEAm8i6KAB7LsAHuboo23pgiPAX3iH5Mf6kHp67v7oy6QI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhE7Z0CRA9TVsSAnZWagAA+OYP/joBGLGUZwREhnz5P8U0\n6K3CTxv7ib4d3EjYD8umlMlkgLbfzTrwXwzttxhJrK6LX8F715ZoJXR/E4ru\nz4C9VhrBJ32t7SLFCgmH2oT5B6M5qeBSwGoL0iyYjr68I6CV631dFCroJs8Q\nR/KVn1hXg3sk38AEcO+UICY/VZwGsTGAqrtmf8U6iw1mzY0HQTpL/Ve3HIeZ\nTheUfq9t1IpEfefr+EmvYUln0qYfh7/aMxU/2fq2o5Jtt5m3od4zSCybRDo5\nv8sdqUuI9U3NODRt/CJSXleRVml9uVGI6rUoWMThmx6w/+oNan8PTmSxv2H5\nLKchirRzkaPsV/5RKXRVy7zzG93E5vL5FR3wQq330MtM0/f/RP65pR3wc3as\nqusa4t80wm9aKrlPkxOihA67kEs7h902UWxRrpANi9wZPgvvLdO0PXRdxB6+\nZ8Kriln7WLU6DVJeZbhHxvIOpbR6rzF9ph6A2B+LO01ywYLLBGm9ASaRL2jE\nIQRCSio4kcWfWLJK1R9QiLc42TR++/+PUZ8E0bMXkgo12kwBiMp5Gom7bJkS\nKjEUO0p6jd3SlZZLXc8Qlcyz4z08m+bP8/986daj3Xg6/aXFEZzlWMqSvEJ1\n6dKnTbYjRxrHC4LAq1oUXqJYs1mzyclW9EzSEV3et+QL/6JD6ZzGwdtMu8LJ\njk9g\r\n=Lx7J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"e00da432655fbd1b723fd693527bf481f4c1e645","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v12.22.1+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"12.22.1","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.3.0_1628681844814_0.2530922172502654","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"mongodb-ace-mode","version":"1.4.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.4.0","maintainers":[{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"rosem","email":"michael_rose@gmx.de"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"a51726f3855175475a94b7cc86099dbac8303857","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.4.0.tgz","fileCount":5,"integrity":"sha512-M6AjO4965yv65qAMsHWf9FehrHbYmKG+PgixAvq6W4eCdZ0G6jnfK34uzktdgmk5tyPILnlcJrmoZJhSoPH58w==","signatures":[{"sig":"MEQCIDgMyY+yJqqRefuOZNt2LNqZMqyiw4QoV4TVes3lwoPDAiBEjv0r0a1B+WTUGC3DKMjnqjEMsliAo8gqQwgFxyLapg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308114,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhl4W9CRA9TVsSAnZWagAAlj8QAJJHyur92T4bkrtM5PIm\njKWgRGjpDa2LDnJUheCV/mHxoMqdt81cr7FaGAo2Yr39KYfyYunkU/FO6gzn\ngGCldevuSn9zB7TSenhzKN3a+5UE4JU98qZXntdj1zAwNAHLOJ+z554q/OTU\nojKaS5BTSpA9J42ZIMNqsuh9bQck8yKtS+4kCM+qIHD5Ll19jwfDgzSOxS6q\nAau1mu4VXd7AXIuLi+ecnW3TwuCNJSlpLhv+K+AGfsBdSKtU9L+/NmOKxCHZ\n3fYY1d2Hi2vwx8pmOjRDDMiBgfBepGb2XT8FCxQF+zroJTRYrLkdJo1bWfT0\n/1ZPtEcSRFi7EGbhhMvzr6iYNK7RW7lJXgEa/0m60n831areQ20/EKXaW8ZR\nN2ciA0IdqLM8eOMkbnnyyRkmWzhkJ0CHa4I5+7ytBTulg68jfl6glAQztTV9\nOxo3D3G/k6QGwZ8RTTkdE0PE8qKOoowdZtgRQaQbfVtOa07U6jA8Flw59qft\nUTgbk239b2urhiSW4xdbMw5ViIKFKStkd+GMJLNYY8P+shTJErLv4eok573f\n9XcciRN6R332iZ/2J3DIzaDuSItZdSOvfqI9omyctYC4zrPrUzHv2AwaWVcA\nh+izOz8Fmh1x8r4OsVmNCp4PcuIlRDzpwcrGAaDVsa5WEIYEkYdjKQC3dAYQ\nq/UL\r\n=c3vB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","exports":{"require":"./index.js","webpack":"./index.js"},"gitHead":"8ef2cccaaab6d84a5fcd633ea8dfc4c7a4db551f","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v14.17.6+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"14.17.6","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.4.0_1637320124897_0.13442478981225348","host":"s3://npm-registry-packages"}},"1.5.0":{"name":"mongodb-ace-mode","version":"1.5.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.5.0","maintainers":[{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"brookescarlett","email":"brooke.yalof@mongodb.com"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"rosem","email":"michael_rose@gmx.de"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"9f50d06aa0a1013842a6dacc736dea351b111e96","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.5.0.tgz","fileCount":5,"integrity":"sha512-9cwyheyepDtyNO+uttmAWgV2QFIFNX+2boHvHjXsInHB/QYuLehZbKVksAE/VIEaV0H68BhkhOxugl4yjVUeNQ==","signatures":[{"sig":"MEYCIQCU64ivIjZDBpJCtAeM0HDaURYOGYf3LAExCi4XKz5N7QIhAO6TscIaZk1tZIkKPAUNpKVgCDq/z0DD5p26x61dDcYr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308114,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhweEbCRA9TVsSAnZWagAAHsgP/RuaP6eCVxxDbRHUewAa\n65Fbt67irCBE6vJU7UzVp+BkNA0fUeR8NVn3MlqtUqzVhzpg8dwymdNr8MuF\nwWirrfS1UHRQDC4s3Bg/vp6Q9Mk/s4fhcoGfrzMXpoVlwbarizXEBFop15Ny\nRZ6l1zn4uDsZYSBAA34Gz3IfCW+4JNpvU3gtzQ7zANcAHbMQe6Ps8wlDbHA6\nMWO/Er1TP0tOjH/Tuf/o8Isq5d/S5ZuTy6tOyG1dEhQtghEJoeqelcQLOBSP\nU49+1HED1VMUVYHi6hznF0ZIAWp2zzJIf2BOceFjU2o0JvCXJr5ZU14KmvjD\nKQH5z2FME8GrqR22nROm5mPy4kVbFh5ycdHpRsseMxJXLBCCSV/TOYFoB0TM\n7rKhs78UW/d0msib3q3mGTYQZcKsah2QFKkJxLybYdu1IgEY0YJKutdq6Zdi\nZvxX8fz8OTjwuvxfEOs0iVYSfJNHbXdbPxL1DRPn/KCKS+UwUQUPLNxe3E5o\nmHI+8PrK6UODx4wU8IJUcqQKWeLaaUMT56LnMTRbpw6+kUznbEmHdwEPsvaq\nrktAy5eI17sxUYgJQo2V3sUP6DtQFrIwoQy3yI26LVPEbfQ+IyhWn7hA7KpC\n9xim32PpaMUeEz0Ohw4OMWX+wP7BsIrdLB/EuhLIuHYQNbUE4ja7b2/GtXl/\n2jh5\r\n=JuES\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","exports":{"require":"./index.js","webpack":"./index.js"},"gitHead":"77166e3754e36e95c7ff7efb5a0ce5e0990b0ff7","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"alena.khineika","email":"alena.khineika@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v14.17.5+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"14.17.5","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.5.0_1640096026619_0.45220446055444774","host":"s3://npm-registry-packages"}},"1.6.0":{"name":"mongodb-ace-mode","version":"1.6.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.6.0","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"de371d6e7b3ce38bdb8a0bd9a3b547e48f1c22bd","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.6.0.tgz","fileCount":5,"integrity":"sha512-GLGPRWEgTicCcIeevSZKIpkxZgQ0uQbD9dVjLeQwA6DRmCuxFKWtFm4QqC20uxLhpYnR1j4JGHxTw7hjN5HOYg==","signatures":[{"sig":"MEUCIQCfFincIizxxeaE2cd8dfnvAyb/rc8+RiNswIdHWK0A0QIgdPYYVyitpPf6cel7clzZ/PD1r5metuB0rJX4mtbQGTI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308114,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiGOMTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq0jQ/9HanaJTWgOHIMZJ8AQGsda8BpTDlgqdRn1MkUvL/l4cAijYSe\r\njUVX3TIkoBb+yx4pCBbWwonlSM1i6MiYVXjK5iGTHEkQvqNUHV5HcDKVwJsp\r\nV56M9exGNaT5p0Ha0yoIEcPgUA3uX2VROgeyaTYQZc5ClLvBIYPxjIhz+l9h\r\n4r8VWuh3Pfxl0KnST6tPet/xqCd5a9V8s04CWEsJohvfFYENbmei0mquuBI5\r\nchx3Vwz0zz+/VTmlc/CYSw3JC87HnkQZYWW8vbyfB/otVo1xvdtkI57uOJAG\r\nCd8qi9MkBSJz6AyCZ0hkScI5ABonjwq/TxZC4ukMgsC7GFQ7bozBeMyiOJ2K\r\nFLlnQ3dBNJqHAGkn32QaxziFKtLevjBy/SXuZbRkIQ59OstD9xo3/f+R7KyO\r\nVDQoz5tItjH+yEhdDF72vpQ5ntleNKDJDqWArsQcv4goeXkbyLBkrKY7shDB\r\n3ib9J63mkR+MaggsnLGObPUswmICTFhpGvYWFRSp44yh0ip83V8UjkSnNbOw\r\ndcXnr5bffDF6X9MxqBDJnT68aYcCV1etJuS/H9TYpwvP5EHkdwX4ll7fMZFJ\r\n/XMWqX92IU+ChyctUykSkHLpfjLxYQWt1Busw6WcghGjx+b6b5CS2AAc//xq\r\nGOec2w0VmK7oNSkzw3H6RgVhZQ+Z8tYSanI=\r\n=hg7y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","exports":{"require":"./index.js","webpack":"./index.js"},"gitHead":"2bb63cdb1d4e825f280c0d2af14b7298c5769490","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mabaasit","email":"baasit121@yahoo.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v14.18.0+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"14.18.0","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.6.0_1645798163490_0.5107510045344932","host":"s3://npm-registry-packages"}},"1.7.0":{"name":"mongodb-ace-mode","version":"1.7.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.7.0","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"b18ee9b6303c8b7a51bbb73d8e7a2aca2e1b54f4","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.7.0.tgz","fileCount":5,"integrity":"sha512-NaBt5g4hvYVnixsXUG5YrWOgQLZ48S1bfJZ5BHmKIrSn9mSTC+rmqPkdy14Nq4F1v3r0cWDn0OiHacrELG2Tbg==","signatures":[{"sig":"MEUCIGpPyV+Ymw36OzwM23Muz8EOLPQbw0wb2K+0POeSU5qaAiEAojXYe3LeeWfZ/mBsPqcfbL8wJ4x0XixwRrvfHKjUJxs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiaW+rACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpnSxAAnvIbaMuUaByhaM7edkG/pRSy/F93Pr0289fXZH+ld0f26mhf\r\nONOmmX2rspR9LpVktq2KPL+c054LgtlSTMcip0+2qx2OtCX/VCrThG1DNw8J\r\nKgMqd4PgB6A0+WKIXSUYm9u4EbVjS6PXbHbTgZ4zYI3CVro+guXhjGupuHYS\r\nUnnKlzoPy47UODZ+P7lOFARhwRFvdmHWma3e3yPbS8M+2X98eB5h8RZwsM0t\r\nu2YzZmDu954J3pFuTcPJqaRJgsp70++SBRZooR0HHGiFLFyBnt/TnFEpNuEq\r\nlQeFh8DXq5RYhwTII60tpm7Ybj70sMx6ZU/Ys2sRQCQy9oNFfHwRk+O3pb+s\r\nzNlTgYbUDsuKJGS94vM2dCxjfiHkzHOJqPpb+0SisnjQkb86yznGY0DMF2sk\r\nS+1KoVUlDqS3i5gkn1N6DhHmt9XtFz0+Xihp3LtYW6MA6VtLPz0SueqtT6i6\r\nTDVLuweZG0jVWq8xIRaiZqVbObMm1ydZYQc2N+lMNzQnSsb7nRfJg0ik5oHE\r\nn5hzS4Xk1gKKUvjQIaEo2cSDQuyqTu9af/fJvcW3t0WpGyRetrrKvEsymzc8\r\npDxV1q01q2a7HR3/GrFkUMQpf3Gn4Kc8gjEwbFyQjgCpzZZm7CweJ+mGsEEq\r\nHE4zu/FKTS2uRL7A7hzo9a0nC8j6RbJTioM=\r\n=yb37\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"2c4149184e87b8340851590663287b914d7ee63e","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v14.18.3+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"14.18.3","compass:main":"index.js","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.7.0_1651077035612_0.12171493953466306","host":"s3://npm-registry-packages"}},"1.8.0":{"name":"mongodb-ace-mode","version":"1.8.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@1.8.0","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"team-compass@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"285b29169d18d2c97ba35741acee706cbccc8927","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-1.8.0.tgz","fileCount":5,"integrity":"sha512-X4Hq8pTCTU0Udi1NP551/6Pt44S3bCEHX0oFu40oOND13tyi+vwnGw8jiUW6BFLKd6qNaadmfWdJhNeZiwPO2Q==","signatures":[{"sig":"MEUCIAqbNlg0WMbB+8dsh8zXfpob23qYRToxXdO4jjcsJm1pAiEAx+PFfFxovcMn08X1JWe+ZidH0yhJAT5Bsply1+/8IpU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":307976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiuWCgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr3jA//SC6PSqlfDuukiGHQTMSIeunv80Qv9jVD7c4sJ7uOjBZPGlQ5\r\nVSeOR7gvgwKZI/hLLWN+WvsCTKw7eUz5XTiYLFr+x5RCV+gpYZFcNkdIYuZN\r\nRZELpjShs0dwHaGlwSMeM6emGX/KmcGVUnaWpAB+2C+KS5lX15IM/I05Yvtu\r\nLiq178gPx2tDsARKdbkwDjoCVusGBJ3u6yc9BDXHqcUYAV8ZTJ0t6EDs3p5O\r\nNkuMnPLv+0bO8GhGHkkPnHXGbrR+a7d2mqzSzIdQsz+t9B3Hdy5hBEFr7bEf\r\n6vg7190JWimN0TddC6Ex2KiAbYWPSfLusR8jO6Eh69iQ7INliwhXAm6+WokA\r\nwFGaNsjhJS8XI2XYPe3uiitqu5bluE7n6yna1wNg8gech6sWwEY8KBaxSxgq\r\nnXqNc9hZZ6PXuIs+sgg5y4sbg0WdgnKUy+1qcwqhcfmSjkNTVxwqiLbqPWVt\r\nSYa/cmzebh8W6L8b0FaEl49F7HffBNaYMytrNjwSz7wZbYySQ6mIsw/gj7KV\r\nTZfRB9N1bADgCuomJGy5PVsTUZvpGzmibtO9yvlH40YTIiP7+LfrFrk1owem\r\nrfMBIQvh+l8eRXNNcfzSfLR2PjsxxHnve6ocraaklDMJ4MUsuRNNU8cL779S\r\nhAR+kz90XrcuepTEDTVx2A0C63OPWqkGvi8=\r\n=Eddm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"a4e705ec6d13393d2e14e906838bb67548e7ae35","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v14.18.3+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"14.18.3","compass:main":"index.js","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_1.8.0_1656316064038_0.18293076071918657","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"mongodb-ace-mode","version":"2.0.0","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@2.0.0","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"9e18f3ded8223ccf0d3801cbd844648e0dee13b6","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-2.0.0.tgz","fileCount":5,"integrity":"sha512-dtMm9U4gYF7eWC/M5wuqZk/etagEPcVO8x1e4zG6Ufvbn4TVeAPHMQfULfHnIhQNjrpVIDtteFhfuiOti2V4Hg==","signatures":[{"sig":"MEYCIQDvTUpqN4TYxyZVCuHMzMMAlZBWBH4ZbC90ZtTgNm4WLQIhAPvTKo+eexPsWi3J6t0VXYPD5JuhtSWi4uWV+1nicNtA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":307976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8mBJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmof8BAAoMZNE0eCkSoAe0lwUf4MhEu3L1bBprsT/efO6OtbYoP8OigN\r\nxE6tDsOEn3xOm+SZvMrFbdhP93buvoXkg3NOQWA3yzIv3hVxhcBjFosgul2V\r\nmtElw7YvCfkIq6XWpLUwtN3I6ZbdsglU58Y+Rjpkd7wgPDWsc5k90mfPYbsM\r\nlLMGEyentIxDWAO3cr6RGm7MByoxugGlz4Ou3kaxXumkNybMTYnrNflBi7Ng\r\nvEy0F9VB6zTqCVWs264DE181rbezsinOTgQ5rL4XiY8D2Zu2zEoC/0w5B4yj\r\n/cEo71IIzN24loCeSrFVXt7a/Srec9uLRAjLWq83XJLqALZYf035idjTDuul\r\niqCVfcZhxc8WrUl0zM8zU9U626SjpjEJLuZc6inP5p6mwAeP9AE6CQp113cC\r\nno0SRg+FYUaXeL6xAamxppS5KPlKS3kcMGd5czoR6gCzR6jWuqkwx17cz+m3\r\n2vsGb8Etwf8xROH+NABZGKI7Fd82J8NcQb1NPaHAN7S+zBnYNLmAceG9VpBz\r\ngLGJd5uRLMhT5b93zgEnRLgFzVA6E+ydK0dHkSbp/O99hzixDUfCHHga3+e4\r\n7G15+P0aeLOLJgmRtSPWdPeiBOSQX9piCmitTrS9uyZ0c4z4x5bmqjiMI/62\r\ngiWx94tpXCwYvIZ0SzAHfez7drHMkmeQ/KY=\r\n=JZSz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"a30734888ab496a07d58e26870e5e33b374e98f7","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.15.1+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.15.1","compass:main":"index.js","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_2.0.0_1660051529010_0.5792868988550464","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"mongodb-ace-mode","version":"2.0.1","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@2.0.1","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"b5f39149a12d28263c29c3990ba2f1643bedddf1","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-2.0.1.tgz","fileCount":4,"integrity":"sha512-m2LuxHkFFvMp+b0Ns8tjP8YpEstFtckkNe2X+XpEGP5pmiM+5tD65cIngWbmfz7PbDXp4cxQnMWxl4jAJFCAiA==","signatures":[{"sig":"MEQCIHoPwQAKIepQwLnpnBxwfu6AhzZ46f92TNmWVJIYZ5mUAiBV4mLhrHa70B4TIu40zx+94ZFTSxEyOfLnEeKX5DWjBw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLHu7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpxqA/8C0HJorpAxxlzH3cKl8uxoj2GgoJoItwkDNedXfvbGrT2G1/r\r\nxlS/CckzK6EsgBNnN122Z1NwDvUdNTCn4UkogcEZsM8CZVmF6+8g0yixBSnd\r\nkYQ3XPpOuiz1M64FrSqrZAujJWYuM05ZAHQBgIAnxwvOV5Puq4ZTkS5Qx4rV\r\nHYpgTT9AgwwVz3y8ovfgHS1RbvX4dwNQJwT/MHN0DZg2cK0rt70Op8HDwiSB\r\n4sKRbJNjq5R67I/aHfBC5t8O8xajrLmrA1AB5fxv0tCJuZLkAbHQua+wBwSP\r\nWOihBqvB7DIH8AEQsMrpM0vFjgLY2SYEh6gACnMY5LksPAw2V3GLa14oX/Q1\r\n042gMKtR/LWOOW2QEUrx0O+RjaFexipPNlp7YtmYaw/OWWMKRC+ocQuCOxhl\r\nN4yDLfjAxPpMaacKL93ntiWW6yu2wr0xoP2/BwP/h6CF2J2kZ+0h1U6HrPWw\r\niLmGBXShgB+QVXBGI2EdeV2kyo5OKU1xttFcJnxHEJ8ZfOIcXHnNLvUkpPZw\r\nU2VGETaPfepryXzH/1P8obPZw3LEvbJcpepjlF1ZNzK9qDpTxvavhWzLtQAP\r\nbDNtRrH6R9LSo+4Zv3dd3mrNRx6ji+3RZByHAqa5exp5vSMV1RjkN3B09Nit\r\nCdBI8M9AjndfFngxQrSUyVU/mSYF1cPoGtk=\r\n=g8w3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"51f04a0ac45c3b51a3ffb98af390c811d1404380","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"alena.khineika","email":"alena.khineika@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.16.0+arm64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.16.0","compass:main":"index.js","_hasShrinkwrap":false,"devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_2.0.1_1663859643685_0.589972492592507","host":"s3://npm-registry-packages"}},"0.0.0-experimental-1c53312ce4905234885618d41ae95fde9c21aa18":{"name":"mongodb-ace-mode","version":"0.0.0-experimental-1c53312ce4905234885618d41ae95fde9c21aa18","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-experimental-1c53312ce4905234885618d41ae95fde9c21aa18","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"e7a8af3d674ef43d90bc8fb604fd44446eedf565","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-experimental-1c53312ce4905234885618d41ae95fde9c21aa18.tgz","fileCount":4,"integrity":"sha512-08hIjj2D/mcF9vxLp20LrlpcNt84mzBNMC0WGtow0hFcysEsNYdDIGQXRuV2WqzrM7ew5vFMm17vxEaDiJJtSQ==","signatures":[{"sig":"MEUCIQDrZ0ND2ykoMMDYZDtTI7n8sM8mFPpwniiPC+gLKgYUtwIgT9OhBi4km9lIVD6vTbT/EPELGsEDKnV34Hilq+FL5ME=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46125,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMaZIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp1OA//e1rWp0IuISXBou8VgGyvoiVM2k3hys/YHEnm1os9dkC4Em7x\r\nA2L3K3t7ptSmQPZMV4Vn/Ox0GvJ+ySgMyte9ByR/StXGfluk4BavdCn5yFtC\r\nX2YwDVC0RnAqjK1L+YetzJPsNYDtpeSoOgPq/rBoKt+xv3iIZvlBObdY+qYP\r\nMtxxWDq8aXcwych972L+zwBJSnowcrpWW12SDU99Tzr4VKWjoCq8n/PBDWNn\r\nmU9lmjLt676nnkSP2k2sQTpaHvNFqIJk3u1a6qCz0zeDIoKTubE9sv73b3mQ\r\nQ8i4j+aoi/93MeUUqBwzg6tVkRzTkOoHEApIXoGev+k/HyxGrzZYZRAS+PTD\r\nmImylAWlwmY5Hxqeg7Cm+OXgfaan54iAyUWiNTq1bTwrmvt9uI8rtpxJIRpx\r\n0XBOq8qtoVoHuC6T02RB+yUebk76CgtwUQh1bKKZQFW4yO7taiY9Uwj+9vw6\r\nHcvlZHtPcS0fyrUH7Huc7vlu1KpS9jPGupc2eTNRfeOAzmRkOckIBmtF0nA2\r\nQpIDR6ZdNo4c6VRrZWHfrMwmLOrJGsKI70O+8l/N1D2BVPgDm+oDc5gldjUy\r\ny9pjs7HUAzCkiTJ+e9qFtc3jRv+Gsc/qlnzfA+xQ70r1/WBXBca9TFqvjhyY\r\nRg+SgtMMrdYC39zTcdR+a+RdNBqjxhCSOJU=\r\n=efM6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"85bec9e9b95acd9ace066254edfc492578f4f8b2","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-experimental-1c53312ce4905234885618d41ae95fde9c21aa18_1664198215770_0.42324543990180086","host":"s3://npm-registry-packages"}},"0.0.0-next-e30a9e850a8a66b70770fbf6658a3e35cf1ff8b8":{"name":"mongodb-ace-mode","version":"0.0.0-next-e30a9e850a8a66b70770fbf6658a3e35cf1ff8b8","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-e30a9e850a8a66b70770fbf6658a3e35cf1ff8b8","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"7a4b23b30ee4dd7ad861ad94d916b07b53deff01","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-e30a9e850a8a66b70770fbf6658a3e35cf1ff8b8.tgz","fileCount":4,"integrity":"sha512-Hpo/d62DUBXgNZrmXNqhP6TU+EjM/zOu1uiSViTq9tFltJuBGFQh6lmiXyXkFnO3nUSvqUWGj2aTyAaj6TsZfg==","signatures":[{"sig":"MEYCIQDx1f+RhfGqdf8eALnirn08vb3HvLmwD/T5+KSL1oyX+AIhAPjfsFxV/cudVYkySfdKPGE00UpH1Xy9zsLEgq2Mb4sz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMbITACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp8MQ/9GKFTWnLkWs8LEYuA6puhDa6HNof10iZ1Hz5oXkrcMtHX64ib\r\nOE+ycOw0xEsxv5C4VfLC5W2bOtGodheP+f7PrHwOlQXxCDT2aqPE927AH+DG\r\n+IXiIv6zU40PCK0rY5QnDZPOoZQ/qWNWjPJTcA5dVJe9gba//jgOUF+uSYRd\r\n5quT1vmbyhs1JR9PnErx+bdezZmAja51ibKptu394xA4alZhFvO4xrAwnTlQ\r\nXIfqomkmQ5XkZtsLVJ2LNep+PA22+MWZNdTY+PE5Za8/BKccA9f/WtlIAbD0\r\nzVoGTx0Yt8g+CWqJZCbW3DGAanz9aVdswJHQ6Qs8hDBjeOj74S6vQxAqzctN\r\nFyiMV4hjUgIO+biDejypqzI1G7Qe5G7wTNd06MmxfYzwgofL+M5JBkJh15Y6\r\npo6gNouKZbSOeAKhp58xYO2F4+H8Iqc+1IpEZwGzB/+R1Ww/NiYLSqs1ekaW\r\nbRPZN3oidTG5RY4KrLk0ZGjERQRELXamWHoVaAFMQvVPQ5vRgeQCztT2qh5d\r\nvy19/9o0tjHGnRCyJQnq+yH119/GYuvqm5EKXmDmLeriyvIce+W7/PdMAXWw\r\ntpcFoYh+w8n0ojRuoruaTGoEJSrT2gtAMc8X69X1oymEZdP/xgdWysWnl8Ur\r\nM/C1PR+yreq20+jbY40Y3vyXP/Um/PWhZFs=\r\n=Mi8X\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"e30a9e850a8a66b70770fbf6658a3e35cf1ff8b8","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (darwin)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-e30a9e850a8a66b70770fbf6658a3e35cf1ff8b8_1664201234937_0.8228040054981125","host":"s3://npm-registry-packages"}},"0.0.0-next-25b11de63d51aa4ca7fda0f3eae67999e3418ca5":{"name":"mongodb-ace-mode","version":"0.0.0-next-25b11de63d51aa4ca7fda0f3eae67999e3418ca5","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-25b11de63d51aa4ca7fda0f3eae67999e3418ca5","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"272db9e9deb31d7879a5fd3963927d19234d29c4","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-25b11de63d51aa4ca7fda0f3eae67999e3418ca5.tgz","fileCount":4,"integrity":"sha512-gxZ9LS7DoN1SfxEwO2XKfd4S9DPzQ0b6R/Bsw7SAaPptP+FauzkbYwH1E9Dy/ghiOA+GGNCpBq2V21hjq4W5cA==","signatures":[{"sig":"MEYCIQC1E+m0k8QcrUqOEL0xofobnNUQv3z9jEqWEYKTXAvd5gIhAM0ls03AGW8yZyXcysaOTwA2bUuZErXhdO7i/YcunDcf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjNHwhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqjiw/+NhdYdoxIrLAR68OEesn5Gzbyv3XV8gdp0RM2OhPBW1CUYTba\r\nqtCrJEWoMSRSE0WtEoropJt90AUYE0GYcryxZXG1CVruLILy47M5aUjVucFz\r\nIi/H3aBBfOCZWmqmKJ6v7ZLG5HFQv51B1hBfisCOI5uQDzKUO/zd6FyKWWKn\r\nFXkqTLJmgeo5mOM4DKD6H1ZNyLwVPwWu7TCyxrXJD5TzXCneXhilqyTab/AZ\r\ngLS2WkH5WNUZKmDAKYmVMnwzTwQA7JKphiJ5j+1TnduZwmtJKk9s6im/pKOM\r\ndADQEK2s/NSpqZvo0LLC6PaMCbtjQIDYGPJ2V/+4o33e9R9vC3la2iYZ2O7K\r\n01MlpdWpcHPLe9PbVvPl0os91WAiMAIQRGuyPxT8HZnb1qI1jLFY2YJoMLcv\r\nt7bPNK0xXsgACLpa+2gnCmHo6hl8AApVdbEob2PhGIZSnmaQAMpTGDv4RK7d\r\n9pyj1PzeSG6dROS+s9LIadLdZhMxjwPXsQCH+9YrekNHQP+rPcCOtUOpF7Lp\r\nT6sr2+klh/Gl4tFlMZJbp+tWyHeoKZJeBvFmepwLo6CL8x2ZskzcT9XOKsJg\r\nZ4bRhYr2caKWrrMLYMRMJJ2GEgeVftf9PSMyXNOqGjdcaNAMi1JKAdEhr2fE\r\naPhGZl52NZpF+znYzfHCxl9dpdClG361MSE=\r\n=I/G1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"25b11de63d51aa4ca7fda0f3eae67999e3418ca5","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-25b11de63d51aa4ca7fda0f3eae67999e3418ca5_1664384033218_0.2369899773952866","host":"s3://npm-registry-packages"}},"0.0.0-next-dfa464112f63969f158bde32322e393fa2b77940":{"name":"mongodb-ace-mode","version":"0.0.0-next-dfa464112f63969f158bde32322e393fa2b77940","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-dfa464112f63969f158bde32322e393fa2b77940","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"746ef23f5e5e6008eaa09548dca41e18adbc0453","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-dfa464112f63969f158bde32322e393fa2b77940.tgz","fileCount":4,"integrity":"sha512-Lm7ummlNAFh3ZtCKLq7Ufop/JNv0EsSRj++Xuy7Bl3FWSltUxYLyczmHsG0Tp7bskNe6oOrmkczj9Bq3RTgFgA==","signatures":[{"sig":"MEYCIQChi05dhsxuWAxIZ5h90noM65I8C6WKmAGdci83XQEygAIhAL0GH8fOsnj02nPMQcmYJw5n3JAbb2l/D9ziywogLvid","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjNMUgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp6lxAAjgtNZmTAkPtRFPSvdW/1cf2CjL8tSKkmGLCeBCiOc16hdFtj\r\nAhA7GTQc1fLfcjd0WSVcnVnrzH9oLRbK9K87cY/3c/RECLhl/R/1zObP8ZzI\r\nzc/U5V43C96gigcGswk+yhbqp5XvlqjjzlTyNwg7fAp3nxh6KlanwpqU+z9S\r\nudVLs16w82axB44TCHel365FyDksWee5zFV8yGLHQumkyEHzNzr+rTODz9PI\r\nUxTFLCm63AfXt6A7ibJlwY8SlOmrylOZNOf2L/XzY66myv8sqq8QFFuyVaKp\r\n0KAuQooZ6GsXJd9pcH0jYLHQM4pvn1VVKftLKLtfn0QY7u/P9f3c4kG0+R6C\r\nqnNgXqFfcvA17bVIH9yR1afi+k+ToheuieQBwAfyb+5C6xLP0QhEf9h5xKvL\r\nOyOHZLC1YtRaxt7K4bmAiHX4XI7ZZrgcp1qrXP00vjrkNK7HsyBtyGwLe1aH\r\n27J/6LojG07VV5TOccx9bvss0/kELKkfgXe4vtfCxbNAVTHJm/Od+5zZvLbF\r\nrp9UDwl8pnBd35HcQrBOj3PE2YsnOBJ6jDVhLqRwtast1cIQasN4fxhUKbUO\r\n0s8TqqQl3EmQvzbYiV1RG9GhSJTqC5N8cmjyh0ydBzqQwVR88yCGc5N31WCU\r\narapCSv09jJW04FDtUPVrPrqjMXgRS4zNTw=\r\n=6rWQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"dfa464112f63969f158bde32322e393fa2b77940","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-dfa464112f63969f158bde32322e393fa2b77940_1664402720528_0.4920480820299902","host":"s3://npm-registry-packages"}},"0.0.0-next-e42d58083be39ce9f112e6ec7f9fd1fdcb666e3e":{"name":"mongodb-ace-mode","version":"0.0.0-next-e42d58083be39ce9f112e6ec7f9fd1fdcb666e3e","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-e42d58083be39ce9f112e6ec7f9fd1fdcb666e3e","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"8f0c87734033dc032c08985698148c1a53ef19f3","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-e42d58083be39ce9f112e6ec7f9fd1fdcb666e3e.tgz","fileCount":4,"integrity":"sha512-0DBqCz8Z3XVuNPTJ/x3bx+rC3Hi6NH8OxszKWaR6lueqTQk/XNEbWhmcr+H6xeIR+lXR/GecIKA8AsjsIA5KoA==","signatures":[{"sig":"MEQCIAMi4QAL0HaFpw/fwl77Mb8unCmsqION1BRentFmuKN+AiB+jz4TvlVVd31wyecWJZppRaFtRFWQTtYoK2Ii5IrqnQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjNcK/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpj1g//c0bOt9xcHNpXkZgIZu9MpsIwlzh40tt2p4VFw7EVGnDPYSDo\r\nkw1XXFOl65qZwUb7eYmAGg7OHYVQKH6/chUTIbO9WNCXC4CsCJWHUnzzWc5M\r\n5rcEDcj9K89NTNzKTjCDAaLtdnpyitUYjWtHpjhYXDlgQowsMZz5/4rI2giu\r\n0bFdorikGEe/Zi52AW6f25WWhCDY6MpI4nUF2NhcCIevzupwg1m0YXaC1CZL\r\n3N7oVBjqIbyJ5pQ12Ff0KCC6DUa0me7ukthXx2QFf45sJQedjpgYIVkeF9FZ\r\n7Wjvb/hOWuU/q8aHuLKNaNCgAXmYe5WAMYSg8ZL8acS9tQA0S+yxG97JYQIp\r\nqQv64J9yjZFRf3KACBgm4czLJ7jMyhapAWw+wgrKeZvmJ0QfTZDJ7djqfD6T\r\nVMVZLHh3+eqq8mdWsO+KA3lhIDK7dd0U1ous4IS+Alet67hwMyWuPqmDRdxj\r\n8on0VvrxRRJxbFG+6gf4QSxb8ynFW5Hav9IP8pLYFzhFRia69+36hFhKg2md\r\nD0S22H0Dg3pNkBMlMCs2Vcka4o0mjW0Ce6C4oxTeh1HOJSN6hNZW/S2WZy8Z\r\nFVZm0nclwQVu7ZjpfMmQ8I75/BajsWPIZFymutKMCKK9gFLTBip5TDh92yJp\r\nX1v7pzTcwRMAWwymH0Qnjd1c+ozrqVtlS7Q=\r\n=28xi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"e42d58083be39ce9f112e6ec7f9fd1fdcb666e3e","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-e42d58083be39ce9f112e6ec7f9fd1fdcb666e3e_1664467647362_0.05624480703186285","host":"s3://npm-registry-packages"}},"0.0.0-next-5f69e8129e0242b4e507fee055188a8a83e1f1c1":{"name":"mongodb-ace-mode","version":"0.0.0-next-5f69e8129e0242b4e507fee055188a8a83e1f1c1","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-5f69e8129e0242b4e507fee055188a8a83e1f1c1","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"72ca7dc66d5e17ee428a9c1b8f023f44c9b3fb72","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-5f69e8129e0242b4e507fee055188a8a83e1f1c1.tgz","fileCount":4,"integrity":"sha512-g08Mufq+qJ+kOnOypnEpYouJKDzci9UivkpMIiJhCQ2JAziIeJZLoWAGOhhGBJxKdeudP46m2eIUeXj5hAQyQQ==","signatures":[{"sig":"MEUCIQCXTnUwAcJ7QINOlRF9+q2DNKsxkou2zwvPF6w1ksBpDwIgH2ZBEtL1A8DaeQKl8O3WGio713DvCLcoP0eWcmljwEk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPWY1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpcgQ//Wad6JnqK+pmD14Yt/A5/rXaXQZP1DYWY/ds/K1VTzoZqoQ4D\r\nefC04qZaFYHvJep2DbCo2HaZ7HwkZBcWrf9XzX+EBaR7SshturWdcWg3QkzK\r\nlNzF5XetHoq+d6TqmYQLv3/PZwms6DyIUQ4Tkp621YAi+Suzu9xrHJ7MCV/m\r\nzF8ywQRwsYUzJrlk2IHwUCldS4sDDiKRFHVjwRZpE34sRcUpp1Gco4e+X75D\r\nVLGyJVA+cWGRHaCRffJs+dxWKUTECwnNatUgd8doGaYTi0hM4YMY++H9v7NE\r\nTglI3zuL+Qfnmp0wM6FfP56vln1aaodN2wMzuSmImSVJWlb3taBv6C2Fa+hf\r\nGlS2zqBJKcAWa64ICenQlKdCDhITSYOkCafmBJ9hsp8MxRtdfLbJ1vBYsc/0\r\nbiqaNiuCr7K9pvJk3eMFz6+aYn+ZA8Lfj56y/42NLh75kvqESd/SDsC6plNE\r\nerERyv5X1OB4QCjU7rvMQodx1r1tu0VLJ6JqYKdSU5THjS8wbpSdKHpytqWP\r\nZNpwN0peD5auOdrxZVE4GeX+zx548lT5CPSeroxACYqClrx/cw1ibAaymAdH\r\n5N/Ib2KJbaAvyIM5psNnWtICDkE+LY36bmJxWhqPUoc4EbySQ07n1B1R1im+\r\n6Tk6TvOPiwBNZbLVx6Hrb633sBMxj/afvNE=\r\n=Bxc3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"5f69e8129e0242b4e507fee055188a8a83e1f1c1","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-5f69e8129e0242b4e507fee055188a8a83e1f1c1_1664968245196_0.6244380968406293","host":"s3://npm-registry-packages"}},"0.0.0-next-823f55a862f13d28437b87fb594450b2208c0d4f":{"name":"mongodb-ace-mode","version":"0.0.0-next-823f55a862f13d28437b87fb594450b2208c0d4f","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-823f55a862f13d28437b87fb594450b2208c0d4f","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"584f768b2c919294250d840b035e89081806a1c2","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-823f55a862f13d28437b87fb594450b2208c0d4f.tgz","fileCount":4,"integrity":"sha512-DyYYhT8h0uvDYY1yK3bh96D+jN17hI+cIFdkzGMzoFJWp870/S0lkZTjBcHpK9A32NyqLl3jmlX3Iit1TwcYxg==","signatures":[{"sig":"MEYCIQCzjq79afQd8m8DHjl0/h7cZni78AWL1m6Tw8HnWec8oQIhAP/1zFuvkLLX2Aavnad4wmHsKc/zcGtZ0oc4AUG/m35+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPa18ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrmZQ/7B2IyUQAxpt0nmTXkjbsyENRAYxWyPEFqLzLSsmzWbZlJHp46\r\nXbteZtXOOglRM8hgjuhV9pazKSpjB6ji9LORwAZvT+9Q59hJ87w1wV/5N3G1\r\nhAVXXpBm6nJ1r6pPgA5aK/Dup10Sc0fj22jxjA93AP/uMDLLBpKNEzL///K/\r\nxXRDtM2QnpsggrGR08LJ6KcnEEcGhSredIk5mRcfLbf/AS909937d/DloKnp\r\nghkBV1/tGuINuT4Z/CDu3uxR725XDP47ZEr8XZnbXmLdG2b5etJQ/6V7NE9k\r\nHQrQYwHSsi+QT7gmswabhmjxaaaIm/pTXjf8eRWi9eILmjN9QblYhwPc9GfG\r\n9724lYhehmVTGXOMW9llXaYky55zjvb/gkt6qeQU6AFSL+nVkt29lD2JqNox\r\nRDw9WaFAin9ShUWhqCRYNIkVXp2qq2hZz4Bem/iPLmKUGKyKRRhT0F/twfHo\r\n4rsNdhqYD0AAU3Kazf41xYKLthOGaUlpYutCZftQw6o22pvKnRwwc2obTHgj\r\n5TsXm8SLVIofisKRXjHEgfbA9uTpnlRy/LyemB9VYehhthg8mDIi8iMgCgP4\r\ngbU3oD2k53u9TIwrXNqooO6fDlvVZdRCY9d6EIgXUoXwPaOkBEsQPIxRR1FV\r\nFl9XOPHJPkP0Rjxo8ZF42fMhqz9QpKccVD8=\r\n=jlJE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"823f55a862f13d28437b87fb594450b2208c0d4f","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-823f55a862f13d28437b87fb594450b2208c0d4f_1664986492619_0.79680719257943","host":"s3://npm-registry-packages"}},"0.0.0-next-01a3ac56d52443bc859ccdcf7ed301ffbdea7a47":{"name":"mongodb-ace-mode","version":"0.0.0-next-01a3ac56d52443bc859ccdcf7ed301ffbdea7a47","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-01a3ac56d52443bc859ccdcf7ed301ffbdea7a47","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"692f274a29215df79b3b344a01f6e7812df8d1e4","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-01a3ac56d52443bc859ccdcf7ed301ffbdea7a47.tgz","fileCount":4,"integrity":"sha512-mqVSHEVwAeFDkbHHGCIbGiA4kyOU27yBNQ3TH5xknMpMyO/h4xiCUXnkS5wm/o9MmoeJCQwrbuIYDUDlv0Dujw==","signatures":[{"sig":"MEQCIG/bO39SUwVuIx+x3gnouHC8CNlS7f2R6pahi7K3S4clAiAqPkowjeMxfCbWs8j0Eh2dtopeWw+FTLm0+REqehJjLw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPqQEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo6HQ//TcKBS7+eSqnUNhJVid7Rl/SPqj7KIVrRtaO/jItY1ulG39xc\r\nGvjw7yfSdjBtYQr4W223rqQedAERr1vYLIkmrHdBoYMff53vfMtfZy6Ma7We\r\nOBa2lu1mc1Jht3Vtv5uzYNLqK8MHt6C1cOPv5zHHLFDvaK8KL8XoZgJVJEC2\r\nt3xiT4Jzt75P2emtSWqRLy4Lh4dZ3Uwtd02QKXt3c7IkoKMmJlP0eB4EJ2HY\r\nUqWrRZlVSfv2V2gGsgeTgEV5X6L76T58ai2Ul9kVwVaJkuBjDGN+6ntnsrPF\r\nspRY0YeV4/nS8zanuEUQHXIykQBkUewszxv20RzaYDI7xf/xXC6aBQrLGztT\r\nk813du5H1IWCKfLS8JyEiMptm9MHboTnWWXayVOi0xoXKAev3fuPjjYgFAXd\r\nOF7LckCAH/IPbKLqSKWwxTTEg0mbxWa7aKA89DbT0rDY7ccdkTFPWdyE5qQe\r\nFRCN060/M4Hrrz9SP9TaREZMcQ5u6BvqGD7CIoDqn1uD1MUgW7JWBXHYqxDM\r\nK1tFdrc23Hqef8GPDClxD/HXp6ZWqVCAt13A4O5rT9Gzv4knB+vKiS5BTGN+\r\nUnHcz70RQQOTiFQ11t5gJDvOw6f5SmOQIJ02wWoD5q6ZTwCVQF5GtZt2FUcF\r\nRR5uXUxRSnsbhhnYCqoI8X0sJtWe9OvTXsE=\r\n=wYmE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"01a3ac56d52443bc859ccdcf7ed301ffbdea7a47","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-01a3ac56d52443bc859ccdcf7ed301ffbdea7a47_1665049604231_0.9996189139508191","host":"s3://npm-registry-packages"}},"0.0.0-next-cd3c5c1303c464ef7900dc08adb8154d15c7f3a9":{"name":"mongodb-ace-mode","version":"0.0.0-next-cd3c5c1303c464ef7900dc08adb8154d15c7f3a9","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-cd3c5c1303c464ef7900dc08adb8154d15c7f3a9","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"f9c3a2cdfaf8de0737751411652f7346b0a631ba","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-cd3c5c1303c464ef7900dc08adb8154d15c7f3a9.tgz","fileCount":4,"integrity":"sha512-n7Jz2/cpNh72iL4FM5k80gslKnxXFdCc/Oz6Lm4PgJR0nekN7ZU9kmGZ1mnnULVMw75z1epzPeCtgItXro/lhg==","signatures":[{"sig":"MEUCIGFBuNEOg/5zmVvPvJszZFuaZSbMkxgeRTBkHKcCGMbWAiEAzu7RYhK46/8uVK65gO41yeuvLa97pBhhXQJ7TJnkoSA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPumtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpbjA//drGwLgS3vB1uRyIGFaQMJ4LlJbidN2k9RKcVxZEYTj7NltU2\r\nz78D2rcyez1Gm2P0KGioRfR8tMsncA9Mva1+XNYBy/YNhl2Ijw46RHBLrO63\r\n465fp5UPbwgzvasJqMY88ZNdNtUzzWKkXwg+JQJCZS5T6xBDn5doQ7HkbkQq\r\nrFPVKFpBL5ETLzIHH20gRDe30QxEMM/8T2kaEnlnxseM+t0/jnF7TCS6lDkI\r\nvwJ810A1EV659S8PzgUfcofi/qduVIpmDy0F22upXXsrJl4k80h2o++HosY9\r\nnOaJSYbPyQegwQvSLczdwLLWu/0+Z9mNCRd6e0KQmHSAdxJqBswBvH45zJPG\r\nXEqTwUcTPKnKdTilUDMzJxGATlJc4vW+D94CR1bXqHpxsDDjS2Q0zqpvLe0j\r\nbpRyaqhyY6/OCT7g4p7uQ6F32zyqkTtJqfOJUjh8K+3kQKhqz8JiyPAvlPwY\r\nnPnQqaN6D/pRWCIzzCJbT3DPVdQkrl/MJYuJ1eidqoX1dzozvTHOYS6RI8Kb\r\nzj/5kOgl/xB1124bX3b7w7ppTdXgRT/h4k2K4b6OZ2EfQn3vx02ux9uHPRz2\r\ntOnnMdyOii9Ny9JQwyOuEC5cOHXKyZ3U89DOYbtwfkymIvooNobR2mAAdAcS\r\nJ6pimPzRv0oBqOFuhFnakrgGf3ILTpefTS8=\r\n=fzpZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"cd3c5c1303c464ef7900dc08adb8154d15c7f3a9","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-cd3c5c1303c464ef7900dc08adb8154d15c7f3a9_1665067437635_0.49766193172329287","host":"s3://npm-registry-packages"}},"0.0.0-next-d9691f3c8230e21aeb2817ac2c984aba0d79f09c":{"name":"mongodb-ace-mode","version":"0.0.0-next-d9691f3c8230e21aeb2817ac2c984aba0d79f09c","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-d9691f3c8230e21aeb2817ac2c984aba0d79f09c","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"c25cd1427bd6381a36b8fed6152643173ac866ef","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-d9691f3c8230e21aeb2817ac2c984aba0d79f09c.tgz","fileCount":4,"integrity":"sha512-bkyV8ePbvn36Ql23fB97XIStMscr9rHISwcBZGvqCYCqconzDBRkq5i/PxeVjeYWqlBEo5wBYWJQOnLIU/TK5Q==","signatures":[{"sig":"MEYCIQC0kbfsiaVT2ezCXLsrcPMUo3Ezmpp2JfkUab4FTXhr3QIhAKqR+a2ocjLhWbLaqjxW+zWSv6Pw2q2/MlNjUU+pxfCp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46105,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjQIGeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpjPA/+P287lavyTjblwIgZeLDc2LjEuL0DyDwjsRKv6IYVT7/BcB7l\r\nA6t5x8wUOVMKHeR8o4zaWuKcI5bV2jnPv4sP/Qzq4MA8mdYjt9xuWlkItAzz\r\nqauGaYfXWBQSpvOD9Ia4IbQmynMid10xaKU4WIE/66wehP9Aj6TxeomE2k3q\r\n7azFvcnn8kSfQ011Ofo9hGej7zGPCX8ZBU0i2PExjDAHOCb0tD49evaFX4Xo\r\n3yU/wVltggnxYG1j4KsRdCWlQ8kmveHVdjZiw5xXFlRCFWML8F5oBuRqxsyH\r\ndgV73vYG+v1pMWN/Bn7OY/aJV4iJeLwcU4KACrBZTbpzyqs1A/Xz+A+5dRk3\r\nf8mvSExSNmAswUznizw5o1gPalIySYMmnN6VcW8rIg81HVj8Dslw0ga1IVH5\r\nK/pJNftpzPQfeQrrLdztVkzt7nBeYJv+Ez/QqOrPLHkxlWtm66DyjJBSwxWM\r\nvcTvfazpnBNjRiah5Xsuwjms/j4EjB6MlzRZpGqJXhLWbV9Ry4q48VtIotpM\r\n5d+QCcsfYTRNP58/VHH1nGR7IOVulaF83L6pT/wyu7CG1Z/FSoM0906Z/8TE\r\nB+5xaE++tBOw1ULshpE6zqryQod14gDIUBrHeRjklxp2ZXGsESFrlSW2UKps\r\nX1RubkMw2fDdRF0pz69vrwHJnKXbcmxmPM0=\r\n=duS9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven:\n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven:\n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using\n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter\n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with\n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin\n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic\n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee\n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">\n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator\n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000000;\n  font-family: Monaco;\n\n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"d9691f3c8230e21aeb2817ac2c984aba0d79f09c","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-d9691f3c8230e21aeb2817ac2c984aba0d79f09c_1665171870435_0.5009012414378908","host":"s3://npm-registry-packages"}},"0.0.0-next-1cb9ea1724d90e58422b33fe089df5b774e0be10":{"name":"mongodb-ace-mode","version":"0.0.0-next-1cb9ea1724d90e58422b33fe089df5b774e0be10","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-1cb9ea1724d90e58422b33fe089df5b774e0be10","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"49f959aeeefe79bd13d45ea8828e0832cd58c21e","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-1cb9ea1724d90e58422b33fe089df5b774e0be10.tgz","fileCount":4,"integrity":"sha512-SdCG38gNHHCcEzdkpTO6r6/vugHGRxyG7s8Joo33LEpsVoROc68m8Ma1serMit2k4LNUsebC7zam7pBFUhnyWA==","signatures":[{"sig":"MEUCIFohZ85SqpSDDI1Mq83CgrrYDS53CHRPdebM0+2JQ/TFAiEAl324SBNRr9Dl/OZY55jDdNgx9k0aY74S5WDswgiMEfs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjQILDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmozzA/9GvmxwwdXeb8cVYbrWyr/lpV9w9UVST0YEShexTFqTf3F8eUN\r\nTLcl+H8hwEbPa+Ww4XVYXJQI1Td3Tw9ighYiuagZ39SuL6u7VxHABGug+y3f\r\nRYQSr93YjxyKWw30yQw2JWxvunmvDTPAn+J82Iw0gzZOHurE3HwiPCzLQX8N\r\nuz1xYtpitxeX00M1r1/0aZ5qkwV88UIZ0+iDKkrPhF1MUJNhLQY8Rv0w0DUU\r\nGQ7PWvzPSOyWagXGqk3Q1KplJ6LjYu5Bk0jNHHMhLDgC0Nt9XZw9w6opU9P8\r\nID/WkiMiXQrcoWLGcqnvqDAFyhMnScSHiOAvSQZCm+TxdRhLmBkFQHBoAykx\r\nweZ4hk8iMEq0/y6OovkGgrs0g5g6TJF7wAumLAul6CRf5tANw0xRYrj+nhGz\r\naVPk40hAIZfupXRe+iPhQCXNgjp+ZtnpcsP79xagLuyFdLqBsqAVh6MucJGI\r\n8WeKm5d9IzMU6ty+VdlbWL/fyYzS0Lynz6MgE/nrWRe61mxfF5Peah+zUsvd\r\n76oucTSPPKjIebkTdLMKpfZmUtOiRak+nIWogV4g5/3falkNlHSbxPNfhOWz\r\n/QNtMNrGVt6v47n4MG24/hb8dWipHVZ9/rdE2+lP79mq1EiAeB5vOxYrAZhh\r\n9LMkFwKeVu2QJKzpvxMUTXQ+MV8z4xbcjEU=\r\n=unUm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"1cb9ea1724d90e58422b33fe089df5b774e0be10","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-1cb9ea1724d90e58422b33fe089df5b774e0be10_1665172162839_0.6614420517742854","host":"s3://npm-registry-packages"}},"0.0.0-next-fcba5cfd8dce9be8022f245fef7a84f29a1cdcdd":{"name":"mongodb-ace-mode","version":"0.0.0-next-fcba5cfd8dce9be8022f245fef7a84f29a1cdcdd","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-fcba5cfd8dce9be8022f245fef7a84f29a1cdcdd","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"6788b561a0e628eb68c18047d26b460f11e41f98","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-fcba5cfd8dce9be8022f245fef7a84f29a1cdcdd.tgz","fileCount":4,"integrity":"sha512-QzQKqoSgEHdV7U2z9ElOySN7cKVoUDf1e8T0alIg/hI6oU++6kYWFX2J7Uvm0hprspVM6I5uXok4lAgJvC0r5w==","signatures":[{"sig":"MEUCIF2+LQ8nNJE1n7eL/jhVAqysJxM0yzHpSZULgqTTb0A6AiEA1fD8PzYMYk0RtQN/1FqM8WdtWxHS30WI0Do/nevHfJk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjQINEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq4zA/7BGew6FaSdkHS9PoRrtUCG6oTjcGqM+tPcLtWXnWGSqmcjZJd\r\n35S5+P1eTKPeB/QsoNyv9qFLnD7c6fipxVFbhgEE1PlTrd5rX0adFsCqjM1x\r\nH5wzWTP7CbP/ncQX7Rlq4dSBTomUjXSxZu/4a5sG36q/aAmXUAZ8nlV6jiOk\r\nOAOmSIp/25hBjSUUmitk8AlW3llrhYOy40cXEk734zWhLBkqm6EbFIMvshqh\r\nUOmlHh/HiGI2D7U+vWa6l14FWkRHEvwKOuEW6E0jCSA2wACJLIYNFCf+nfku\r\neAVcU7b8P9BX+1lBxcrBG1qvnaiqbWDRymf7MZkaum2oy3lnVTZD+MFVf+ux\r\nomHqYmbUBqRWXXy+o8D9hINnGmMLTgz/bFs8V+Tph5RVSr6VETmCLWFPI5Q/\r\nyDTVKSXwHrT2Vq9bRIp8nfHmI4eJKYzHy40Ah97KHDzXQds0DhM6I+ZPGF4X\r\nSOPunLhCt7FtpItkTp0LIQSoWZCpRV7vzQNR55uwpFtunRqedF6iTst77h9P\r\nm0aQzHPBSYb0k3r1MjMvlBnYyazJdt/X3XMquPox8ZMTA9KNJI0YofF0vOsX\r\nJTXr6JynUxcK9Mn0HtsTDyp/G8+tL6AKbJ1H5tUsWj2UzIOM1zWz05U03KNc\r\nTTtfqOup94rCLXmScu/M0tFR1GUNqH/3vI4=\r\n=4FxN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"fcba5cfd8dce9be8022f245fef7a84f29a1cdcdd","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-fcba5cfd8dce9be8022f245fef7a84f29a1cdcdd_1665172292206_0.12125820697186707","host":"s3://npm-registry-packages"}},"0.0.0-next-4216a27cdf41425fff35938bb42040bb93c2d246":{"name":"mongodb-ace-mode","version":"0.0.0-next-4216a27cdf41425fff35938bb42040bb93c2d246","keywords":["MongoDB","ACE"],"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","_id":"mongodb-ace-mode@0.0.0-next-4216a27cdf41425fff35938bb42040bb93c2d246","maintainers":[{"name":"mabaasit","email":"baasit121@yahoo.com"},{"name":"alexander_schroll","email":"alexander.schroll+npm@mongodb.com"},{"name":"chuck.kalmanek","email":"chuck.kalmanek@10gen.com"},{"name":"mongodb-js-user","email":"dana.groff+mongodb-js@mongodb.com"},{"name":"rueckstiess","email":"thomas@rueckstiess.net"},{"name":"durran","email":"durran@gmail.com"},{"name":"lerouxb","email":"lerouxb@gmail.com"},{"name":"fredtruman","email":"fred.truman@mongodb.com"},{"name":"mbroadst","email":"mbroadst@gmail.com"},{"name":"hswolff","email":"hello@hswolff.com"},{"name":"satyasinha","email":"satyendra.n.sinha@gmail.com"},{"name":"matt_d_rat","email":"matt@mattfairbrass.com"},{"name":"rhysm","email":"rhys.howell@10gen.com"},{"name":"tomhollander","email":"tomhollander@hotmail.com"},{"name":"alena.khineika","email":"alena.khineika@gmail.com"},{"name":"jeff-allen-mongo","email":"jeffrey.allen@10gen.com"},{"name":"mmarcon","email":"me@marcon.me"},{"name":"jonathan.balsano","email":"jonathan.balsano@mongodb.com"},{"name":"mongodb-build","email":"build-accounts@10gen.com"},{"name":"jack.weir","email":"johnjackweir@gmail.com"},{"name":"stennie","email":"stennie@cpan.org"},{"name":"mcasimir","email":"maurizio.cas@gmail.com"},{"name":"kristina.stefano","email":"kristina.stefanova@mongodb.com"},{"name":"jarjee","email":"nathan.smyth@10gen.com"},{"name":"shaketbaby","email":"shaketbaby@gmail.com"},{"name":"devtoolsbot","email":"iteng@mongodb.com"},{"name":"addaleax","email":"anna@addaleax.net"},{"name":"gribnoysup","email":"sergey.petushkov@protonmail.com"},{"name":"mutukrish","email":"mutukrish@gmail.com"},{"name":"aherlihy","email":"anna@mongodb.com"}],"homepage":"https://github.com/mongodb-js/compass","bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"dist":{"shasum":"de33d1c6682abb8484814e5b6fb87ba4e108cefa","tarball":"https://registry.npmjs.org/mongodb-ace-mode/-/mongodb-ace-mode-0.0.0-next-4216a27cdf41425fff35938bb42040bb93c2d246.tgz","fileCount":4,"integrity":"sha512-9uBLdkD3bE7kt0cCteO7b0kx0XR2djWZvBCOwYkchBFaGXnCLMtpvII75sxg2sjI4R8wzNQyiK5OYi9KTEXi4w==","signatures":[{"sig":"MEQCIC+mS1hjb/LY42g1fSfrkoDqbJHQya9Nhy5lqeco7yGXAiBMANHaqnte2UKUiDu1PBs3sZ4qna9ir96RyzcarjJ2pw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjQIVJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp1hw//X3sGjavRquOcHJl8Mwf87xPu0frvuWgWgr2v2uCccRpnUj4Q\r\n+9mzoCG8iUKoek4quJeDpPLycSjtV/7/q+JvwJNwYBZ1ZZ4qMN/PjZ75yWlV\r\nmZHtnUz/KcYqB+BkLk6rSUNDSUiXfNH0Ejz0SshFrTkwblyMmaOOQK5y/x1l\r\n58i7zmmVioQn7mMzA/ZKcQNkOAN0pHO95j7Lny0XmvjfRdkFYfh10R3uS2Fk\r\nVMtzO9Kkj1i89Pz53RsaK6Sefwn4BVcxuTNLZp0R0acW989MoDoBU84MfTDi\r\n4a/Y0UoGxybvGgIUCr2HOAsBUHqgSZj9amGDRBnwK1CVB+dYJkSRXvYpd3ua\r\nzo0DmuNRwrk64z1UUTb6eE5ATFvru9Mev8tCB0w67qXast94Zi12n49149NV\r\nkgxHZsRLxKRuUr/1MF3Yl+ZWWtRpq98Twus7Hql912syTjwPNfYqSqJp/CcR\r\nZzDLORVGqr3NqPoqXmccYrJyTFpyp3HseVsHW1H6bf6z6pJwCBuCOhsTTKNW\r\nm+5enrwEs78uVeUBmBKm/AzJkn7oRBBqyP4aKYmDqPWlwY88YRZ0wsp4fK47\r\nfG5bLDN0qtq2LqqZe6dYCfKENSoftbB3+wHLpgSe2yPO/YVH/oZQmYSnviSG\r\nWpGxs0wPDzhOFfHH5wlgG2+hybYDxnLYOZA=\r\n=GMBo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","readme":"# mongodb-ace-mode [![][npm_img]][npm_url]\n\n> ACE mode that provides highlighting for MongoDB\n\n## Installation\n\n```\nnpm install --save mongodb-ace-mode\n```\n\n## Related\n\n- [`mongodb-js/ace-autocompleter`](https://github.com/mongodb-js/ace-autocompleter) Makes ACE autocompletion aware of MongoDB Aggregation Pipeline [operators, expressions, and fields](https://github.com/mongodb-js/ace-autocompleter/tree/master/lib/constants).\n\n## Highlighting Rules\n\n### Operators -> ace_function\n\n![MongoDB operator highlighting](https://user-images.githubusercontent.com/23074/53835489-9ec81f80-3f5b-11e9-9859-419879321d64.png)\n\nWhy? Mental model of operators to functions. (e.g. `$avg: 'a'`, `avg(a)`)\n\nGiven: \n\n```\nmax_cpi: {$max: \"$trends.icecream_cpi\"}\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">max_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_support ace_function\">$max</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_language\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n### Field usage -> ace_variable\n\n![MongoDB field highlighting](https://user-images.githubusercontent.com/23074/53902120-806f2c00-400e-11e9-9bb1-5a89829de189.png)\n\nWhy? Nothing worse than off by one typos... So now really easy to catch because `\"field\"` and `\"$field\"` will be styled differently.\n\nGiven: \n\n```\ntype: \"$type\"\n```\n\n```html\n<div class=\"ace_line\" style=\"height:15px\">\n  <span class=\"ace_identifier\">type</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable ace_parameter\">$type</span>\n  <span class=\"ace_punctuation ace_operator\">\"</span>\n</div>\n```\n\n<!-- ### Locally defined variable usage -> ace_variable ace_other\n\n```\nace_other\">$$localType</span>\n``` -->\n\n\n## Discovery\n\n\n### Thinking\n\n```javascript\n/**\n * Gathering stats when items are in an array using \n * $project accumulators.\n */\n\n /**\n  * 1. Default JS highlighter \n  */\ndb.icecream_data.aggregate([\n  {\n    _id: 0,\n    average_cpi: {\n      $avg: \"$trends.icecream_cpi\"\n    },\n    max_cpi: {\n      $max: \"$trends.icecream_cpi\"\n    },\n    min_cpi: {\n      $min: \"$trends.icecream_cpi\"\n    },\n    cpi_deviation: {\n      $stdDevPop: \"$trends.icecream_cpi\"\n    }\n  }\n]);\n\n/**\n * 2. What if `$` operators were JS functions\n *    like in various \"aggy\" helper experiments?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg('trends.icecream_cpi'),\n  max_cpi: max('trends.icecream_cpi'),\n  min_cpi: min('trends.icecream_cpi'),\n  cpi_deviation: stdDevPop('trends.icecream_cpi')\n}]);\n\n/**\n * 3. What if `$` operators same as 2 but with \n *  \"magic\" template strings?\n */\ndb.icecream_data.aggregate([{\n  _id: include(false),\n  average_cpi: avg(`${trends.icecream_cpi}`),\n  max_cpi: max(`${trends.icecream_cpi}`),\n  min_cpi: min(`${trends.icecream_cpi}`),\n  cpi_deviation: stdDevPop(`${trends.icecream_cpi}`)\n}]);\n```\n\nThere are 3 different ways I was thinking about this to get as close to what a developer would expect.  (Top left editor panel in screenshot).\n\n`Case #3` of js template strings: We can discriminate between `\"|'` and `$field` in aggregation styling, just like \\``\\`, `${|}`, and `field` for a template string. The power here is:\n\n- `field` links back visually to the property on the left\n- Avoid typos of 'field' instead of '$field' (especially when creating a view!) by distinguishing those two.\n\n![](https://www.dropbox.com/s/7soe72zzc062kfm/Screenshot%202019-03-01%2010.20.14.png?dl=1)\n\n### Data\n\n[The Best Visual Studio Code Dark and Light Themes (Updated Feb 2019)](https://medium.com/@chibicode/the-best-visual-studio-code-dark-and-light-themes-july-2018-edition-a9c2cc9548da)\n\n[OneDark Pro](https://github.com/Binaryify/OneDark-Pro) Most installed by a giant margin \n\nPertsonal preference: [Monokai](https://marketplace.visualstudio.com/items?itemName=gerane.Theme-Monokai) Used for more than a decade as Editor of choice has changed (TextMate :arrow_right: SublimeText :arrow_right: Atom :arrow_right: VSCode)\n\n\n### Links\n\n- https://github.com/ajaxorg/ace/blob/master/lib/ace/theme/monokai.css\n- https://ace.c9.io/build/kitchen-sink.html\n- https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode\n\n### Basic \n\nGiven:\n\n```js\naverage_cpi: {$avg: \"$trends.icecream_cpi\" }\n```\n\nWant to highlight:\n\n- `$trends.icecream_cpi`\n- `$avg`\n- `\"` around `$trends.icecream_cpi` separated\n\nSee \n\nHTML we want looks something like:\n\n```html\n<div class=\"ace_line\" style=\"height: 16px; top: 32px;\">  \n  <span class=\"ace_identifier\">average_cpi</span>\n  <span class=\"ace_punctuation ace_operator\">:</span> \n  <span class=\"ace_paren ace_lparen\">{</span>\n  <span class=\"ace_identifier ace_support ace_function\">$avg</span>\n  <span class=\"ace_punctuation ace_operator\">:</span>\n  <span class=\"ace_string ace_quasi ace_start\">\"</span>\n  <span class=\"ace_variable\">$trends.icecream_cpi</span>\n  <span class=\"ace_string ace_quasi ace_end\">\"</span>\n  <span class=\"ace_paren ace_rparen\">}</span>\n</div>\n```\n\n`$avg` Agg Operator:\n- ace_support.ace_function\n- ace_keyword.ace_operator \n- ace_function\n\n$trends.icecream_cpi Field:\n- ace_variable\n- ace_identifier -> nice as it links back to semantics of `average_cpi`\n\nBase on interpolated strings. JSX mode kind of implements this:\n\nhttps://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_highlight_rules.js#L375-L391\n```js\n{\n  token : \"string.quasi.start\",\n  regex : /`/,\n  push  : [{\n      token : \"constant.language.escape\",\n      regex : escapedRe\n  }, {\n      token : \"paren.quasi.start\",\n      regex : /\\${/,\n      push  : \"start\"\n  }, {\n      token : \"string.quasi.end\",\n      regex : /`/,\n      next  : \"pop\"\n  }, {\n      defaultToken: \"string.quasi\"\n  }]\n}\n```\n\naverage_cpi\n- ace_identifier\n- ace_variable.ace_parameter?\n\n### Advanced\n\n$lookup:\n- special props at top level: `from`, `let`, `pipeline`\n\n```\n...\nstageOperator: '$lookup',\nstage: `{\n  from: \"air_airlines\",\n  let: { maybe_name: \"$airlines\" },\n  pipeline: [\n    {\n      $match: {\n...\n```\n\n$and $or conditionals:\n- ace_keyword.ace_operator\n- ace_keyword.ace_control -> flow control keywords\n\nhttps://codepen.io/imlucas/pen/eXJOrm\n\n<style>\n/**\n * Parens\n * {}[]()\n */\n.ace-mongodb .ace_paren {\n  font-weight: normal;\n  color: blue;\n}\n\n/**\n * Quotes around a \"field name\"\n * \"$trends.icecream_cpi\"\n */\n.ace_string.ace_quasi{\n    color: magenta !important;\n}\n\n/**\n * Field names\n * _id, average_cpi, etc.\n */\n.ace_identifier {\n  color: green;\n}\n\n/**\n * Aggregation Operators\n * $avg $min $max\n */\n.ace-mongodb .ace_support.ace_function {\n  color: orange;\n}\n\n/**\n * BOILERPLATE BELOW\n */\n.ace-mongodb .ace_gutter {\nbackground: #f5f6f7;\ncolor: #999999;\n}\n.ace-mongodb  {\n  border: 1px solid #eee;\n  padding: 10px;\n  //background: #f5f6f7;\n  color: #000;\n  font-family: Monaco;\n  \n}\n.ace-mongodb .ace_keyword {\ncolor: #999999;\nfont-weight: normal;\n}\n.ace-mongodb .ace_gutter-cell {\npadding-left: 5px;\npadding-right: 10px;\n}\n.ace-mongodb .ace_string {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_boolean {\ncolor: #5b81a9;\nfont-weight: normal;\n}\n.ace-mongodb .ace_constant.ace_numeric {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_string.ace_regexp {\ncolor: #5b81a9;\n}\n.ace-mongodb .ace_variable.ace_class {\ncolor: teal;\n}\n.ace-mongodb .ace_constant.ace_buildin {\ncolor: #0086B3;\n}\n\n/*\n.ace-mongodb .ace_support.ace_function {\n  color: #0086B3;\n}\n*/\n.ace-mongodb .ace_comment {\ncolor: #998;\nfont-style: italic;\n}\n.ace-mongodb .ace_variable.ace_language  {\ncolor: #0086B3;\n}\n</style>\n\n```html\n<div class=\"ace-mongodb\">\n  <div class=\"ace_layer ace_text-layer\" style=\"padding: 0px 4px;\">\n    <div class=\"ace_line\" style=\"height:15px\">\n      <span class=\"ace_paren ace_lparen\">{</span>\n    </div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">_id</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_constant ace_numeric\"> 0</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">average_cpi</span><span class=\"ace_punctuation ace_operator\">:</span> <span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$avg</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">&nbsp;&nbsp;<span class=\"ace_identifier\">max_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$max</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span>\n      </div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">min_cpi</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$min</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span><span class=\"ace_punctuation ace_operator\">,</span></div>\n    <div class=\"ace_line\" style=\"height:15px\">\n      &nbsp;&nbsp;<span class=\"ace_identifier\">cpi_deviation</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_paren ace_lparen\">{</span><span class=\"ace_support ace_function\">$stdDevPop</span><span class=\"ace_punctuation ace_operator\">:</span><span class=\"ace_string ace_quasi ace_start\">\"</span><span class=\"ace_variable ace_language\">$trends.icecream_cpi</span><span class=\"ace_string ace_quasi ace_end\">\"</span><span class=\"ace_paren ace_rparen\">}</span></div>\n    <div class=\"ace_line\" style=\"height:15px\"><span class=\"ace_paren ace_rparen\">}</span>\n    </div>\n  </div>\n</div>\n```\n\n[npm_img]: https://img.shields.io/npm/v/mongodb-ace-mode.svg?style=flat-square\n[npm_url]: https://www.npmjs.org/package/mongodb-ace-mode\n","gitHead":"4216a27cdf41425fff35938bb42040bb93c2d246","scripts":{"check":"npm run depcheck","depcheck":"depcheck"},"_npmUser":{"name":"mcasimir","email":"maurizio.cas@gmail.com"},"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.17.0+x64 (linux)","description":"MongoDB Mode for the ACE Editor","directories":{},"_nodeVersion":"16.17.0","compass:main":"index.js","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"depcheck":"^1.4.1","mongodb-ace-autocompleter":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/mongodb-ace-mode_0.0.0-next-4216a27cdf41425fff35938bb42040bb93c2d246_1665172809662_0.5508194510936113","host":"s3://npm-registry-packages"}}},"time":{"created":"2018-01-22T14:05:20.784Z","modified":"2026-07-15T15:35:06.369Z","0.0.1":"2018-01-22T14:05:20.784Z","0.0.2":"2018-06-15T11:47:33.340Z","0.1.0":"2019-03-06T14:12:33.165Z","0.2.0":"2019-03-06T21:47:37.286Z","0.2.1":"2019-03-26T18:15:20.200Z","0.2.2":"2019-04-02T14:15:20.674Z","0.3.0":"2019-04-02T17:32:00.767Z","0.4.0":"2019-08-19T11:54:34.722Z","0.4.1":"2019-09-21T14:51:37.971Z","0.5.0":"2021-05-26T17:41:19.216Z","0.5.1":"2021-05-27T14:00:53.533Z","1.0.0":"2021-06-03T16:53:22.897Z","1.1.0":"2021-06-16T17:37:38.709Z","1.2.0":"2021-06-28T08:49:03.349Z","1.2.1":"2021-08-05T11:58:01.114Z","1.3.0":"2021-08-11T11:37:24.932Z","1.4.0":"2021-11-19T11:08:45.037Z","1.5.0":"2021-12-21T14:13:47.052Z","1.6.0":"2022-02-25T14:09:23.660Z","1.7.0":"2022-04-27T16:30:35.734Z","1.8.0":"2022-06-27T07:47:44.195Z","2.0.0":"2022-08-09T13:25:29.241Z","2.0.1":"2022-09-22T15:14:03.890Z","0.0.0-experimental-1c53312ce4905234885618d41ae95fde9c21aa18":"2022-09-26T13:16:55.988Z","0.0.0-next-e30a9e850a8a66b70770fbf6658a3e35cf1ff8b8":"2022-09-26T14:07:15.086Z","0.0.0-next-25b11de63d51aa4ca7fda0f3eae67999e3418ca5":"2022-09-28T16:53:53.417Z","0.0.0-next-dfa464112f63969f158bde32322e393fa2b77940":"2022-09-28T22:05:20.800Z","0.0.0-next-e42d58083be39ce9f112e6ec7f9fd1fdcb666e3e":"2022-09-29T16:07:27.602Z","0.0.0-next-5f69e8129e0242b4e507fee055188a8a83e1f1c1":"2022-10-05T11:10:45.450Z","0.0.0-next-823f55a862f13d28437b87fb594450b2208c0d4f":"2022-10-05T16:14:52.823Z","0.0.0-next-01a3ac56d52443bc859ccdcf7ed301ffbdea7a47":"2022-10-06T09:46:44.366Z","0.0.0-next-cd3c5c1303c464ef7900dc08adb8154d15c7f3a9":"2022-10-06T14:43:57.828Z","0.0.0-next-d9691f3c8230e21aeb2817ac2c984aba0d79f09c":"2022-10-07T19:44:30.803Z","0.0.0-next-1cb9ea1724d90e58422b33fe089df5b774e0be10":"2022-10-07T19:49:23.027Z","0.0.0-next-fcba5cfd8dce9be8022f245fef7a84f29a1cdcdd":"2022-10-07T19:51:32.390Z","0.0.0-next-4216a27cdf41425fff35938bb42040bb93c2d246":"2022-10-07T20:00:09.878Z"},"bugs":{"url":"https://jira.mongodb.org/projects/COMPASS/issues","email":"compass@mongodb.com"},"author":{"name":"Anna Herlihy","email":"anna@mongodb.com"},"license":"SSPL","homepage":"https://github.com/mongodb-js/compass","keywords":["MongoDB","ACE"],"repository":{"url":"git+https://github.com/mongodb-js/compass.git","type":"git"},"description":"MongoDB Mode for the ACE Editor","maintainers":[{"email":"satya@mongodb.com","name":"satyasinha"},{"email":"kristina.stefanova@mongodb.com","name":"kristina.stefano"},{"email":"nathan.smyth@10gen.com","name":"jarjee"},{"email":"iteng@mongodb.com","name":"devtoolsbot"},{"email":"james.wang@mongodb.com","name":"mongo-j"},{"email":"neal.beeken@mongodb.com","name":"nbbeeken"},{"email":"dbx-node@mongodb.com","name":"dbx-node"},{"email":"devtools-npm-user@mongodb.com","name":"devtools-npm-user"},{"email":"anna@mongodb.com","name":"aherlihy"}],"readme":"","readmeFilename":""}