After wasm bootstrapping has read the optional global-scope config objects, delete those objects because any further changes would not have any useful effect. Expand the docs regarding the sqlite3ApiBootstrap() config object and explain the necessary evil of a separate global-scope object for that configuration.

FossilOrigin-Name: e6b14f73136aae4c1a92d6d6ab8c5d1510db5244d0b0f168eed5b4b257c99064
This commit is contained in:
stephan 2024-03-04 06:54:41 +00:00
parent aefa7afddb
commit e6af60c14f
3 changed files with 39 additions and 9 deletions

View File

@ -37,7 +37,7 @@
This function expects a configuration object, intended to abstract This function expects a configuration object, intended to abstract
away details specific to any given WASM environment, primarily so away details specific to any given WASM environment, primarily so
that it can be used without any _direct_ dependency on that it can be used without any direct dependency on
Emscripten. (Note the default values for the config object!) The Emscripten. (Note the default values for the config object!) The
config object is only honored the first time this is config object is only honored the first time this is
called. Subsequent calls ignore the argument and return the same called. Subsequent calls ignore the argument and return the same
@ -98,6 +98,27 @@
The returned object is the top-level sqlite3 namespace object. The returned object is the top-level sqlite3 namespace object.
Client code may optionally assign sqlite3ApiBootstrap.defaultConfig
an object-type value before calling sqlite3ApiBootstrap() (without
arguments) in order to tell that call to use this object as its
default config value. The intention of this is to provide
downstream clients with a reasonably flexible approach for plugging
in an environment-suitable configuration without having to define a
new global-scope symbol.
However, because clients who access this library via an
Emscripten-hosted module will not have an opportunity to call
sqlite3ApiBootstrap() themselves, nor to access it before it is
called, an alternative option for setting the configuration is to
define globalThis.sqlite3ApiConfig to an object. If it is set, it
is used instead of sqlite3ApiBootstrap.defaultConfig if
sqlite3ApiBootstrap() is called without arguments.
Both sqlite3ApiBootstrap.defaultConfig and
globalThis.sqlite3ApiConfig get deleted by sqlite3ApiBootstrap()
because any changes to them made after that point would have no
useful effect.
*/ */
'use strict'; 'use strict';
globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
@ -149,6 +170,15 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
config[k] = config[k](); config[k] = config[k]();
} }
}); });
/**
Eliminate any confusion about whether these config objects may
be used after library initialization by eliminating the outward-facing
objects...
*/
delete globalThis.sqlite3ApiConfig;
delete sqlite3ApiBootstrap.defaultConfig;
/** /**
The main sqlite3 binding API gets installed into this object, The main sqlite3 binding API gets installed into this object,
mimicking the C API as closely as we can. The numerous members mimicking the C API as closely as we can. The numerous members

View File

@ -1,5 +1,5 @@
C Back\sout\sthe\sprevious\schange.\s\sReplace\sit\swith\snew\sdate\smodifiers\s"ceiling"\nand\s"floor". C After\swasm\sbootstrapping\shas\sread\sthe\soptional\sglobal-scope\sconfig\sobjects,\sdelete\sthose\sobjects\sbecause\sany\sfurther\schanges\swould\snot\shave\sany\suseful\seffect.\sExpand\sthe\sdocs\sregarding\sthe\ssqlite3ApiBootstrap()\sconfig\sobject\sand\sexplain\sthe\snecessary\sevil\sof\sa\sseparate\sglobal-scope\sobject\sfor\sthat\sconfiguration.
D 2024-03-03T20:15:36.398 D 2024-03-04T06:54:41.070
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -607,7 +607,7 @@ F ext/wasm/api/pre-js.c-pp.js ad906703f7429590f2fbf5e6498513bf727a1a4f0ebfa057af
F ext/wasm/api/sqlite3-api-cleanup.js d235ad237df6954145404305040991c72ef8b1881715d2a650dda7b3c2576d0e F ext/wasm/api/sqlite3-api-cleanup.js d235ad237df6954145404305040991c72ef8b1881715d2a650dda7b3c2576d0e
F ext/wasm/api/sqlite3-api-glue.js 587dc6db2d69329a5f4cb9635c377f516cf4a8e30f443f33380e5044889ec71b F ext/wasm/api/sqlite3-api-glue.js 587dc6db2d69329a5f4cb9635c377f516cf4a8e30f443f33380e5044889ec71b
F ext/wasm/api/sqlite3-api-oo1.js 7f3bcf0549ac44cde4b9da0b642d771916738d3f6781fb8a1757c50a91e506c0 F ext/wasm/api/sqlite3-api-oo1.js 7f3bcf0549ac44cde4b9da0b642d771916738d3f6781fb8a1757c50a91e506c0
F ext/wasm/api/sqlite3-api-prologue.js fffcee629bf020a8ccf5c367fbe6a169f5d5d73dfce1707a75c9fbf4aa21c7da F ext/wasm/api/sqlite3-api-prologue.js 5f09126bc807fc506f9922a88228abb553fcbfa676a5724aa6d08e148e32af5b
F ext/wasm/api/sqlite3-api-worker1.js 8d9c0562831f62218170a3373468d8a0b7a6503b5985e309b69bf71187b525cf F ext/wasm/api/sqlite3-api-worker1.js 8d9c0562831f62218170a3373468d8a0b7a6503b5985e309b69bf71187b525cf
F ext/wasm/api/sqlite3-license-version-header.js 0c807a421f0187e778dc1078f10d2994b915123c1223fe752b60afdcd1263f89 F ext/wasm/api/sqlite3-license-version-header.js 0c807a421f0187e778dc1078f10d2994b915123c1223fe752b60afdcd1263f89
F ext/wasm/api/sqlite3-opfs-async-proxy.js 8cf8a897726f14071fae6be6648125162b256dfb4f96555b865dbb7a6b65e379 F ext/wasm/api/sqlite3-opfs-async-proxy.js 8cf8a897726f14071fae6be6648125162b256dfb4f96555b865dbb7a6b65e379
@ -2176,8 +2176,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 5d392c16bb5658bc92f60d250ab82c45cc109e32d58a073498c9a487b8625e96 P f0831cced2c919e409214d936c81473ae321a98c5bd78b5b729c1269bf71bc45
R 9967c002ac0a5c05f7a39fb253518624 R 4a8c0aeaafa0cb5a978f136d9342c53b
U drh U stephan
Z 10e35251deea062b6c8093330abd75ed Z 2d4a13ca44f781b5c37a0c6aad22e4d0
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
f0831cced2c919e409214d936c81473ae321a98c5bd78b5b729c1269bf71bc45 e6b14f73136aae4c1a92d6d6ab8c5d1510db5244d0b0f168eed5b4b257c99064