Add build of sqlite3.mjs (ES6 module), add a test app for it, and include it in the dist build.

FossilOrigin-Name: 2e783670e10b59e67c14b0db7f4803b41790cc7730de221d54fa2d4483cfba33
This commit is contained in:
stephan 2022-11-19 05:26:45 +00:00
parent c768ef7289
commit 27a67968af
12 changed files with 213 additions and 124 deletions

View File

@ -168,7 +168,6 @@ emcc_opt_full := $(emcc_opt) -g3
# (Much later: -O2 consistently gives the best speeds.) # (Much later: -O2 consistently gives the best speeds.)
######################################################################## ########################################################################
$(sqlite3.c) $(sqlite3.h): $(sqlite3.c) $(sqlite3.h):
$(MAKE) -C $(dir.top) sqlite3.c $(MAKE) -C $(dir.top) sqlite3.c
@ -199,6 +198,48 @@ $(bin.stripccomments): $(bin.stripccomments).c $(MAKEFILE)
$(CC) -o $@ $< $(CC) -o $@ $<
DISTCLEAN_FILES += $(bin.stripccomments) DISTCLEAN_FILES += $(bin.stripccomments)
########################################################################
# Transform $(1) to $(2) via ./c-pp -f $(1) ...
#
# Historical notes:
#
# - We first attempted to use gcc and/or clang to preprocess JS files
# in the same way we would normally do C files, but C-specific quirks
# of each makes that untennable.
#
# - We implemented c-pp.c (the C-Minus Pre-processor) as a custom
# generic/file-format-agnostic preprocessor to enable us to pack
# code for different target builds into the same JS files. Most
# notably, some ES6 module (a.k.a. ESM) features cannot legally be
# referenced at all in non-ESM code, e.g. the "import" and "export"
# keywords. This preprocessing step permits us to swap out sections
# of code where necessary for ESM and non-ESM (a.k.a. vanilla JS)
# require different implementations. The alternative to such
# preprocessing, would be to have separate source files for ES6
# builds, which would have a higher maintenance burden than c-pp.c
# seems likely to.
#
# c-pp.c was written specifically for the sqlite project's JavaScript
# builds but is maintained as a standalone project:
# https://fossil.wanderinghorse.net/r/c-pp
bin.c-pp := ./c-pp
$(bin.c-pp): c-pp.c $(sqlite3.c) $(MAKEFILE)
$(CC) -O0 -o $@ c-pp.c $(sqlite3.c) '-DCMPP_DEFAULT_DELIM="//#"' -I$(dir.top)
define C-PP.JS
# $1 c-pp -D... flags
# $2 = c-pp -f X.js
# $3 = c-pp -o X.js
$(3): $(2) $$(MAKEFILE) $$(bin.c-pp)
$$(bin.c-pp) -f $(2) -o $$@ $(1)
CLEAN_FILES += $(3)
endef
c-pp.D.vanilla ?=
c-pp.D.esm ?= -Dsqlite3-es6-module-build
# /end CPP-of-JS bits
########################################################################
EXPORTED_FUNCTIONS.api.in := $(abspath $(dir.api)/EXPORTED_FUNCTIONS.sqlite3-api) EXPORTED_FUNCTIONS.api.in := $(abspath $(dir.api)/EXPORTED_FUNCTIONS.sqlite3-api)
EXPORTED_FUNCTIONS.api := $(dir.tmp)/EXPORTED_FUNCTIONS.api EXPORTED_FUNCTIONS.api := $(dir.tmp)/EXPORTED_FUNCTIONS.api
$(EXPORTED_FUNCTIONS.api): $(EXPORTED_FUNCTIONS.api.in) $(MAKEFILE) $(EXPORTED_FUNCTIONS.api): $(EXPORTED_FUNCTIONS.api.in) $(MAKEFILE)
@ -234,9 +275,8 @@ $(foreach X,$(SOAP.js) $(sqlite3-worker1.js) $(sqlite3-worker1-promiser.js),\
$(eval $(call COPY_XAPI,$(X)))) $(eval $(call COPY_XAPI,$(X))))
all: $(sqlite3-api.ext.jses) all: $(sqlite3-api.ext.jses)
sqlite3-api.js := $(dir.tmp)/sqlite3-api.js sqlite3-api.js.in := $(dir.tmp)/sqlite3-api.c-pp.js
sqlite3-api.c-pp.js := $(dir.tmp)/sqlite3-api.c-pp.js $(sqlite3-api.js.in): $(sqlite3-api.jses) $(MAKEFILE)
$(sqlite3-api.c-pp.js): $(sqlite3-api.jses) $(MAKEFILE)
@echo "Making $@..." @echo "Making $@..."
@for i in $(sqlite3-api.jses); do \ @for i in $(sqlite3-api.jses); do \
echo "/* BEGIN FILE: $$i */"; \ echo "/* BEGIN FILE: $$i */"; \
@ -257,28 +297,52 @@ $(sqlite3-api-build-version.js): $(bin.version-info) $(MAKEFILE)
######################################################################## ########################################################################
# --post-js and --pre-js are emcc flags we use to append/prepend JS to # --post-js and --pre-js are emcc flags we use to append/prepend JS to
# the generated emscripten module file. # the generated emscripten module file.
pre-js.js := $(dir.tmp)/pre-js.js pre-js.js.in := $(dir.api)/pre-js.js
post-js.js := $(dir.tmp)/post-js.js pre-js.js.esm := $(dir.tmp)/pre-js.esm.js
post-jses := \ pre-js.js.vanilla := $(dir.tmp)/pre-js.vanilla.js
$(eval $(call C-PP.JS,$(c-pp.D.vanilla),$(pre-js.js.in),$(pre-js.js.vanilla)))
$(eval $(call C-PP.JS,$(c-pp.D.esm),$(pre-js.js.in),$(pre-js.js.esm)))
post-js.js.in := $(dir.tmp)/post-js.js
post-js.js.vanilla := $(dir.tmp)/post-js.vanilla.js
post-js.js.esm := $(dir.tmp)/post-js.esm.js
post-jses.js := \
$(dir.api)/post-js-header.js \ $(dir.api)/post-js-header.js \
$(sqlite3-api.js) \ $(sqlite3-api.js.in) \
$(dir.api)/post-js-footer.js $(dir.api)/post-js-footer.js
$(post-js.js): $(post-jses) $(MAKEFILE) $(post-js.js.in): $(post-jses.js) $(MAKEFILE)
@echo "Making $@..." @echo "Making $@..."
@for i in $(post-jses); do \ @for i in $(post-jses.js); do \
echo "/* BEGIN FILE: $$i */"; \ echo "/* BEGIN FILE: $$i */"; \
cat $$i; \ cat $$i; \
echo "/* END FILE: $$i */"; \ echo "/* END FILE: $$i */"; \
done > $@ done > $@
$(eval $(call C-PP.JS,$(c-pp.D.vanilla),$(post-js.js.in),$(post-js.js.vanilla)))
$(eval $(call C-PP.JS,$(c-pp.D.esm),$(post-js.js.in),$(post-js.js.esm)))
extern-post-js.js.in := $(dir.api)/extern-post-js.js extern-post-js.js.in := $(dir.api)/extern-post-js.js
extern-post-js.js := $(dir.tmp)/extern-post-js.js extern-post-js.js.vanilla := $(dir.tmp)/extern-post-js.vanilla.js
extern-post-js.js.esm := $(dir.tmp)/extern-post-js.esm.js
$(eval $(call C-PP.JS,$(c-pp.D.vanilla),$(extern-post-js.js.in),$(extern-post-js.js.vanilla)))
$(eval $(call C-PP.JS,$(c-pp.D.esm),$(extern-post-js.js.in),$(extern-post-js.js.esm)))
extern-pre-js.js := $(dir.api)/extern-pre-js.js extern-pre-js.js := $(dir.api)/extern-pre-js.js
# Emscripten flags for --[extern-][pre|post]-js=...
pre-post-common.flags := \ pre-post-common.flags := \
--post-js=$(post-js.js) \
--extern-post-js=$(extern-post-js.js) \
--extern-pre-js=$(sqlite3-license-version.js) --extern-pre-js=$(sqlite3-license-version.js)
pre-post-jses.deps := $(post-js.js) \ pre-post-common.flags.vanilla := \
$(extern-post-js.js) $(extern-pre-js.js) $(sqlite3-license-version.js) $(pre-post-common.flags) \
--post-js=$(post-js.js.vanilla) \
--extern-post-js=$(extern-post-js.js.vanilla)
pre-post-common.flags.esm := \
$(pre-post-common.flags) \
--post-js=$(post-js.js.esm) \
--extern-post-js=$(extern-post-js.js.esm)
pre-post-jses.deps.common := $(extern-pre-js.js) $(sqlite3-license-version.js)
pre-post-jses.deps.vanilla := $(pre-post-jses.deps.common) \
$(post-js.js.vanilla) $(extern-post-js.js.vanilla)
pre-post-jses.deps.esm := $(pre-post-jses.deps.common) \
$(post-js.js.esm) $(extern-post-js.js.esm)
$(sqlite3-license-version.js): $(sqlite3.h) $(sqlite3-license-version-header.js) $(MAKEFILE) $(sqlite3-license-version.js): $(sqlite3.h) $(sqlite3-license-version-header.js) $(MAKEFILE)
@echo "Making $@..."; { \ @echo "Making $@..."; { \
cat $(sqlite3-license-version-header.js); \ cat $(sqlite3-license-version-header.js); \
@ -290,66 +354,25 @@ $(sqlite3-license-version.js): $(sqlite3.h) $(sqlite3-license-version-header.js)
echo '*/'; \ echo '*/'; \
} > $@ } > $@
########################################################################
# Transform $(1) to $(2) via ./c-pp -f $(1) ...
#
# Historical notes:
#
# - We first attempted to use gcc and/or clang to preprocess JS files
# in the same way we would normally do C files, but C-specific quirks
# of each makes that untennable.
#
# - We implemented c-pp.c (the C-Minus Pre-processor) as a custom
# generic/file-format-agnostic preprocessor to enable us to pack
# code for different target builds into the same JS files. Most
# notably, some ES6 module (a.k.a. ESM) features cannot legally be
# referenced at all in non-ESM code, e.g. the "import" and "export"
# keywords. This preprocessing step permits us to swap out sections
# of code where necessary for ESM and non-ESM (a.k.a. vanilla JS)
# require different implementations. The alternative to such
# preprocessing, would be to have separate source files for ES6
# builds, which would have a higher maintenance burden than c-pp.c
# seems likely to.
#
# c-pp.c was written specifically for the sqlite project's JavaScript
# builds but is maintained as a standalone project:
# https://fossil.wanderinghorse.net/r/c-pp
bin.c-pp := ./c-pp
$(bin.c-pp): c-pp.c $(sqlite3.c) $(MAKEFILE)
$(CC) -O0 -o $@ c-pp.c $(sqlite3.c) '-DCMPP_DEFAULT_DELIM="//#"' -I$(dir.top)
ifneq (,$(filter esm,$(MAKECMDGOALS)))
js.cpp.defines ?= -DSQLITE_JS_ESM
esm: $(filter-out esm,$(MAKECMDGOALS))
else
js.cpp.defines ?=
endif
define C-PP.JS
# $1 = X.js. $2 = output file to generate by filtering $(1) through
# $(bin.cpp) -E -CC.
$(2): $(1) $$(MAKEFILE) $$(bin.c-pp)
$$(bin.c-pp) $(js.cpp.defines) -f $(1) -o $$@
CLEAN_FILES += $(2)
endef
$(eval $(call C-PP.JS,$(dir.tmp)/sqlite3-api.c-pp.js,$(sqlite3-api.js)))
$(eval $(call C-PP.JS,$(dir.api)/pre-js.js,$(dir.tmp)/pre-js.js))
$(eval $(call C-PP.JS,$(extern-post-js.js.in),$(extern-post-js.js)))
# /end CPP-of-JS bits
########################################################################
######################################################################## ########################################################################
# call-make-pre-js creates rules for pre-js-$(1).js. $1 = the base # call-make-pre-js creates rules for pre-js-$(1).js. $1 = the base
# name of the JS file on whose behalf this pre-js is for. # name of the JS file on whose behalf this pre-js is for. $2 is the
# build mode: one of (vanilla, esm).
define call-make-pre-js define call-make-pre-js
pre-post-$(1).flags ?= pre-post-$(1).flags.$(2) ?=
$$(dir.tmp)/pre-js-$(1).js: $$(pre-js.js) $$(MAKEFILE) $$(dir.tmp)/pre-js-$(1)-$(2).js: $$(pre-js.js.$(2)) $$(MAKEFILE)
cp $$(pre-js.js) $$@ cp $$(pre-js.js.$(2)) $$@
@if [ sqlite3-wasmfs = $(1) ]; then \ @if [ sqlite3-wasmfs = $(1) ]; then \
echo "delete Module[xNameOfInstantiateWasm] /*for WASMFS build*/;"; \ echo "delete Module[xNameOfInstantiateWasm] /*for WASMFS build*/;"; \
elif [ sqlite3 != $(1) ]; then \ elif [ sqlite3 != $(1) ]; then \
echo "Module[xNameOfInstantiateWasm].uri = '$(1).wasm';"; \ echo "Module[xNameOfInstantiateWasm].uri = '$(1).wasm';"; \
fi >> $$@ fi >> $$@
pre-post-$(1).deps := $$(pre-post-jses.deps) $$(dir.tmp)/pre-js-$(1).js pre-post-$(1).deps.$(2) := \
pre-post-$(1).flags += --pre-js=$$(dir.tmp)/pre-js-$(1).js $$(pre-post-jses.deps.$(2)) \
$$(dir.tmp)/pre-js-$(1)-$(2).js
pre-post-$(1).flags.$(2) += \
$$(pre-post-common.flags.$(2)) \
--pre-js=$$(dir.tmp)/pre-js-$(1)-$(2).js
endef endef
#$(error $(call call-make-pre-js,sqlite3-wasmfs)) #$(error $(call call-make-pre-js,sqlite3-wasmfs))
# /post-js and pre-js # /post-js and pre-js
@ -466,20 +489,11 @@ emcc.jsflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT)
# debugging info, _huge_. # debugging info, _huge_.
######################################################################## ########################################################################
######################################################################## sqlite3.js := $(dir.dout)/sqlite3.js
# AN EXPERIMENT: undocumented Emscripten feature: if the target file sqlite3.mjs := $(dir.dout)/sqlite3.mjs
# extension is "mjs", it defaults to ES6 module builds: # Undocumented Emscripten feature: if the target file extension is
# "mjs", it defaults to ES6 module builds:
# https://github.com/emscripten-core/emscripten/issues/14383 # https://github.com/emscripten-core/emscripten/issues/14383
ifeq (,$(filter esm,$(MAKECMDGOALS)))
sqlite3.js.ext := js
else
esm.deps := $(filter-out esm,$(MAKECMDGOALS))
esm: $(if $(esm.deps),$(esm.deps),all)
sqlite3.js.ext := mjs
endif
# /esm
########################################################################
sqlite3.js := $(dir.dout)/sqlite3.$(sqlite3.js.ext)
sqlite3.wasm := $(dir.dout)/sqlite3.wasm sqlite3.wasm := $(dir.dout)/sqlite3.wasm
sqlite3-wasm.c := $(dir.api)/sqlite3-wasm.c sqlite3-wasm.c := $(dir.api)/sqlite3-wasm.c
# sqlite3-wasm.o vs sqlite3-wasm.c: building against the latter # sqlite3-wasm.o vs sqlite3-wasm.c: building against the latter
@ -487,22 +501,52 @@ sqlite3-wasm.c := $(dir.api)/sqlite3-wasm.c
# enough to the target speed requirements that the 500ms makes a # enough to the target speed requirements that the 500ms makes a
# difference. Thus we build all binaries against sqlite3-wasm.c # difference. Thus we build all binaries against sqlite3-wasm.c
# instead of building a shared copy of sqlite3-wasm.o. # instead of building a shared copy of sqlite3-wasm.o.
$(eval $(call call-make-pre-js,sqlite3)) $(eval $(call call-make-pre-js,sqlite3,vanilla))
$(eval $(call call-make-pre-js,sqlite3,esm))
$(sqlite3.js): $(sqlite3.js):
$(sqlite3.js): $(MAKEFILE) $(sqlite3.wasm.obj) \ $(sqlite3.js) $(sqlite3.mjs): $(MAKEFILE) $(sqlite3.wasm.obj) \
$(EXPORTED_FUNCTIONS.api) \ $(EXPORTED_FUNCTIONS.api)
$(pre-post-sqlite3.deps) $(sqlite3.js): $(pre-post-sqlite3.deps.vanilla)
$(sqlite3.mjs): $(pre-post-sqlite3.deps.esm)
# SQLITE3.xJS.RECIPE = Recipe body for $(sqlite3.js) and
# $(sqlite3.mjs). $1 = one of (vanilla, esm).
define SQLITE3.xJS.RECIPE
@echo "Building $@ ..." @echo "Building $@ ..."
$(emcc.bin) -o $@ $(emcc_opt_full) $(emcc.flags) \ $(emcc.bin) -o $@ $(emcc_opt_full) $(emcc.flags) \
$(emcc.jsflags) $(pre-post-common.flags) $(pre-post-sqlite3.flags) \ $(emcc.jsflags) \
$(pre-post-sqlite3.flags.$(1)) $(emcc.flags.sqlite3.$(1)) \
$(cflags.common) $(SQLITE_OPT) $(sqlite3-wasm.c) $(cflags.common) $(SQLITE_OPT) $(sqlite3-wasm.c)
if [ esm = $(1) ]; then \
sed -i -e '0,/^export default/{/^export default/d}' $@; \
fi # work around an Emscripten annoyance. See emcc.flags.esm
chmod -x $(sqlite3.wasm) chmod -x $(sqlite3.wasm)
$(maybe-wasm-strip) $(sqlite3.wasm) $(maybe-wasm-strip) $(sqlite3.wasm)
@ls -la $@ $(sqlite3.wasm) @ls -la $@ $(sqlite3.wasm)
endef
emcc.flags.sqlite3.vanilla :=
emcc.flags.sqlite3.esm := -sEXPORT_ES6 -sUSE_ES6_IMPORT_META
# Reminder: even if we use -sEXPORT_ES6=0, emcc _still_ adds:
#
# export default $(sqlite3.js.init-func);
#
# when building *.mjs, which is bad because we need to export an
# overwritten version of that function and cannot "export default"
# twice. Because of this, we have to sed $(sqlite3.mjs) to remove the
# first instance of /^export default/.
$(sqlite3.js):
$(call SQLITE3.xJS.RECIPE,vanilla)
$(sqlite3.mjs):
$(call SQLITE3.xJS.RECIPE,esm)
$(sqlite3.wasm): $(sqlite3.js) $(sqlite3.wasm): $(sqlite3.js)
CLEAN_FILES += $(sqlite3.js) $(sqlite3.wasm) $(sqlite3.mjs): $(sqlite3.js)
all: $(sqlite3.js) # We have to ensure that we do not build both $(sqlite3.js) and
wasm: $(sqlite3.js) # $(sqlite3.mjs) in parallel because both result in the build of
# $(sqlite3.wasm). We have no way to build just the .mjs file without
# also building the .wasm file. i.e. we're building $(sqlite3.wasm)
# twice, but that's unavoidable.
CLEAN_FILES += $(sqlite3.js) $(sqlite3.mjs) $(sqlite3.wasm)
all: $(sqlite3.mjs)
wasm: $(sqlite3.mjs)
# End main Emscripten-based module build # End main Emscripten-based module build
######################################################################## ########################################################################
@ -552,7 +596,6 @@ speedtest1-common.eflags += -sDYNAMIC_EXECUTION=0
speedtest1-common.eflags += --minify 0 speedtest1-common.eflags += --minify 0
speedtest1-common.eflags += -sEXPORT_NAME=$(sqlite3.js.init-func) speedtest1-common.eflags += -sEXPORT_NAME=$(sqlite3.js.init-func)
speedtest1-common.eflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT) speedtest1-common.eflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT)
speedtest1-common.eflags += $(pre-post-common.flags)
speedtest1.exit-runtime0 := -sEXIT_RUNTIME=0 speedtest1.exit-runtime0 := -sEXIT_RUNTIME=0
speedtest1.exit-runtime1 := -sEXIT_RUNTIME=1 speedtest1.exit-runtime1 := -sEXIT_RUNTIME=1
# Re -sEXIT_RUNTIME=1 vs 0: if it's 1 and speedtest1 crashes, we get # Re -sEXIT_RUNTIME=1 vs 0: if it's 1 and speedtest1 crashes, we get
@ -576,17 +619,17 @@ $(EXPORTED_FUNCTIONS.speedtest1): $(EXPORTED_FUNCTIONS.api)
@echo "Making $@ ..." @echo "Making $@ ..."
@{ echo _wasm_main; cat $(EXPORTED_FUNCTIONS.api); } > $@ @{ echo _wasm_main; cat $(EXPORTED_FUNCTIONS.api); } > $@
speedtest1.js := $(dir.dout)/speedtest1.js speedtest1.js := $(dir.dout)/speedtest1.js
speedtest1.wasm := $(subst .js,.wasm,$(speedtest1.js)) speedtest1.wasm := $(dir.dout)/speedtest1.wasm
speedtest1.cflags := $(cflags.common) -DSQLITE_SPEEDTEST1_WASM speedtest1.cflags := $(cflags.common) -DSQLITE_SPEEDTEST1_WASM
speedtest1.cses := $(speedtest1.c) $(sqlite3-wasm.c) speedtest1.cses := $(speedtest1.c) $(sqlite3-wasm.c)
$(eval $(call call-make-pre-js,speedtest1)) $(eval $(call call-make-pre-js,speedtest1,vanilla))
$(speedtest1.js): $(MAKEFILE) $(speedtest1.cses) \ $(speedtest1.js): $(MAKEFILE) $(speedtest1.cses) \
$(pre-post-speedtest1.deps) \ $(pre-post-speedtest1.deps.vanilla) \
$(EXPORTED_FUNCTIONS.speedtest1) $(EXPORTED_FUNCTIONS.speedtest1)
@echo "Building $@ ..." @echo "Building $@ ..."
$(emcc.bin) \ $(emcc.bin) \
$(speedtest1.eflags) $(speedtest1-common.eflags) $(speedtest1.cflags) \ $(speedtest1.eflags) $(speedtest1-common.eflags) $(speedtest1.cflags) \
$(pre-post-speedtest1.flags) \ $(pre-post-speedtest1.flags.vanilla) \
$(SQLITE_OPT) \ $(SQLITE_OPT) \
$(speedtest1.exit-runtime0) \ $(speedtest1.exit-runtime0) \
-o $@ $(speedtest1.cses) -lm -o $@ $(speedtest1.cses) -lm

