{"_id":"lino-env","_rev":"6-0fcbfbb7bf3565d05221890397451bc0","name":"lino-env","dist-tags":{"latest":"0.2.8"},"versions":{"0.2.0":{"name":"lino-env","version":"0.2.0","keywords":["lino","env","environment","links-notation","config"],"author":{"name":"link-foundation"},"license":"Unlicense","_id":"lino-env@0.2.0","maintainers":[{"name":"konard","email":"drakonard@gmail.com"}],"homepage":"https://github.com/link-foundation/lino-env#readme","bugs":{"url":"https://github.com/link-foundation/lino-env/issues"},"dist":{"shasum":"8c32f253a30e488659a0e7b54e3311fab5249b60","tarball":"https://registry.npmjs.org/lino-env/-/lino-env-0.2.0.tgz","fileCount":25,"integrity":"sha512-DxygbkDWT3UDMFbzepI97DGOIGN1sApu4VOrovuKiooADBAHnajIRzwulrja9zbRTDeijTk2Tfgz9p2U9fBN+Q==","signatures":[{"sig":"MEYCIQDqSvnbpTpp3mByoJTA/l1bm36zXIszz+UaHrvgbgTuFgIhALAV8EmZJCd9rVkczOz6cg5nI0tq4weq5CbYy0MzZ4Gq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53934},"main":"src/lino-env.mjs","type":"module","exports":{".":"./src/lino-env.mjs"},"gitHead":"1acabb6ba7fbd3f7fdeef46f2612d13f2f884e98","scripts":{"lint":"eslint .","test":"NODE_OPTIONS=\"--experimental-vm-modules\" jest","check":"npm run lint && npm run format:check && npm run check:file-size","format":"prettier --write .","prepare":"husky || true","lint:fix":"eslint . --fix","changeset":"changeset","format:check":"prettier --check .","check:file-size":"node scripts/check-file-size.mjs","changeset:status":"changeset status --since=origin/main","changeset:publish":"changeset publish","changeset:version":"node scripts/changeset-version.mjs"},"_npmUser":{"name":"konard","email":"drakonard@gmail.com"},"repository":{"url":"git+https://github.com/link-foundation/lino-env.git","type":"git"},"_npmVersion":"11.5.2","description":"A JavaScript library to operate .lenv files","directories":{},"lint-staged":{"*.{js,mjs,cjs}":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.4","dependencies":{"links-notation":"^0.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.1.7","eslint":"^9.38.0","prettier":"^3.6.2","babel-jest":"^29.7.0","lint-staged":"^16.2.6","@changesets/cli":"^2.29.7","@babel/preset-env":"^7.28.3","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/lino-env_0.2.0_1763156397687_0.9319347393397812","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"lino-env","version":"0.2.4","keywords":["lino","env","environment","links-notation","config"],"author":{"name":"link-foundation"},"license":"Unlicense","_id":"lino-env@0.2.4","maintainers":[{"name":"konard","email":"drakonard@gmail.com"}],"homepage":"https://github.com/link-foundation/lino-env#readme","bugs":{"url":"https://github.com/link-foundation/lino-env/issues"},"dist":{"shasum":"54eaaaf0ae4ddd9c864543e8db2b14c24e959e1f","tarball":"https://registry.npmjs.org/lino-env/-/lino-env-0.2.4.tgz","fileCount":27,"integrity":"sha512-grE4P4VNuec6b2ERmFKq4k2vAyIOwbsEQdknwW9sULOMkZ7QRLOhVgMdyR/h1r2sJHjrkbLkKDJLX+eCH1OoHA==","signatures":[{"sig":"MEUCIQCbuI30GHSM5aWoZydk/nAzGSJ5fz9bg4LNMdUNrT0uzAIgbBpBCmWoV1MXEeWSeIecXGeMJzTSukMs/HHbEmaTPKw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/lino-env@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58439},"main":"src/lino-env.mjs","type":"module","exports":{".":"./src/lino-env.mjs"},"gitHead":"6fae8bd49829fa47eece74ac9a707250b2c89f0b","scripts":{"lint":"eslint .","test":"NODE_OPTIONS=\"--experimental-vm-modules\" jest","check":"npm run lint && npm run format:check && npm run check:file-size","format":"prettier --write .","lint:fix":"eslint . --fix","changeset":"changeset","format:check":"prettier --check .","check:file-size":"node scripts/check-file-size.mjs","changeset:status":"changeset status --since=origin/main","changeset:publish":"changeset publish","changeset:version":"node scripts/changeset-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fc9beff2-fd91-4259-b32a-0981c0c377fb"}},"repository":{"url":"git+https://github.com/link-foundation/lino-env.git","type":"git"},"_npmVersion":"11.6.2","description":"A JavaScript library to operate .lenv files","directories":{},"lint-staged":{"*.{js,mjs,cjs}":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.5","dependencies":{"links-notation":"^0.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.1.7","eslint":"^9.38.0","prettier":"^3.6.2","@eslint/js":"^9.39.1","babel-jest":"^29.7.0","lint-staged":"^16.2.6","@changesets/cli":"^2.29.7","@babel/preset-env":"^7.28.3","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/lino-env_0.2.4_1763160884217_0.2707004011486449","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"lino-env","version":"0.2.5","keywords":["lino","env","environment","links-notation","config"],"author":{"name":"link-foundation"},"license":"Unlicense","_id":"lino-env@0.2.5","maintainers":[{"name":"konard","email":"drakonard@gmail.com"}],"homepage":"https://github.com/link-foundation/lino-env#readme","bugs":{"url":"https://github.com/link-foundation/lino-env/issues"},"dist":{"shasum":"29fbd928196302f0188cb60caf957a0ecdcf2caf","tarball":"https://registry.npmjs.org/lino-env/-/lino-env-0.2.5.tgz","fileCount":26,"integrity":"sha512-ig1shI4H26W5f/kZe1uxj7Ehx9pyN1nWbKo3v+y3g22rUIknrBwvLA7Fqo9/km+gIUWCju/+R63MqlE80oiTiA==","signatures":[{"sig":"MEYCIQDQ1Om6A4oa72RiEXOV4GNol2B3FhBgt54vl/RLeXHeXgIhAJkgQ38uyyntRTTuFX1Uq0KmcKX8CVWhpe9WUVKjcS+n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/lino-env@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58012},"main":"src/lino-env.mjs","type":"module","exports":{".":"./src/lino-env.mjs"},"gitHead":"1cbb4fec92406add9a14b047805f5ecd82097a21","scripts":{"lint":"eslint .","test":"node --test","check":"npm run lint && npm run format:check && npm run check:file-size","format":"prettier --write .","lint:fix":"eslint . --fix","changeset":"changeset","format:check":"prettier --check .","check:file-size":"node scripts/check-file-size.mjs","changeset:status":"changeset status --since=origin/main","changeset:publish":"changeset publish","changeset:version":"node scripts/changeset-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fc9beff2-fd91-4259-b32a-0981c0c377fb"}},"repository":{"url":"git+https://github.com/link-foundation/lino-env.git","type":"git"},"_npmVersion":"11.6.2","description":"A JavaScript library to operate .lenv files","directories":{},"lint-staged":{"*.{js,mjs,cjs}":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.5","dependencies":{"links-notation":"^0.11.2"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.38.0","prettier":"^3.6.2","@eslint/js":"^9.39.1","lint-staged":"^16.2.6","test-anywhere":"^0.4.0","@changesets/cli":"^2.29.7","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/lino-env_0.2.5_1763186194298_0.7851723272539308","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"lino-env","version":"0.2.6","keywords":["lino","env","environment","links-notation","config"],"author":{"name":"link-foundation"},"license":"Unlicense","_id":"lino-env@0.2.6","maintainers":[{"name":"konard","email":"drakonard@gmail.com"}],"homepage":"https://github.com/link-foundation/lino-env#readme","bugs":{"url":"https://github.com/link-foundation/lino-env/issues"},"dist":{"shasum":"2e348c1d29bd54b15471c5b78a9dad02c8970400","tarball":"https://registry.npmjs.org/lino-env/-/lino-env-0.2.6.tgz","fileCount":26,"integrity":"sha512-Nt/SCQw30jADMjIEU31Y3wWvpdJ8pnoSRuJ2AgGLlzJgOisXTmNJwILzlE2tZILIgA/oKKgXP56tN0jypqp2ig==","signatures":[{"sig":"MEQCIChRRMtbOM82AGnk1u6l7R8cS4HCFxhRDYFCl9wt4gjmAiAgW36HsNQF+bSctqz8mgdAWh1FTDT0Z7RajAfZ+6U1vg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/lino-env@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58257},"main":"src/lino-env.mjs","type":"module","exports":{".":"./src/lino-env.mjs"},"gitHead":"0bf8335baea5c0921e5408059fe9fb79a79d4a87","scripts":{"lint":"eslint .","test":"node --test","check":"npm run lint && npm run format:check && npm run check:file-size","format":"prettier --write .","lint:fix":"eslint . --fix","changeset":"changeset","format:check":"prettier --check .","check:file-size":"node scripts/check-file-size.mjs","changeset:status":"changeset status --since=origin/main","changeset:publish":"changeset publish","changeset:version":"node scripts/changeset-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fc9beff2-fd91-4259-b32a-0981c0c377fb"}},"repository":{"url":"git+https://github.com/link-foundation/lino-env.git","type":"git"},"_npmVersion":"11.6.2","description":"A JavaScript library to operate .lenv files","directories":{},"lint-staged":{"*.{js,mjs,cjs}":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.5","dependencies":{"links-notation":"^0.11.2"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.38.0","prettier":"^3.6.2","@eslint/js":"^9.39.1","lint-staged":"^16.2.6","test-anywhere":"^0.5.0","@changesets/cli":"^2.29.7","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/lino-env_0.2.6_1763190727164_0.45664634114285696","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"lino-env","version":"0.2.7","keywords":["lino","env","environment","links-notation","config"],"author":{"name":"link-foundation"},"license":"Unlicense","_id":"lino-env@0.2.7","maintainers":[{"name":"konard","email":"drakonard@gmail.com"}],"homepage":"https://github.com/link-foundation/lino-env#readme","bugs":{"url":"https://github.com/link-foundation/lino-env/issues"},"dist":{"shasum":"95431af17d7a0de9948983fe88822d2441f5fb31","tarball":"https://registry.npmjs.org/lino-env/-/lino-env-0.2.7.tgz","fileCount":26,"integrity":"sha512-o3pkfMKk1WIYRttjeO6rkizpTU+WL46snTrteTM/0TThcOUEQSoBTkJWdJNTSyCLEY5gkvHoU2XdqYkG1oLZIA==","signatures":[{"sig":"MEQCIBKu8Hu1eYIJi5X00IhWrTJhRm5If0GjXm14+NsnG+XlAiBL37Sv1li4TQoCTTWxrXHfhUE6crTQL1hh5foLQA1gAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/lino-env@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58318},"main":"src/lino-env.mjs","type":"module","exports":{".":"./src/lino-env.mjs"},"gitHead":"44eec5a1a6833bfd22c0af43d8ff24be7dfa6680","scripts":{"lint":"eslint .","test":"node --test","check":"npm run lint && npm run format:check && npm run check:file-size","format":"prettier --write .","lint:fix":"eslint . --fix","changeset":"changeset","format:check":"prettier --check .","check:file-size":"node scripts/check-file-size.mjs","changeset:status":"changeset status --since=origin/main","changeset:publish":"changeset publish","changeset:version":"node scripts/changeset-version.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fc9beff2-fd91-4259-b32a-0981c0c377fb"}},"repository":{"url":"git+https://github.com/link-foundation/lino-env.git","type":"git"},"_npmVersion":"11.6.4","description":"A JavaScript library to operate .lenv files","directories":{},"lint-staged":{"*.{js,mjs,cjs}":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.5","dependencies":{"links-notation":"^0.11.2"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^9.38.0","prettier":"^3.6.2","@eslint/js":"^9.39.1","lint-staged":"^16.2.6","test-anywhere":"^0.5.0","@changesets/cli":"^2.29.7","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/lino-env_0.2.7_1764503961284_0.3698198369309196","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"lino-env","version":"0.2.8","description":"A JavaScript library to operate .lenv files","type":"module","main":"src/lino-env.mjs","exports":{".":"./src/lino-env.mjs"},"scripts":{"test":"node --test","lint":"eslint .","lint:fix":"eslint . --fix","format":"prettier --write .","format:check":"prettier --check .","check:file-size":"node scripts/check-file-size.mjs","check":"npm run lint && npm run format:check && npm run check:file-size","changeset":"changeset","changeset:version":"node scripts/changeset-version.mjs","changeset:publish":"changeset publish","changeset:status":"changeset status --since=origin/main"},"repository":{"type":"git","url":"git+https://github.com/link-foundation/lino-env.git"},"bugs":{"url":"https://github.com/link-foundation/lino-env/issues"},"keywords":["lino","env","environment","links-notation","config"],"author":{"name":"link-foundation"},"license":"Unlicense","dependencies":{"links-notation":"^0.11.2"},"devDependencies":{"@changesets/cli":"^2.29.7","@eslint/js":"^9.39.1","eslint":"^9.38.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","husky":"^9.1.7","lint-staged":"^16.2.6","prettier":"^3.6.2","test-anywhere":"^0.5.0"},"lint-staged":{"*.{js,mjs,cjs}":["eslint --fix","prettier --write"]},"gitHead":"7fe7ac0295e55969db4f1f9e265e9457dd89bc3a","_id":"lino-env@0.2.8","homepage":"https://github.com/link-foundation/lino-env#readme","_nodeVersion":"20.19.6","_npmVersion":"11.6.4","dist":{"integrity":"sha512-j9JcPo8LWCSlWCO7B1SSL3OlpRc/bGaR/OYnH22DTiANaMaLWan7ebRIo2Pwaw/apcIzdV+UD5EXamdapbn6kA==","shasum":"5ca31cf1d9949d2a642e3d2ae073575fca7ff3d0","tarball":"https://registry.npmjs.org/lino-env/-/lino-env-0.2.8.tgz","fileCount":26,"unpackedSize":58378,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/lino-env@0.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDBSaCGUmOnGvd4tY3PQHCo6GZisELrY2rXGgRehIo1NgIgAt7txATszDG1ZoMkpLWy8bs/XAeUURmByoLf6zsVKq4="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fc9beff2-fd91-4259-b32a-0981c0c377fb"}},"directories":{},"maintainers":[{"name":"konard","email":"drakonard@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lino-env_0.2.8_1764773670337_0.20471677182063086"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-14T21:39:57.687Z","modified":"2025-12-03T14:54:30.924Z","0.2.0":"2025-11-14T21:39:57.884Z","0.2.4":"2025-11-14T22:54:44.450Z","0.2.5":"2025-11-15T05:56:34.502Z","0.2.6":"2025-11-15T07:12:07.357Z","0.2.7":"2025-11-30T11:59:21.491Z","0.2.8":"2025-12-03T14:54:30.527Z"},"bugs":{"url":"https://github.com/link-foundation/lino-env/issues"},"author":{"name":"link-foundation"},"license":"Unlicense","homepage":"https://github.com/link-foundation/lino-env#readme","keywords":["lino","env","environment","links-notation","config"],"repository":{"type":"git","url":"git+https://github.com/link-foundation/lino-env.git"},"description":"A JavaScript library to operate .lenv files","maintainers":[{"name":"konard","email":"drakonard@gmail.com"}],"readme":"# lino-env\n\nA JavaScript library to operate .lenv files - an alternative to .env files that uses `: ` (colon-space) instead of `=` for key-value separation and supports duplicate keys.\n\n## What are .lenv files?\n\n.lenv files are configuration files similar to .env files, but with a different syntax:\n\n```\n# .env format (traditional)\nGITHUB_TOKEN=gh_...\nAPI_KEY=abc123\n\n# .lenv format (this library)\nGITHUB_TOKEN: gh_...\nAPI_KEY: abc123\n```\n\nThe key difference is the use of `: ` separator, which aligns with [links-notation](https://github.com/link-foundation/links-notation) format. Additionally, .lenv files support duplicate keys, where multiple instances of the same key can exist.\n\n## Installation\n\n```bash\nnpm install lino-env\n```\n\n## Quick Start\n\n```bash\n# create .lenv file\necho \"HELLO: World\" > .lenv\n\n# create index.js\necho \"import linoenv from 'lino-env'; linoenv.config(); console.log('Hello ' + process.env.HELLO)\" > index.js\n\n# run\nnode index.js\n```\n\nOutput:\n\n```\nHello World\n```\n\n## Usage\n\n### ESM (import)\n\n```javascript\nimport linoenv from 'lino-env';\nlinoenv.config();\n\nconsole.log(`Hello ${process.env.HELLO}`);\n```\n\n### CommonJS (require)\n\n```javascript\nrequire('lino-env').config();\n\nconsole.log(`Hello ${process.env.HELLO}`);\n```\n\n## API Reference\n\n### Dotenvx-like API\n\nThese functions provide a simple API similar to dotenvx for common use cases:\n\n#### `config(options)`\n\nLoad .lenv file and inject into process.env\n\n```javascript\nimport linoenv from 'lino-env';\n\nlinoenv.config(); // loads .lenv\n\n// or specify a custom path\nlinoenv.config({ path: '.lenv.production' });\n```\n\nReturns: `{ parsed: Object }` - Object containing parsed key-value pairs\n\n#### `get(key, options)`\n\nGet a value from the loaded .lenv file\n\n```javascript\nimport linoenv from 'lino-env';\n\nconst value = linoenv.get('API_KEY');\n\n// or from a specific file\nconst value = linoenv.get('API_KEY', { path: '.lenv.production' });\n```\n\nReturns: `string | undefined`\n\n#### `set(key, value, options)`\n\nSet a value in a .lenv file\n\n```javascript\nimport linoenv from 'lino-env';\n\nlinoenv.set('API_KEY', 'new_value');\n\n// or to a specific file\nlinoenv.set('API_KEY', 'new_value', { path: '.lenv.production' });\n```\n\n### Named Exports\n\nYou can also use named exports for tree-shaking:\n\n```javascript\nimport { config, get, set } from 'lino-env';\n\nconfig();\nconsole.log(get('HELLO'));\nset('HELLO', 'Universe');\n```\n\n### Class: LinoEnv\n\nThe main class for reading and writing .lenv files.\n\n#### Constructor\n\n```javascript\nimport { LinoEnv } from 'lino-env';\n\nconst env = new LinoEnv('.lenv');\n```\n\n#### Methods\n\n##### `read()`\n\nReads and parses the .lenv file. If the file doesn't exist, initializes with empty data.\n\n```javascript\nconst env = new LinoEnv('.lenv');\nenv.read();\n```\n\nReturns: `this` (for method chaining)\n\n##### `write()`\n\nWrites the current data back to the .lenv file.\n\n```javascript\nenv.set('API_KEY', 'value').write();\n```\n\nReturns: `this` (for method chaining)\n\n##### `get(reference)`\n\nGets the last instance of a reference (key).\n\n```javascript\nenv.add('API_KEY', 'value1');\nenv.add('API_KEY', 'value2');\nconsole.log(env.get('API_KEY')); // 'value2'\n```\n\nReturns: `string | undefined`\n\n##### `getAll(reference)`\n\nGets all instances of a reference (key).\n\n```javascript\nenv.add('API_KEY', 'value1');\nenv.add('API_KEY', 'value2');\nconsole.log(env.getAll('API_KEY')); // ['value1', 'value2']\n```\n\nReturns: `string[]`\n\n##### `set(reference, value)`\n\nSets a reference to a single value, replacing all existing instances.\n\n```javascript\nenv.set('API_KEY', 'new_value');\n```\n\nReturns: `this` (for method chaining)\n\n##### `add(reference, value)`\n\nAdds a new instance of a reference, allowing duplicates.\n\n```javascript\nenv.add('API_KEY', 'value1');\nenv.add('API_KEY', 'value2'); // Now there are 2 instances\n```\n\nReturns: `this` (for method chaining)\n\n##### `has(reference)`\n\nChecks if a reference exists.\n\n```javascript\nif (env.has('API_KEY')) {\n  console.log('API_KEY exists');\n}\n```\n\nReturns: `boolean`\n\n##### `delete(reference)`\n\nDeletes all instances of a reference.\n\n```javascript\nenv.delete('API_KEY');\n```\n\nReturns: `this` (for method chaining)\n\n##### `keys()`\n\nGets all keys.\n\n```javascript\nconsole.log(env.keys()); // ['GITHUB_TOKEN', 'API_KEY', ...]\n```\n\nReturns: `string[]`\n\n##### `toObject()`\n\nConverts to a plain object with the last instance of each key.\n\n```javascript\nenv.add('KEY1', 'value1a');\nenv.add('KEY1', 'value1b');\nenv.set('KEY2', 'value2');\n\nconsole.log(env.toObject());\n// { KEY1: 'value1b', KEY2: 'value2' }\n```\n\nReturns: `Object`\n\n### Convenience Functions\n\n#### `readLinoEnv(filePath)`\n\nConvenience function to read a .lenv file.\n\n```javascript\nimport { readLinoEnv } from 'lino-env';\n\nconst env = readLinoEnv('.lenv');\nconsole.log(env.get('GITHUB_TOKEN'));\n```\n\nReturns: `LinoEnv`\n\n#### `writeLinoEnv(filePath, data)`\n\nConvenience function to create and write a .lenv file from an object.\n\n```javascript\nimport { writeLinoEnv } from 'lino-env';\n\nwriteLinoEnv('.lenv', {\n  API_KEY: 'test_key',\n  SECRET: 'test_secret',\n});\n```\n\nReturns: `LinoEnv`\n\n## Usage Examples\n\n### Basic Usage\n\n```javascript\nimport { LinoEnv } from 'lino-env';\n\n// Create and write\nconst env = new LinoEnv('.lenv');\nenv.set('GITHUB_TOKEN', 'gh_test123');\nenv.set('TELEGRAM_TOKEN', '054test456');\nenv.write();\n\n// Read\nconst env2 = new LinoEnv('.lenv');\nenv2.read();\nconsole.log(env2.get('GITHUB_TOKEN')); // 'gh_test123'\n```\n\n### Working with Duplicates\n\n```javascript\nimport { LinoEnv } from 'lino-env';\n\nconst env = new LinoEnv('.lenv');\n\n// Add multiple instances of the same key\nenv.add('SERVER', 'server1.example.com');\nenv.add('SERVER', 'server2.example.com');\nenv.add('SERVER', 'server3.example.com');\n\n// Get the last one\nconsole.log(env.get('SERVER')); // 'server3.example.com'\n\n// Get all instances\nconsole.log(env.getAll('SERVER'));\n// ['server1.example.com', 'server2.example.com', 'server3.example.com']\n\nenv.write(); // Persist to file\n```\n\n### Method Chaining\n\n```javascript\nimport { LinoEnv } from 'lino-env';\n\nnew LinoEnv('.lenv').set('API_KEY', 'abc123').set('SECRET', 'xyz789').write();\n```\n\n### Handling Special Characters\n\nThe library correctly handles values with colons, spaces, and other special characters:\n\n```javascript\nenv.set('URL', 'https://example.com:8080');\nenv.set('MESSAGE', 'Hello World');\nenv.write();\n\nconst env2 = readLinoEnv('.lenv');\nconsole.log(env2.get('URL')); // 'https://example.com:8080'\nconsole.log(env2.get('MESSAGE')); // 'Hello World'\n```\n\n## File Format\n\n.lenv files use the following format:\n\n- Key-value separator: `: ` (colon followed by space)\n- One key-value pair per line\n- Empty lines and lines starting with `#` are ignored\n- Duplicate keys are allowed\n- Values can contain spaces, colons, and other special characters\n\nExample `.lenv` file:\n\n```\n# Configuration file\nGITHUB_TOKEN: gh_abc123xyz\nTELEGRAM_TOKEN: 054test456\n\n# Multiple servers\nSERVER: server1.example.com\nSERVER: server2.example.com\n\n# Values with special characters\nURL: https://example.com:8080\nMESSAGE: Hello World\n```\n\n## License\n\nThis project is released into the public domain under [The Unlicense](http://unlicense.org).\n\n## Repository\n\nhttps://github.com/link-foundation/lino-env\n","readmeFilename":"README.md"}