{"_id":"@catchfashion/url-catalog-generator","_rev":"31-2d66d3defb717b0dd2574864e84594da","name":"@catchfashion/url-catalog-generator","dist-tags":{"latest":"2.2.0","beta":"2.0.0-0"},"versions":{"1.0.0":{"name":"@catchfashion/url-catalog-generator","version":"1.0.0","description":"Generate Typescript URL Parser / Builder from defined schema","main":"./dst/index.js","typings":"./dst/index.d.ts","engines":{"node":"^10.16.0","npm":"^6.10.0"},"bin":{"url-catalog":"./dst/cli.js"},"scripts":{"clean":"rm -Rf dst","prebuild":"npm run clean","build":"check-engine && tsc -d","lint":"tslint -p ./tsconfig.test.json","prepare":"npm run build","pretest":"npm run build -- -p ./tsconfig.test.json","test":"mocha dst/**/__test__/**/*_spec.js"},"repository":{"type":"git","url":"git+https://github.com/catchfashion/url-catalog-generator.git"},"author":{"name":"Kurt Lee"},"license":"ISC","bugs":{"url":"https://github.com/catchfashion/url-catalog-generator/issues"},"homepage":"https://github.com/catchfashion/url-catalog-generator#readme","devDependencies":{"@types/chai":"4.1.7","@types/mocha":"2.2.48","@types/node":"^8.10.54","chai":"4.2.0","check-engine":"1.8.1","mocha":"3.5.3","np":"3.1.0","tslint":"5.18.0","typescript":"^3.7.3"},"dependencies":{"commander":"^3.0.2"},"gitHead":"6961695de5e674e76d1cbece7d16423c49f82804","_id":"@catchfashion/url-catalog-generator@1.0.0","_nodeVersion":"10.16.0","_npmVersion":"6.10.0","dist":{"integrity":"sha512-PMgI9mb9Jnhnfsv4p6BxuFozEMSP3MJZAYdbwObLggpOS02XDGWyUzADVyt4nZ0ShbS11ZR4DwRchqbfKQs+hA==","shasum":"7df2cfca40d6150b147f788a74ba05de4b9d1ed9","tarball":"https://registry.npmjs.org/@catchfashion/url-catalog-generator/-/url-catalog-generator-1.0.0.tgz","fileCount":12,"unpackedSize":22000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8zFcCRA9TVsSAnZWagAAWckQAIKx6eO7MrM9iBeonT1I\neOW2dD6bYuMLkdTBUdtDDdqKpp25AUAtTfzeHqJkBXt/5u9+59Xpk80pMMn5\nKw0QO4NeiaZ4MLkJ4rgnKJnbIYCuOvCBzIc2Me2R8eF+DrPwTbWvhcgPLDbB\nrmF0l0tbXaKSqAVyGAPVUWs3XvxI+dQaEkQrlNqWiFwcnDuUsmEAvd8ei/Mc\nNNg1mALDy74auvX4xx5JaIw4fYaUjiBonUIuoOnKGDGsrKtlilUZtYq5QY69\no047BkjTiePwAuj4Qjq3PHob/I/Gu7kO5W9rb4etjbSheN26ZgDUVlI2srR3\nmsvMcIMFCkPRhRLFIFLM9OhVtKk67B7LNSoILLj2SxRHm2/nMpuzaU46b678\nEatIy8Uim0Hig8onqWPIrGWX89EBEWaVK0g5kLDD7E4ceCvbAWl8lLL3Bmh2\n/Lt2fwNrmpxHaYAoqlhQK4NuoOnukhARgmyCO7SjTAmRdD+S5o3GnEUqaKWx\nW+0fBxGjx6IxXVDRu4+aaSLmxoUbVYouV7odTD09SE9YkSx2480mIZbq7LHY\n6jrxsPRlxC3uMDoaasztvdMdBwNVmN7AXttgAP5M6YlaLzo46Tf1lFDxj0Lr\naL9e77yDDxAjIQRZXSHq+Bs7G3vwkayJ4Gh3f3z7CM4xJYuH4Vs8790/Eajb\nWFlL\r\n=WQQg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8sgpCFl57L7K9kIDeTpAnmfUkSQf9upibteIUr38BvAiBidqhY1yYo9JhJKyoAgLK5VIsEcZiIbOq492lqMEMq8w=="}]},"maintainers":[{"name":"catchdev","email":"developers@catchfashion.com"}],"_npmUser":{"name":"catchdev","email":"developers@catchfashion.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/url-catalog-generator_1.0.0_1576218972428_0.09080737811598949"},"_hasShrinkwrap":false},"1.0.1":{"name":"@catchfashion/url-catalog-generator","version":"1.0.1","description":"generates Typescript URL schemas that parse / serialize / support react-router.","main":"./dst/index.js","typings":"./dst/index.d.ts","engines":{"node":"^10.16.0","npm":"^6.10.0"},"bin":{"url-catalog":"./dst/cli.js"},"scripts":{"clean":"rm -Rf dst","prebuild":"npm run clean","build":"check-engine && tsc -d","lint":"tslint -p ./tsconfig.test.json","prepare":"npm run build","pretest":"npm run build -- -p ./tsconfig.test.json","test":"mocha dst/**/__test__/**/*_spec.js","test:e2e":"npm run build && node ./dst/cli.js generate ./test_schema.json ./generate-test"},"repository":{"type":"git","url":"git+https://github.com/catchfashion/url-catalog-generator.git"},"author":{"name":"Kurt Lee"},"license":"ISC","bugs":{"url":"https://github.com/catchfashion/url-catalog-generator/issues"},"homepage":"https://github.com/catchfashion/url-catalog-generator#readme","devDependencies":{"@types/chai":"4.1.7","@types/mocha":"2.2.48","@types/node":"^8.10.54","chai":"4.2.0","check-engine":"1.8.1","mocha":"^3.5.3","tslint":"^5.18.0","typescript":"^3.7.3"},"dependencies":{"commander":"^3.0.2"},"gitHead":"28e0ab2f67dc797488e72f2f1559e7f9bc498fc6","_id":"@catchfashion/url-catalog-generator@1.0.1","_nodeVersion":"10.16.0","_npmVersion":"6.10.0","dist":{"integrity":"sha512-0ADpuU0ruhSqpE6Bc2NB9TbP0V3tnuO9A9bfq8zVSRe4OerrVJ7Sbc9/3+XVNpwjV4/SpsM2Ef7XEWq50U6Hjw==","shasum":"2a645dc429c17ebd6118ca53fece08e8f9dad6da","tarball":"https://registry.npmjs.org/@catchfashion/url-catalog-generator/-/url-catalog-generator-1.0.1.tgz","fileCount":12,"unpackedSize":25801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8zllCRA9TVsSAnZWagAADBcP/RrGKQ2ajJYR9lRefybM\n+meA+jjaJHH4f0eBaSLrmrAu/zbPelVnc76iKekBayYam/s5VPwx7ehtRIHx\n91JCOquq2fHfVxVGgCm++X9inmDMCZFF3LTZB7ICMPl7UvtSaT4RDD6s2jQP\nTFTkElz4keDMcs7mACPf7S678ImYtmqv4Ny4ubO/npl8vTvX1TX5+culYSLu\n/HJgOehH81MKd+sFN1izvSm6PNfeP3IIPpr/tJZLgWLpG5J6gxNKdR22v4OK\n6kGB75xrMzSp81/cT1NfDnUV2gd3f7WXUj9YZP68i7vnoRjT/GSjQMnr5XYC\njL1ij/KCwK+3Y9G8cKe+19ybXWjpw1qhAKL8gf6daKOJHqxyO+dpUNifIsjj\nHDaCOkApH9DBut6j8uOFyimRs/3D+vD05orYb3zcWnSLO1OcRu4ObL8KvZIh\n1RP3VpGPlm/oEngr5faLaeVaLWgeLaWvhjHBzcXUaGr8IXQOHjcCcU7nf+UG\n9KS3UnY++YNmZzHfjKmvUOUt3OigdALRdPbYkaB2NFpEp4JUkKvV5yeWcJj5\n6nj7Ks8b/PFNKG+3B10IBckrpaYSVCc7RMcoq3aUZgpnaQiNOS7m822eMZAF\n7hTV9XIPGo03olmVeCEVHiceADG6dGuDrKLJBhlMLBmiHOsBVlBs9jU+Srze\nkzGT\r\n=XvGy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICmmTijf9IHufyVvJi3xXssDtet61hoQ4kzGznHPGvUnAiEA78BSKLD5MgvFDep1NPb+i6CKe9YfaHaKf0iQnO17BmQ="}]},"maintainers":[{"name":"catchdev","email":"developers@catchfashion.com"}],"_npmUser":{"name":"catchdev","email":"developers@catchfashion.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/url-catalog-generator_1.0.1_1576221028592_0.010083845622823828"},"_hasShrinkwrap":false},"1.1.0":{"name":"@catchfashion/url-catalog-generator","version":"1.1.0","description":"generates Typescript URL schemas that parse / serialize / support react-router.","main":"./dst/index.js","typings":"./dst/index.d.ts","engines":{"node":"^10.16.0","npm":"^6.10.0"},"bin":{"url-catalog":"./dst/cli.js"},"scripts":{"clean":"rm -Rf dst","prebuild":"npm run clean","build":"check-engine && tsc -d","lint":"tslint -p ./tsconfig.test.json","prepare":"npm run build","pretest":"npm run build -- -p ./tsconfig.test.json","test":"mocha dst/**/__test__/**/*_spec.js","test:e2e":"npm run build && node ./dst/cli.js generate ./test_schema.json ./generate-test"},"repository":{"type":"git","url":"git+https://github.com/catchfashion/url-catalog-generator.git"},"author":{"name":"Kurt Lee"},"license":"ISC","bugs":{"url":"https://github.com/catchfashion/url-catalog-generator/issues"},"homepage":"https://github.com/catchfashion/url-catalog-generator#readme","devDependencies":{"@types/chai":"4.1.7","@types/mocha":"2.2.48","@types/node":"^8.10.54","chai":"4.2.0","check-engine":"1.8.1","mocha":"^3.5.3","tslint":"^5.18.0","typescript":"^3.7.3"},"dependencies":{"commander":"^3.0.2"},"gitHead":"8ff118b5b3267f2287f7bf89e5eeb7dd9a5658d9","_id":"@catchfashion/url-catalog-generator@1.1.0","_nodeVersion":"10.16.0","_npmVersion":"6.10.0","dist":{"integrity":"sha512-5vlM/FJPuRITesl3Rq5GorWyd+GXX3k61ecGsUl5J9XDMU3RjCk2XS5rE9JQGvRgdXVjDrW6xMlWwaA3I6SPzA==","shasum":"1a27b90b2b4d7e9e0c00b983cebcda4fc5ce9b9e","tarball":"https://registry.npmjs.org/@catchfashion/url-catalog-generator/-/url-catalog-generator-1.1.0.tgz","fileCount":12,"unpackedSize":25919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeIAHKCRA9TVsSAnZWagAAFuYQAIy9omk+HHo0Hgy+xBO6\nws1AePD9SPoogbD94JILRTzeJNvKaIBBTSmafpUNrB4G6l+Yd340xzSCcnsg\nhg3qWnIMXAtb8v7ofyJvlCUXHMM/bDE1vSaj8izR6KRpIFQtItVO2/TuaFlA\nBSzprSct6368b3WnB5zoM7vE/r8//AaF6M4ciUdhhp19soAyJCScCUyvHZ1e\n7+mahCU4d3DywCNDIiUz1FucjJyMaBDgzP+xvoq8UgZsSDs5uNu2u9S7EipO\n7IEu4BTvwz6o44CV1F3vGkGC2lEKN5jrT7M3CQLLNIkQWYUu5J7p9tPyBAcx\nX2yKr12GlNGr0ApQzrntwnuzxKf/MOSKgzpPRcEfHgH7sk4bJla+8SVCzHtN\nOEAEPAiBz8r1bNTKlq5wpyydEl++7XUvonL74g9rYh/trEpKonINX5sGIyHP\nhKdC9jO0OJOtkfiNec4ZCft7orlWsc2VHHqVsrIL0hBK7GW5JiVmTeENAg0d\njopCOb8VGk+kKpnJqWyvQ3dgSweFJ+7ZXnGuPownKZQW9+CLlOAJLhwBL0d2\na/ocFu3Ce4Todhi5dx8gHzdcjlA9YYD+f8sgs7fRAChW6IzViohht+jIMup/\n/Nsnrne9Al55pCC3kc3KwmbOsVfetc5cGEOVnM0dktnQW2b3YRNpraOyL4Qe\nDxiY\r\n=R4wo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCtFQO7AycLg6FmUrpvmkp/sDx3hYDX4Y9wP5O9rZLYAIhAIryScf260oIW6ZmgFdp5tUDLc2DH1vclsmmXQa2YDaa"}]},"maintainers":[{"name":"catchdev","email":"developers@catchfashion.com"}],"_npmUser":{"name":"catchdev","email":"developers@catchfashion.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/url-catalog-generator_1.1.0_1579155913630_0.5436351302958253"},"_hasShrinkwrap":false},"2.0.0-0":{"name":"@catchfashion/url-catalog-generator","version":"2.0.0-0","description":"generates Typescript URL schemas that parse / serialize / support react-router.","main":"./dst/index.js","typings":"./dst/index.d.ts","engines":{"node":"^12.14.0","npm":"^6.10.0"},"bin":{"url-catalog":"dst/cli.js"},"scripts":{"clean":"rm -Rf dst","prebuild":"npm run clean","build":"check-engine && tsc -d","lint":"tslint -p ./tsconfig.test.json","prepare":"npm run build","pretest":"npm run build -- -p ./tsconfig.test.json","test":"mocha dst/**/__test__/**/*_spec.js","test:e2e":"npm run build && node ./dst/cli.js generate ./test_schema.json ./generate-test"},"repository":{"type":"git","url":"git+https://github.com/catchfashion/url-catalog-generator.git"},"author":{"name":"Kurt Lee"},"license":"ISC","bugs":{"url":"https://github.com/catchfashion/url-catalog-generator/issues"},"homepage":"https://github.com/catchfashion/url-catalog-generator#readme","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^2.2.48","@types/node":"^8.10.54","chai":"^4.2.0","check-engine":"1.8.1","mocha":"^3.5.3","np":"^6.5.0","tslint":"^5.18.0","typescript":"^4.0.3"},"dependencies":{"commander":"^3.0.2"},"readme":"# @catchfashion/url-catalog-generator\ngenerates Typescript URL schemas that parse / serialize / support react-router.\n\n## What's this for?\nModern App / Web requires singular url schema  \nsuch as https://www.catchfashion.com/category/abcdef and catch://category/abcdef  \nfor this purpose, url-catalog-generator suggest centralized way of managing url schema.  \nwhich could be used for  \n- frontend routing, (react-router / path-to-regexp)\n- backend routing\n\n(schema.json)\n```json\n{\n  \"name\": \"CATCH\",\n  \"urls\": [\n    {\n      \"name\": \"Home\",\n      \"description\": \"Home page\",\n      \"pathTemplate\": \"/:gender\",\n      \"params\": {\n        \"path\": { \"gender\": { \"type\": \"string\", \"enum\": [\"men\", \"women\"] } }\n      }\n    },\n    {\n      \"name\": \"Category\",\n      \"description\": \"Category page\",\n      \"pathTemplate\": \"/category/:categoryId\",\n      \"params\": {\n        \"path\": { \"categoryId\": { \"type\": \"string\" } }\n      }\n    },\n  ]\n}\n```\n\nrun  \n```\nnpm install @catchfashion/url-catalog-generator\nurl-catalog schema.json ./src\n```\nThis would automatically generates below files  \n\n(urls/Category.ts)\n```typescript\nimport { URLSchema } from \"url-catalog-generator\";\n\ntype QueryParams = {};\ntype PathParams = {\n  gender: \"men\" | \"women\", categoryId: string\n};\ntype AllParams = QueryParams & PathParams;\n\nexport class Category {\n  public static schema = new URLSchema<QueryParams, PathParams>({\n    name: \"Category\",\n    description: \"category main show page\",\n    pathTemplate: \"/:gender/category/:categoryId\",\n    params: {\"path\":{\"gender\":{\"type\":\"string\",\"enum\":[\"men\",\"women\"]},\"categoryId\":{\"type\":\"string\"}}},\n  });\n\n  public static parse(path: string) {\n    const params = this.schema.parse(path);\n    return params && new this(params);\n  }\n\n  public static serialize(params: AllParams) {\n    return new this(params).toString();\n  }\n\n  constructor(public readonly params: AllParams) {}\n\n  public toString() {\n    return Category.schema.serialize(this.params);\n  }\n}\n```\n\n(urls/Home.ts)\n```typescript\nimport { URLSchema } from \"url-catalog-generator\";\n\ntype QueryParams = {};\ntype PathParams = {\n  gender: \"men\" | \"women\"\n};\n\ntype AllParams = QueryParams & PathParams;\n\nexport class Home {\n  public static schema = new URLSchema<QueryParams, PathParams>({\n    name: \"Home\",\n    description: \"Home page\",\n    pathTemplate: \"/:gender\",\n    params: {\"path\":{\"gender\":{\"type\":\"string\",\"enum\":[\"men\",\"women\"]}}},\n  });\n\n  public static parse(path: string) {\n    const params = this.schema.parse(path);\n    return params && new this(params);\n  }\n\n  public static serialize(params: AllParams) {\n    return new this(params).toString();\n  }\n\n  constructor(public readonly params: AllParams) {}\n\n  public toString() {\n    return Home.schema.serialize(this.params);\n  }\n}\n\n```\n\n## Parse\n```typescript\nimport { URLs } from \"./urls\";\n\nconst url = \"some string';\n\nfunction parseURL(url: string) {\n  for (const schema of URLs) {\n    let model = schema.parse(url);\n    if (model) {\n      return model;\n    }\n  }\n}\n\nconst parsed = parseURL(\"/women\");\nif (parsed instanceof URLs.Home) {\n  const gender = parsed.gender; // \"men\" / \"women\";\n  console.log(\"its home!\");\n} else if (parse instanceof URLs.CategoryShow) {\n  const categoryId = parsed.categoryId; // \n  console.log(\"it's category with id : \", categoryId);\n}\n\n```\n\n## Serialize\n```typescript\nimport { URLs } from \"./urls\";\n\nnew URLs.Home({ gender: \"women\" }).toString(); // \"/women\";\nURLs.Home.serialize({ gender: \"women\" }); // \"/women\";\n```\n\n## Path-To-Regexp Format\n```typescript\nimport { URLs } from \"./urls\";\n\nURLs.Home.schema.toPathToRegexp() === \"/:gender(women|men)\";\n```\n","readmeFilename":"README.md","gitHead":"f58f09a26b2d89c6a9b1835bc326962ec7e4ae69","_id":"@catchfashion/url-catalog-generator@2.0.0-0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-K5gHLfAnTQtDcamHT6x4Soc0XNayFGNCMhg06MVCUvsynVwPMFIdTTdyZbOSaS7Cflvx7jWD5ofM87tdGyB3Dg==","shasum":"b764384e094600d9b3d763e5e416c028e5b42e3b","tarball":"https://registry.npmjs.org/@catchfashion/url-catalog-generator/-/url-catalog-generator-2.0.0-0.tgz","fileCount":12,"unpackedSize":26302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcvggCRA9TVsSAnZWagAAEqQP/03JCU6RvgUXJ1GgdGvQ\nIwXb4Ttde091WBY1oCdhXAOrufwQfc2Cb+ruBBXSI5jQcVKGFKLoofZwrlZd\nkFdXQ8d/uJjs7FMAJCfj75AijRuT7jb4ZI6sRFL7KvpVltaFfc5jfQipexR0\nokmcUZsgvQNnA8pq/E6IZ/icRVG+u6wQC4wS720rT6tBzjsGQfvpagJQBc1y\nMYDdcih9pLFxWpXOlfXNvrH27t94cx48WL7LSIFL7LpCTPYyMalqKbYgK5xC\nIvu6INI1BOCuqGUz44pl0vSrrzLwUT3YrDJdg1Fb6GyH//C1dcNazR8NYKh/\nSaptNiR4/9MOjP5kFaKvvZAdrAF/8YJ5zB7iTzlA862Jqxa1WKeqxYaott93\nOt4bx7Jv7DAihW2aq8GSq/aGE3i4YMsva6cnnGNLxZYB7XaSL1UVuWfjtt5Q\nHfUlWYJZdU7ZhSrFoMULP+y76/b304q+P2hLO9u6/0Fw3FlCfAMlBOFF6CnS\n2GLphgOZP41PUVQpSYOHTWJPJ9FNVlACs4ct9xV5/GjIIzSWzxznZwnEHA2n\nsOxIVQG09NySQVJuSwt2M9odWHPYcbI51Vpg4gHmMarzDt0e6hK+U+38X7Fs\nsDY+KRA8VHUDiPIMIzmWMK+5j6eJS7RvBHNLNQMIhloXg04VdWk2uFwxVOKP\nyy61\r\n=UsQR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB6yobwnuBxP5lqUDr6ufI74pxkGBAvQHzdu01mSfGF9AiAV3cXU8yfBXqJzwWlo5muRUGiV0BSfPMIlhv5LQOKrnQ=="}]},"maintainers":[{"name":"mooyoul","email":"mooyoul@gmail.com"},{"name":"catchdev","email":"developers@catchfashion.com"}],"_npmUser":{"name":"catchdev","email":"developers@catchfashion.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/url-catalog-generator_2.0.0-0_1601370143728_0.24834929414717455"},"_hasShrinkwrap":false},"2.0.0":{"name":"@catchfashion/url-catalog-generator","version":"2.0.0","description":"generates Typescript URL schemas that parse / serialize / support react-router.","main":"./dst/index.js","typings":"./dst/index.d.ts","engines":{"node":"^12.14.0","npm":"^6.10.0"},"bin":{"url-catalog":"dst/cli.js"},"scripts":{"clean":"rm -Rf dst","prebuild":"npm run clean","build":"check-engine && tsc -d","lint":"tslint -p ./tsconfig.test.json","prepare":"npm run build","pretest":"npm run build -- -p ./tsconfig.test.json","test":"mocha dst/**/__test__/**/*_spec.js","test:e2e":"npm run build && node ./dst/cli.js generate ./test_schema.json ./generate-test"},"repository":{"type":"git","url":"git+https://github.com/catchfashion/url-catalog-generator.git"},"author":{"name":"Kurt Lee"},"license":"ISC","bugs":{"url":"https://github.com/catchfashion/url-catalog-generator/issues"},"homepage":"https://github.com/catchfashion/url-catalog-generator#readme","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^2.2.48","@types/node":"^8.10.54","chai":"^4.2.0","check-engine":"1.8.1","mocha":"^3.5.3","np":"^6.5.0","tslint":"^5.18.0","typescript":"^4.0.3"},"dependencies":{"commander":"^3.0.2"},"gitHead":"75a4feaf457c43d6d7e3fef4ca8a02826281735b","_id":"@catchfashion/url-catalog-generator@2.0.0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-DEv0X4i8Ll+JIW856FsA7cyhLrpXs+SFyoUdVXD7hrQyI0PIycGcqDzxuWHRORJEgJs49zlfnnbBv2mu++vS/w==","shasum":"5ff67cf3722a840b4b75a6e6d219626a50e6b49a","tarball":"https://registry.npmjs.org/@catchfashion/url-catalog-generator/-/url-catalog-generator-2.0.0.tgz","fileCount":12,"unpackedSize":26300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcvivCRA9TVsSAnZWagAAnaIP/iFS9FQ/15KEdcYaoUi0\nL4wujjGkxYFvbC7PSSlX0JsIpB3kBBCHWmOjMF1WeqkE123aW2BsvYDZPS61\n0fIjSFTNNbvVAYhutNtSWQ0oLqJh42brgzyc4Nk+C/7b0NADarG/nqiJCbnX\nTMhoidCB3ymED4gaOdkFhY5DgBmluMDWlWiNsmo51Z3o/vQp2sZSCwIWN2FB\noEZRrgbZGjjL3FpABJSEVSaPDsLkGi2lIvkTcLD60qzCneovDj0WztSG9P5k\nyFEwZg5N03TROKrTaSD9VpqPUdoffT56FgwNNZaRYcWz808KZR2ooTxF0vp7\nVWsdYjX/JZHeS6XRS58NXiNJ4h8TrwYwwYqKMaxpA//avFIAry7WTPJN2FcK\n/7bAcp/EJwwk3O1ea6CS/4LoeYJuGKIvvLSPvzXYIx4TeVzHbyQYGVu4NLAX\ndlKXFzTNG2uNP3oGhrQtbIR5OL10H5hRk/wjFncFBlChO3p4+lx0N4w5E2Wb\nUJSFfB2bMCc+b7GiC+EVOQtG4lmFkgyHIPYhwcmN57rG+1W+y8Wv+yl/tP0B\nAFwvBVOtWbF2wUAaF4SsYSSz3hqxreS0MxDhw+gZNp/4gOuFLz1zc+hQ8BRM\ndDWkmd1yH8KccP2dWPIFsIyzFETSPM6F/DnABsNNzoiqlqqypjYVjcaqbX2D\nzOg7\r\n=CZzQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGHS6kcwHU3vXj9qUfrnFfYYp++zWTGLE7JQTCAvBbsQAiBCm9ZGKKSMA48alJvumnYIkdWObBcHfFMALQG1KQbSWA=="}]},"maintainers":[{"name":"mooyoul","email":"mooyoul@gmail.com"},{"name":"catchdev","email":"developers@catchfashion.com"}],"_npmUser":{"name":"catchdev","email":"developers@catchfashion.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/url-catalog-generator_2.0.0_1601370286610_0.22631310621138634"},"_hasShrinkwrap":false},"2.0.1":{"name":"@catchfashion/url-catalog-generator","version":"2.0.1","description":"generates Typescript URL schemas that parse / serialize / support react-router.","main":"./dst/index.js","typings":"./dst/index.d.ts","engines":{"node":"^12.14.0","npm":"^6.10.0"},"bin":{"url-catalog":"dst/cli.js"},"scripts":{"clean":"rm -Rf dst","prebuild":"npm run clean","build":"check-engine && tsc -d","lint":"tslint -p ./tsconfig.test.json","prepare":"npm run build","pretest":"npm run build -- -p ./tsconfig.test.json","test":"mocha dst/**/__test__/**/*_spec.js","test:e2e":"npm run build && node ./dst/cli.js generate ./test_schema.json ./generate-test"},"repository":{"type":"git","url":"git+https://github.com/catchfashion/url-catalog-generator.git"},"author":{"name":"Kurt Lee"},"license":"ISC","bugs":{"url":"https://github.com/catchfashion/url-catalog-generator/issues"},"homepage":"https://github.com/catchfashion/url-catalog-generator#readme","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^2.2.48","@types/node":"^8.10.54","chai":"^4.2.0","check-engine":"1.8.1","mocha":"^3.5.3","np":"^6.5.0","tslint":"^5.18.0","typescript":"^4.0.3"},"dependencies":{"commander":"^3.0.2"},"gitHead":"fcabe06cefb02937dd7ef40957b081b7f53b2ee6","_id":"@catchfashion/url-catalog-generator@2.0.1","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-drrFbEoR25uEOCutb/GIrH8YjFqd8EvFb72HPWibIYF28WZbkkiQPfs+xuBemBCANXEY/oVuXXaoXu5BbRzdkw==","shasum":"8965feb68795ecddf3f027143eb56281d3c013ff","tarball":"https://registry.npmjs.org/@catchfashion/url-catalog-generator/-/url-catalog-generator-2.0.1.tgz","fileCount":12,"unpackedSize":26940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRgSQCRA9TVsSAnZWagAAdfYP/1b+AVHhF0qzti/gXHfV\nVsWCdnohPsePaNuRwNpDA1fj/d+rw3OMzx4rkWL9gRMpjRA0u6AFMs5/tbeQ\nzT4AfCWLTU7kDjU7TEIQBNIKAnO8qALu1JcMJflLkWzuaHMNaRCtKfq7zLhc\n5xHFfufEKLzU+fEnWNhXfKK/yE9y5dyrb4ArtZX7mmycLoENbIgw/1PzVBbH\ntVAQ7MRrYEM0gEgTLV7MB5Yvu9PIgZrz40hmrtQDSubN5RNe3GqMgAk7pshC\nc9HL9qLpFWc3rjIcdvSy+Vjz3J6+vboRE1fjQU5HopoEfz0+gPaRNsNFUBV4\nOLo0ttpoabLpDLgz7x5ibqF2NjmuadnfAZliYW1/WvI2VtEBXf3uhylQ2IrT\n1bniohjTxPrTe5swh7G9/bMlihr2u899Je1A7GYv/+aarbyrW50ZOCrK6Q3Q\nXcCCR3RwLlbrcwH5lLyHpMaScrU1ZdKoRhMNjMnnz9BmYaBosun16Ds9yU4x\nr3fNOIIJdrYTsZrD8pc2b2yIsE106OwZI+xa2oud+B6YioYESOVMj0mvBvdV\nxosphorlHiTF+zuDsT4xTDQ5nrxSvEvtRwp6C5/PKVBhnosb9q1HNBF500cN\nNkRoViGJYWZj8UKc9+ThUUJQ6HzhCct7yGX3vvSsEy7PAGCES1qpuZOhKdoP\nCdu0\r\n=oi+u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC6UIc7IsesfWfUMYY0a+ys5G4CVx5tfgzLzMPzsf+yIAiBRbNPn8Pv/IcFDCmvLJJxd15L1f88Tzvv9SnyBgzGxEQ=="}]},"_npmUser":{"name":"catchdev","email":"developers@catchfashion.com"},"directories":{},"maintainers":[{"name":"catchdev","email":"developers@catchfashion.com"},{"name":"mooyoul","email":"mooyoul@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/url-catalog-generator_2.0.1_1615201423666_0.43595690163902945"},"_hasShrinkwrap":false},"2.1.0":{"name":"@catchfashion/url-catalog-generator","version":"2.1.0","description":"generates Typescript URL schemas that parse / serialize / support react-router.","main":"./dst/index.js","typings":"./dst/index.d.ts","engines":{"node":"^14.0.0","npm":"^6.10.0"},"bin":{"url-catalog":"dst/cli.js"},"scripts":{"clean":"rm -Rf dst","prebuild":"npm run clean","build":"check-engine && tsc -d","lint":"tslint -p ./tsconfig.test.json","prepare":"npm run build","pretest":"npm run build -- -p ./tsconfig.test.json","test":"mocha dst/**/__test__/**/*_spec.js","test:e2e":"npm run build && node ./dst/cli.js generate ./test_schema.json ./generate-test"},"repository":{"type":"git","url":"git+https://github.com/catchfashion/url-catalog-generator.git"},"author":{"name":"Kurt Lee"},"license":"ISC","bugs":{"url":"https://github.com/catchfashion/url-catalog-generator/issues"},"homepage":"https://github.com/catchfashion/url-catalog-generator#readme","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^2.2.48","@types/node":"^8.10.54","chai":"^4.2.0","check-engine":"1.8.1","mocha":"^3.5.3","np":"^6.5.0","tslint":"^5.18.0","typescript":"^4.0.3"},"dependencies":{"commander":"^3.0.2"},"gitHead":"6a0f6af9ae47c25997b43616ec166dc2446be773","_id":"@catchfashion/url-catalog-generator@2.1.0","_nodeVersion":"14.17.6","_npmVersion":"6.14.15","dist":{"integrity":"sha512-aFhixjwLxaV7dnre1BLXRVId586ftLz/E2dsgi2t0v7xXXINuCWp1JBj/6h1BtTQ7+6WJeQOyReImoVGivqRBQ==","shasum":"f96b1ca981b83dab2ffafdaf10c0907fd0960ce0","tarball":"https://registry.npmjs.org/@catchfashion/url-catalog-generator/-/url-catalog-generator-2.1.0.tgz","fileCount":12,"unpackedSize":26930,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwj85ZCOIcDopzuKbANoSfXRTU6pTltHyqy4IQQQdzIAiEA/jvTIUzFTIFbGDd/uibCfWF2AcOhysxC91DoeU+kxhI="}]},"_npmUser":{"name":"catchdev","email":"developers@catchfashion.com"},"directories":{},"maintainers":[{"name":"catchdev","email":"developers@catchfashion.com"},{"name":"mooyoul","email":"mooyoul@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/url-catalog-generator_2.1.0_1636597041947_0.566720891056576"},"_hasShrinkwrap":false},"2.2.0":{"name":"@catchfashion/url-catalog-generator","version":"2.2.0","description":"generates Typescript URL schemas that parse / serialize / support react-router.","main":"./dst/index.js","typings":"./dst/index.d.ts","engines":{"node":"^14.0.0","npm":"^6.10.0"},"bin":{"url-catalog":"dst/cli.js"},"scripts":{"clean":"rm -Rf dst","prebuild":"npm run clean","build":"check-engine && tsc -d","lint":"tslint -p ./tsconfig.test.json","prepare":"npm run build","pretest":"npm run build -- -p ./tsconfig.test.json","test":"mocha dst/**/__test__/**/*_spec.js","test:e2e":"npm run build && node ./dst/cli.js generate ./test_schema.json ./generate-test"},"repository":{"type":"git","url":"git+https://github.com/catchfashion/url-catalog-generator.git"},"author":{"name":"Kurt Lee"},"license":"ISC","bugs":{"url":"https://github.com/catchfashion/url-catalog-generator/issues"},"homepage":"https://github.com/catchfashion/url-catalog-generator#readme","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^2.2.48","@types/node":"^8.10.54","chai":"^4.2.0","check-engine":"1.8.1","mocha":"^3.5.3","np":"^6.5.0","tslint":"^5.18.0","typescript":"^4.0.3"},"dependencies":{"commander":"^3.0.2"},"gitHead":"323620cfffc516896c8b2e63ee0f92be7c929ae6","_id":"@catchfashion/url-catalog-generator@2.2.0","_nodeVersion":"14.17.6","_npmVersion":"6.14.15","dist":{"integrity":"sha512-N0b0tBTidbma4uUuu7SIbDDPbWA36EW+N2svtRC1C72QQG4ZYZGEjAjxHJVifnw/u4JH/f7wfy+L8+Le19OEwA==","shasum":"43fdef38a56f391157b1c8cfbed4d85f2c606d9e","tarball":"https://registry.npmjs.org/@catchfashion/url-catalog-generator/-/url-catalog-generator-2.2.0.tgz","fileCount":12,"unpackedSize":26930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzbpvCRA9TVsSAnZWagAAXlsP+gL7NSlb8BG0sBP9s90d\nXF/T9VCYX4nMr9+c6thdZi8YrAXPlyJZyMJ/NxvFS682bRL5blr/FkLabCf9\ndw0OPs/RrcIorhbu1JdivE2dvPYtiG4XVNWLGcnJC/niUtfRUsBTDWEHkOOH\ntgy0OG4YFI4BmZP42WAylmg3oB1XOf2x0ls3I8W8QdQNtFwfnCQDsRv2Mt7g\nvvXNvEjfrujofYOD079NDeufo1RPeoAUZsdj2SltUjLh/Kn+2fLAd9Ebx1fm\nOwRTOvGw/6NtpjcVpqAjrsh26a3bdO6F7ns/rR/JRdkCO4zttGi0R4TAXfXQ\nZgKmOZ02p/6JcT1kdhS5qrJBtrYToyF6g5QIhjaLdOvg85ZSrZtwvksE1Ree\n3qgfZQ1kUhXw/EgGJmV0dn7P5IJJK72o2mZ/yvee+TdzZRbQLXbgADtShMJR\nIrjxh65qbJQsu/4btTVJN4grapFUd8pbWA/qYDytSV1t4edV6IDpXIG+z6H6\n3L5GlWOQgKBTOfzfICZ6pjdQn9oqk7rByp5Dp9S6/ErW0EfdLLF3MbL13yL1\ne0p4xV425gswKh//a5qT1pIjpu88p8cszfrJskDyskKziU4uydgyGoCAH0FX\nWJLBPrDGtWgJxPkwztmQDRLz+C61sm1LYN7m2crvElD2+khZBxdlOWXiwE8l\n+QhD\r\n=vGBA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBzlOPQOYhxwXqSyNPZotWNOmpOZEENVT5NJmzudARayAiEAodcw1jkU/HGd3QLlGRb0Z2CHkv7b+axVcfoWgJkFPX0="}]},"_npmUser":{"name":"catchdev","email":"developers@catchfashion.com"},"directories":{},"maintainers":[{"name":"catchdev","email":"developers@catchfashion.com"},{"name":"mooyoul","email":"mooyoul@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/url-catalog-generator_2.2.0_1636597201327_0.0018106126848274062"},"_hasShrinkwrap":false}},"time":{"created":"2019-12-13T06:36:12.427Z","1.0.0":"2019-12-13T06:36:12.550Z","modified":"2023-07-24T06:27:51.393Z","1.0.1":"2019-12-13T07:10:28.753Z","1.1.0":"2020-01-16T06:25:13.806Z","2.0.0-0":"2020-09-29T09:02:23.900Z","2.0.0":"2020-09-29T09:04:46.770Z","2.0.1":"2021-03-08T11:03:43.934Z","2.1.0":"2021-11-11T02:17:22.123Z","2.2.0":"2021-11-11T02:20:01.547Z"},"maintainers":[{"email":"junghoo@catchfashion.com","name":"junghoo1"},{"email":"davidkim@catchfashion.com","name":"davidkimofcf"},{"email":"yunut@catchfashion.com","name":"yunut"},{"email":"minjupar@catchfashion.com","name":"minju612"},{"email":"hdh@catchfashion.com","name":"hongdonghee"},{"email":"ksh117@catchfashion.com","name":"ksh117"},{"email":"jkkang123@catchfashion.com","name":"jkkang123"},{"email":"km.kang@catchfashion.com","name":"kyeongmankang"},{"email":"songcs@catchfashion.com","name":"songchangseok"},{"email":"es53.park@catchfashion.com","name":"es53.park"},{"email":"mjcheon@catchfashion.com","name":"mjcheon"},{"email":"jihyun095@catchfashion.com","name":"jihyun095"},{"email":"mason@catchfashion.com","name":"yemoon"},{"email":"whitepage@tosky.co.kr","name":"white82x"},{"email":"whjang@catchfashion.com","name":"whjang"},{"email":"developers@catchfashion.com","name":"catchdev"}],"description":"generates Typescript URL schemas that parse / serialize / support react-router.","homepage":"https://github.com/catchfashion/url-catalog-generator#readme","repository":{"type":"git","url":"git+https://github.com/catchfashion/url-catalog-generator.git"},"author":{"name":"Kurt Lee"},"bugs":{"url":"https://github.com/catchfashion/url-catalog-generator/issues"},"license":"ISC","readme":"# @catchfashion/url-catalog-generator\ngenerates Typescript URL schemas that parse / serialize / support react-router.\n\n## What's this for?\nModern App / Web requires singular url schema  \nsuch as https://www.catchfashion.com/category/abcdef and catch://category/abcdef  \nfor this purpose, url-catalog-generator suggest centralized way of managing url schema.  \nwhich could be used for  \n- frontend routing, (react-router / path-to-regexp)\n- backend routing\n\n(schema.json)\n```json\n{\n  \"name\": \"CATCH\",\n  \"urls\": [\n    {\n      \"name\": \"Home\",\n      \"description\": \"Home page\",\n      \"pathTemplate\": \"/:gender\",\n      \"params\": {\n        \"path\": { \"gender\": { \"type\": \"string\", \"enum\": [\"men\", \"women\"] } }\n      }\n    },\n    {\n      \"name\": \"Category\",\n      \"description\": \"Category page\",\n      \"pathTemplate\": \"/category/:categoryId\",\n      \"params\": {\n        \"path\": { \"categoryId\": { \"type\": \"string\" } }\n      }\n    },\n  ]\n}\n```\n\nrun  \n```\nnpm install @catchfashion/url-catalog-generator\nurl-catalog schema.json ./src\n```\nThis would automatically generates below files  \n\n(urls/Category.ts)\n```typescript\nimport { URLSchema } from \"url-catalog-generator\";\n\ntype QueryParams = {};\ntype PathParams = {\n  gender: \"men\" | \"women\", categoryId: string\n};\ntype AllParams = QueryParams & PathParams;\n\nexport class Category {\n  public static schema = new URLSchema<QueryParams, PathParams>({\n    name: \"Category\",\n    description: \"category main show page\",\n    pathTemplate: \"/:gender/category/:categoryId\",\n    params: {\"path\":{\"gender\":{\"type\":\"string\",\"enum\":[\"men\",\"women\"]},\"categoryId\":{\"type\":\"string\"}}},\n  });\n\n  public static parse(path: string) {\n    const params = this.schema.parse(path);\n    return params && new this(params);\n  }\n\n  public static serialize(params: AllParams) {\n    return new this(params).toString();\n  }\n\n  constructor(public readonly params: AllParams) {}\n\n  public toString() {\n    return Category.schema.serialize(this.params);\n  }\n}\n```\n\n(urls/Home.ts)\n```typescript\nimport { URLSchema } from \"url-catalog-generator\";\n\ntype QueryParams = {};\ntype PathParams = {\n  gender: \"men\" | \"women\"\n};\n\ntype AllParams = QueryParams & PathParams;\n\nexport class Home {\n  public static schema = new URLSchema<QueryParams, PathParams>({\n    name: \"Home\",\n    description: \"Home page\",\n    pathTemplate: \"/:gender\",\n    params: {\"path\":{\"gender\":{\"type\":\"string\",\"enum\":[\"men\",\"women\"]}}},\n  });\n\n  public static parse(path: string) {\n    const params = this.schema.parse(path);\n    return params && new this(params);\n  }\n\n  public static serialize(params: AllParams) {\n    return new this(params).toString();\n  }\n\n  constructor(public readonly params: AllParams) {}\n\n  public toString() {\n    return Home.schema.serialize(this.params);\n  }\n}\n\n```\n\n## Parse\n```typescript\nimport { URLs } from \"./urls\";\n\nconst url = \"some string';\n\nfunction parseURL(url: string) {\n  for (const schema of URLs) {\n    let model = schema.parse(url);\n    if (model) {\n      return model;\n    }\n  }\n}\n\nconst parsed = parseURL(\"/women\");\nif (parsed instanceof URLs.Home) {\n  const gender = parsed.gender; // \"men\" / \"women\";\n  console.log(\"its home!\");\n} else if (parse instanceof URLs.CategoryShow) {\n  const categoryId = parsed.categoryId; // \n  console.log(\"it's category with id : \", categoryId);\n}\n\n```\n\n## Serialize\n```typescript\nimport { URLs } from \"./urls\";\n\nnew URLs.Home({ gender: \"women\" }).toString(); // \"/women\";\nURLs.Home.serialize({ gender: \"women\" }); // \"/women\";\n```\n\n## Path-To-Regexp Format\n```typescript\nimport { URLs } from \"./urls\";\n\nURLs.Home.schema.toPathToRegexp() === \"/:gender(women|men)\";\n```\n","readmeFilename":"README.md"}