{"id":16542428,"url":"https://github.com/tada5hi/locter","last_synced_at":"2025-03-16T19:32:22.508Z","repository":{"id":36956357,"uuid":"489603029","full_name":"tada5hi/locter","owner":"tada5hi","description":"Locter is a library to locate and load a file regarding specific criteria.","archived":false,"fork":false,"pushed_at":"2024-10-11T13:29:09.000Z","size":5011,"stargazers_count":4,"open_issues_count":7,"forks_count":0,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2024-10-12T18:57:33.178Z","etag":null,"topics":["file","file-loader","file-locator","loader","locator"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tada5hi.png","metadata":{"files":{"readme":"README.MD","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["tada5hi"]}},"created_at":"2022-05-07T07:29:53.000Z","updated_at":"2024-10-08T13:25:00.000Z","dependencies_parsed_at":"2023-11-25T11:28:51.303Z","dependency_job_id":"b874c012-13b7-4785-98ad-36afd91db323","html_url":"https://github.com/tada5hi/locter","commit_stats":{"total_commits":238,"total_committers":4,"mean_commits":59.5,"dds":"0.40336134453781514","last_synced_commit":"c6f044abf0ec487c077afc6f04ef114f4911b537"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tada5hi%2Flocter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tada5hi%2Flocter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tada5hi%2Flocter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tada5hi%2Flocter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tada5hi","download_url":"https://codeload.github.com/tada5hi/locter/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221667419,"owners_count":16860621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["file","file-loader","file-locator","loader","locator"],"created_at":"2024-10-11T18:57:29.293Z","updated_at":"2024-10-27T11:10:44.081Z","avatar_url":"https://github.com/tada5hi.png","language":"TypeScript","funding_links":["https://github.com/sponsors/tada5hi"],"categories":[],"sub_categories":[],"readme":"# Locter 🔥\n\n[![npm version](https://badge.fury.io/js/locter.svg)](https://badge.fury.io/js/locter)\n[![CI](https://github.com/tada5hi/locter/actions/workflows/main.yml/badge.svg)](https://github.com/tada5hi/locter/actions/workflows/main.yml)\n[![codecov](https://codecov.io/gh/Tada5hi/locter/branch/master/graph/badge.svg?token=4KNSG8L13V)](https://codecov.io/gh/Tada5hi/locter)\n[![Known Vulnerabilities](https://snyk.io/test/github/Tada5hi/locter/badge.svg?targetFile=package.json)](https://snyk.io/test/github/Tada5hi/locter?targetFile=package.json)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits\u0026logoColor=white)](https://conventionalcommits.org)\n\nLocter is a library to locate and load a file/modules regarding specific criteria.\n\n**Table of Contents**\n\n- [Installation](#installation)\n- [Usage](#usage)\n  - [Locator](#locator)\n  - [Loader](#loader)\n- [License](#license)\n\n## Installation\n\n```bash\nnpm install locter --save\n```\n\n## Usage\n\nThe following examples are based on some shared assumptions:\n- A folder named `files` exists in the root directory.\n- The folder `files` contains the following files:\n  - example.js\n  - example.json\n  - example.ts\n  - example-long.ts\n\n\n### Locator\n\n**Multiple**\n\nLocating multiple files will return information about all files matching the pattern.\n\n```typescript\nimport { locateMany } from 'locter';\n\n(async () =\u003e {\n    let files = await locateMany(\n        'files/example.{js,.ts}'\n    );\n\n    console.log(files);\n    /*\n    [\n        { path: 'files', name: 'example', extension: '.js'},\n        { path: 'files', name: 'example', extension: '.ts'}\n    ]\n     */\n\n    files = await locateMany(\n        'files/*.{js,ts}'\n    );\n\n    console.log(files);\n    /*\n    [\n        { path: 'files', name: 'example', extension: '.js'},\n        { path: 'files', name: 'example', extension: '.ts'},\n        { path: 'files', name: 'example-long', extension: '.ts'},\n    ]\n     */\n})\n```\n\nA synchronous variant is also available: `locateManySync`\n\n**Single**\n\nLocating a single file will return information about the first file matching the pattern.\n\n```typescript\nimport { locate } from 'locter';\n\n(async () =\u003e {\n    let file = await locate(\n        'files/example.{js,.ts}'\n    );\n\n    console.log(file);\n    /*\n    { path: 'files', name: 'example', extension: '.js'}\n     */\n})\n```\n\nA synchronous variant is also available: `locateSync`\n\n### Loader\n\nThe `load` method can be used to load a file/module in an asynchronous fashion.\nEither a string or the output of the locate/locateSync method can be passed as argument.\n\n```typescript\nimport { load, locate } from 'locter';\n\n(async () =\u003e {\n    const file = await locate(\n        'files/example.{js,.ts}'\n    );\n\n    let content = await load(file);\n    console.log(content);\n    // ...\n\n    content = await load('...');\n    console.log(content);\n    // ...\n})\n```\n\nThere is also a synchronous method called `loadSync` to load files.\n\n```typescript\nimport { loadSync, locateSync } from 'locter';\n\n(async () =\u003e {\n    const file = await locateSync(\n        'files/example.{js,.ts}'\n    );\n\n    let content = await loadSync(file);\n    console.log(content);\n    // ...\n\n    content = await loadSync('...');\n    console.log(content);\n    // ...\n})\n```\n\nTwo loaders are predefined from scratch and already registered:\n- **ConfLoader**: This loader allows to load `.conf` files.\n- **JSONLoader**: This loader allows to load `.json` files.\n- **YAMLLoader**: This loader allows to load `.yml` files.\n- **ModuleLoader**: This loader allows to load modules with\n  `.js`, `.mjs`, `.mts`, `.cjs`, `.cts`, `.ts` file extensions independent of the environment (cjs or esm).\n\nTo register loader for other file types, the function `registerLoader` can be used.\n\n```typescript\nimport { registerLoader } from 'locter';\n\nregisterLoader(['.ext'], {\n    execute(input: string) {\n\n    },\n    executeSync(input: string) {\n\n    }\n})\n```\n\n\n## License\n\nMade with 💚\n\nPublished under [MIT License](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftada5hi%2Flocter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftada5hi%2Flocter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftada5hi%2Flocter/lists"}