{"_id":"notation","_rev":"14-827d2febef9b21c07b939c68ae5c2c12","name":"notation","dist-tags":{"latest":"3.0.1"},"versions":{"1.0.0":{"name":"notation","version":"1.0.0","keywords":["object","notation","property","glob","enumerable","parse"],"author":{"name":"Onur Yıldırım","email":"onur@cutepilot.com"},"license":"MIT","_id":"notation@1.0.0","maintainers":[{"name":"onury","email":"onur@cutepilot.com"}],"homepage":"https://github.com/onury/notation#readme","bugs":{"url":"https://github.com/onury/notation/issues"},"dist":{"shasum":"270bbb4e76d1ef9adb5623ab1d911c00d20f0061","tarball":"https://registry.npmjs.org/notation/-/notation-1.0.0.tgz","integrity":"sha512-+lwwcJvXkIVRJkEWF2uJapFgMu7MFciuATPC2CfAVKoXsmpXUyBAO40eTFq4Mr0kDjdJh+AdxGDeoheOWhWqhw==","signatures":[{"sig":"MEYCIQC8Jo4u38DoEHEjYiRAwQ1DdB/03JwHzR8qzSyVNhAsegIhAIjFdmB7OVl0SWwl7yUHOgDYFPyA18O9q9z8crciC60j","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"dist/notation.js","_from":".","_shasum":"270bbb4e76d1ef9adb5623ab1d911c00d20f0061","gitHead":"601c2ee794628e343d718bbc4ffd2a6b65617fa9","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"onury","email":"onur@cutepilot.com"},"repository":{"url":"git+https://github.com/onury/notation.git","type":"git"},"_npmVersion":"2.15.1","description":"Utility for modifying / processing the contents of Javascript objects by parsing object notation strings or globs.","directories":{},"_nodeVersion":"4.4.3","devDependencies":{"babel":"^6.5.2","grunt":"^1.0.1","eslint":"^2.9.0","lodash":"^4.11.2","webpack":"^1.13.0","matchdep":"^1.0.1","babel-core":"^6.8.0","babel-loader":"^6.2.4","grunt-webpack":"^1.0.11","eslint-config-xo":"^0.14.1","webpack-dev-server":"^1.14.1","babel-preset-es2015":"^6.6.0","grunt-contrib-watch":"^1.0.0","grunt-jasmine-nodejs":"^1.5.2"},"_npmOperationalInternal":{"tmp":"tmp/notation-1.0.0.tgz_1462499232488_0.0876795647200197","host":"packages-12-west.internal.npmjs.com"}},"1.1.0":{"name":"notation","version":"1.1.0","keywords":["object","notation","dot-notation","property","glob","pointer","enumerable","template","placeholder","data","value","parse","build"],"author":{"name":"Onur Yıldırım","email":"onur@cutepilot.com"},"license":"MIT","_id":"notation@1.1.0","maintainers":[{"name":"onury","email":"onur@cutepilot.com"}],"homepage":"https://github.com/onury/notation#readme","bugs":{"url":"https://github.com/onury/notation/issues"},"dist":{"shasum":"f706d0d7b3e671ecaea8612040d5ed876cafcbc0","tarball":"https://registry.npmjs.org/notation/-/notation-1.1.0.tgz","integrity":"sha512-FFeiXPtCA74Xqwv/Ekg+4KgeDF8jxTNRjzeKBxUCw7nPn9G6q1Ov23fqDk4i5o3FvXQi3RfE+sZZyN736jk65Q==","signatures":[{"sig":"MEQCIG/MxQPdrB1cTNe0LO8fWo7/2CqVvbGIDB3Fc2fK4d/LAiAl1rfMeYcR6qd1yJT175ig7vxRJNlfvh8ir8uSJfNUdA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"dist/notation.min.js","_from":".","files":["dist","LICENSE"],"_shasum":"f706d0d7b3e671ecaea8612040d5ed876cafcbc0","gitHead":"28c941430848f463325577df632ba80ba3bff85e","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"onury","email":"onur@cutepilot.com"},"repository":{"url":"git+https://github.com/onury/notation.git","type":"git"},"_npmVersion":"3.10.5","description":"Utility for modifying / processing the contents of Javascript objects by parsing object notation strings or globs.","directories":{},"_nodeVersion":"4.4.7","dependencies":{},"devDependencies":{"babel":"^6.5.2","grunt":"^1.0.1","eslint":"^2.9.0","lodash":"^4.11.2","webpack":"^1.13.0","matchdep":"^1.0.1","babel-core":"^6.8.0","grunt-docma":"^0.6.4","babel-loader":"^6.2.4","grunt-webpack":"^1.0.11","eslint-config-xo":"^0.14.1","webpack-dev-server":"^1.14.1","babel-preset-es2015":"^6.6.0","grunt-contrib-watch":"^1.0.0","grunt-jasmine-nodejs":"^1.5.2"},"_npmOperationalInternal":{"tmp":"tmp/notation-1.1.0.tgz_1474934135773_0.6494432343170047","host":"packages-16-east.internal.npmjs.com"}},"1.3.0":{"name":"notation","version":"1.3.0","keywords":["object","notation","dot-notation","property","glob","pointer","enumerable","template","placeholder","data","value","parse","build"],"author":{"name":"Onur Yıldırım","email":"onur@cutepilot.com"},"license":"MIT","_id":"notation@1.3.0","maintainers":[{"name":"onury","email":"onur@cutepilot.com"}],"homepage":"https://github.com/onury/notation#readme","bugs":{"url":"https://github.com/onury/notation/issues"},"dist":{"shasum":"ab14da68f13e6aaa0ce20b2ea939fb25ea709201","tarball":"https://registry.npmjs.org/notation/-/notation-1.3.0.tgz","integrity":"sha512-oDNhgkdMe/J+HOvElPISqwWDAXCxvoK85S7DINIWjOK14CY+KfLNA2Pq7GDA7X4l7vNYyzxUlQ7tqCVzVgAvog==","signatures":[{"sig":"MEUCIHs5HWN0yvStj+JAOApbwqwCx9K65+AP6Bv74DisNPccAiEA9u+AoVHrjEURiyYSvZD1WmqhP15aLTdBCSVbM6WawOg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/notation.min.js","files":["lib","LICENSE"],"gitHead":"001b7f8a7f697a5eee7cc9156d0822faa89a4ed6","scripts":{"dev":"npm run build:nomin && npm run test","docs":"docma -c ./docma.config.json","test":"npm run build && node test","build":"npm run build:min && npm run build:nomin","watch":"webpack --env.WEBPACK_OUT=nomin --progress --colors --watch","release":"npm run build && node test && npm run docs","build:min":"webpack --env.WEBPACK_OUT=minified --progress --colors","build:nomin":"webpack --env.WEBPACK_OUT=nomin --progress --colors"},"_npmUser":{"name":"onury","email":"onur@cutepilot.com"},"repository":{"url":"git+https://github.com/onury/notation.git","type":"git"},"_npmVersion":"5.4.2","description":"Utility for modifying / processing the contents of Javascript objects by object notation strings or globs.","directories":{},"_nodeVersion":"6.11.2","dependencies":{},"devDependencies":{"babel":"^6.5.2","lodash":"^4.17.4","jasmine":"^2.8.0","webpack":"^3.6.0","babel-core":"^6.8.0","babel-loader":"^7.1.2","webpack-dev-server":"^2.8.2","babel-preset-es2015":"^6.6.0","jasmine-console-reporter":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notation-1.3.0.tgz_1506739220377_0.2967367894016206","host":"s3://npm-registry-packages"}},"1.3.5":{"name":"notation","version":"1.3.5","keywords":["object","notation","dot-notation","property","glob","pointer","enumerable","template","placeholder","data","value","parse","build"],"author":{"name":"Onur Yıldırım","email":"onur@cutepilot.com"},"license":"MIT","_id":"notation@1.3.5","maintainers":[{"name":"onury","email":"onur@cutepilot.com"}],"homepage":"https://github.com/onury/notation#readme","bugs":{"url":"https://github.com/onury/notation/issues"},"dist":{"shasum":"a479b4dcbcd5e171fd2e270bc482ec80aa4a410b","tarball":"https://registry.npmjs.org/notation/-/notation-1.3.5.tgz","integrity":"sha512-PsW/+ahTzvRFT4ao468DS4mY+nehiPIqHz2BGWXuOTE16LrRX4XQyremx6i6K4Oi0t2T6o0YAtMNsN7MjSe2KA==","signatures":[{"sig":"MEQCIDIhgTVtXiJAeq8/b5FpiN33o/y39+xX8pl5RgUp6uABAiAQFjO/xXn1IQPiLibJhOO193DADQqCoXhdtUQb4ispbw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/notation.min.js","files":["lib","LICENSE"],"gitHead":"45c950b0709d52e052294d9c856cf860831f3580","scripts":{"dev":"npm run build && node test","docs":"docma -c ./docma.config.json","test":"npm run build:nomin && node test","build":"npm run build:min && npm run build:nomin","watch":"webpack --env.WEBPACK_OUT=nomin --progress --colors --watch","release":"npm run build && node test && npm run docs","build:min":"webpack --env.WEBPACK_OUT=minified --progress --colors","build:nomin":"webpack --env.WEBPACK_OUT=nomin --progress --colors"},"_npmUser":{"name":"onury","email":"onur@cutepilot.com"},"repository":{"url":"git+https://github.com/onury/notation.git","type":"git"},"_npmVersion":"5.4.2","description":"Utility for modifying / processing the contents of Javascript objects by object notation strings or globs.","directories":{},"_nodeVersion":"6.11.2","dependencies":{},"devDependencies":{"babel":"^6.5.2","lodash":"^4.17.4","jasmine":"^2.8.0","webpack":"^3.6.0","babel-core":"^6.8.0","babel-loader":"^7.1.2","webpack-dev-server":"^2.8.2","babel-preset-es2015":"^6.6.0","jasmine-console-reporter":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notation-1.3.5.tgz_1507080895074_0.7568061512429267","host":"s3://npm-registry-packages"}},"1.3.6":{"name":"notation","version":"1.3.6","keywords":["object","notation","dot-notation","property","glob","pointer","enumerable","template","placeholder","data","value","parse","build"],"author":{"name":"Onur Yıldırım","email":"onur@cutepilot.com"},"license":"MIT","_id":"notation@1.3.6","maintainers":[{"name":"onury","email":"onur@cutepilot.com"}],"homepage":"https://github.com/onury/notation#readme","bugs":{"url":"https://github.com/onury/notation/issues"},"dist":{"shasum":"bc87b88d1f1159e2931e7f9317a3020313790321","tarball":"https://registry.npmjs.org/notation/-/notation-1.3.6.tgz","fileCount":8,"integrity":"sha512-DIuJmrP/Gg1DcXKaApsqcjsJD6jEccqKSfmU3BUx/f1GHsMiTJh70cERwYc64tOmTRTARCeMwkqNNzjh3AHhiw==","signatures":[{"sig":"MEQCIFtkgbWFdUahVSjhtv3J9WUN7wpJKDdCpG1abcWX4YLoAiB7/I9CsQXorHVQuye0aC98HKgWH80fDl+5VD8qN8Va3Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":396003},"main":"lib/notation.min.js","files":["lib","LICENSE"],"gitHead":"a2939fbf6a51663fa4fad4c631b20678585da4c6","scripts":{"dev":"npm run build && node test","docs":"docma -c ./docma.config.json","test":"npm run build:nomin && node test","build":"npm run build:min && npm run build:nomin","watch":"webpack --env.WEBPACK_OUT=nomin --progress --colors --watch","release":"npm run build && node test && npm run docs","build:min":"webpack --env.WEBPACK_OUT=minified --progress --colors","build:nomin":"webpack --env.WEBPACK_OUT=nomin --progress --colors"},"_npmUser":{"name":"onury","email":"onur@cutepilot.com"},"repository":{"url":"git+https://github.com/onury/notation.git","type":"git"},"_npmVersion":"5.6.0","description":"Utility for modifying / processing the contents of Javascript objects by object notation strings or globs.","directories":{},"_nodeVersion":"8.9.3","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"babel":"^6.5.2","lodash":"^4.17.5","jasmine":"^3.0.0","webpack":"^3.11.0","babel-core":"^6.8.0","babel-loader":"^7.1.2","webpack-dev-server":"^2.11.1","babel-preset-es2015":"^6.6.0","jasmine-console-reporter":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/notation_1.3.6_1519442157298_0.16616214994426515","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"notation","version":"2.0.0","keywords":["object","array","notation","dot-notation","property","bracket","glob","pointer","enumerable","template","placeholder","data","value","parse","build"],"author":{"name":"Onur Yıldırım","email":"onur@cutepilot.com"},"license":"MIT","_id":"notation@2.0.0","maintainers":[{"name":"onury","email":"onur@cutepilot.com"}],"homepage":"https://github.com/onury/notation#readme","bugs":{"url":"https://github.com/onury/notation/issues"},"dist":{"shasum":"8897aaf903e328a37b60298de69e6213d685fa85","tarball":"https://registry.npmjs.org/notation/-/notation-2.0.0.tgz","fileCount":9,"integrity":"sha512-7irCcJXENYi2n5PRh/huQvgZ66GMXabtYcOAqSulK/7yAKDa3gNZNDvp4Nydax6Pk1xC9a7UXvkYY9ao3iqb/w==","signatures":[{"sig":"MEUCIQC4IoIuay+li51m3oN/yvQpqnDbqSMsgzNjenzS/cGEpwIgURK4YnynJF6Awro50A4jw9ctG7sBrwU6VHilJUkjLqQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":488025,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUXDtCRA9TVsSAnZWagAA3M8P/36EQjsCcITFJZRHfLM9\n4k1+PnfQ/MK1g1Iamhn7v8urBIXIHUT2TmiI0nJtFk/Y5YhIdlT3IqMPGlFc\nN0WPOjrwLtzveiKVwDTC6U8FSszUXwaBMvVLZd0+3fu0BL0TXq4mIKpUSjc+\nEnY52nq6C6NgTzWJ0fKA+5zUNTzHt9Lc/c1W8cl0rbp/fRJGMM5mMuU6LNPi\n90pGuKXH12UbP1pd2hxL3aGLu1ibBgxgGy/kf5DUcdOc4FIT2i6ThioT/kJR\ncEhsrxnvmBwcT35s6U2z6FJGkCzai+mIGodznmClZy/IvwFVi9XPj04ijHIa\nLq2VqBUxJpYTKi3WzRFIaMOl0KeDQ2M6iNn+qVfyPKt+hq7xl2BOkMooA6Xs\nBZ3s7vbPX5PRBBifXLRHWXeMtX4Mrwpse7u8Hmol9vCQOfKMjcWnT6uOh7rE\n4EubhX36wWdij3vZgFDrigWR4PvBnmac+KErObZCvCePbf+jw/DP84Lwz+qB\nz9A1XLjmzgxEywPXh5kADwWQjXm5pm7UaicgSt9lopZktwKjggLAT0BgIMeM\nJF6E1UTi/uFe7eODpO2FIMH0XV3ZKB1ltN2FjPRFpyDkkAtJEoT7ZqakSZpK\n1OjULR5Ilqdi5n+9P++/WXgGBVaFZ1PVOtvvj4VxgmbKhYuSndxc1YFJHRNg\nXcQ5\r\n=fAtU\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testRegex":"test/.+(test|spec)\\.js$","transform":{"^.+\\.jsx?$":"babel-jest"},"testEnvironment":"node","coverageDirectory":"<rootDir>/test/coverage","collectCoverageFrom":["src/**/*.js","!src/index.js"],"testPathIgnorePatterns":["/backup/","/node_modules/","/test/tmp/","/test/coverage/","/test/config/","/test/data/","/test/helpers/","<rootDir>/lib/"],"transformIgnorePatterns":["/node_modules/","/test/(coverage|helpers|tmp|config|data)/"],"modulePathIgnorePatterns":["/backup/","/coverage/","/test/helpers/","/test/tmp/","/test/config/","/test/data/","<rootDir>/lib/"],"coveragePathIgnorePatterns":["/backup/","/coverage/","/node_modules/","/test/(helpers|tmp|config|data)/"]},"main":"lib/notation.min.js","babel":{"presets":["@babel/preset-env"]},"gitHead":"4b115edbbb6e70843f5435c2340c67193485a6d9","scripts":{"docs":"docma","lint":"eslint ./src","snyk":"snyk test","test":"jest --testPathPattern='test/.+$' --verbose --no-cache --runInBand","build":"npm run build:prod && npm run build:dev","cover":"jest --testPathPattern='test/.+$' --verbose --no-cache --runInBand --coverage","watch":"webpack --env.WEBPACK_OUT=nomin --progress --colors --watch","pretest":"npm run lint","release":"npm run build && npm test && npm run docs","prebuild":"npm run snyk && npm run lint","build:dev":"webpack --mode=development --env.WEBPACK_OUT=development --progress --colors","build:prod":"webpack --mode=production --env.WEBPACK_OUT=production --progress --colors","docs:serve":"docma && docma serve"},"_npmUser":{"name":"onury","email":"onur@cutepilot.com"},"repository":{"url":"git+https://github.com/onury/notation.git","type":"git"},"_npmVersion":"6.14.4","description":"Utility for modifying / processing the contents of Javascript objects or arrays via object notation strings or globs.","directories":{},"_nodeVersion":"10.20.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"snyk":"^1.388.0","eslint":"^7.8.1","lodash":"^4.17.20","webpack":"^4.44.1","jest-cli":"^26.4.2","babel-jest":"^26.3.0","@babel/core":"^7.11.6","webpack-cli":"^3.3.12","babel-eslint":"^10.1.0","babel-loader":"^8.1.0","@babel/preset-env":"^7.11.5","babel-plugin-istanbul":"^6.0.0","uglifyjs-webpack-plugin":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/notation_2.0.0_1599172844764_0.5051952848839976","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"notation","version":"3.0.0","keywords":["object","array","notation","dot-notation","property","bracket","glob","pointer","enumerable","template","placeholder","data","value","parse","build"],"author":{"name":"Onur Yıldırım","email":"onur@cutepilot.com"},"license":"MIT","_id":"notation@3.0.0","maintainers":[{"name":"onury","email":"onur@cutepilot.com"}],"homepage":"https://github.com/onury/notation#readme","bugs":{"url":"https://github.com/onury/notation/issues"},"dist":{"shasum":"d0d7cfd39e910f025d53d9343eea121e1b3f4fc3","tarball":"https://registry.npmjs.org/notation/-/notation-3.0.0.tgz","fileCount":44,"integrity":"sha512-3gmRoJJ91gXa2aKp62fih57Bv+k/VkP+k3k72y7zCJt3fVcFTFPrrfSuJ7r8Z46p4fbLyKfrCmYHquIx+dscvQ==","signatures":[{"sig":"MEUCIHb7sxs19wCvtFSk0i5lmtCjWzFjXu1MkyyzK0R5icGpAiEAxzKAw8DqT2NP1W0+WDnayyOMoJbS+BYZOcqfS0ujok0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265715},"main":"./lib/index.js","type":"module","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"gitHead":"ceb60744a99cf55c7f6742b7a94752e7c9b8d3f0","scripts":{"lint":"biome check src test","test":"vitest run","build":"tsc --project tsconfig.build.json","cover":"vitest run --coverage","format":"biome check --write src test","pretest":"npm run lint","mutation":"stryker run","prepublishOnly":"npm run build"},"_npmUser":{"name":"onury","email":"onur@cutepilot.com"},"repository":{"url":"git+https://github.com/onury/notation.git","type":"git"},"_npmVersion":"10.9.8","description":"Utility for modifying / processing the contents of Javascript objects or arrays via object notation strings or globs.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.3","tsconfig-oy":"^1.1.0","@biomejs/biome":"^2.5.0","@stryker-mutator/core":"^9.6.1","@vitest/coverage-istanbul":"^4.1.8","@stryker-mutator/vitest-runner":"^9.6.1"},"_npmOperationalInternal":{"tmp":"tmp/notation_3.0.0_1781547075597_0.3412985134625752","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"notation","version":"3.0.1","description":"Utility for modifying / processing the contents of Javascript objects or arrays via object notation strings or globs.","homepage":"https://onury.io/notation","repository":{"type":"git","url":"git+https://github.com/onury/notation.git"},"license":"MIT","author":{"name":"Onur Yıldırım","email":"onur@cutepilot.com"},"type":"module","main":"./lib/index.js","module":"./lib/index.js","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"sideEffects":false,"engines":{"node":">=20"},"scripts":{"lint":"biome check src test","format":"biome check --write src test","build":"tsc --project tsconfig.build.json","pretest":"npm run lint","test":"vitest run","cover":"vitest run --coverage","mutation":"stryker run","prepublishOnly":"npm run build"},"keywords":["object","array","notation","dot-notation","property","bracket","glob","pointer","enumerable","template","placeholder","data","value","parse","build"],"devDependencies":{"@biomejs/biome":"^2.5.0","@stryker-mutator/core":"^9.6.1","@stryker-mutator/vitest-runner":"^9.6.1","@types/node":"^25.9.3","@vitest/coverage-istanbul":"^4.1.8","tsconfig-oy":"^1.1.0","typescript":"^6.0.3","vitest":"^4.1.8"},"_id":"notation@3.0.1","gitHead":"1133fad34d7e17880f06e322083bbd3bf49b9de0","bugs":{"url":"https://github.com/onury/notation/issues"},"_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-WxkhFq7Af4yrJyK2uuyiSAn4G+TDZOc92Ld+btzqL322AvMIPBJg61uKf172zVEMKURprtE3mNUbMlA85QTaTA==","shasum":"5db05f2ec94244625f381cb23a477cd0c8b93739","tarball":"https://registry.npmjs.org/notation/-/notation-3.0.1.tgz","fileCount":44,"unpackedSize":266331,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID+2roYGEn4BX0yv5dQsq5WlanaArQ+KWzgIHpmPuYqPAiEAxMWoWdArHVjEmN9ccNvZyOR+Ceq29pIRjyDQjiEmttw="}]},"_npmUser":{"name":"onury","email":"onur@cutepilot.com"},"directories":{},"maintainers":[{"name":"onury","email":"onur@cutepilot.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/notation_3.0.1_1782253107744_0.43212224958996504"},"_hasShrinkwrap":false}},"time":{"created":"2016-05-06T01:47:15.293Z","modified":"2026-06-23T22:18:28.035Z","1.0.0":"2016-05-06T01:47:15.293Z","1.1.0":"2016-09-26T23:55:37.222Z","1.3.0":"2017-09-30T02:40:21.571Z","1.3.5":"2017-10-04T01:34:56.283Z","1.3.6":"2018-02-24T03:15:57.385Z","2.0.0":"2020-09-03T22:40:44.892Z","3.0.0":"2026-06-15T18:11:15.752Z","3.0.1":"2026-06-23T22:18:27.902Z"},"bugs":{"url":"https://github.com/onury/notation/issues"},"author":{"name":"Onur Yıldırım","email":"onur@cutepilot.com"},"license":"MIT","homepage":"https://onury.io/notation","keywords":["object","array","notation","dot-notation","property","bracket","glob","pointer","enumerable","template","placeholder","data","value","parse","build"],"repository":{"type":"git","url":"git+https://github.com/onury/notation.git"},"description":"Utility for modifying / processing the contents of Javascript objects or arrays via object notation strings or globs.","maintainers":[{"name":"onury","email":"onur@cutepilot.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://github.com/onury/notation\"><img src=\"https://raw.githubusercontent.com/onury/notation/master/notation-logo.svg\" width=\"420\" alt=\"Notation.js\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/onury/notation/actions/workflows/ci.yml\"><img src=\"https://github.com/onury/notation/actions/workflows/ci.yml/badge.svg\" alt=\"build\" /></a>\n  <a href=\"#quality\"><img src=\"https://img.shields.io/badge/coverage-100%25-2BB150?logo=vitest&logoColor=%23FDC72B&style=flat\" alt=\"coverage\" /></a>\n  <a href=\"https://stryker-mutator.io/docs/\"><img src=\"https://img.shields.io/badge/mutation-84%25-2BB150?style=flat\" alt=\"mutation score\" /></a>\n  <a href=\"https://www.npmjs.com/package/notation\"><img src=\"https://img.shields.io/npm/v/notation.svg?style=flat&label=&color=%23C6234B&logo=npm\" alt=\"version\" /></a>\n  <a href=\"https://gist.github.com/onury/d3f3d765d7db2e8b2d050d14315f2ac7\"><img src=\"https://img.shields.io/badge/ESM-F7DF1E?style=flat\" alt=\"ESM\" /></a>\n  <a href=\"https://www.typescriptlang.org/\"><img src=\"https://img.shields.io/badge/TS-3260C7?style=flat\" alt=\"TS\" /></a>\n  <a href=\"https://github.com/onury/notation/blob/master/LICENSE\"><img src=\"https://img.shields.io/npm/l/notation.svg?style=flat&color=blue\" alt=\"license\" /></a>\n  <a href=\"https://onury.io/notation\"><img src=\"https://img.shields.io/badge/docs-read-c27cf4?style=flat\" alt=\"documentation\" /></a>\n</p>\n\n**Important**: This module is **ESM** 🔆. Please [**read this**](https://gist.github.com/onury/d3f3d765d7db2e8b2d050d14315f2ac7).\n\n> © 2026, Onur Yıldırım ([@onury](https://github.com/onury)). MIT License.\n\nA utility for reading, modifying, and filtering the contents of JavaScript objects and arrays — using object/bracket **notation** strings or **glob** patterns.\n\n```js\nNotation.create({ x: 1 }).set('some.prop', true).filter(['*.prop']).value\n// { some: { prop: true } }\n```\n\n> _This library is intended for **data objects** with enumerable properties. It does **not** preserve an object's prototype chain, and does not support objects with circular references._\n\n## Table of Contents\n- [Usage](#usage)\n- [Notation](#notation)\n- [Glob Notation](#glob-notation)\n- [Filtering Data with Glob patterns](#filtering-data-with-glob-patterns)\n- [Object and Bracket Notation Syntax](#object-and-bracket-notation-syntax)\n- [Globs and Data Integrity](#globs-and-data-integrity)\n- [Source Object Mutation](#source-object-mutation)\n- [Documentation](#documentation)\n- [Quality](#quality)\n\n## Usage\n\nInstall via **NPM**:\n\n```sh\nnpm i notation\n```\n\n```js\nimport { Notation } from 'notation';\n```\n\n\n## Notation\n`Notation` is a class for modifying or inspecting the contents (property keys and values) of a data object or array.\n\nWhen **reading or inspecting** an **enumerable** property value such as `obj.very.deep.prop`; with pure JS, you would have to do several checks:\n```js\nif (obj \n        && obj.hasOwnProperty('very') \n        && obj.very.hasOwnProperty('deep')  \n        && obj.very.deep.hasOwnProperty('prop')\n    ) {\n    return obj.very.deep.prop === undefined ? defaultValue : obj.very.deep.prop;\n}\n```\nWith `Notation`, you can do this:\n```js\nconst notate = Notation.create;\nreturn notate(obj).get('very.deep.prop', defaultValue);\n```\nYou can also **inspect & get** the value:\n```js\nconsole.log(notate(obj).inspectGet('very.deep.prop'));\n// {\n//     notation: 'very.deep.prop',\n//     has: true,\n//     value: 'some value',\n//     type: 'string',\n//     level: 3,\n//     lastNote: 'prop'\n// }\n```\n\nTo **modify** or **build** a data object:\n\n```js\nconst notate = Notation.create;\nconst obj = { car: { brand: \"Dodge\", model: \"Charger\" }, dog: { breed: \"Akita\" } };\nnotate(obj)                          // initialize. equivalent to `new Notation(obj)`\n    .set('car.color', 'red')         // { car: { brand: \"Dodge\", model: \"Charger\", color: \"red\" }, dog: { breed: \"Akita\" } }\n    .remove('car.model')             // { car: { brand: \"Dodge\", color: \"red\" }, dog: { breed: \"Akita\" } }\n    .filter(['*', '!car'])           // { dog: { breed: \"Akita\" } } // equivalent to .filter(['dog'])\n    .flatten()                       // { \"dog.breed\": \"Akita\" }\n    .expand()                        // { dog: { breed: \"Akita\" } }\n    .merge({ 'dog.color': 'white' }) // { dog: { breed: \"Akita\", color: \"white\" } }\n    .copyFrom(other, 'boat.name')    // { dog: { breed: \"Akita\", color: \"white\" }, boat: { name: \"Mojo\" } }\n    .rename('boat.name', 'dog.name') // { dog: { breed: \"Akita\", color: \"white\", name: \"Mojo\" } }\n    .value;                          // result object ^\n```\nSee the [documentation][docs] for more...\n\n## Glob Notation\n\nWith a glob-notation, you can use wildcard stars `*` and bang `!` prefix. A wildcard star will include all the properties at that level and a bang prefix negates that notation for exclusion.\n\n- Only **`Notation#filter()`** method accepts glob notations. Regular notations (without any wildcard `*` or `!` prefix) should be used with all other members of the **`Notation`** class.\n- For raw Glob operations, you can use the **`NotationGlob`** class.\n\n### Normalizing a glob notation list\n\nRemoves duplicates, redundant items and logically sorts the array:\n```js\nimport { NotationGlob } from 'notation';\n\nconst globs = ['*', '!id', 'name', 'car.model', '!car.*', 'id', 'name', 'age'];\nconsole.log(NotationGlob.normalize(globs));\n// ——» ['*', '!car.*', '!id', 'car.model']\n```\n\nIn the normalized result `['*', '!car.*', '!id', 'car.model']`:\n- `id` is removed and `!id` (negated version) is kept. (In normalization, negated always wins over the positive, if both are same).\n- Duplicate glob, `name` is removed. The remaining `name` is also removed bec. `*` renders it redundant; which covers all possible notations.\n- (In non-restrictive mode) `car.model` is kept (although `*` matches it) bec. it's explicitly defined while we have a negated glob that also matches it: `!car.*`.\n\n```js\nconsole.log(NotationGlob.normalize(globs, { restrictive: true }));\n// ——» ['*', '!car.*', '!id']\n```\n- In restrictive mode, negated removes every match.\n\n> _**Note**: `Notation#filter()` and `NotationGlob.union()` methods automatically pre-normalize the given glob list(s)._\n\n### Union of two glob notation lists\n\nUnites two glob arrays optimistically and sorts the result array logically:\n```js\nconst globsA = ['*', '!car.model', 'car.brand', '!*.age'];\nconst globsB = ['car.model', 'user.age', 'user.name'];\nconst union = NotationGlob.union(globsA, globsB); \nconsole.log(union);\n// ——» ['*', '!*.age', 'user.age']\n```\nIn the united result `['*', '!*.age', 'user.age']`:\n- (negated) `!car.model` of `globsA` is removed because `globsB` has the exact positive version of it. (In union, positive wins over the negated, if both are same.) \n- But then, `car.model` is redundant and removed bec. we have `*` wildcard, which covers all possible non-negated notations. \n- Same applies to other redundant globs except `user.age` bec. we have a `!*.age` in `globsA`, which matches `user.age`. So both are kept in the final array.\n\n## Filtering Data with Glob patterns\n\nWhen filtering a data object with a globs array; properties that are explicitly defined with globs or implied with wildcards, will be included. Any matching negated-pattern will be excluded. The resulting object is created from scratch without mutating the original.\n```js\nconst data = {\n    car: {\n        brand: 'Ford',\n        model: 'Mustang',\n        age: 52\n    },\n    user: {\n        name: 'John',\n        age: 40\n    }\n};\nconst globs = ['*', '!*.age', 'user.age'];\nconst filtered = Notation.create(data).filter(globs).value;\nconsole.log(filtered);\n// ——»\n// {\n//     car: {\n//         brand: 'Ford',\n//         model: 'Mustang'\n//     },\n//     user: {\n//         name: 'John',\n//         age: 40\n//     }\n// }\n```\n\nIn **non**-restrictive mode; even though we have the `!*.age` negated glob; `user.age` is still included in the result because it's explicitly defined. \n\nBut you can also do **restrictive** filtering. Let's take the same example:\n```js\nconst globs = ['*', '!*.age', 'user.age'];\nconst filtered = Notation.create(data).filter(globs, { restrictive: true }).value;\nconsole.log(filtered);\n// ——»\n// {\n//     car: {\n//         brand: 'Ford',\n//         model: 'Mustang'\n//     },\n//     user: {\n//         name: 'John'\n//     }\n// }\n```\nNote that in restrictive mode, `user.age` is removed this time; due to `!*.age` pattern.\n\n## Object and Bracket Notation Syntax\n\nEach note (level) of a notation is validated against **EcmaScript variable syntax**, array index notation and object bracket notation.\n\n### Property Keys\n- `x[y]`, `x.1`, `x.y-z`, `x.@` are **incorrect** and will never match. \n- `x[\"y\"]`, `x['1']`, `x[\"y-z\"]`, `x['@']` are **correct** object bracket notations. \n\n### Array Indexes\n- `[0].x` indicates `x` property of the first item of the **root array**.\n- `x[1]` indicates second item of `x` property of the **root object**.\n\n### Wildcards\n- `*` is valid **wildcard** for **glob** notation. Indicates all properties of an object.\n- `[*]` is valid **wildcard** for **glob** notation. Indicates all items of an array.\n- `x[*]` is valid **wildcard** for **glob** notation. Indicates all items of `x` property which should be an array.\n- `x['*']` just indicates a property/key (star), not a wildcard. Valid **regular** notation.\n- `x.*` is valid **wildcard** for **glob** notation.\n- `x`, `x.*` and `x.*.*` (and so on) are all **equivalent globs**. All normalize to `x`.\n- **Negated** versions are **NOT** equivalent. \n  - `!x` indicates removal of `x`.\n  - `!x.*` only indicates removal of all first-level properties of `x` but not itself (empty object).\n  - `!x.*.*` only indicates removal of all second-level properties of `x`; but not itself and its first-level properties (`x.*`).\n  - Same rule applies for bracket notation or mixed notations. \n    - `[0]` = `[0][*]` but `![0]` ≠ `![0][*]`\n    - `x` = `x[*]` but `!x` ≠ `!x[*]`\n    - `[*]` = `[*].*` but `![*]` ≠ `![*].*`\n\n### Example\nBelow, we filter to; \n- keep all properties of the source object,\n- remove the second item of `colors` property (which is an array),\n- and empty `my-colors` property (which is an object).\n```js\nconst source = {\n    name: 'Jack',\n    colors: ['blue', 'green', 'red'],\n    'my-colors': { '1': 'yellow' }     // non-standard name \"my-colors\"\n};\nconst globs = ['*', '!colors[1]', '![\"my-colors\"].*'];\nconsole.log(Notation.create(source).filter(globs).value);\n// —» \n// {\n//     name: 'Jack',\n//     colors: ['blue', 'red'],\n//     'my-colors': {}\n// }\n```\nIn the example above, `colors` item at index 1 is emptied.\n\n## Globs and Data Integrity\n\n### Glob List Integrity\nIn a glob list, you cannot have both object and array notations for **root level**. The root level implies the source type which is either an object or array; never both.\n\nFor example, `['[*]', '!x.y']` will throw because when you filter a source array with this glob list; `!x.y` will never match since the root `x` indicates an object property (e.g. `source.x`).\n\n### Glob vs Data (Value) Integrity\nEach glob you use should conform with the given source object.\n\nFor example:\n```js\nconst obj = { x: { y: 1 } };\nconst globs = ['*', '!x.*'];\nconsole.log(Notation.create(obj).filter(globs).value);\n// ——» { x: {} }\n```\nHere, we used `!x.*` negated glob to remove all the properties of `x` but not itself. So the result object has an `x` property with an empty object as its value. All good.\n\nBut in the source object; if the actual value of `x` is not an object, using the same glob list would throw:\n```js\nconst obj = { x: 1 }; // x is number\nconst globs = ['*', '!x.*'];\nconsole.log(Notation.create(obj).filter(globs).value);\n// ——» ERROR\n```\nThis kind of type mismatch is critical so it will throw. The value `1` is a `Number` not an object, so it cannot be emptied with `!x.*`. (But we could have removed it instead, with glob `!x`.)\n\n## Source Object Mutation\n\nThe source object or array will be mutated by default (except the `#filter()` method). To prevent mutation; you can call `#clone()` method before calling any method that modifies the object. The source object will be cloned deeply.\n\n```js\nconst notate = Notation.create;\n\nconst mutated = notate(source1).set('newProp', true).value;\nconsole.log(source1.newProp); // ——» true\n\nconst cloned = notate(source2).clone().set('newProp', true).value;\nconsole.log('newProp' in source2); // ——» false\nconsole.log(cloned.newProp); // ——» true\n```\n\n> _Note that `Notation` expects a data object (or array) with enumerable properties. In addition to plain objects and arrays; supported cloneable property/value types are primitives (such as `String`, `Number`, `Boolean`, `Symbol`, `null` and `undefined`) and built-in types (such as `Date` and `RegExp`)._ \n> \n> _Enumerable properties with types other than these (such as methods, special objects, custom class instances, etc) will be copied by reference. Non-enumerable properties will not be cloned._\n> \n> _If you still need full clone support, you can use a library like lodash. e.g. `Notation.create(_.cloneDeep(source))`_\n\n## Documentation\n\nRead the full [**documentation**][docs] — guides, concepts and the API reference. For what changed in v3, see the [change log](#change-log).\n\n## Change-Log\n\nRead the [CHANGELOG][changelog].\n\n## Quality\n\n- **100% test coverage** (statements, branches, functions, lines) — enforced via\n  Vitest thresholds. Run `npm run cover`.\n- **~84% mutation score** via [StrykerJS](https://stryker-mutator.io/). Run\n  `npm run mutation`.\n\n[Mutation testing](https://stryker-mutator.io/docs/) goes beyond coverage: it\nmakes hundreds of small edits (\"mutants\") to the source — flipping `>` to `>=`,\n`&&` to `||`, returning `undefined`, etc. — and checks that a test **fails** for\neach. It catches tests that *execute* code without actually *asserting* its\nbehavior (the trap where `function getPositive(x){ return x }` reaches 100%\ncoverage but verifies nothing). Most of the surviving mutants here are\n[equivalent mutants](https://stryker-mutator.io/docs/mutation-testing-elements/equivalent-mutants/)\nin the glob normalization/cover/union logic — redundant-but-harmless branches\nthat produce identical results — plus environment-defensive guards. These can't\nbe killed by definition, so the realistic, healthy target is a high score, not\n100%.\n\n## License\n\n[**MIT**](https://github.com/onury/notation/blob/master/LICENSE).\n\n[docs]:https://onury.io/notation\n[changelog]:https://github.com/onury/notation/blob/master/CHANGELOG.md\n","readmeFilename":"README.md","users":{"rocket0191":true,"kodekracker":true}}