{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":84105208,"defaultBranch":"master","name":"Stopify","ownerLogin":"nuprl","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2017-03-06T18:11:32.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/4161665?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1722420675.0","currentOid":""},"activityList":{"items":[{"before":"84f97401c5dc7a949ec71d2f9b6c9e56bafd830f","after":"d35d32989ede636490621cfb6b278dc5a9951343","ref":"refs/heads/master","pushedAt":"2024-07-31T23:14:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"arjunguha","name":"Arjun Guha","path":"/arjunguha","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20065?s=80&v=4"},"commit":{"message":"Add detection for whether we are on an active Stopify stack\n\nAdds a stackActive field to abstractRuntime that tracks whether the JavaScript\nstack is currently using Stopified frames, and exposes it through isRunning()\non abstractRuntime.\n\nThe use case for this, beyond it being a likely-useful utility, is writing\npolyfills for HOFs that can switch on and off depending on if they can expect\nto capture or not.\n\nWe've done some of this work for Pyret\n(https://github.com/brownplt/pyret-lang/blob/8e0ce78fb0ca1c10bcc06dfcaeb534d0ae2c02e4/src/runtime/hof-array-polyfill.ts#L347)\nbecause the Pyret runtime co-exists on a page with regular old React code.\n\nBecause everything in React and in the Stopified runtime is getting\nasynchronously chopped up and scheduled all over the place, and because we want\nJS arrays to be arrays whether in the stopify runtime or the page runtime, it's\nuseful to have polyfills that automatically do the right thing. This avoids\nthese problems:\n\n- If using the default array polyfill strategy from Stopify, non-stopified code\n can get access to arrays with stopified map/filter/fold. Say that's called in\n some `didComponentUpdate` or other scheduled React event – now it's not on a\n Stopify stack and lots of e.g. uncaught Captures result. It is really, really\n hard to remember that every array may or may not be from the Stopify runtime\n and have a different prototype.\n- When calling into Stopified code, it's natural to want to pass in “regular”\n arrays. It's also hard to remember and design APIs around introducing\n wrapping on these as they *enter* stopified code.\n- The flag lets us handle cases like:\n - A didComponentUpdate starts a Pyret evaluation for e.g. rendering a Pyret\n value to a React element, which calls back into some Stopified Pyret code.\n This goes in a suitable wrapper.\n - That code suspends for whatever reason, yielding control back to\n didComponentUpdate, which uses e.g. map/filter/fold. The map/filter/fold in\n didComponentUpdate will correctly use the plain, un-instrumented\n map/filter/fold.\n - The Stopified code resumes in the next turn and does map/filter/fold in the\n dynamic extent of the Pyret code. This correctly uses the stopified\n versions of the HOFs.","shortMessageHtmlLink":"Add detection for whether we are on an active Stopify stack"}},{"before":"1cf2058859e393e1a6617b59114662c265d7dc5c","after":"e61612815b1abfb486d4b9f5a393650c271a4d37","ref":"refs/heads/use-cloud-runner","pushedAt":"2024-07-31T11:10:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"arjunguha","name":"Arjun Guha","path":"/arjunguha","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20065?s=80&v=4"},"commit":{"message":"x","shortMessageHtmlLink":"x"}},{"before":"57c47be366ab2240041d09fb50b17a8e371f05fb","after":"1cf2058859e393e1a6617b59114662c265d7dc5c","ref":"refs/heads/use-cloud-runner","pushedAt":"2024-07-31T10:28:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"arjunguha","name":"Arjun Guha","path":"/arjunguha","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20065?s=80&v=4"},"commit":{"message":"Update main.yml","shortMessageHtmlLink":"Update main.yml"}},{"before":"a629deb36ac2df2519de597f7ead7e8dd9fe0004","after":"57c47be366ab2240041d09fb50b17a8e371f05fb","ref":"refs/heads/use-cloud-runner","pushedAt":"2024-07-31T10:17:34.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"arjunguha","name":"Arjun Guha","path":"/arjunguha","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20065?s=80&v=4"},"commit":{"message":"Update main.yml","shortMessageHtmlLink":"Update main.yml"}},{"before":null,"after":"a629deb36ac2df2519de597f7ead7e8dd9fe0004","ref":"refs/heads/use-cloud-runner","pushedAt":"2024-07-31T10:11:15.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"arjunguha","name":"Arjun Guha","path":"/arjunguha","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20065?s=80&v=4"},"commit":{"message":"Update main.yml","shortMessageHtmlLink":"Update main.yml"}},{"before":"275d950193a9fc04175ed810834f9e1778108229","after":"84f97401c5dc7a949ec71d2f9b6c9e56bafd830f","ref":"refs/heads/master","pushedAt":"2024-07-31T10:04:06.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"arjunguha","name":"Arjun Guha","path":"/arjunguha","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20065?s=80&v=4"},"commit":{"message":"Revert \"Add detection for whether we are on an active Stopify stack\"\n\nReverting this from master (it's on activeStack) to clean up master -> master\nPR","shortMessageHtmlLink":"Revert \"Add detection for whether we are on an active Stopify stack\""}},{"before":null,"after":"88fda82163f47d90b620ebddbbfa5b324f3b81a3","ref":"refs/heads/activeStack","pushedAt":"2024-07-30T19:56:51.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jpolitz","name":"Joe Politz","path":"/jpolitz","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/119891?s=80&v=4"},"commit":{"message":"Add detection for whether we are on an active Stopify stack\n\nAdds a stackActive field to abstractRuntime that tracks whether the JavaScript\nstack is currently using Stopified frames, and exposes it through isRunning()\non abstractRuntime.\n\nThe use case for this, beyond it being a likely-useful utility, is writing\npolyfills for HOFs that can switch on and off depending on if they can expect\nto capture or not.\n\nWe've done some of this work for Pyret\n(https://github.com/brownplt/pyret-lang/blob/8e0ce78fb0ca1c10bcc06dfcaeb534d0ae2c02e4/src/runtime/hof-array-polyfill.ts#L347)\nbecause the Pyret runtime co-exists on a page with regular old React code.\n\nBecause everything in React and in the Stopified runtime is getting\nasynchronously chopped up and scheduled all over the place, and because we want\nJS arrays to be arrays whether in the stopify runtime or the page runtime, it's\nuseful to have polyfills that automatically do the right thing. This avoids\nthese problems:\n\n- If using the default array polyfill strategy from Stopify, non-stopified code\n can get access to arrays with stopified map/filter/fold. Say that's called in\n some `didComponentUpdate` or other scheduled React event – now it's not on a\n Stopify stack and lots of e.g. uncaught Captures result. It is really, really\n hard to remember that every array may or may not be from the Stopify runtime\n and have a different prototype.\n- When calling into Stopified code, it's natural to want to pass in “regular”\n arrays. It's also hard to remember and design APIs around introducing\n wrapping on these as they *enter* stopified code.\n- The flag lets us handle cases like:\n - A didComponentUpdate starts a Pyret evaluation for e.g. rendering a Pyret\n value to a React element, which calls back into some Stopified Pyret code.\n This goes in a suitable wrapper.\n - That code suspends for whatever reason, yielding control back to\n didComponentUpdate, which uses e.g. map/filter/fold. The map/filter/fold in\n didComponentUpdate will correctly use the plain, un-instrumented\n map/filter/fold.\n - The Stopified code resumes in the next turn and does map/filter/fold in the\n dynamic extent of the Pyret code. This correctly uses the stopified\n versions of the HOFs.","shortMessageHtmlLink":"Add detection for whether we are on an active Stopify stack"}},{"before":null,"after":"275d950193a9fc04175ed810834f9e1778108229","ref":"refs/heads/W","pushedAt":"2024-07-29T22:48:24.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"arjunguha","name":"Arjun Guha","path":"/arjunguha","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/20065?s=80&v=4"},"commit":{"message":"version hell","shortMessageHtmlLink":"version hell"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNy0zMVQyMzoxNDowOS4wMDAwMDBazwAAAASOkCyI","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNy0yOVQyMjo0ODoyNC4wMDAwMDBazwAAAASMZECd"}},"title":"Activity · nuprl/Stopify"}