{"id":17913637,"url":"https://github.com/faressoft/ticks-tracer","last_synced_at":"2025-04-03T07:24:00.039Z","repository":{"id":91060288,"uuid":"139455912","full_name":"faressoft/ticks-tracer","owner":"faressoft","description":"Takes snapshots for an object across event loop ticks","archived":false,"fork":false,"pushed_at":"2018-09-01T15:27:57.000Z","size":13,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-24T02:37:20.039Z","etag":null,"topics":["async","control","debug","fake","flow","nexttick","process","promise","setimmediate","snapshot","test","tick","timer","trace","unit-testing"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/faressoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-02T14:40:53.000Z","updated_at":"2018-09-01T15:27:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"3f1d60fb-7356-4d3d-93a7-c6237e36097c","html_url":"https://github.com/faressoft/ticks-tracer","commit_stats":{"total_commits":11,"total_committers":1,"mean_commits":11.0,"dds":0.0,"last_synced_commit":"da055a22c791d5859acf0dc696d7a05133c830f4"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faressoft%2Fticks-tracer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faressoft%2Fticks-tracer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faressoft%2Fticks-tracer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faressoft%2Fticks-tracer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/faressoft","download_url":"https://codeload.github.com/faressoft/ticks-tracer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246953676,"owners_count":20860062,"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":["async","control","debug","fake","flow","nexttick","process","promise","setimmediate","snapshot","test","tick","timer","trace","unit-testing"],"created_at":"2024-10-28T19:52:56.833Z","updated_at":"2025-04-03T07:24:00.020Z","avatar_url":"https://github.com/faressoft.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ticks Tracer\n\n[![npm](https://img.shields.io/npm/v/ticks-tracer.svg)](https://www.npmjs.com/package/ticks-tracer)\n[![npm](https://img.shields.io/npm/l/ticks-tracer.svg)](https://github.com/faressoft/ticks-tracer/blob/master/LICENSE)\n\n\u003e Takes snapshots for an object across event loop ticks.\n\n# Hint\n\nGood for testing flow control packages like `flowa`, `async`, `q`, etc.\n\n# Table of Contents  \n\n* [Installation](#installation)\n* [Usage](#usage)\n* [API](#api)\n* [License](#license)\n\n## Installation\n\n```\nnpm install --save ticks-tracer\n```\n\n## Usage\n\nTake snapshot on every `check` phase of the event loop (using `setImmediate` internally).\n\n```js\nvar TicksTracer = require('ticks-tracer');\n\n// A flow control package\nvar Flowa = require('flowa');\n\n// The object to trace\nvar context = {};\n\n// A dummy flow\nvar flow = new Flowa({\n  type: 'serial',\n  task1: generateDummyTask(1),\n  task2: generateDummyTask(2),\n  group1: {\n    type: 'parallel',\n    task3: generateDummyTask(3),\n    task4: generateDummyTask(4)\n  },\n  task5: generateDummyTask(5)\n});\n\n// Start tracing\nvar ticksTracer = new TicksTracer(context);\n\n// Execute the tasks\nflow.run(context).then(function(result) {\n\n  // Get the taken snapshots\n  console.log(ticksTracer.getSnapshots());\n  console.log(ticksTracer.getSnapshotsDiffs());\n\n  // Stop the tracing\n  ticksTracer.stop();\n\n});\n\n// Don't worry about this\nfunction generateDummyTask(id) {\n  \n  return function(context, callback) {\n    context['task' + id] = true;\n    setImmediate(callback);\n  };\n\n}\n```\n\nThe output is:\n\n```\n[\n  {},\n  { task1: true },\n  { task1: true, task2: true },\n  { task1: true, task2: true, task3: true, task4: true },\n  { task1: true, task2: true, task3: true, task4: true, task5: true }\n]\n```\n\n## API\n\n\u003cdl\u003e\n\u003cdt\u003e\u003ca href=\"#constructor\"\u003eTicksTracer(tracedObject)\u003c/a\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp\u003eTo create a TicksTracer object and start tracing\u003c/p\u003e\u003c/dd\u003e\n\u003cdt\u003e\u003ca href=\"#stop\"\u003estop()\u003c/a\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp\u003eStop tracing\u003c/p\u003e\u003c/dd\u003e\n\u003cdt\u003e\u003ca href=\"#getTicksCount\"\u003egetTicksCount()\u003c/a\u003e ⇒ \u003ccode\u003eNumber\u003c/code\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp\u003eGet the current tick number\u003c/p\u003e\u003c/dd\u003e\n\u003cdt\u003e\u003ca href=\"#getSnapshotAt\"\u003egetSnapshotAt(tick)\u003c/a\u003e ⇒ \u003ccode\u003eObject\u003c/code\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp\u003eGet a taken snapshot by a tick number\u003c/p\u003e\u003c/dd\u003e\n\u003cdt\u003e\u003ca href=\"#getSnapshots\"\u003egetSnapshots()\u003c/a\u003e ⇒ \u003ccode\u003eArray\u003c/code\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp\u003eGet all taken snapshots indexed by ticks numbers\u003c/p\u003e\u003c/dd\u003e\n\u003cdt\u003e\u003ca href=\"#getSnapshotsDiffs\"\u003egetSnapshotsDiffs()\u003c/a\u003e ⇒ \u003ccode\u003eArray\u003c/code\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003cp\u003eGet a list of snapshots that represent only the diffs\u003c/p\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003ca name=\"constructor\"\u003e\u003c/a\u003e\n\n## TicksTracer(tracedObject)\n\nTo create a TicksTracer object and start tracing.\n\n| Param        | Type                | Description                     |\n|--------------|---------------------|---------------------------------|\n| tracedObject | \u003ccode\u003eObject\u003c/code\u003e | The object to take snapshots of |\n\n\u003ca name=\"stop\"\u003e\u003c/a\u003e\n\n## stop()\n\nStop tracing.\n\n## getTicksCount() ⇒ \u003ccode\u003eNumber\u003c/code\u003e\n\nGet the current tick number.\n\n**Returns**: \u003ccode\u003eNumber\u003c/code\u003e\n\n## getSnapshotAt(tick) ⇒ \u003ccode\u003eObject\u003c/code\u003e\n\nGet a taken snapshot by a tick number.\n\n| Param | Type                | Description                     |\n|-------|---------------------|---------------------------------|\n| tick  | \u003ccode\u003eNumber\u003c/code\u003e | The tick number                 |\n\n**Returns**: \u003ccode\u003eObject\u003c/code\u003e\n\n## getSnapshots() ⇒ \u003ccode\u003eArray\u003c/code\u003e\n\nGet all taken snapshots indexed by ticks numbers.\n\n**Returns**: \u003ccode\u003eArray\u003c/code\u003e\n\n## getSnapshotsDiffs() ⇒ \u003ccode\u003eArray\u003c/code\u003e\n\nGet a list of snapshots that represent only the diffs\n\n**Returns**: \u003ccode\u003eArray\u003c/code\u003e\n\n# License\n\nThis project is under the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaressoft%2Fticks-tracer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaressoft%2Fticks-tracer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaressoft%2Fticks-tracer/lists"}