{"_id":"@adonis-agora/durable-eslint-plugin","_rev":"9-b39e8fe78e34eb5ab19764d8dd7793b4","name":"@adonis-agora/durable-eslint-plugin","dist-tags":{"latest":"0.3.4"},"versions":{"0.1.0":{"name":"@adonis-agora/durable-eslint-plugin","version":"0.1.0","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"author":{"name":"Davi Carvalho","email":"davi@goflip.ai"},"license":"MIT","_id":"@adonis-agora/durable-eslint-plugin@0.1.0","maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"homepage":"https://github.com/DavideCarvalho/adonis-durable#readme","bugs":{"url":"https://github.com/DavideCarvalho/adonis-durable/issues"},"dist":{"shasum":"08b0ef88ef4ba4ac68056684e304b3ef7f396e08","tarball":"https://registry.npmjs.org/@adonis-agora/durable-eslint-plugin/-/durable-eslint-plugin-0.1.0.tgz","fileCount":11,"integrity":"sha512-xUxIh6HAEGLECylfeE4AuxVJk1GTyNjIACo25UDOOoys01zpfRIQ/w1Syk1/TysnQ/0p6E0he2gRv/Cq0ck4zQ==","signatures":[{"sig":"MEYCIQDu9GJBHucpNM4yoeYiu9KWC2oAZuAICS+OecVioNmALQIhAOMsYKnsP/bJ9ZU7fumUenI8dQ1VbFK1rnTjAtQGyLem","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18910},"main":"./dist/src/index.js","type":"module","_from":"file:adonis-agora-durable-eslint-plugin-0.1.0.tgz","types":"./dist/src/index.d.ts","engines":{"node":">=20.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"},"_resolved":"/tmp/bfeeccff918283f53f7bd22dfe0375b4/adonis-agora-durable-eslint-plugin-0.1.0.tgz","_integrity":"sha512-xUxIh6HAEGLECylfeE4AuxVJk1GTyNjIACo25UDOOoys01zpfRIQ/w1Syk1/TysnQ/0p6E0he2gRv/Cq0ck4zQ==","repository":{"url":"git+https://github.com/DavideCarvalho/adonis-durable.git","type":"git","directory":"packages/eslint-plugin"},"_npmVersion":"10.9.8","description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags Date.now()/Math.random()/new Date()/crypto.randomUUID() inside workflow bodies. Part of the Agora ecosystem.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/rule-tester":"^8.0.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/durable-eslint-plugin_0.1.0_1782188053343_0.6186677494765134","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@adonis-agora/durable-eslint-plugin","version":"0.2.0","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"author":"Davi Carvalho <davi@goflip.ai>","license":"MIT","_id":"@adonis-agora/durable-eslint-plugin@0.2.0","maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"dist":{"shasum":"735c28c46642c1860c1b86df66816da30f4e2224","tarball":"https://registry.npmjs.org/@adonis-agora/durable-eslint-plugin/-/durable-eslint-plugin-0.2.0.tgz","fileCount":12,"integrity":"sha512-4bMPua2DVQKy0s5DI9ilSKK5oEGg2kcjF+rUeUpP8yX7Vh5Rpr2tfm2qOgYFrhUlKZg5dz90FKrFQ+XycXYLFg==","signatures":[{"sig":"MEUCIQCJ85KihSozgO+dF6MLIwr+A6xhn/nSKTur/w8qvKO4SgIgWlLz+oCsTrENm9l+aAH8iDWOJ/JSfmslRhfQmebbhso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adonis-agora%2fdurable-eslint-plugin@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":22969},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:051f3fe9-359a-40c0-8e97-a186c78ec8cc"}},"repository":{"url":"git+https://github.com/DavideCarvalho/adonis-durable.git","type":"git","directory":"packages/eslint-plugin"},"description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags Date.now()/Math.random()/new Date()/crypto.randomUUID() inside workflow bodies. Part of the Agora ecosystem.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/rule-tester":"^8.0.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/durable-eslint-plugin_0.2.0_1784135684482_0.3893839570348443","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@adonis-agora/durable-eslint-plugin","version":"0.2.1","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"author":"Davi Carvalho <davi@goflip.ai>","license":"MIT","_id":"@adonis-agora/durable-eslint-plugin@0.2.1","maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"dist":{"shasum":"cb6f5d73640acf8b66e09cc48361724c4d38ab32","tarball":"https://registry.npmjs.org/@adonis-agora/durable-eslint-plugin/-/durable-eslint-plugin-0.2.1.tgz","fileCount":12,"integrity":"sha512-eBpcEP79uXcp9eH4etyC0DPLuxsR0bsAHdwQzOaQm+Nm8qHtWlr3d5cF3PD0rc0nE5QWPJLjrccuium6NQ12cw==","signatures":[{"sig":"MEQCIH86kHdRLShi8tSL8PtIyaeelti7+AUfPEz4QDATVMKwAiAcwZQ8zq2r67TxQZG1kWSAw/Y6bTopm8wWSHRDrubzGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adonis-agora%2fdurable-eslint-plugin@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25181},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"pnpm run clean && tsc -p tsconfig.build.json && pnpm run check:dist","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.tests.json","check:dist":"node ../../scripts/assert-build-output.mjs dist src/index.js","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:051f3fe9-359a-40c0-8e97-a186c78ec8cc"}},"repository":{"url":"git+https://github.com/DavideCarvalho/adonis-durable.git","type":"git","directory":"packages/eslint-plugin"},"description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags Date.now()/Math.random()/new Date()/crypto.randomUUID() inside workflow bodies. Part of the Agora ecosystem.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"@typescript-eslint/utils":"^8.0.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/rule-tester":"^8.0.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/durable-eslint-plugin_0.2.1_1785491040938_0.2621399689898989","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@adonis-agora/durable-eslint-plugin","version":"0.2.2","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"author":"Davi Carvalho <davi@goflip.ai>","license":"MIT","_id":"@adonis-agora/durable-eslint-plugin@0.2.2","maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"dist":{"shasum":"65466a0c14e48c27266bf7fe7e3c69feb410b63d","tarball":"https://registry.npmjs.org/@adonis-agora/durable-eslint-plugin/-/durable-eslint-plugin-0.2.2.tgz","fileCount":12,"integrity":"sha512-WhZTVaCBnULPuVY4VXD3zRiX5GGv6wg2CP+xQbJHB0NgNKFfsG/8HZJ/i6QHhAGGExyCXct00PfIonKcEXDNWg==","signatures":[{"sig":"MEUCIDHAbxZo5M+KiV37zlih6ghbKx8RQ4qoKvPBha3lXXyZAiEAhWbNJq9uKuK6Ldq6DG7w9RALq3yVG57moh6U/Lc9vmI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adonis-agora%2fdurable-eslint-plugin@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27183},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"pnpm run clean && tsc -p tsconfig.build.json && pnpm run check:dist","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.tests.json","check:dist":"node ../../scripts/assert-build-output.mjs dist src/index.js","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:542ab2cb-8acf-4f1e-9a7e-516602f2bcff"}},"repository":{"url":"git+https://github.com/DavideCarvalho/adonis-agora-durable.git","type":"git","directory":"packages/eslint-plugin"},"description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags Date.now()/Math.random()/new Date()/crypto.randomUUID() inside workflow bodies. Part of the Agora ecosystem.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@typescript-eslint/utils":"8.67.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.39.5","vitest":"3.2.7","typescript":"5.9.3","@types/node":"20.19.43","@typescript-eslint/parser":"8.67.0","@typescript-eslint/rule-tester":"8.67.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/durable-eslint-plugin_0.2.2_1787109773664_0.1574683105938015","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@adonis-agora/durable-eslint-plugin","version":"0.3.0","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"author":"Davi Carvalho <davi@goflip.ai>","license":"MIT","_id":"@adonis-agora/durable-eslint-plugin@0.3.0","maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"dist":{"shasum":"afceacdc3592fc641e1bad9fb20993d14e0e061f","tarball":"https://registry.npmjs.org/@adonis-agora/durable-eslint-plugin/-/durable-eslint-plugin-0.3.0.tgz","fileCount":28,"integrity":"sha512-YwzyeHDGHu4LNoPxlhJMcMfi955qw/5e/JEHHvZqzEEI8z4zxsGu7YHult6KGYkdxv+J1ktaRjJnzsTmk6octQ==","signatures":[{"sig":"MEUCIQD7UrZoaIl4PrFoWjmpjSFYVbMSj/tiyPPGVi3engmyVwIgVKK5cFgfK7ZMkUGEw0a/dbBOg2i6KGm4V3B4FoHIdc4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adonis-agora%2fdurable-eslint-plugin@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":57588},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"pnpm run clean && tsc -p tsconfig.build.json && pnpm run check:dist","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.tests.json","check:dist":"node ../../scripts/assert-build-output.mjs dist src/index.js","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:542ab2cb-8acf-4f1e-9a7e-516602f2bcff"}},"repository":{"url":"git+https://github.com/DavideCarvalho/adonis-agora-durable.git","type":"git","directory":"packages/eslint-plugin"},"description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags non-deterministic sources (Date.now, Math.random, new Date, crypto.randomUUID, process.env), swallowed control-flow signals, and direct I/O inside workflow bodies. Part of the A","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@typescript-eslint/utils":"8.68.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"10.9.1","vitest":"4.1.11","typescript":"6.0.3","@types/node":"26.4.0","@typescript-eslint/parser":"8.68.0","@typescript-eslint/rule-tester":"8.68.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/durable-eslint-plugin_0.3.0_1788791353668_0.12486423768344301","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@adonis-agora/durable-eslint-plugin","version":"0.3.1","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"author":"Davi Carvalho <davi@goflip.ai>","license":"MIT","_id":"@adonis-agora/durable-eslint-plugin@0.3.1","maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"dist":{"shasum":"5fccafd60f60695911cb03d6b1bcd2811eda8e44","tarball":"https://registry.npmjs.org/@adonis-agora/durable-eslint-plugin/-/durable-eslint-plugin-0.3.1.tgz","fileCount":28,"integrity":"sha512-MmfcE727LeRPvoc4wBf2YgMeTDe7biXrAn+sQWs/AbP8Cpnh5WH/WDsKeeCW5p59EQ+fIEG9f+ufS4NVieCnwg==","signatures":[{"sig":"MEUCIQDEKQGF9He5KGVcS2diPAFrHZsILR9Xz+ueEruS8egnEgIgJf2xy59L6wgyqzoKHkdTYnlLjOioOOYqBfQnpQIqZ9I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adonis-agora%2fdurable-eslint-plugin@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58429},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"pnpm run clean && tsc -p tsconfig.build.json && pnpm run check:dist","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.tests.json","check:dist":"node ../../scripts/assert-build-output.mjs dist src/index.js","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:542ab2cb-8acf-4f1e-9a7e-516602f2bcff"}},"repository":{"url":"git+https://github.com/DavideCarvalho/adonis-agora-durable.git","type":"git","directory":"packages/eslint-plugin"},"description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags non-deterministic sources (Date.now, Math.random, new Date, crypto.randomUUID, process.env), swallowed control-flow signals, and direct I/O inside workflow bodies. Part of the A","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@typescript-eslint/utils":"8.69.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"10.10.0","vitest":"5.0.0","typescript":"6.0.3","@types/node":"26.4.1","@typescript-eslint/parser":"8.69.0","@typescript-eslint/rule-tester":"8.69.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0"},"_npmOperationalInternal":{"tmp":"tmp/durable-eslint-plugin_0.3.1_1788837898805_0.049596282067076114","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@adonis-agora/durable-eslint-plugin","version":"0.3.2","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"author":"Davi Carvalho <davi@goflip.ai>","license":"MIT","_id":"@adonis-agora/durable-eslint-plugin@0.3.2","maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"dist":{"shasum":"10f5aecd47fe06b42a5901a827e44a5a7c62d9e6","tarball":"https://registry.npmjs.org/@adonis-agora/durable-eslint-plugin/-/durable-eslint-plugin-0.3.2.tgz","fileCount":28,"integrity":"sha512-SRSsu4hFrJ6U+sy8qcYO/hDzbwBIP0RB92YtIjSIU7Nx8HKSwrFVe2XdGnfAEvYJ99iPYNDz7+3xqbgYAhH9kw==","signatures":[{"sig":"MEYCIQDqc9QVc1Kdk6i4HR5qI9AbBPWRn7JzCV4oaoV9zp3DNgIhALcKp7CMFWxHe0Zqo/7qBHJh3fXx/EewyNXXAzoo/SgL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCiU0OmdUj9EYz4BF2IAcGjlMEjPpCauRf/A1qDZSReEQIgXeZo3IVMC1HXinvZmUb+WJGUg4ZgBdx7JY3/o8xClaE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adonis-agora%2fdurable-eslint-plugin@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":59311},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"pnpm run clean && tsc -p tsconfig.build.json && pnpm run check:dist","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.tests.json","check:dist":"node ../../scripts/assert-build-output.mjs dist src/index.js","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:542ab2cb-8acf-4f1e-9a7e-516602f2bcff"}},"repository":{"url":"git+https://github.com/DavideCarvalho/adonis-agora-durable.git","type":"git","directory":"packages/eslint-plugin"},"description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags non-deterministic sources (Date.now, Math.random, new Date, crypto.randomUUID, process.env), swallowed control-flow signals, and direct I/O inside workflow bodies. Part of the A","directories":{},"sideEffects":false,"dependencies":{"@typescript-eslint/utils":"8.70.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"10.10.0","vitest":"5.0.0","typescript":"6.0.3","@types/node":"26.5.1","@typescript-eslint/parser":"8.70.0","@typescript-eslint/rule-tester":"8.70.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0 || ^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/durable-eslint-plugin_0.3.2_1789190883833_0.7726213405921276","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@adonis-agora/durable-eslint-plugin","version":"0.3.3","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"author":"Davi Carvalho <davi@goflip.ai>","license":"MIT","_id":"@adonis-agora/durable-eslint-plugin@0.3.3","maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"homepage":"https://davidecarvalho.github.io/agora/docs/durable","bugs":{"url":"https://github.com/DavideCarvalho/adonis-agora-durable/issues"},"dist":{"shasum":"c988dfa23b190f93a4a795949b31e31a7e91dee0","tarball":"https://registry.npmjs.org/@adonis-agora/durable-eslint-plugin/-/durable-eslint-plugin-0.3.3.tgz","fileCount":28,"integrity":"sha512-M8T8Atcgv/DdxIxZndze0xWNzimdHURG05HaAydCsjuU+FaMRsbKoiJJpKLBn78VOKZ8ro+zDBB3vy37mGAXNA==","signatures":[{"sig":"MEUCIQCunNqYlbLeDyFsuZr5uj0I+dppoeEJ+tm7OqFag3XwXgIgXwG0VmJx9ttXC2pN3TiUIE8moDHiIgfRkxTNIjmWkYw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCc/3GHI84ML/DNV+DqTB5/N/hDPLgOQmB9DUBeAghxgQIgHhwv1UPX/igCrnMM3pI45+sYfRVm/jW27HiaPFlgeBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adonis-agora%2fdurable-eslint-plugin@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60164},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"scripts":{"test":"vitest run --passWithNoTests","build":"pnpm run clean && tsc -p tsconfig.build.json && pnpm run check:dist","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.tests.json","check:dist":"node ../../scripts/assert-build-output.mjs dist src/index.js","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:542ab2cb-8acf-4f1e-9a7e-516602f2bcff"}},"repository":{"url":"git+https://github.com/DavideCarvalho/adonis-agora-durable.git","type":"git","directory":"packages/eslint-plugin"},"description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags non-deterministic sources (Date.now, Math.random, new Date, crypto.randomUUID, process.env), swallowed control-flow signals, and direct I/O inside workflow bodies. Part of the A","directories":{},"sideEffects":false,"dependencies":{"@typescript-eslint/utils":"8.70.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"10.10.0","vitest":"5.0.0","typescript":"6.0.3","@types/node":"26.5.1","@typescript-eslint/parser":"8.70.0","@typescript-eslint/rule-tester":"8.70.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0 || ^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/durable-eslint-plugin_0.3.3_1789689389797_0.2875583068853924","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"_id":"@adonis-agora/durable-eslint-plugin@0.3.4","bugs":{"url":"https://github.com/DavideCarvalho/adonis-agora-durable/issues"},"dist":{"shasum":"9041e522f20e320339b6144c951296f7a93ab8c6","tarball":"https://registry.npmjs.org/@adonis-agora/durable-eslint-plugin/-/durable-eslint-plugin-0.3.4.tgz","fileCount":28,"integrity":"sha512-VDISjy3hjj6Q/nDACn2Opbjek54i283WyrR4l9Ec434g/ntcFZNaEQH+zWOf64j0asg3mkcVan3Rr+Lgb68VCw==","signatures":[{"sig":"MEYCIQCnMFdd6wZgDe+qbPbGiqI17mxA7jQC24/kdUqEbZ/TvgIhAOhYke/bfxXXS6BbuaZa02M5XCJJ4hAqXQsLKWX83RZy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG38ryuL4eWTkw2aAk6NXnIZ16PhnTTRLOfDpdqNdlKvAiEAwiS7I1wm3/lXRKOVBPKumPoonFBdULuTBYlOS3TJXOM="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adonis-agora%2fdurable-eslint-plugin@0.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":60328},"main":"./dist/src/index.js","name":"@adonis-agora/durable-eslint-plugin","type":"module","types":"./dist/src/index.d.ts","author":"Davi Carvalho <davi@goflip.ai>","engines":{"node":">=20.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","default":"./dist/src/index.js"}},"license":"MIT","scripts":{"test":"vitest run --passWithNoTests","build":"pnpm run clean && tsc -p tsconfig.build.json && pnpm run check:dist","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit && tsc -p tsconfig.tests.json","check:dist":"node ../../scripts/assert-build-output.mjs dist src/index.js","test:watch":"vitest"},"version":"0.3.4","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"542ab2cb-8acf-4f1e-9a7e-516602f2bcff"}},"homepage":"https://davidecarvalho.github.io/agora/docs/durable","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"repository":{"url":"git+https://github.com/DavideCarvalho/adonis-agora-durable.git","type":"git","directory":"packages/eslint-plugin"},"description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags non-deterministic sources (Date.now, Math.random, new Date, crypto.randomUUID, process.env), swallowed control-flow signals, and direct I/O inside workflow bodies. Part of the A","directories":{},"maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"sideEffects":false,"dependencies":{"@typescript-eslint/utils":"8.71.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"10.11.0","vitest":"5.0.2","typescript":"6.0.3","@types/node":"26.6.3","@typescript-eslint/parser":"8.71.0","@typescript-eslint/rule-tester":"8.71.0"},"peerDependencies":{"eslint":"^8.57.0 || ^9.0.0 || ^10.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/durable-eslint-plugin_0.3.4_1790978825414_0.543063320032618"}}},"time":{"created":"2026-06-23T04:14:13.225Z","modified":"2026-10-02T22:07:05.877Z","0.1.0":"2026-06-23T04:14:13.477Z","0.2.0":"2026-07-15T17:14:44.606Z","0.2.1":"2026-07-31T09:44:01.092Z","0.2.2":"2026-08-19T03:22:53.801Z","0.3.0":"2026-09-07T14:29:13.811Z","0.3.1":"2026-09-08T03:24:58.934Z","0.3.2":"2026-09-12T05:28:03.920Z","0.3.3":"2026-09-17T23:56:29.878Z","0.3.4":"2026-10-02T22:07:05.524Z"},"bugs":{"url":"https://github.com/DavideCarvalho/adonis-agora-durable/issues"},"author":"Davi Carvalho <davi@goflip.ai>","license":"MIT","homepage":"https://davidecarvalho.github.io/agora/docs/durable","keywords":["eslint","eslint-plugin","durable","workflow","determinism","agora"],"repository":{"url":"git+https://github.com/DavideCarvalho/adonis-agora-durable.git","type":"git","directory":"packages/eslint-plugin"},"description":"ESLint rules enforcing workflow determinism for @adonis-agora/durable — flags non-deterministic sources (Date.now, Math.random, new Date, crypto.randomUUID, process.env), swallowed control-flow signals, and direct I/O inside workflow bodies. Part of the A","maintainers":[{"name":"dudousxd","email":"davi_carvalho96@hotmail.com"}],"readme":"# @adonis-agora/durable-eslint-plugin\n\nESLint rules enforcing **workflow determinism** for [`@adonis-agora/durable`](../adonis). A durable workflow\nbody is replayed from its checkpoints on every resume, so any non-deterministic source read directly\nin the orchestration body (rather than recorded once inside a `ctx.step`) silently corrupts the run.\nThis plugin flags them.\n\n## Install\n\n```sh\nnpm i -D @adonis-agora/durable-eslint-plugin\n```\n\n## Usage (flat config)\n\n```js\n// eslint.config.js\nimport durable from '@adonis-agora/durable-eslint-plugin';\n\nexport default [durable.configs.recommended];\n```\n\nOr wire it manually:\n\n```js\nimport durable from '@adonis-agora/durable-eslint-plugin';\n\nexport default [\n  {\n    plugins: { '@adonis-agora/durable': durable },\n    rules: {\n      '@adonis-agora/durable/no-nondeterminism': 'error',\n      '@adonis-agora/durable/rethrow-control-flow-signals': 'error',\n      '@adonis-agora/durable/no-io-in-workflow-body': 'error',\n    },\n  },\n];\n```\n\n## Rules\n\nAll rules are **AST-scoped to a workflow body** — both the function form\n(`engine.register('wf', '1', async (ctx) => { … })` / `registerRemote` / `registerEntity`) and a\nworkflow class's `run` method (a `BaseWorkflow` subclass / `static workflow` config). Code inside a\n`ctx.localStep(...)` / `ctx.task(...)` / `ctx.sideEffect(...)` callback is **never** flagged: a\ncheckpointed body runs once and is replayed from its recorded result.\n\n### `no-nondeterminism`\n\nDisallows non-deterministic sources inside a durable workflow body:\n\n| Flagged                | Use instead              |\n| ---------------------- | ------------------------ |\n| `Date.now()`           | `ctx.now()`              |\n| `performance.now()`    | `ctx.now()`              |\n| `new Date()`           | `new Date(await ctx.now())` |\n| `Date()` (plain call)  | `new Date(await ctx.now())` |\n| `Math.random()`        | `ctx.sideEffect(() => Math.random())` |\n| `crypto.randomUUID()`  | `ctx.sideEffect(() => crypto.randomUUID())` |\n| imported `randomUUID` from `node:crypto` (incl. `import { randomUUID as uuid }`) | `ctx.sideEffect(() => randomUUID())` |\n| `process.env` reads    | `ctx.sideEffect(() => process.env.X)` or resolve config outside the workflow |\n\nCheap aliases are tracked too: `const d = Date; d.now()` is flagged when the `const` is assigned\nfrom the banned global in the same file (no data-flow analysis beyond that).\n\n### `rethrow-control-flow-signals`\n\nA `try/catch` inside a workflow body must let the engine's control-flow signals (suspend /\ncontinue-as-new) through — they unwind the current turn by throwing and are **not** real failures.\nA catch that swallows one breaks suspension silently and corrupts the run's history. The rule\nreports a catch clause over awaited code unless it either starts a guard like\n`if (isWorkflowControlFlowSignal(e)) throw e` (exported by `@adonis-agora/durable`) or rethrows the\ncaught error unconditionally — and offers a suggestion inserting the guard as the first statement.\n\n### `no-io-in-workflow-body`\n\nDisallows direct I/O in the orchestration body, which re-executes on every replay: global\n`fetch(...)` calls (`this.fetch(...)` and other receivers are left alone) and raw `engine.*` calls\n(receiver named exactly `engine`). Wrap the I/O in a checkpointed step\n(`await ctx.localStep('name', () => fetch(…))`) or drive the engine from outside the workflow.\n","readmeFilename":""}