I always thought Minesweeper would compute the minefield dynamically as you played instead of generating a fixed map of the minefield at the beginning of the game.
I once wrote a “clone”[1] and when someone here pointed out the “first click is safe” feature, I implemented it by putting the reshuffle inside a while. Never thought of the first click as being “pre game”...
https://guangcongluo.com/dminer/
is a version I wrote while trying to teach myself React.
edit: unless you just meant that the adjacency numbers could be generated on the fly, in which case painting yourself into a corner isn’t a concern