{"_id":"@allnulled/async-circuit","_rev":"1-88203490d0ebc3f50280a285e7250993","name":"@allnulled/async-circuit","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@allnulled/async-circuit","version":"1.0.0","keywords":["async","utils","circuit"],"author":{"name":"allnulled"},"license":"WTFPL","_id":"@allnulled/async-circuit@1.0.0","maintainers":[{"name":"allnulled","email":"todosanulados@gmail.com"}],"dist":{"shasum":"30457002538f49fdfd3a09c0eff47e7ed2247c02","tarball":"https://registry.npmjs.org/@allnulled/async-circuit/-/async-circuit-1.0.0.tgz","fileCount":9,"integrity":"sha512-5gju6zBcrU7EMA8rvp5u3iBJ6giT7OyxyJFVZeqkWbX95q2u8jdN0pdVA/YdqOSur+C6CRhsKHUMsNrYobw+nw==","signatures":[{"sig":"MEQCIFoBWhomd+hFMCdJmNKQwgK1yXShR45cWKXq8I5XINFfAiAYkeIXh4N3yWCpIEtUqRLw+VE+elSttZfCT1FD65R4Aw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":336374},"main":"async-circuit.js","gitHead":"9cb28fdb3b4083417c9cfb320bfb709ca08d7a7a","scripts":{"test":"npx mocha test.js"},"_npmUser":{"name":"allnulled","email":"todosanulados@gmail.com"},"_npmVersion":"9.6.7","description":"Permite pasar árboles de sync, serie, parallel y race a función asíncrona.","directories":{},"_nodeVersion":"18.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/async-circuit_1.0.0_1735440838198_0.7468217557931605","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@allnulled/async-circuit","version":"1.0.1","description":"Permite pasar árboles de sync, serie, parallel y race a función asíncrona.","main":"async-circuit.js","scripts":{"test":"npx mocha test.js"},"keywords":["async","utils","circuit"],"author":{"name":"allnulled"},"license":"WTFPL","gitHead":"0d6dc37c2972c88bebd7f1751a987f0293cd511b","_id":"@allnulled/async-circuit@1.0.1","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-7kA+V2LkIb5CtbbiAfTSmICOnfzvMscQRAgKv7MKZriaKAF26JWjHCUlc9yIS8PU/k5cGERWazfdEjKydPVqOw==","shasum":"1faf966716f578c7a62118cbb247ad388e8cc782","tarball":"https://registry.npmjs.org/@allnulled/async-circuit/-/async-circuit-1.0.1.tgz","fileCount":9,"unpackedSize":336407,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBcznE88i47hjRmi74LcA4gEZqtaiZvzD0VLqlC1EFTYAiBj1IVSlOtL0c/ou2ZpdHTY3i+TUZ0FL3UXkXW9HHH1YQ=="}]},"_npmUser":{"name":"allnulled","email":"todosanulados@gmail.com"},"directories":{},"maintainers":[{"name":"allnulled","email":"todosanulados@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/async-circuit_1.0.1_1735442745314_0.49027117919659724"},"_hasShrinkwrap":false}},"time":{"created":"2024-12-29T02:53:58.077Z","modified":"2024-12-29T03:25:45.739Z","1.0.0":"2024-12-29T02:53:58.413Z","1.0.1":"2024-12-29T03:25:45.571Z"},"author":{"name":"allnulled"},"license":"WTFPL","keywords":["async","utils","circuit"],"description":"Permite pasar árboles de sync, serie, parallel y race a función asíncrona.","maintainers":[{"name":"allnulled","email":"todosanulados@gmail.com"}],"readme":"# async-circuit\n\nPermite pasar árboles de sync, serie, parallel y race a función asíncrona.\n\n## Installación\n\n```sh\nnpm i -s @allnulled/async-circuit\n```\n\n## Importación\n\nEn node.js:\n\n```js\nrequire(\"@allnulled/async-circuit\");\n```\n\nEn html:\n\n```html\n<script src=\"node_modules/@allnulled/async-circuit/async-circuit.js\"></script>\n```\n\n## Idea\n\nLa idea es poder escribir mapas de circuitos con tuberías que permitan los modos más típicos de asincronicidad que son serie, paralelo y carrera.\n\nSe hace convirtiendo un mapa en un script que con `AsyncFunction` pasamos de código a función.\n\nEste mapa tiene unas condiciones especiales, donde:\n\n  - Solo se aceptan valores de tipo `function`, y `object` con una propiedad `$type` y un valor válido para ésta.\n  - Las `function` son usadas como código fuente, por lo cual se usa `toString()`, no valen funciones de código nativo.\n  - Los `object` son usados como pivote para grupos funcionales asíncronos.\n     - Cuando `$type` es `sync` es una lista de `$callbacks` en síncrono\n     - Cuando `$type` es `serie` es una lista de `$callbacks` en serie\n     - Cuando `$type` es `parallel` es una lista de `$callbacks` en paralelo\n     - Cuando `$type` es `race` es una lista de `$callbacks` en carrera\n\nSé que faltan muchas cosas, pero la API más básica sería esta, para mí.\n\n## Uso\n\nEl test es este:\n\n```js\n// Ejemplo de uso:\nconst data = {};\nconst setData = function(obj = {}) {\n    Object.assign(data, obj);\n};\nconst tree = {\n    $type: 'parallel',\n    $callbacks: [\n    {\n        $type: 'sync',\n        $callbacks: [\n        () => setData({ m1: 'Sync 1' }),\n        () => setData({ m2: 'Sync 2' })\n        ]\n    },\n    {\n        $type: \"race\",\n        $callbacks: [\n        async () => {\n            setData({ m3: 'Async 1' });\n            return 'done 1';\n        },\n        async () => {\n            setData({ m4: 'Async 2' });\n            return 'done 2';\n        }\n        ]\n    },\n    {\n        $type: 'serie',\n        $callbacks: [\n        async () => {\n            setData({ m5: 'Serie 1' });\n            return 'done 3';\n        },\n        async () => {\n            setData({ m6: 'Serie 2' });\n            return 'done 4';\n        }\n        ]\n    },\n    ]\n};\nconst asyncCircuit = AsyncCircuit.create();\nasyncCircuit.hook(function(node) {\n    console.log(\"Finished: \", node);\n});\nawait asyncCircuit.execute(tree, { setData });\nconsole.log('Todo listo!');\nconsole.log(data);\nif(!(\"m1\" in data)) {\n    throw new Error(\"m1 not found\");\n}\n```","readmeFilename":"README.md"}