{"_id":"@atek-cloud/tsgen","_rev":"4-decf22dc0f264240fc19b6d9af331f4a","name":"@atek-cloud/tsgen","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.1":{"name":"@atek-cloud/tsgen","version":"0.0.1","description":"Typescript generation toolset","type":"module","bin":{"tsgen":"dist/bin.js"},"scripts":{"build":"tsc --project tsconfig.json","test":"echo ''"},"keywords":[],"author":{"name":"Paul Frazee","email":"pfrazee@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/atek-cloud/tsgen.git"},"bugs":{"url":"https://github.com/atek-cloud/tsgen/issues"},"homepage":"https://github.com/atek-cloud/tsgen#readme","dependencies":{"@atek-cloud/json-schema-to-dts":"^1.5.0","js-yaml":"^4.1.0","json-pointer":"^0.6.1","node-fetch":"^2.6.1","subcommand":"^2.1.1","ts-json-schema-generator":"^0.95.0","ts-morph":"^11.0.3"},"devDependencies":{"@types/node":"^16.6.1","typescript":"^4.3.5"},"gitHead":"7ecb8f8d3939462222ace54aee1f89b9f5044a9c","_id":"@atek-cloud/tsgen@0.0.1","_nodeVersion":"16.1.0","_npmVersion":"7.11.2","dist":{"integrity":"sha512-YGwto9XjtwYx2tQ0ShjUSEX2cGzuTU3v/39tnvnyq0psRBcVI4mRT+gZGknj8DVBZIJZTj7j7Edq1CfjqkVrcQ==","shasum":"3139e1fd86fbabecd278e46c7697b2635863081c","tarball":"https://registry.npmjs.org/@atek-cloud/tsgen/-/tsgen-0.0.1.tgz","fileCount":27,"unpackedSize":82233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLP9DCRA9TVsSAnZWagAAj5IQAJQCAkvNuDhZcY81eZ7o\nS0gGsWk05UjbrCq8Cg7g37L79OQUeIPi9YQ4W91Y4zPCiyzCzeCqKiiF3NiC\nncHD5CIDC2a2wFrJ6UtTnyx4A4kR7a83EitUJ1hqrlOrkPRITuY3QcQmj6zt\nykfaUYilyDeNAyB1jK4RjsAhmBW4E+Dz81jPuXhLP6O4rZtp9FgcURbw2pyF\n0s6KxqKFBjYP6otHM5RvpEn4ZlKk+3j501pQu6OKe7mFgj6zM+owuiyq4G58\njzkWgJ9rYco8eFEsHfs9K8kk2UXKGlfKoJ+QHw5ldJDzDhRKYs4gvauzJO09\nolthLAsJWcou+NVE2SUXNJFTtSZMwWBtbrmyiPiGyDDmuJfCo/6I7iYiR4fm\nXzt0fl+/6VfwZ55MykMmIc0z0Sk/rAqBovBdr+46Q05igekwZ5O69f2M1NX1\n5CVIoBUqIknKi5+HaXWOgVGBLzxxci2JxIHOwUNTxtOWzGyMOpfwBfN7Obu0\nUSfw6YPt8i+C7B9WuZbXGu1JvWEHpfM7U7EF56DWpA1megzIR4Zbmy5N0g3S\nMvO0cNRDe8WGge5tN95cvEXiaIz/o3v8sbK6q9tEQldn8zto1g9jkcDwJWgt\nxnV9zv9+oQ1ulHE/YEhm198DfXtfz+F0QJasQxupsACqwfQq8DaGUvwGbodw\n4Lkj\r\n=ysy+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoRTRq3uKwHerZPOfqkZ2iUX82so6+l2ttZFritC6iuAIgDtzNGfCBh6UWZGBKKBjcCC0H1LECcYnbiN/D3f6ELwQ="}]},"_npmUser":{"name":"pfrazee","email":"pfrazee@gmail.com"},"directories":{},"maintainers":[{"name":"pfrazee","email":"pfrazee@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tsgen_0.0.1_1630338883421_0.23244249959609298"},"_hasShrinkwrap":false},"0.0.2":{"name":"@atek-cloud/tsgen","version":"0.0.2","description":"Typescript generation toolset","type":"module","bin":{"tsgen":"dist/bin.js"},"scripts":{"build":"tsc --project tsconfig.json","test":"echo ''"},"keywords":[],"author":{"name":"Paul Frazee","email":"pfrazee@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/atek-cloud/tsgen.git"},"bugs":{"url":"https://github.com/atek-cloud/tsgen/issues"},"homepage":"https://github.com/atek-cloud/tsgen#readme","dependencies":{"@atek-cloud/json-schema-to-dts":"^1.5.0","js-yaml":"^4.1.0","json-pointer":"^0.6.1","node-fetch":"^2.6.1","subcommand":"^2.1.1","ts-json-schema-generator":"^0.95.0","ts-morph":"^11.0.3"},"devDependencies":{"@types/node":"^16.6.1","typescript":"^4.3.5"},"gitHead":"3ea82299fbacfdf8d354b7b5e7fd73381d5d4cdf","_id":"@atek-cloud/tsgen@0.0.2","_nodeVersion":"16.1.0","_npmVersion":"7.11.2","dist":{"integrity":"sha512-p/0qAgeZEZHMWWhJ9XsYBD32Pt0HDbI4oSFZ9sUfwbFtRNsa3ALKNbkhg0b/mGFMPaWS6JkbtYGwZ47WQeOMuQ==","shasum":"94d6defc546d809533e93d439425323830b2ad86","tarball":"https://registry.npmjs.org/@atek-cloud/tsgen/-/tsgen-0.0.2.tgz","fileCount":27,"unpackedSize":82437,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLP/ZCRA9TVsSAnZWagAABsUP/iZ5Xb0eUWj6MXMJWuWf\nrkhYSLaSwyXNc7jKev30LveDBQcZ8dxESYvVfx256DOiIQ2mFWq+EVn1+qyc\n/nwALsKFW0VqoH6O1BEILX+aYDcnNWCM/26jc1BVI9teocwbscRC4YMxrvqf\nQwO1D+stD8cegMt4SUaNmm+URHgH8b5aTMrR4Y143HFs+/l8A6tOhKrA55c6\noQmseQvO+sZ1XiniqmTuFWPTS30zpc6iAA+5mlpPj5KuI+IBcyKqC7/waxGQ\nS4So3S+osaiW3+3F9GdYdWwE3ckow1K597s6U2uQd+ZjpElSYGtWuisE6wWL\nhV/8FInxxaFPg9PsELLXH0jVDLb8oNUlvZhLMxqO0/fQGSgCblzNTE/Kgmaw\nwwepYQXHc1+IM7VUEZe5eToliBF9ZrmbhfMgjvE8oP7TlaZd+L2NwrR6s3A5\nULh+I24nne7L0i4iq1ovnS8bUQnu2ySw9T5uRiqYJqYsjQermX8hb4aOhYiU\nlgbOD2tm/6N4HL1nsYKoZ+RoeLD9Znkya90LCvCWkEDN9mS50Zl/k17VY1W0\noJSYzDGfVNmOXnIR7fSgP4bFltj5ZW8FkvSyqrDN8IlnKLCOsqZ4qgjsKwZf\n30FIte4SUALjs72iDk/+PxpNJCz3TmKs5C+dYL6W0FA/+17F8zJsPv2k+6k0\nNedn\r\n=VMUn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF+EKTEowXSPudQTZ7sKgOaBRA+xxWWkhofpMC2F5yRBAiAI2BF1luuQ/aDwYBcoTzb84iGjEClzZ8akjthSLJvSHg=="}]},"_npmUser":{"name":"pfrazee","email":"pfrazee@gmail.com"},"directories":{},"maintainers":[{"name":"pfrazee","email":"pfrazee@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tsgen_0.0.2_1630339033815_0.6126794204953527"},"_hasShrinkwrap":false},"0.0.3":{"name":"@atek-cloud/tsgen","version":"0.0.3","description":"Typescript generation toolset","type":"module","bin":{"tsgen":"dist/bin.js"},"scripts":{"build":"tsc --project tsconfig.json","test":"echo ''"},"keywords":[],"author":{"name":"Paul Frazee","email":"pfrazee@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/atek-cloud/tsgen.git"},"bugs":{"url":"https://github.com/atek-cloud/tsgen/issues"},"homepage":"https://github.com/atek-cloud/tsgen#readme","dependencies":{"@atek-cloud/json-schema-to-dts":"^1.5.0","js-yaml":"^4.1.0","json-pointer":"^0.6.1","node-fetch":"^2.6.1","subcommand":"^2.1.1","ts-json-schema-generator":"^0.95.0","ts-morph":"^11.0.3"},"devDependencies":{"@types/node":"^16.6.1","typescript":"^4.3.5"},"gitHead":"f496f9a8ce411b7b2bf9f42e057154dbb8efeb2d","_id":"@atek-cloud/tsgen@0.0.3","_nodeVersion":"16.1.0","_npmVersion":"7.11.2","dist":{"integrity":"sha512-tt5kEjpscUY8Li5qO/KUEKiF1jtoS7PnsClv1hQi6uvPtEJE/sWUK9n83dXJHC7LsnD5atFdeMXk56KmHMYrRA==","shasum":"f74fd82eb2ac85a4443d1d691dc138694a2ff730","tarball":"https://registry.npmjs.org/@atek-cloud/tsgen/-/tsgen-0.0.3.tgz","fileCount":38,"unpackedSize":87255,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLQDVCRA9TVsSAnZWagAAGLoP/js48pmo11elSwgc1MWh\nusBQb+5zccJHskM4QpkN9iFWqTQ635znW78Qk5v9n6vaonKkS9Ik4qM9t0pI\nD+Bp6mck9/5iD4dmvyazS+9PNkM0/XfWLCDaB7+TvPNf6uzgudfOzqcTpSUG\njcf5FEq3rVwsmqkLlIaxMEg/RROhoPjJd7J2UCk1E8X6MWkj4HJWcogrm0M7\n/mgLbJubVzemlCWloOFE7kN3CdG/xqO34wRes7tZivFxOEoahxUCvX9ldp0m\nuGDIDYSvGyXpqBTe+pXhlGS+5HvfweyW9h49fx/2+1ygXQdQJbNJSaF0s/cC\nzKK9osxJBx1YoSOmxHDNU9WgDmWD08U/fQj1hdMn9dn+qqVBEWCPar5d5gYm\nfoTkMgsaqQX5KirHxu0lmt4LT+bhh0tNipBgfF0f6tFbQEvOHT3K0kIXq9Jf\nWZ0+ivTBNONXL8C/3I46zooWG2lHvA0PV8O2sKvQt6wdTKvz6Ju5uOLrmVjl\nVIKUKrRyGNjrUJabl+da+ARxTcId36AmLoPwxUqWDVnIxFjYiHqyEbjujfjA\nP6Q/CZWgfLQOWGVCybUhdRTqa2PQ1PjzXsZ/Wg+h4qEHVzZE7e/VTdvrDwKV\neVH+19JAWFNxIziqYJgMEM7pyyjMJO9jyphptPTdqhpmCRSm3mWif+nIA+16\nx/HO\r\n=tRyr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGt5hA80jXuIKFZx+quIxRoiNOWjEM+mpy/J320wVlzfAiAvc1+qK4tm0GKl9cwa74+/GCIRHlrppT9MUQxUpg9B1Q=="}]},"_npmUser":{"name":"pfrazee","email":"pfrazee@gmail.com"},"directories":{},"maintainers":[{"name":"pfrazee","email":"pfrazee@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tsgen_0.0.3_1630339285268_0.4461347510515732"},"_hasShrinkwrap":false},"0.0.4":{"name":"@atek-cloud/tsgen","version":"0.0.4","description":"Typescript generation toolset","type":"module","bin":{"tsgen":"dist/bin.js"},"scripts":{"build":"tsc --project tsconfig.json","test":"echo ''"},"keywords":[],"author":{"name":"Paul Frazee","email":"pfrazee@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/atek-cloud/tsgen.git"},"bugs":{"url":"https://github.com/atek-cloud/tsgen/issues"},"homepage":"https://github.com/atek-cloud/tsgen#readme","dependencies":{"@atek-cloud/json-schema-to-dts":"^1.5.0","js-yaml":"^4.1.0","json-pointer":"^0.6.1","node-fetch":"^2.6.1","subcommand":"^2.1.1","ts-json-schema-generator":"^0.95.0","ts-morph":"^11.0.3"},"devDependencies":{"@types/node":"^16.6.1","typescript":"^4.3.5"},"gitHead":"27ac8a5ce8c921b62e105839ef2e647dcc4ad681","_id":"@atek-cloud/tsgen@0.0.4","_nodeVersion":"16.1.0","_npmVersion":"7.11.2","dist":{"integrity":"sha512-4yUYvbEPVr0EPlU+UwktgQ/Rj372AZo9Gr51aYlmkV/Fce5mw97kADMqKJWpKgdlSnmuHG+kV0hgzIY9TMMOHQ==","shasum":"d55b7789de4bbb602228750b42d50974e019e839","tarball":"https://registry.npmjs.org/@atek-cloud/tsgen/-/tsgen-0.0.4.tgz","fileCount":38,"unpackedSize":85645,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLUF/CRA9TVsSAnZWagAAy6oP/0eQ+J08Zzv0FI8RVHbd\nfo94zmgckVO4iNsW0mn64RVOzPBs1lH1Rorv3+lmEGpZ7W4XpJ9ihoDCPKYb\nWmL01QDMmt3w0ZqfiT7FZYei1COUTeVMot99p8D2xuOT/696Ub4txEeWkSdf\n6Mz417Jocxu9TCyIkKJccRiPNyeB1isF0XEh+RYs74Q94ieABYO5dBXh50bh\ntWxIR+ybHiS1fvvxYPs4oVuarp0gr4cHTYmN4PNpnDoDcDol0qc9t59mZCYw\nVdJOXvyQBKuy42XAZY1iNb+aONWo/iecPo4CgXkUDPJTUAWRYf49UQtbTw2R\niIthmIkJp/R7b57jzLV0nm9RmyxGf/Q+xYRKrP4KIaZ3CmEuoz+gkmJJo91T\nquWLvN3AjTTJkJrmXKZS9ARoGFGvoVAm4v3HsVxXUi8ul74FJbpmTWhsIW/m\n/gy9zb8iUu9Kz+P0f2+RcStOWqKu857+aLwJfqpwkIJW3jSSkxTSgFexzcnK\nIfbA4nLwExtpp2+/mWMHrB3D5BZiQ8lAu8COcXQxed4QfEs8Y8++XxRSKnHW\nuS0Ee3SG5P2bGEJDCEptWIEnIydmAOiD3acWTCo1k+UtrhvcMcNZFR/WQBPs\nvlZVc3aYZme2oewIxk/nSMweqHwjl9vt+bYFOPCF8n5EY2kT8RcADeHJDIcN\nzm20\r\n=2hRn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEN+gNg+aARt8kSuNu6bgOvpwzpyK1nMEsjSYQnQcTY2AiEA+bOjklii9ld16AbQY1VWzwECL1l+wi1tufW9SriAP24="}]},"_npmUser":{"name":"pfrazee","email":"pfrazee@gmail.com"},"directories":{},"maintainers":[{"name":"pfrazee","email":"pfrazee@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tsgen_0.0.4_1630355838792_0.8239879103759866"},"_hasShrinkwrap":false}},"time":{"created":"2021-08-30T15:54:43.360Z","0.0.1":"2021-08-30T15:54:43.573Z","modified":"2022-04-04T16:03:04.237Z","0.0.2":"2021-08-30T15:57:13.972Z","0.0.3":"2021-08-30T16:01:25.420Z","0.0.4":"2021-08-30T20:37:19.110Z"},"maintainers":[{"name":"pfrazee","email":"pfrazee@gmail.com"}],"description":"Typescript generation toolset","homepage":"https://github.com/atek-cloud/tsgen#readme","keywords":[],"repository":{"type":"git","url":"git+https://github.com/atek-cloud/tsgen.git"},"author":{"name":"Paul Frazee","email":"pfrazee@gmail.com"},"bugs":{"url":"https://github.com/atek-cloud/tsgen/issues"},"license":"MIT","readme":"# `tsgen` Typescript generator for Atek\n\n\nAtek defines RPC and database schemas using URL IDs, various options, (in some cases) JSON Schemas. These can be somewhat tedious to define manually.\n\nTo make life easier, we use `.d.ts` files to declare the schemas and API interfaces and then we generate the API code using this `tsgen` tool.\n\nA `.d.ts` file should include a couple of conventions:\n\n- It should start with a \"frontmatter\" which is a multi-line comment formatted in YAML. This must include an `id` and `type` value.\n- The `id` should be a URL without any protocol or extension.\n- The `type` should be \"api\" or \"adb-record\"\n- The metadata can (and should) also include `title` and `description`.\n- If `type` is \"api\" then you can also indicate `transport` but tsgen doesnt make anything interesting for proxy transports.\n- It should export a default interface.\n\n## Usage\n\n```\natek tsgen gen-file --in {dts_file_path} --out {output_folder} --env {env}\natek tsgen gen-folder --in {dts_folder_path} --out {output_folder} --env {env}\n```\n\nUse `gen-file` to generate TS for a single dts, and `gen-folder` for a folder of dts files.\n\nChoose an `--env` value based on your application:\n\n- `node` A nodejs atek application\n- `host` The \"atek\" project (you only need this if working on atek)\n\nIf using `node`, you will need to install `@atek-cloud/node-rpc` as the generated code depends on it.\n\n## Example\n\nSuppose we have a file `ping-api.d.ts`.\n\n```typescript\n/*\nid: atek.cloud/ping-api\ntype: api\ntitle: Ping API\ndescription: Utility API used for debugging and testing liveness.\n*/\n\nexport default interface PingApi {\n  // Ask for a pong back with the given parameter\n  ping (param: number): Promise<number>\n}\n```\n\nIf we run:\n\n```\natek tsgen gen-file --in ping-api.d.ts --out ./gen --env host\n```\n\nWe will get the following output:\n\n#### `./gen/atek.cloud/ping-api.ts`\n\n```typescript\n/**\n * File generated by Atek tsgen\n * env=host\n * DO NOT MODIFY\n */\nimport { URL } from 'url';\nimport { ApiBrokerClient } from '@atek-cloud/api-broker';\n\nexport const ID = \"atek.cloud/ping-api\";\nexport const REVISION = undefined;\n\nexport default class PingApiClient extends ApiBrokerClient {\n  constructor() {\n    super(\"atek.cloud/ping-api\")\n  }\n\n  ping(param: number): Promise<number> {\n    return this.$rpc(\"ping\", [param])\n  }\n}\n```\n\n#### `./gen/atek.cloud/ping-api.server.ts`\n\n```typescript\n/**\n * File generated by Atek tsgen\n * env=host\n * DO NOT MODIFY\n */\nimport { URL } from 'url';\nimport { ApiBrokerServer, ApiBrokerServerHandlers } from '@atek-cloud/api-broker';\n\nexport const ID = \"atek.cloud/ping-api\";\nexport const REVISION = undefined;\nexport const SCHEMAS = {\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"definitions\":{\"PingApi\":{\"type\":\"object\"},\"api_PingApi_Ping\":{\"type\":\"object\",\"properties\":{\"params\":{\"type\":\"array\",\"items\":{\"type\":\"number\"},\"minItems\":1,\"maxItems\":1},\"returns\":{\"type\":\"number\"}},\"required\":[\"params\",\"returns\"]}}};\nexport const EXPORT_MAP = {\"methods\":{\"ping\":\"#/definitions/api_PingApi_Ping\"},\"events\":{}};\n\nexport default class PingApiServer extends ApiBrokerServer {\n  ID = \"atek.cloud/ping-api\";\n  REVISION = undefined;\n\n  constructor(handlers: ApiBrokerServerHandlers) {\n    super(handlers, SCHEMAS, EXPORT_MAP)\n  }\n}\n```\n\nYou can now use these APIs to call and serve the ping API:\n\n```typescript\nimport PingApiClient from './gen/atek.cloud/ping-api.ts'\n\nconst api = new PingApiClient()\nawait api.ping(42) // => 42\n```\n\n```typescript\nimport createExpressApp, * as express from 'express'\nimport PingApiServer from './gen/atek.cloud/ping-api.server.ts'\n\nconst apiServer = new PingApiServer({\n  ping (param: number): Promise<number> {\n    return Promise.resolve<number>(param)\n  }\n})\n\nconst PORT = Number(process.env.ATEK_ASSIGNED_PORT)\nconst app = createExpressApp()\napp.use(bodyParser.json())\napp.post('/_api/ping', (req, res) => apiServer.handle(req, res, req.body))\napp.listen(PORT, () => {\n  console.log(`Ping server running at: http://localhost:${PORT}/`)\n})\n```","readmeFilename":"README.md"}