View File

@ -1,11 +1,15 @@
/* ^^^^ ACHTUNG: blank line at the start is necessary because
Emscripten will not add a newline in some cases and we need
a blank line for a sed-based kludge for the ES6 build. */
/* extern-post-js.js must be appended to the resulting sqlite3.js /* extern-post-js.js must be appended to the resulting sqlite3.js
file. It gets its name from being used as the value for the file. It gets its name from being used as the value for the
--extern-post-js=... Emscripten flag. Note that this code, unlike --extern-post-js=... Emscripten flag. Note that this code, unlike
most of the associated JS code, runs outside of the most of the associated JS code, runs outside of the
Emscripten-generated module init scope, in the current Emscripten-generated module init scope, in the current
global scope. */ global scope. */
//#if SQLITE_JS_ESM //#if sqlite3-es6-module-build
const toexport = const toExportForES6 =
//#endif //#endif
(function(){ (function(){
/** /**
@ -106,10 +110,10 @@ const toexport =
exports["sqlite3InitModule"] = sqlite3InitModule; exports["sqlite3InitModule"] = sqlite3InitModule;
/* AMD modules get injected in a way we cannot override, /* AMD modules get injected in a way we cannot override,
so we can't handle those here. */ so we can't handle those here. */
//#if SQLITE_JS_ESM //#if sqlite3-es6-module-build
return self.sqlite3InitModule; return self.sqlite3InitModule;
//#endif //#endif
})(); })();
//#if SQLITE_JS_ESM //#if sqlite3-es6-module-build
export default toexport; export default toExportForES6;
//#endif //#endif

