{"_id":"@acrontum/filesystem-template","_rev":"9-bceb042838fa6b50885b518e3175440a","name":"@acrontum/filesystem-template","dist-tags":{"latest":"0.1.1"},"versions":{"0.0.1":{"name":"@acrontum/filesystem-template","version":"0.0.1","description":"Filesystem templating engine and project scaffolding tool","main":"dist/src/index.js","bin":{"fst":"dist/src/cli.js"},"scripts":{"build":"tsc -p .","watch":"tsc-watch -p . --onSuccess 'echo done'","fmt":"prettier --write src/**/*.ts"},"keywords":[],"author":{"name":"p-mcgowan"},"license":"ISC","dependencies":{"fdir":"^5.0.0"},"devDependencies":{"@types/node":"^14.14.14","prettier":"^2.2.1","source-map-support":"^0.5.19","tsc-watch":"^4.2.9","typescript":"^4.1.3"},"_id":"@acrontum/filesystem-template@0.0.1","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-TToLyJ1TxRhXBHFPPm38M3cvhU2iRO3p7mh/0DQdKJrGudMhEXPiKDELm8MQUKOsQP5aGWmQ9v2QB1S6sqie9g==","shasum":"7a5ba7e016298a03c8986d79bcec9da9abdacef8","tarball":"https://registry.npmjs.org/@acrontum/filesystem-template/-/filesystem-template-0.0.1.tgz","fileCount":32,"unpackedSize":83098,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgm+m5CRA9TVsSAnZWagAAXbYP/jLEPMykhFVZQMZFfoN3\n/u42wQoZbPVveiaXCrDJEd7te97wkK4rqalTmuPgcovs3ki5VO8RXCXLzKgb\nnTuhGZ5XZiaE7Ao9tBysJ2cR3T1IvUQgVIV+ItAUeCrm2XpE0Ss5Uf1erH23\n63NRau2oFPDOdXwlpZziWdehe9lq+uL7xKcfkXATOxDcWTgb2QKznPmBVX0C\neqCECu37sZXDFD/6Kmm0Xt7sE1MThJww3CiTpT59AzBla6E27sN7UOUyf6Xr\nRqM0WDqmjTAbd1R1cVd0CjrlFXmUsPsUmHB6Vx57s4gStkRGmDQay6UNRbl7\nWZm2cAH0ZQHPw9a8xXSwbgWq5TISuXqH/b+po16ie0IRLvUKmc6O/stGVDQJ\nmJVtQE76xiyViO4mYHg87IxxYRkGDZqCK5SQ9FTkLlh0uLwCCFUKlUOukfDQ\n1mX1dicJ9PGA7r572qMLNT8gY5YaHv7IkWfuKfN1B2fCaatMcYkHv7Bf644A\nNwAt1h12KPdjefCm5RChltIFw/bXbM8n54UGnHUvj5Ip/9bgP7zPJ0emZJH3\na9udieG3PNp/SFqD2rORI2IWuvogq+DgV5VQfbNXOolup0yCZDpf7mUILW5q\nSk3Qs6EiOyACz9dTG3X/y3s3o2qI79YnP15QRak1HS2+2eL1t17JuGQPiyKb\nzx8m\r\n=WIgO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkmrc/uC53fR1t6nN9neW7hZZGSIsGsrqFbXL9wnwNvwIhAPb7CofPYYEFmA/6BWi56g5ry66vBA15kwbhu6yhMo53"}]},"_npmUser":{"name":"acr-p-mcgowan","email":"patrick.mcgowan@acrontum.de"},"directories":{},"maintainers":[{"name":"acrontum_sanchez","email":"sanchez@acrontum.de"},{"name":"acrontum_revah","email":"revah@acrontum.de"},{"name":"acrontum_brode","email":"brode@acrontum.de"},{"name":"acrontum_eicken","email":"eicken@acrontum.de"},{"name":"acrontum_carmichael","email":"carmichael@acrontum.de"},{"name":"acrontum_knoblach","email":"knoblach@acrontum.de"},{"name":"acr-p-mcgowan","email":"patrick.mcgowan@acrontum.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filesystem-template_0.0.1_1620830648655_0.32977676412544543"},"_hasShrinkwrap":false,"deprecated":"WARNING: This project has been renamed to @acrontum/fst. Install with 'npm install -D @acrontum/fst' instead."},"0.0.2":{"name":"@acrontum/filesystem-template","version":"0.0.2","repository":{"type":"git","url":"git+https://github.com/acrontum/filesystem-template.git"},"description":"Filesystem templating engine and project scaffolding tool","main":"dist/src/index.js","bin":{"fst":"dist/src/cli.js"},"scripts":{"build":"tsc -p .","watch":"tsc-watch -p . --onSuccess 'echo done'","fmt":"prettier --write src/**/*.ts","pretest":"rm -rf .fst test/out","test":"NODE_ENV=test node dist/src/cli.js -r test/test.fstr.json"},"keywords":[],"author":{"name":"p-mcgowan"},"license":"MIT","dependencies":{"fdir":"^5.0.0"},"devDependencies":{"@types/node":"^14.14.14","prettier":"^2.2.1","source-map-support":"^0.5.19","tsc-watch":"^5.0.2","typescript":"^4.1.3"},"types":"./dist/src/index.d.ts","gitHead":"55d6389dc6a9714231c5c68e54cba196712e3612","bugs":{"url":"https://github.com/acrontum/filesystem-template/issues"},"homepage":"https://github.com/acrontum/filesystem-template#readme","_id":"@acrontum/filesystem-template@0.0.2","_nodeVersion":"16.14.2","_npmVersion":"8.5.0","dist":{"integrity":"sha512-0RrN0Ap/wkkVXRBZNRnL4UQiJk0L3HlQpsVZWDXSq3PzSITj0ZXAGJcRvhWcgnnwII+6JS1UHlQ6M34chYhdWQ==","shasum":"203a098d9b7254cb728f3e0d461d7315f89a6567","tarball":"https://registry.npmjs.org/@acrontum/filesystem-template/-/filesystem-template-0.0.2.tgz","fileCount":42,"unpackedSize":135079,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4UDsDEbd+6YA94bEfKGrU0XB7xTJ2MGUBa6IO1WmoVwIhALWcx9Wn4Kjiry+mgameX/Gk6c2NYlf0vScIQ8Z6F80s"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiSy+GACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoOcw/+PP+obaAH88ySAsnCXb9tFn2jEq2ZVCrPyEMhmjLaDStzL4kz\r\nwtOoJUr1ut8nGVIzrxc84vTH7LYFMnygjxKt0mNQL5ZhJGIeHCGQSrwucG48\r\nm0+B4rBYCJWlY8o9EolBGxbKUgByhu6cC3RnAQKv6rF9Ax8fju8DXJBpdufm\r\nJvqoKivcAJvAr75spz2XMHja6YWXE68G01QUAU3DguKBR7MqdlZnwdJvg0gL\r\nkZdj0xaQBT+VSqCwG+auA7x5HdIeBjvaxHPMvm+deTTkf4qWStk5q9n29eCh\r\n1IRy+5xoSWu1p2vDXZ9+v37h8H1JF/xzmsqG4eM2dvdUsUpSN3elOsIW0rN3\r\nhfbad3O4XEgpc8e2YTZPbqXlOObwGs8Ibue9327MmGZR6wux3DUYDr8UMltk\r\nYjuoQvZv62heu2vQv5GZoqm94r63TAOgcUFsyUp359pOAA0VS4SrmsdycTSY\r\n4jOt0xkcfB1Bje4kJUppBsKpr55Rz4i+aQnzTBu+86Hh8rY+Yc7rZ9D0fvzn\r\nnbdk8t2Crrq7woXbToZ99qGPr8np4KhHRVRtweoJ9fIgh76syPZvLsRgRVBA\r\n7BNdKacup7cjndL63x5wfR7C3NcGNOYbjCGWnd4q1OITinyTORFBk3N01A/m\r\nhDmPbUM6HIO38uC28okudBjp/l7uk2EOAPc=\r\n=QtL4\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"acr-p-mcgowan","email":"patrick.mcgowan@acrontum.de"},"directories":{},"maintainers":[{"name":"acrontum_sanchez","email":"sanchez@acrontum.de"},{"name":"acrontum_revah","email":"revah@acrontum.de"},{"name":"acrontum_brode","email":"brode@acrontum.de"},{"name":"acrontum_eicken","email":"eicken@acrontum.de"},{"name":"acrontum_knoblach","email":"knoblach@acrontum.de"},{"name":"acr-p-mcgowan","email":"patrick.mcgowan@acrontum.de"},{"name":"carmichael.john","email":"john.carmichael@liffery.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filesystem-template_0.0.2_1649094533808_0.6194360248970838"},"_hasShrinkwrap":false,"deprecated":"WARNING: This project has been renamed to @acrontum/fst. Install with 'npm install -D @acrontum/fst' instead."},"0.1.0":{"name":"@acrontum/filesystem-template","version":"0.1.0","repository":{"type":"git","url":"git+https://github.com/acrontum/filesystem-template.git"},"description":"Filesystem templating engine and project scaffolding tool","main":"./dist/src/index.js","bin":{"fst":"dist/src/cli.js"},"scripts":{"preinstall":"git config core.hooksPath ./hooks","build":"tsc -p .","watch":"npm run build -- --watch --preserveWatchOutput","fmt":"prettier --write 'src/**/*.ts' 'test/*.ts'","link":"ln -s $PWD/dist/src/cli.js ./node_modules/.bin/fst && chmod +x node_modules/.bin/fst","pretest":"rm -rf .fst test-output; test -d dist || npm run build","test:unit":"npm run test -- --ignore '**/e2e.spec.js'","test":"FST_LOG=${FST_LOG:-error} NODE_ENV=test mocha -r source-map-support/register --recursive 'dist/test/**/*.spec.js'"},"keywords":[],"author":{"name":"p-mcgowan"},"license":"MIT","dependencies":{"fdir":"5.1.0"},"devDependencies":{"@acrontum/moxy":"^2.1.1","@tsconfig/node16":"^1.0.2","@types/chai":"^4.2.21","@types/mocha":"^9.0.0","@types/node":"^16.7.12","@types/sinon":"^10.0.2","@types/source-map-support":"^0.5.6","chai":"^4.3.4","mocha":"^9.1.3","prettier":"^2.3.2","sinon":"^11.1.2","source-map-support":"^0.5.21","typescript":"^4.4.2"},"types":"./dist/src/index.d.ts","gitHead":"bab3c90c807904f1dad21ddd422dac7676527ed3","bugs":{"url":"https://github.com/acrontum/filesystem-template/issues"},"homepage":"https://github.com/acrontum/filesystem-template#readme","_id":"@acrontum/filesystem-template@0.1.0","_nodeVersion":"18.12.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-/A6umOuBeRxuysHeqWXzD2OWGZuutBOmnOVOIEynfeVdhUAceQf11Wg6zesnXAd5iMO38YzWQ8RGRyyWy3A+sw==","shasum":"345a7101347fb9467fd000fb27064c093a5a5d27","tarball":"https://registry.npmjs.org/@acrontum/filesystem-template/-/filesystem-template-0.1.0.tgz","fileCount":60,"unpackedSize":153021,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGF2xsNErYqFpHYL4s4CxIYxAuAFS/VNcC6pCFPCB5ByAiEAhjPFUCnjraVZ/YX3F7KqYGH4Vw/x05i/35DzM2ZWV2I="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj1XhDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqHtQ/9HgWmBXhzDKKSCmM10y6qXqdzHTGYwguxJypmcxrwXdvBdo1g\r\n5tfAB65qvpRa4o453YXblFyowfRocmhQJUlpZ4VOj4QwPhFT+tpaeapyYjFL\r\nHZfpUDBSDhW/tUMJHeCYVkCUzrt6wQ+FLGKnZGtMSAKQHlMasepooAeuSaph\r\nFmUwV1BT9d08J92vihAaWkDOpYFmZJvziIR5m3aYwUSzjwrL1OVEjLTOCQhG\r\nU2sh0jwZ4W6uT+GAXsqLChnmQdSye+bcSHQfROjodQ0bDZl3rVBqP4QC5HlG\r\nOxeq5XgrM5tnpymeSMRpjzgXjX8QJtEMF2JwqDpzKRWC+NKY7F0PCMDiPuy0\r\ndgOR/Znyk+2WI2tvWx8VNnQFvVufHQqDK3y8JAM52HQvBTcMvvO4s7R3+M6/\r\nL+hihWwm5O5rHYXDpPRQKUtcvMqXVijVxjl33lOTQe/hGv4ylCaIMbX1FW1b\r\n6iv4sqVFfUeRJLuV+JNdRjaCC6FpkjAfzz3pTU09816SSkRmL+Gv8omHRz+U\r\nfksWrcBx7SZU1YZvupH8nprHONGQSrcCBASHbgm/jdkyxAjT2gAYKgUDBuek\r\n7m291OV2mAZ53k+qvuu3yTPLv5MQcazzY2KW0Ws74JrO459fFkFN+pE2BmjJ\r\n5ufSePKaLwK5fTt/P1Tvw3BR7yMj/PMUF6A=\r\n=lmcp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"acr-p-mcgowan","email":"patrick.mcgowan@acrontum.de"},"directories":{},"maintainers":[{"name":"acrontum_sanchez","email":"sanchez@acrontum.de"},{"name":"acrontum_revah","email":"revah@acrontum.de"},{"name":"acrontum_brode","email":"brode@acrontum.de"},{"name":"acrontum_eicken","email":"eicken@acrontum.de"},{"name":"acrontum_knoblach","email":"knoblach@acrontum.de"},{"name":"acr-p-mcgowan","email":"patrick.mcgowan@acrontum.de"},{"name":"carmichael.john","email":"john.carmichael@liffery.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filesystem-template_0.1.0_1674934339055_0.769941501263165"},"_hasShrinkwrap":false,"deprecated":"WARNING: This project has been renamed to @acrontum/fst. Install with 'npm install -D @acrontum/fst' instead."},"0.1.1":{"name":"@acrontum/filesystem-template","version":"0.1.1","repository":{"type":"git","url":"git+https://github.com/acrontum/filesystem-template.git"},"description":"Filesystem templating engine and project scaffolding tool","main":"./dist/src/index.js","bin":{"fst":"dist/src/cli.js"},"scripts":{"prepublishOnly":"git config core.hooksPath ./hooks","prebuild":"rm -rf dist","build":"tsc -p .","watch":"npm run build -- --watch --preserveWatchOutput","fmt":"prettier --write 'src/**/*.ts' 'test/*.ts'","link":"ln -s $PWD/dist/src/cli.js ./node_modules/.bin/fst && chmod +x node_modules/.bin/fst","pretest":"rm -rf .fst test-output; test -d dist || npm run build","test:unit":"npm run test -- --ignore '**/e2e.spec.js'","test":"FST_LOG=${FST_LOG:-error} NODE_ENV=test mocha -r source-map-support/register --recursive 'dist/test/**/*.spec.js'"},"keywords":[],"author":{"name":"p-mcgowan"},"license":"MIT","dependencies":{"fdir":"5.1.0"},"devDependencies":{"@acrontum/moxy":"^2.1.1","@tsconfig/node16":"^1.0.2","@types/chai":"^4.2.21","@types/mocha":"^9.0.0","@types/node":"^16.7.12","@types/sinon":"^10.0.2","@types/source-map-support":"^0.5.6","chai":"^4.3.4","mocha":"^9.1.3","prettier":"^2.3.2","sinon":"^11.1.2","source-map-support":"^0.5.21","typescript":"^4.4.2"},"types":"./dist/src/index.d.ts","gitHead":"e7163e7b2b1ae31f8f7568eb2b3619fe34b7ec91","bugs":{"url":"https://github.com/acrontum/filesystem-template/issues"},"homepage":"https://github.com/acrontum/filesystem-template#readme","_id":"@acrontum/filesystem-template@0.1.1","_nodeVersion":"18.12.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-4T2rRfwRxIdR8iV8E+HHsPo1Z505YhIamdjDofb7HOPZV1ZqKDMyM0ob9Gtd8u0dPl7tc/8hONM3djHqiGPzqg==","shasum":"75f8d97379d833c9fbe8a542a555aa9e395231bb","tarball":"https://registry.npmjs.org/@acrontum/filesystem-template/-/filesystem-template-0.1.1.tgz","fileCount":60,"unpackedSize":153541,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEukwRv2NKpmvHq7IWMyYg/5AeKpDSPhgZdAwJXiWui9AiEA1g7qFyWcZ2JxVZBWkSDkhL3zjyH+hgGrum9yNqbVUF0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj4LHTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqMDw//XszWINvUc1IW1vqvdzd0GPgMlRbMhS+RGamzyfeb4Mq4gtju\r\n2IO+lyT/bC6J0iPtygc31r6fopQlzzqDA7oA2+LJeUz1F3xE/ykYASfLG1NE\r\nyZSSw/Ewy/JrfKEMgJ0GGeHQmXZu9WQukADpOltmGXG05jUN/CURKXjqd6/N\r\n1sJLH3zeEev7gCFO++J6EAKl68AusYSeDXeosFz6gLq+WsFIy7zQW84Vp40B\r\n5xKHqqHQmx+XHpEZwna9JhqLtNG423kf+RhnJ0X840vpKhoUBY++1xT8IEbd\r\nN13jYgSscuUrSGubqjTS+0bVyCDRx07wu8P30TzWl0wrS+zPUv+vRuxZcES3\r\nmBuyZWYD09W3V2XlGTNJgmz15lTk/5/3AmKz1jHNPiKDuy+bS9K/3SKL0ZHe\r\n2gdoogr6yONkYVMI4s/RVJna6XFVqbfkY3Z1TNXmbUjJN2FuADAoInlurjCT\r\nNIwS2eAf0DD2y72jiaxM0Q667Cdki+hIMTUvAVjR5YLJ3Zi/yS/47z34a3y1\r\n6uvIG/TCo3LN/Zz7UAGr8GMp9dVkEgydMxCjL5KH00phCkY1x3yNv0fJN77f\r\nFupqPJPqBPoR853ZwdOWbp9A9vgD9GVRMHD0Nsnwp2ob+u3jAo7TKsIgbke9\r\ntGhh/y67jLTKNA6DkkZIF9JiSDm5rQTGDwc=\r\n=5MJ8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"acr-p-mcgowan","email":"patrick.mcgowan@acrontum.de"},"directories":{},"maintainers":[{"name":"acrontum_sanchez","email":"sanchez@acrontum.de"},{"name":"acrontum_revah","email":"revah@acrontum.de"},{"name":"acrontum_brode","email":"brode@acrontum.de"},{"name":"acrontum_eicken","email":"eicken@acrontum.de"},{"name":"acrontum_knoblach","email":"knoblach@acrontum.de"},{"name":"acr-p-mcgowan","email":"patrick.mcgowan@acrontum.de"},{"name":"carmichael.john","email":"john.carmichael@liffery.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/filesystem-template_0.1.1_1675669971070_0.27905608626702727"},"_hasShrinkwrap":false,"deprecated":"WARNING: This project has been renamed to @acrontum/fst. Install with 'npm install -D @acrontum/fst' instead."}},"time":{"created":"2021-05-12T14:44:08.351Z","0.0.1":"2021-05-12T14:44:08.798Z","modified":"2023-04-08T09:30:54.759Z","0.0.2":"2022-04-04T17:48:54.072Z","0.1.0":"2023-01-28T19:32:19.220Z","0.1.1":"2023-02-06T07:52:51.227Z"},"maintainers":[{"name":"acr-p-mcgowan","email":"patrick.mcgowan@acrontum.de"},{"name":"acrontum_brode","email":"brode@acrontum.de"},{"name":"acrontum_eicken","email":"eicken@acrontum.de"},{"name":"acrontum_knoblach","email":"knoblach@acrontum.de"},{"name":"acrontum_revah","email":"revah@acrontum.de"},{"name":"acrontum_sanchez","email":"sanchez@acrontum.de"},{"name":"carmichael.john","email":"john.carmichael@liffery.com"}],"description":"Filesystem templating engine and project scaffolding tool","keywords":[],"author":{"name":"p-mcgowan"},"license":"MIT","readme":"# filesystem-template\n\n**NOTE** fst is in early beta, docs are subject to change and may not be accurate.\n\n---\n\n## Usage\n\nQuickstart:  \n`npm install @acrontum/filesystem-template`  \n\nBasic usage:  \n`npx fst [options] <path_to_recipe_file>`\n\nSee `npx fst --help` for more options, or see [API](#api).  \n\n---\n\n## Recipe file\n\n#### Schema\n\n\n```typescript\ninterface RecipeSchema {\n  /**\n   * unique name of the recipe (for use with depends and passing data between files)\n   */\n  name?: string;\n  /**\n   * file, recipe, path to file(s), url, or repository to fetch templates from\n   */\n  from?: string;\n  /**\n   * output folder\n   */\n  to?: string;\n  /**\n   * arbitrary data store\n   */\n  data?: any;\n  /**\n   * array of names of other recipes which must be built first\n   */\n  depends?: string[];\n  /**\n   * lifecycle cli / shell commands\n   */\n  scripts?: { before?: string; after?: string };\n  /**\n   * path to render handler js file or handler function\n   */\n  fileHandler?: string | RenderFunction;\n  /**\n   * dependent / sub recipes\n   */\n  recipes?: RecipeSchema[];\n  /**\n   * list of folders to skip when copying or generating\n   */\n  excludeDirs?: string[];\n  /**\n   * when cloning, only clone certain folders\n   */\n  includeDirs?: string[];\n}\n```\n\n#### Example\n\n```json\n{\n  \"recipes\": [\n    {\n      \"name\": \"openapi-spec\",\n      \"to\": \"spec\",\n      \"scripts\": {\n        \"after\": \"npm run build\"\n      }\n    },\n    {\n      \"name\": \"server\",\n      \"from\": \"https://mytemplates.test/server-template\",\n      \"to\": \"backend\",\n      \"fileHandler\": \"server-builder.js\",\n      \"recipes\": [\n        {\n          \"name\": \"client\",\n          \"from\": \"./client\",\n          \"to\": \"./client\",\n          \"hooks\": [\n            \"link-client.js\"\n          ]\n        }\n      ]\n    },\n    {\n      \"name\": \"docker-compose\",\n      \"from\": \"https://fstr-std.com/compose\",\n      \"to\": \"docker\",\n      \"depends\": [\"openapi-spec\", \"server\", \"client\"],\n      \"excludeDirs\": [\"volumes\"]\n    }\n  ]\n}\n```\n\n\n#### Understanding relative paths\n\nAll recipe block paths are relative to the parent recipe's `\"to\"` section (defaulting to `'./'` when not present. In the case of the root, it's relative to where the recipe was called from (cwd).  \nEg:  \n\nFor this file setup:\n```\n.\n├── demo.fstr.json\n├── scripts\n│   ├── child-script.js\n│   └── parent-script.js\n└── sub-template\n    └── readme.txt\n\n```\n\nWith `demo.fstr.json`:  \n```json\n{\n  \"name\": \"demo\",\n  \"to\": \"./demo-output\",\n  \"fileHandler\": \"scripts/parent-script.js\",\n  \"recipes\": [\n    {\n      \"name\": \"demo-sub-recipe\",\n      \"from\": \"../sub-template\",\n      \"to\": \"sub-folder\",\n      \"fileHandler\": \"scripts/child-script.js\"\n    }\n  ]\n}\n```\n\nNote that for `demo-sub-recipe`, both `\"from\"` and `\"hooks\"` are relative to the parent `\"to\"`, wheras the top-level script path (`'scripts/parent-script.js'`) is relative to the recipe file (in this case, `'./'`).  \n\nFor the sub-recipe, since both `\"from\"` and `\"hooks\"` read from folders in the root, their paths are parsed as `./demo-output/../sub-template` and `./demo-output/../scripts/child-script.js` (respectively).  \n\nRunning the recipe file would then generate this folder structure:  \n```\n.\n├── demo.fstr.json\n├── demo-output          <-- generated\n│   └── sub-folder\n│       └── readme.txt\n├── scripts\n│   ├── child-script.js\n│   └── parent-script.js\n└── sub-template\n    └── readme.txt\n```\n\n\n### Lifecycle scripts and fileHandler\n\nImport and run scripts at different points in the runtime.  \n\n<b>scripts.before:</b>  \nRuns after source material exists on disk (after pulling from remote, or on finding local path), but before the render.  \n```json\n{\n  // ...\n  \"scripts\": {\n    \"before\": \"rm -rf old-files\"\n  }\n}\n```\n\n<b>fileHandler:</b>  \nRuns after building source tree and initializing renderer. Used when registering callbacks for during render.  \n```typescript\nfileHandler?: (recipe: Recipe, renderer: Renderer) => void | Promise<void>;\n```\n\n<b>scripts.after:</b>  \nRuns after render and all files copied. Useful for cleanup or logging.  \n```json\n{\n  // ...\n  \"scripts\": {\n    \"after\": \"./build.sh && cp output ../release\"\n  }\n}\n```\n\n---\n\n## API\n\n```\nfst <options | RECIPE>\n\noptions:\n  -c, --cache             Do not delete fetched files between runs\n  -o, --output PATH       Folder to output files\n  -p, --parallel COUNT    Max number of concurrent recipe parsing (default 10)\n  -r, --recipe RECIPE     Add recipe to builder (file or URL)\n  -s, --silent            Log less verbosely\n  -v, --verbose           Log more verbosely\n  -e, --exclude PATHS     Skip PATHS in template generation (default node_modules,.git)\n  -b, --no-buffer         Disable log buffering (default true unless not tty, CI=true, or TERM=dumb)\n```\n\nTry:  \n`npx fst --help`\n\n\n## Roadmap\n\n-[ ] write more tests  \n-[ ] update docs  \n-[ ] re-implement cli params (include / exclude files, cache, parallel, etc)  \n-[ ] re-implement recipe params (include / exclude files, cache, parallel, etc)  \n","readmeFilename":"readme.md","homepage":"https://github.com/acrontum/filesystem-template#readme","repository":{"type":"git","url":"git+https://github.com/acrontum/filesystem-template.git"},"bugs":{"url":"https://github.com/acrontum/filesystem-template/issues"}}