{
  "name": "locator",
  "description": "gives semantic meaning to filesystem paths",
  "version": "0.3.5",
  "homepage": "https://github.com/yahoo/locator",
  "keywords": [
    "filesystem",
    "fs",
    "mojito",
    "modown"
  ],
  "repository": {
    "type": "git",
    "url": "https://github.com/yahoo/locator.git"
  },
  "author": {
    "name": "Drew Folta",
    "email": "folta@yahoo-inc.com"
  },
  "contributors": [
    {
      "name": "Isao Yagi",
      "email": "isao@yahoo-inc.com"
    },
    {
      "name": "Michael Ridgway",
      "email": "mridgway@yahoo-inc.com"
    },
    {
      "name": "Caridy Patino",
      "email": "caridy@yahoo-inc.com",
      "url": "http://github.com/caridy"
    },
    {
      "name": "alberto chan",
      "email": "albertoc@yahoo-inc.com"
    }
  ],
  "license": "BSD",
  "main": "lib/bundleLocator.js",
  "directories": {
    "lib": "./lib"
  },
  "engines": {
    "node": ">0.8",
    "npm": ">1.0"
  },
  "dependencies": {
    "async": "*",
    "mkdirp": "0.3.x",
    "scanfs": "~0.1.0",
    "semver": "~1.1.4",
    "watch": "0.6.x",
    "yui": "3.10.x"
  },
  "devDependencies": {
    "chai": "~1.6.1",
    "istanbul": "*",
    "jshint": "~0.9.0",
    "mocha": "*",
    "mockery": "1.4.x",
    "xunit-file": "*",
    "yui-lint": "~0.1.3"
  },
  "scripts": {
    "cover": "istanbul cover -- _mocha tests/lib/*.js --reporter spec",
    "lint": "jshint --config node_modules/yui-lint/jshint.json lib/*.js tests/lib/*.js",
    "pretest": "jshint --config node_modules/yui-lint/jshint.json lib/*.js tests/lib/*.js",
    "test": "_mocha tests/lib/*.js --reporter spec"
  },
  "readme": "locator\n=======\n\nThe locator gives semantic meaning to files on the filesystem.\nIt does this with a set of \"rules\" that describes how each file path should be interpreted.\nIn addition it groups files into \"bundles\".\n(Each bundle is usually an NPM module, but not always.)\n\nThe locator doesn't _interpret_ the semantic meaning of the files.\nIt is up to the user to understand and use the semantic meanings associated with the files.\n\n[![Build Status](https://travis-ci.org/yahoo/locator.png?branch=master)](https://travis-ci.org/yahoo/locator)\n\n\n## Goals & Design\n* provide an abstraction over filesystem paths\n    * set of \"rules\" (regexps basically) that determine the semantic meaning of each file\n    * files that match a rule (and thus have semantic meaning) are called \"resources\"\n    * built-in handling of \"selectors\", for resources that have multiple versions\n* organize files in bundles\n    * bundles are usually NPM modules\n    * ...but can be something else, if an NPM module delivers multiple child bundles\n    * bundles are recursively walked, since they are often organized in a tree structure on disk\n    * bundles can have different types\n        * for example, a mojito application bundle is walked differently (uses a different ruleset) than a mojito mojit bundle\n        * each bundle can declare its type in its `package.json` (for those bundles that are NPM modules)\n        * each bundle can also describe the type of child bundles found at certain paths (for e.g. mojito application that has mojit bundles at a certain place)\n* configurable\n    * the behavior of the locator should be configurable, which should include\n    * ...defining new rulesets, for new bundle types\n    * ...general runtime behavior configuration of returned values\n    * ...etc\n* extensible (plugins)\n    * the locator also allows \"plugins\" to be informed about files/resources/bundles\n    * one type of plugin is a \"compiler\" which takes a file in an unknown format and \"compiles\" it into a known format\n        * for example, a \"sass\" compiler which generates \"css\" files\n    * other types of plugins can do general processing\n        * for example, a \"config helper\" plugin could load config files and cache their contents in memory\n    * other types of plugins can process a bundle as a whole\n        * for example, a \"yui helper\" plugin which can generate YUI loader metadata for the whole bundle\n\n\n## Installation\nInstall using npm:\n\n```shell\n$ npm install locator\n```\n\n\n\n## Example: Mojito Application\nIn your app's `package.json`:\n```javascript\n{\n    \"dependencies\": {\n        ...\n        \"mojito\": \"*\",\n        ...\n    },\n    \"locator\": {\n        \"rulesets\": \"mojito/locator-rulesets\"\n    }\n}\n```\n\n\n## Example: Defining Your Own Semantics\nIn your app's `package.json`:\n```javascript\n{\n    \"locator\": {\n        \"rulesets\": \"locator-rulesets\"\n    }\n}\n```\n\nA new `locator-rulesets.js` file which defines how to add semantic meaning to filesystem paths:\n```javascript\nmodule.exports = {\n    // nameKey defaults to 1\n    // selectorKey has no default. selector is only used if selectorKey is given\n    main: {\n        // we can use this to skip files\n        _skip: [\n            /^tests?\\b/i\n        ],\n\n        // where to find configuration files\n        configs: {\n            regex: /^configs\\/([a-z_\\-\\/]+)\\.(json|js)$/i\n        },\n\n        // where to find templates\n        templates: {\n            regex: /^templates\\/([a-z_\\-\\/]+)(\\.([\\w_\\-]+))?\\.[^\\.\\/]+\\.html$/i,\n            // We use \"selectors\" because we might use different templates based\n            // on different circumstances.\n            selectorKey: 3\n        },\n\n        // where to find CSS files\n        css: {\n            regex: /^public\\/css\\/([a-z_\\-\\/]+)\\.css$/i\n        }\n    }\n};\n```\n\n\nThen, in your `app.js` (or wherever makes sense to you) you can do something like:\n```javascript\nvar Locator = require('locator');\n\nlocator = new Locator();\nlocator.parseBundle(__dirname).then(function() {\n    var resources = locator.getRootBundle().getResources();\n\n    // access your \"configs/foo.json\" configuration file\n    ... resources.configs.foo ...\n\n    // access all your templates\n    Object.keys(resources.templates).forEach(function (templateName) {\n        var templateResource = resources.templates[templateName];\n        ...\n    });\n\n    // File watching is optional, and probably only desired when running in\n    // a development environment.\n    locator.watch(__dirname).then(function () {\n        // File watching has started.\n        // Actual changes will be reflected into the results of `getBundle()`,\n        // `getRootBundle()`, `listAllResources()`, and `listBundleNames()`.\n        // Changes are also reported (as they happen) to the locator plugins.\n    });\n});\n```\n\n\n## License\nThis software is free to use under the Yahoo! Inc. BSD license.\nSee the [LICENSE file][] for license text and copyright information.\n\n[LICENSE file]: https://github.com/yahoo/locator/blob/master/LICENSE.txt\n\n\n## Contribute\nSee the [CONTRIBUTE.md file][] for info.\n\n[CONTRIBUTE.md file]: https://github.com/yahoo/locator/blob/master/CONTRIBUTE.md\n\n\n",
  "readmeFilename": "README.md",
  "bugs": {
    "url": "https://github.com/yahoo/locator/issues"
  },
  "_id": "locator@0.3.5",
  "_from": "locator@*"
}