View File

@ -29,7 +29,7 @@ sqlite3InitModuleState.debugModule('self.location =',self.location);
4) If none of the above apply, (prefix+path) is returned. 4) If none of the above apply, (prefix+path) is returned.
*/ */
Module['locateFile'] = function(path, prefix) { Module['locateFile'] = function(path, prefix) {
//#if SQLITE_JS_ESM //#if sqlite3-es6-module-build
return new URL(path, import.meta.url).href; return new URL(path, import.meta.url).href;
//#else //#else
'use strict'; 'use strict';

View File

@ -167,7 +167,7 @@ const installOpfsVfs = function callee(options){
return promiseReject_(err); return promiseReject_(err);
}; };
const W = const W =
//#if SQLITE_JS_ESM //#if sqlite3-es6-module-build
new Worker(new URL(options.proxyUri, import.meta.url)); new Worker(new URL(options.proxyUri, import.meta.url));
//#else //#else
new Worker(options.proxyUri); new Worker(options.proxyUri);

View File

@ -42,7 +42,7 @@ dist-dir.jswasm := $(dist-dir.top)/$(notdir $(dir.dout))
dist-dir.common := $(dist-dir.top)/common dist-dir.common := $(dist-dir.top)/common
dist.top.extras := \ dist.top.extras := \
demo-123.html demo-123-worker.html demo-123.js \ demo-123.html demo-123-worker.html demo-123.js \
tester1.html tester1-worker.html tester1.js \ tester1.html tester1-worker.html tester1-esm.html tester1.js \
demo-jsstorage.html demo-jsstorage.js \ demo-jsstorage.html demo-jsstorage.js \
demo-worker1.html demo-worker1.js \ demo-worker1.html demo-worker1.js \
demo-worker1-promiser.html demo-worker1-promiser.js demo-worker1-promiser.html demo-worker1-promiser.js
@ -78,6 +78,8 @@ dist: \
@cp -p $(dist.jswasm.extras) $(dist-dir.jswasm) @cp -p $(dist.jswasm.extras) $(dist-dir.jswasm)
@$(bin.stripccomments) -k -k < $(sqlite3.js) \ @$(bin.stripccomments) -k -k < $(sqlite3.js) \
> $(dist-dir.jswasm)/$(notdir $(sqlite3.js)) > $(dist-dir.jswasm)/$(notdir $(sqlite3.js))
@$(bin.stripccomments) -k -k < $(sqlite3.mjs) \
> $(dist-dir.jswasm)/$(notdir $(sqlite3.mjs))
@cp -p $(dist.common.extras) $(dist-dir.common) @cp -p $(dist.common.extras) $(dist-dir.common)
@set -e; \ @set -e; \
vnum=$$($(bin.version-info) --download-version); \ vnum=$$($(bin.version-info) --download-version); \

View File

@ -58,12 +58,12 @@ fiddle.SOAP.js := $(dir.fiddle)/$(notdir $(SOAP.js))
$(fiddle.SOAP.js): $(SOAP.js) $(fiddle.SOAP.js): $(SOAP.js)
cp $< $@ cp $< $@
$(eval $(call call-make-pre-js,fiddle-module)) $(eval $(call call-make-pre-js,fiddle-module,vanilla))
$(fiddle-module.js): $(MAKEFILE) $(MAKEFILE.fiddle) \ $(fiddle-module.js): $(MAKEFILE) $(MAKEFILE.fiddle) \
$(EXPORTED_FUNCTIONS.fiddle) \ $(EXPORTED_FUNCTIONS.fiddle) \
$(fiddle.cses) $(pre-post-fiddle-module.deps) $(fiddle.SOAP.js) $(fiddle.cses) $(pre-post-fiddle-module.deps.vanilla) $(fiddle.SOAP.js)
$(emcc.bin) -o $@ $(fiddle.emcc-flags) \ $(emcc.bin) -o $@ $(fiddle.emcc-flags) \
$(pre-post-common.flags) $(pre-post-fiddle-module.flags) \ $(pre-post-fiddle-module.flags.vanilla) \
$(fiddle.cses) $(fiddle.cses)
$(maybe-wasm-strip) $(fiddle-module.wasm) $(maybe-wasm-strip) $(fiddle-module.wasm)
gzip < $@ > $@.gz gzip < $@ > $@.gz

View File

@ -56,6 +56,10 @@
utility code.</li> utility code.</li>
<li><a href='tester1-worker.html'>tester1-worker</a>: same thing <li><a href='tester1-worker.html'>tester1-worker</a>: same thing
but running in a Worker.</li> but running in a Worker.</li>
<li><a href='tester1-esm.html'>tester1-esm</a>: same thing
but loaded in the main thread via an ES6 module. Note that
not all browsers permit loading modules in Worker threads.
</li>
</ul> </ul>
</li> </li>
<li>Higher-level apps and demos... <li>Higher-level apps and demos...

View File

@ -46,7 +46,10 @@
regression tests for the various APIs and surrounding regression tests for the various APIs and surrounding
utility code.</li> utility code.</li>
<li><a href='tester1-worker.html'>tester1-worker</a>: same thing <li><a href='tester1-worker.html'>tester1-worker</a>: same thing
but running in a Worker.</li> but running in a Worker.</li>
<li><a href='tester1-esm.html'>tester1-esm</a>: same thing
but loaded in the main thread via an ES6 module. Note that
not all browsers permit loading modules in Worker threads.
</ul> </ul>
</li> </li>
<li>High-level apps and demos... <li>High-level apps and demos...

30
ext/wasm/tester1-esm.html Normal file
View File

@ -0,0 +1,30 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
<link rel="stylesheet" href="common/emscripten.css"/>
<link rel="stylesheet" href="common/testing.css"/>
<title>sqlite3 tester ESM #1 (UI thread)</title>
<style>
body {
font-family: monospace;
}
</style>
</head>
<body>
<h1 id='color-target'>sqlite3 WASM/JS tester ESM #1 (UI thread)</h1>
<div class='input-wrapper'>
<input type='checkbox' id='cb-log-reverse'>
<label for='cb-log-reverse'>Reverse log order?</label>
</div>
<div id='test-output'></div>
<script type="module" defer>
import {default as sqlite3InitModule} from "./jswasm/sqlite3.mjs";
self.sqlite3InitModule = sqlite3InitModule;
console.log("Loaded sqlite3InitModule() via an ES6 module.");
</script>
<script src="tester1.js" defer></script>
</body>
</html>

View File

@ -67,14 +67,17 @@ sqlite3-wasmfs.jsflags += $(sqlite3-wasmfs.fsflags)
# USE_PTHREADS + ALLOW_MEMORY_GROWTH may run non-wasm code slowly, # USE_PTHREADS + ALLOW_MEMORY_GROWTH may run non-wasm code slowly,
# see https://github.com/WebAssembly/design/issues/1271 [-Wpthreads-mem-growth] # see https://github.com/WebAssembly/design/issues/1271 [-Wpthreads-mem-growth]
sqlite3-wasmfs.jsflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT) sqlite3-wasmfs.jsflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT)
$(eval $(call call-make-pre-js,sqlite3-wasmfs)) $(eval $(call call-make-pre-js,sqlite3-wasmfs,vanilla))
sqlite3-wasmfs.jsflags += $(pre-post-common.flags) $(pre-post-sqlite3-wasmfs.flags) sqlite3-wasmfs.jsflags += \
$(pre-post-common.flags.vanilla) \
$(pre-post-sqlite3-wasmfs.flags.vanilla)
$(sqlite3-wasmfs.js): $(sqlite3-wasm.c) \ $(sqlite3-wasmfs.js): $(sqlite3-wasm.c) \
$(EXPORTED_FUNCTIONS.api) $(MAKEFILE) $(MAKEFILE.wasmfs) \ $(EXPORTED_FUNCTIONS.api) $(MAKEFILE) $(MAKEFILE.wasmfs) \
$(pre-post-sqlite3-wasmfs.deps) $(pre-post-sqlite3-wasmfs.deps.vanilla)
@echo "Building $@ ..." @echo "Building $@ ..."
$(emcc.bin) -o $@ $(emcc_opt_full) $(emcc.flags) \ $(emcc.bin) -o $@ $(emcc_opt_full) $(emcc.flags) \
$(sqlite3-wasmfs.cflags) $(sqlite3-wasmfs.jsflags) \ $(sqlite3-wasmfs.cflags) $(sqlite3-wasmfs.jsflags) \
$(pre-post-sqlite3-wasm.flags.vanilla) \
$(sqlite3-wasm.c) $(sqlite3-wasm.c)
chmod -x $(sqlite3-wasmfs.wasm) chmod -x $(sqlite3-wasmfs.wasm)
$(maybe-wasm-strip) $(sqlite3-wasmfs.wasm) $(maybe-wasm-strip) $(sqlite3-wasmfs.wasm)

