{"_id":"stark-sequencer","_rev":"35-f55f2a3d1869cb3400749c8a980f68af","name":"stark-sequencer","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.16":{"name":"stark-sequencer","version":"1.0.16","description":"A scheduler and monitor for soft real-time as a TypeScript esm module.","author":{"name":"Adrian Burlacu","email":"adrian.burlacu@live.com"},"repository":{"type":"git","url":"git+https://github.com/WeWatchWall/stark-sequencer.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"license":"MIT","keywords":["sequencer","typescript","timesync","vuex"],"main":"dist/index.js","scripts":{"lint":"eslint src/ --ext .js,.jsx,.ts,.tsx","clean":"rm -rf dist build package","build-all":"yarn clean && yarn install","postinstall":"node build.js","publish":"node publish.js"},"devDependencies":{"@types/jest":"^26.0.21","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","browser-env-vars":"^1.1.1","esbuild":"^0.11.23","eslint":"^7.22.0","eslint-plugin-vue":"^7.17.0","jest":"^26.6.3","latest-version":"^6.0.0","ts-jest":"^26.5.4","typedoc":"^0.20.35","typescript":"^4.2.3"},"dependencies":{"browser-assert":"^1.2.1","events":"^3.3.0","flat-promise":"^1.0.2","lodash":"^4.17.21","objectmodel":"^4.3.0","timesync":"^1.0.8","vue":"^2.6.14","vuex":"^3.6.2"},"gitHead":"f3640af14f65c4cb0ce5008ecc33cdf226969462","bugs":{"url":"https://github.com/WeWatchWall/stark-sequencer/issues"},"homepage":"https://github.com/WeWatchWall/stark-sequencer#readme","_id":"stark-sequencer@1.0.16","_nodeVersion":"14.17.1","_npmVersion":"7.22.0","dist":{"integrity":"sha512-HYdda7rqzDG17Mt1eqNNKaZsg8XSwFrCtvLtGyO768grj0L6gPGQi9Hlbo9/X5abdIQIEF2bE8t5iOuyHrHvsA==","shasum":"67f2b343f83242572805cda8fb587a90da5951ac","tarball":"https://registry.npmjs.org/stark-sequencer/-/stark-sequencer-1.0.16.tgz","fileCount":25,"unpackedSize":233552,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXaoy1Xyzwfkzcd/JDlMzLNwnO0knR1arOtBokHNYu6wIgRUYVuf8yUdQ9vMmaB5wnOqOABq5g4+HiB4dT534g5SA="}]},"_npmUser":{"name":"adrian-burlacu-software","email":"adrian.burlacu@live.com"},"directories":{},"maintainers":[{"name":"adrian-burlacu-software","email":"adrian.burlacu@live.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stark-sequencer_1.0.16_1632038885772_0.23144526627774575"},"_hasShrinkwrap":false},"1.1.0":{"name":"stark-sequencer","version":"1.1.0","description":"A scheduler and monitor for soft real-time as a TypeScript esm module.","author":{"name":"Adrian Burlacu","email":"adrian.burlacu@live.com"},"repository":{"type":"git","url":"git+https://github.com/WeWatchWall/stark-sequencer.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"license":"MIT","keywords":["sequencer","typescript","timesync","vuex"],"main":"dist/index.js","scripts":{"lint":"eslint src/ --ext .js,.jsx,.ts,.tsx","clean":"rm -rf dist build package","build-all":"yarn clean && yarn install","postinstall":"node build.js"},"devDependencies":{"@types/jest":"^26.0.21","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","esbuild":"^0.11.23","eslint":"^7.22.0","eslint-plugin-vue":"^7.17.0","jest":"^26.6.3","latest-version":"^6.0.0","ts-jest":"^26.5.4","typedoc":"^0.20.35","typescript":"^4.2.3"},"dependencies":{"browser-assert":"^1.2.1","browser-env-vars":"^1.1.1","events":"^3.3.0","flat-promise":"^1.0.2","lodash":"^4.17.21","objectmodel":"^4.3.0","timesync":"^1.0.8","vue":"^2.6.14","vuex":"^3.6.2"},"gitHead":"0aa53bdd3c5c9998c71b004f41f450ea287dcbcb","bugs":{"url":"https://github.com/WeWatchWall/stark-sequencer/issues"},"homepage":"https://github.com/WeWatchWall/stark-sequencer#readme","_id":"stark-sequencer@1.1.0","_nodeVersion":"14.17.1","_npmVersion":"7.22.0","dist":{"integrity":"sha512-oFiCx9aHhvpz6MYzy6fl/FkxbxjJ3IAjtOwt1ij36ElMmzTbAo7MeNvAP0ZUGpzYKq4kBXjQEuFQlM/hTx/pXA==","shasum":"1b8c53e5e5ca829890e36291b2bb54aca7b08819","tarball":"https://registry.npmjs.org/stark-sequencer/-/stark-sequencer-1.1.0.tgz","fileCount":25,"unpackedSize":233515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh27/OCRA9TVsSAnZWagAAIt8P/1xifT5KYsEO5r0bdZVz\nBDrVuzqPgwwY3ry/uwdk6YZ6puNv/8uK29SFiL1l+6QvHg4pHQpj5VlYgEga\n3k7TAzdlPi2z5L/3J6VyptEmnDqnoW6VK+Sp+K4QaoExx3mrXpZX1YHc/q7T\naK4rfED+ZvSdT3VcaE24BbwLYtL61iutb4a8vUsy9xQfSlT8eTYLIyEUVV/8\nbZma9Yz620aUJtjI7kB5Opuv6wIyniHZhXl4nOuV0gLD5/7A7+BsMfCITb+e\nUSBllzErZyoYycOzNVLZbXw7towi8P+NPM4/qpa9yqYtWIam/UFt5B5jiNMk\n5HNCjClmR3gZ+YEXnJxMyNuhPJK0HXGna+H3zp/2zkt3NLZ4QWoNYWWLlXj7\njJRLFr47/RytFQq6omKodY6nO8Luk3ThHGc64j8x7aXsrHqSQ6iQ542Jjx78\na7tHTPIb7SC188pNB6dIr7Csv1nH/39fayA0FPGDQNiMA6evCU4OGxVp7CV9\ngrwwl4lLmPZzd+UFIsFkoZy+PNhkXjnbSMMCLgqq/4OLdzh62BApyC3NOJvt\neIxMl/sqPNiuXreJCPyOOz/edwFlqZt3Gj6gmMRJ1mgACDUM31BTBAO4xcMu\nSWYTi4FJfswbQu1N/CEOdf5XaEufS9uk36T1a0gWVCOlPQrM4IYuggnE0tRZ\n9kd+\r\n=KRsj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF5b6Mr0rNJtIGrv37FsEbEuGDc1eGlLaK8z6mMrvPRKAiBVhdHLy2MPRUZ9ZHbCsowsQ13rqML7OMGeDGvbCMF+PQ=="}]},"_npmUser":{"name":"adrian-burlacu-software","email":"adrian.burlacu@live.com"},"directories":{},"maintainers":[{"name":"adrian-burlacu-software","email":"adrian.burlacu@live.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stark-sequencer_1.1.0_1633937501337_0.4353910339349325"},"_hasShrinkwrap":false}},"time":{"created":"2021-08-27T13:06:53.849Z","1.0.0":"2021-08-27T13:06:53.954Z","modified":"2022-05-18T15:32:45.377Z","1.0.1":"2021-08-27T13:17:14.499Z","1.0.2":"2021-08-27T13:21:30.612Z","1.0.3":"2021-08-27T13:30:12.192Z","1.0.4":"2021-08-27T13:52:01.675Z","1.0.5":"2021-08-27T14:05:31.082Z","1.0.6":"2021-08-27T14:42:48.591Z","1.0.7":"2021-08-27T15:01:34.788Z","1.0.8":"2021-08-27T15:51:08.559Z","1.0.9":"2021-08-29T10:04:13.545Z","1.0.10":"2021-08-29T11:11:59.410Z","1.0.11":"2021-08-29T11:19:46.111Z","1.0.12":"2021-09-01T18:23:55.022Z","1.0.13":"2021-09-09T14:44:21.495Z","1.0.14":"2021-09-12T09:01:32.990Z","1.0.15":"2021-09-12T09:13:19.932Z","1.0.16":"2021-09-19T08:08:05.926Z","1.1.0":"2021-10-11T07:31:41.510Z"},"maintainers":[{"name":"adrian-burlacu-software","email":"adrian.burlacu@live.com"}],"description":"A scheduler and monitor for soft real-time as a TypeScript esm module.","keywords":["sequencer","typescript","timesync","vuex"],"author":{"name":"Adrian Burlacu","email":"adrian.burlacu@live.com"},"license":"MIT","readme":"# Soft Real-Time Sequencer in TypeScript\r\n\r\n[![Build and test status](https://github.com/WeWatchWall/stark-sequencer/workflows/Lint%20and%20test/badge.svg)](https://github.com/WeWatchWall/stark-sequencer/actions?query=workflow%3A%22Lint+and+test%22)\r\n[![NPM version](https://img.shields.io/npm/v/stark-sequencer.svg)](https://www.npmjs.com/package/stark-sequencer)\r\n\r\nLibrary that allows users to schedule a list of changes to a [Vuex(v.3)](https://vuex.vuejs.org/api/) store's state. Can optionally sync with a server that is running [timesync](https://www.npmjs.com/package/timesync). An esm module written in TypeScript, tested in the browser but it should also run on the server.\r\n\r\n## Getting Started\r\n\r\n```bash\r\nnpm install stark-sequencer\r\n```\r\n\r\n## Usage and Options\r\n\r\n```typescript\r\nimport { StarkSequencer } from \"stark-sequencer\";\r\n\r\n// Default options. Will sync from the page's URL/timesync by default.\r\nlet options = {\r\n    isSync: false,\r\n    host: \"\",\r\n    path: \"timesync\"\r\n  };\r\nStarkSequencer.init({options});\r\n\r\n// Monitor a time-based process like a movie or audio track.\r\nlet mockTrackTime = 0;\r\nlet monitor = StarkSequencer.monitor({\r\n    length: 30e3,  // Used for automatic destruction at the end. Default: 10 min.\r\n    pollCallback: () => mockTrackTime,  // Get the time from the track.\r\n    start: Date.now() + 5e3, // Start at the synched time. Default: starts immediately.\r\n    pollInterval: 2e2,  // In milliseconds, min 15ms. Default: 100ms.\r\n    diffInterval: 30,  // Margin of error in milliseconds. Default: 100ms.\r\n\r\n    // Update the store's time even if \r\n    // the polled time matches the monitored time.\r\n    // Default: false.\r\n    isForceUpdate: true,\r\n    isRepeat: false   // Control for looping. Default: false.\r\n  });\r\n\r\n// Execute mutations on the Vuex store.\r\nlet executor = StarkSequencer.execute({\r\n    init: { x: 0, y: 0 },  // The initial object state. Default: {}.\r\n\r\n    // Events sequence.\r\n    events: [\r\n      {time: 200, value: { x: 20, y: 0 }},\r\n      {time: 400, value: { x: 20, y: 40 }},\r\n      {time: 600, value: { x: 40, y: 40 }},\r\n      ...etc\r\n    ],\r\n    buffer: 50, // Number of buffered events. Default: 100.\r\n    start: Date.now() + 5e3, // Start at the synched time. Default: starts immediately.\r\n\r\n    // In milliseconds. Optional, min 15ms. \r\n    // Default = 15ms < min time between events / 2 < 150ms.\r\n    pollInterval: 2e2,\r\n    isRepeat: true  // Control for looping. Default: false.\r\n  });\r\n```\r\n\r\n## Results\r\n\r\nWatch for changes, the user can use a framework like Vue to update the DOM.\r\n\r\n```typescript\r\nlet currentTime = Date.now();\r\n\r\n// Output\r\n// time: Current prescribed and synched time.\r\n// startTime: Synchronized time for the beginning of the sequence.\r\n// updateTime: Time of last update.\r\n// isEnd:  Flag can be set for premature kill signal, or set when the sequence is finished.\r\nmonitor.state.subscribe((mutation, state) => {\r\n  mockTrackTime = state.time;  // This would scrub the media in a real use case.\r\n\r\n  // If you enabled sync, an updated offset value in ms can be accessed here.\r\n  let offset = StarkSequencer.offsetPointer.offset;\r\n\r\n  console.log(`Time: ${state.updateTime - currentTime - offset}, Value: ${mockTrackTime}`);\r\n});\r\n\r\n// Output\r\n// value: Current state.\r\n// startTime: Synchronized time for the beginning of the sequence.\r\n// updateTime: Time of last update.\r\n// isEnd: Flag can be set for premature kill signal, or set when the sequence is finished.\r\nexecutor.state.subscribe((mutation, state) => {\r\n  \r\n  // If you enabled sync, an updated offset value in ms can be accessed here.\r\n  let offset = StarkSequencer.offsetPointer.offset;\r\n\r\n  console.log(`Time: ${state.updateTime - currentTime - offset}, Value: ${state.value}`);\r\n});\r\n```\r\n\r\n## Destroy\r\n\r\n```typescript\r\nmonitor.delete();\r\nexecutor.delete();\r\n```\r\n","readmeFilename":"README.md","homepage":"https://github.com/WeWatchWall/stark-sequencer#readme","repository":{"type":"git","url":"git+https://github.com/WeWatchWall/stark-sequencer.git"},"bugs":{"url":"https://github.com/WeWatchWall/stark-sequencer/issues"}}