View File

@ -1,5 +1,5 @@
C Integrate\sa\scustom\spreprocessor\sto\sthe\sJS\sbuild\sprocess\sto\sfacilitate\screation\sof\sboth\svanilla\sJS\sand\sES6\sModule\sbuilds\sfrom\sthe\ssame\ssource\sfiles.\sThere\sis\sstill\ssome\sbuild-level\sreworking\spending\sto\smake\san\sESM\sbuild\sa\sfirst-class\sdeliverable. C Add\sbuild\sof\ssqlite3.mjs\s(ES6\smodule),\sadd\sa\stest\sapp\sfor\sit,\sand\sinclude\sit\sin\sthe\sdist\sbuild.
D 2022-11-19T02:58:03.867 D 2022-11-19T05:26:45.763
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
@ -488,21 +488,21 @@ F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04 F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
F ext/wasm/GNUmakefile 6a0d03e8d0b52b6851a364c1faaa0df8a07be1e8eb8aa9f87432aad74005a04e F ext/wasm/GNUmakefile 1e38a4f7147d621bd2138d13938ef34157bcf47908325baa6b06cd02c5e3ef89
F ext/wasm/README-dist.txt 2d670b426fc7c613b90a7d2f2b05b433088fe65181abead970980f0a4a75ea20 F ext/wasm/README-dist.txt 2d670b426fc7c613b90a7d2f2b05b433088fe65181abead970980f0a4a75ea20
F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9 F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api 9120c2f8f51fa85f46dcf4dcb6b12f4a807d428f6089b99cdb08d8ddfcfd88b2 F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api 9120c2f8f51fa85f46dcf4dcb6b12f4a807d428f6089b99cdb08d8ddfcfd88b2
F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287 F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
F ext/wasm/api/README.md 29276a845e57004e82efba61fa5866fd05f9137380a1dc26dc4c6d65264cd81c F ext/wasm/api/README.md 29276a845e57004e82efba61fa5866fd05f9137380a1dc26dc4c6d65264cd81c
F ext/wasm/api/extern-post-js.js 824f37f1957e15b150bb36e98621b3bf91b55f6af7055cedc831331129b4883d F ext/wasm/api/extern-post-js.js 015121df2c903cf12d51507227b756ab3626036d8e9d610a2a2c15b3f54afe4d
F ext/wasm/api/extern-pre-js.js cc61c09c7a24a07dbecb4c352453c3985170cec12b4e7e7e7a4d11d43c5c8f41 F ext/wasm/api/extern-pre-js.js cc61c09c7a24a07dbecb4c352453c3985170cec12b4e7e7e7a4d11d43c5c8f41
F ext/wasm/api/post-js-footer.js cd0a8ec768501d9bd45d325ab0442037fb0e33d1f3b4f08902f15c34720ee4a1 F ext/wasm/api/post-js-footer.js cd0a8ec768501d9bd45d325ab0442037fb0e33d1f3b4f08902f15c34720ee4a1
F ext/wasm/api/post-js-header.js d6ab3dfef4a06960d28a7eaa338d4e2a1a5981e9b38718168bbde8fdb2a439b8 F ext/wasm/api/post-js-header.js d6ab3dfef4a06960d28a7eaa338d4e2a1a5981e9b38718168bbde8fdb2a439b8
F ext/wasm/api/pre-js.js 749bbbac2f1a2192eaba80cf5e00a3219da78b3c0a84e3019b5eef30e0bc9b88 F ext/wasm/api/pre-js.js 1156a7fb9de817bb1cb39ad90b76aa93fbb9dcf950a1f2d6f547e5976872be36
F ext/wasm/api/sqlite3-api-cleanup.js ecdc69dbfccfe26146f04799fcfd4a6f5790d46e7e3b9b6e9b0491f92ed8ae34 F ext/wasm/api/sqlite3-api-cleanup.js ecdc69dbfccfe26146f04799fcfd4a6f5790d46e7e3b9b6e9b0491f92ed8ae34
F ext/wasm/api/sqlite3-api-glue.js 056f44b82c126358a0175e08a892d56fadfce177b0d7a0012502a6acf67ea6d5 F ext/wasm/api/sqlite3-api-glue.js 056f44b82c126358a0175e08a892d56fadfce177b0d7a0012502a6acf67ea6d5
F ext/wasm/api/sqlite3-api-oo1.js e9a83489bbb4838ce0aee46eaaa9350e0e25a5b926b565e4f5ae8e840e4fbaed F ext/wasm/api/sqlite3-api-oo1.js e9a83489bbb4838ce0aee46eaaa9350e0e25a5b926b565e4f5ae8e840e4fbaed
F ext/wasm/api/sqlite3-api-opfs.js 4368a30586df3e11339a72082c77bdef670d619c6185c2dd1ebf5208c3ab0a5c F ext/wasm/api/sqlite3-api-opfs.js 9f115a37dafe8067bce8812996d2deff45741c6e39f7aad7b48f5fbbd822dba5
F ext/wasm/api/sqlite3-api-prologue.js fd526fa017fa2578673ca18158354515c719e719a5d93f2f6d0e43f39170430e F ext/wasm/api/sqlite3-api-prologue.js fd526fa017fa2578673ca18158354515c719e719a5d93f2f6d0e43f39170430e
F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f
F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3 F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3
@ -527,14 +527,14 @@ F ext/wasm/demo-worker1-promiser.html 1de7c248c7c2cfd4a5783d2aa154bce62d74c6de98
F ext/wasm/demo-worker1-promiser.js b85a2bb1b918db4f09dfa24419241cb3edad7791389425c2505092e9b715017d F ext/wasm/demo-worker1-promiser.js b85a2bb1b918db4f09dfa24419241cb3edad7791389425c2505092e9b715017d
F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d
F ext/wasm/demo-worker1.js a619adffc98b75b66c633b00f747b856449a134a9a0357909287d80a182d70fa F ext/wasm/demo-worker1.js a619adffc98b75b66c633b00f747b856449a134a9a0357909287d80a182d70fa
F ext/wasm/dist.make 481289899a07958439d07ee4302ff86235fa0fbb72f17ea05db2be90a94abf90 F ext/wasm/dist.make 4b55c8a7926bbab4936adab6a08eca524085fc47bc3b08f41918df5b4665da3d
F ext/wasm/fiddle.make e570ec1bfc7d803507a2e514fe32f673fe001b2114b85c73c3964a462ba8bcfc F ext/wasm/fiddle.make 2812c44c9bafb5be9c8767963d1b9f374d77af7795fcaa06483c03e7059dea74
F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
F ext/wasm/fiddle/fiddle-worker.js b4a0c8ab6c0983218543ca771c45f6075449f63a1dcf290ae5a681b2cba8800d F ext/wasm/fiddle/fiddle-worker.js b4a0c8ab6c0983218543ca771c45f6075449f63a1dcf290ae5a681b2cba8800d
F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715 F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715
F ext/wasm/fiddle/index.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2 F ext/wasm/fiddle/index.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2
F ext/wasm/index-dist.html cb0da16cba0f21cda2c25724c5869102d48eb0af04446acd3cd0ca031f80ed19 F ext/wasm/index-dist.html 6bfb3591e40f7c23626730df587f533e983e996d4d1fb67244fb6a88fe6cf9a6
F ext/wasm/index.html ce6a68a75532b47e3c0adb83381a06d15de8c0ac0331fb7bf31d33f8e7c77dc4 F ext/wasm/index.html 49f58dddc29f6394b6e8a93e42768de59380c258454b68b9182e1946d13a4a4b
F ext/wasm/jaccwabyt/jaccwabyt.js 95f573de1826474c9605dda620ee622fcb1673ae74f191eb324c0853aa4dcb66 F ext/wasm/jaccwabyt/jaccwabyt.js 95f573de1826474c9605dda620ee622fcb1673ae74f191eb324c0853aa4dcb66
F ext/wasm/jaccwabyt/jaccwabyt.md 9aa6951b529a8b29f578ec8f0355713c39584c92cf1708f63ba0cf917cb5b68e F ext/wasm/jaccwabyt/jaccwabyt.md 9aa6951b529a8b29f578ec8f0355713c39584c92cf1708f63ba0cf917cb5b68e
F ext/wasm/module-symbols.html b8eebafef8e536624bbe5f7a3da40c07a9062b843dfd3161a0bb72cbb6763dc5 F ext/wasm/module-symbols.html b8eebafef8e536624bbe5f7a3da40c07a9062b843dfd3161a0bb72cbb6763dc5
@ -549,11 +549,12 @@ F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d826
F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5 F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5
F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f
F ext/wasm/test-opfs-vfs.js 44363db07b2a20e73b0eb1808de4400ca71b703af718d0fa6d962f15e73bf2ac F ext/wasm/test-opfs-vfs.js 44363db07b2a20e73b0eb1808de4400ca71b703af718d0fa6d962f15e73bf2ac
F ext/wasm/tester1-esm.html 8d226a21b20707dbd66d68a3990141f0392fc781a281291d3dc59f38a3555887
F ext/wasm/tester1-worker.html 51bf39e2b87f974ae3d5bc3086e2fb36d258f3698c54f6e21ba4b3b99636fa27 F ext/wasm/tester1-worker.html 51bf39e2b87f974ae3d5bc3086e2fb36d258f3698c54f6e21ba4b3b99636fa27
F ext/wasm/tester1.html 624ec41cd9f78a1f2b6d7df70aaa7a6394396b1f2455ecbd6de5775c1275b121 F ext/wasm/tester1.html 624ec41cd9f78a1f2b6d7df70aaa7a6394396b1f2455ecbd6de5775c1275b121
F ext/wasm/tester1.js bff806de454de115922d78c056f11d523ec7ed9ed3839d4e21433a9f72558b88 F ext/wasm/tester1.js bff806de454de115922d78c056f11d523ec7ed9ed3839d4e21433a9f72558b88
F ext/wasm/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd72273503ae7d5 F ext/wasm/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd72273503ae7d5
F ext/wasm/wasmfs.make edfd60691d10fd19ada4c061280fd7fbe4cf5f6bf6b913268e8ebedfccea6ab5 F ext/wasm/wasmfs.make 8aa7565f9de8dd3c291ad8c3ceb1a2c67a3eb31a8e531070b25c6c6b1f0278bf
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
@ -2056,9 +2057,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 f710cce13577788cf3b95ed7089c3af2854271ff53f0a0b7b0619f315e331eff 6b826e700f6849eebfbba38e5948b96be245994e3e03ea30743114d3f5689c42 P 10c723d96d61d2e552ec1102563d58f1eb11bc3d30e03606fd8e0279c5a9043a
R a5784f7e95f9f4ca471c3d20c7b7d6ea R 222130501cabad70ae0d5e4c47519919
T +closed 6b826e700f6849eebfbba38e5948b96be245994e3e03ea30743114d3f5689c42 Closed\sby\sintegrate-merge.
U stephan U stephan
Z 22024ccae1db68511ad1978bbc10208a Z bbe51f75fec2c52a531f67e9a6ac36f6
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
10c723d96d61d2e552ec1102563d58f1eb11bc3d30e03606fd8e0279c5a9043a 2e783670e10b59e67c14b0db7f4803b41790cc7730de221d54fa2d4483cfba33