diff --git a/Makefile b/Makefile index 8e409262..a720fd7a 100644 --- a/Makefile +++ b/Makefile @@ -53,7 +53,16 @@ EMFLAGS_WASM = \ EMFLAGS_OPTIMIZED= \ -Oz \ -flto \ - --closure 1 + --closure 1 \ + --closure-args=--externs=./src/externs.js + +EMFLAGS_ESMODULE= \ + -s EXPORT_ES6=1 \ + -s MODULARIZE=1 \ + -s EXPORT_NAME=loadWASM \ + +EMFLAGS_WEB= \ + -s ENVIRONMENT=web EMFLAGS_DEBUG = \ -s ASSERTIONS=1 \ @@ -88,7 +97,7 @@ dist/sql-wasm-debug.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FI rm out/tmp-raw.js .PHONY: optimized -optimized: dist/sql-asm.js dist/sql-wasm.js dist/sql-asm-memory-growth.js +optimized: dist/sql-asm.js dist/sql-wasm.js dist/sql-asm-memory-growth.js dist/sql-wasm-module.js dist/sql-wasm-module-web.js dist/sql-asm.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES) $(EMCC) $(EMFLAGS) $(EMFLAGS_OPTIMIZED) $(EMFLAGS_ASM) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@ @@ -102,6 +111,12 @@ dist/sql-wasm.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $ cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@ rm out/tmp-raw.js +dist/sql-wasm-module.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES) + $(EMCC) $(EMFLAGS) $(EMFLAGS_OPTIMIZED) $(EMFLAGS_ESMODULE) $(EMFLAGS_WASM) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@ + +dist/sql-wasm-module-web.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES) + $(EMCC) $(EMFLAGS) $(EMFLAGS_OPTIMIZED) $(EMFLAGS_ESMODULE) $(EMFLAGS_WEB) $(EMFLAGS_WASM) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@ + dist/sql-asm-memory-growth.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES) $(EMCC) $(EMFLAGS) $(EMFLAGS_OPTIMIZED) $(EMFLAGS_ASM_MEMORY_GROWTH) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@ mv $@ out/tmp-raw.js diff --git a/README.md b/README.md index 4e98ee5e..e4a889bb 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,18 @@ There are a few examples [available here](https://sql-js.github.io/sql.js/index. ## Examples The test files provide up to date example of the use of the api. ### Inside the browser + +#### Using ES Modules +This package supports exports an es module that works with bundlers like webpack: +```js +const SQL = await import("sql.js"); + +const db = new SQL.Database(); +console.log(db.exec("select 1")); +``` + +You may need to enable features in your bundler, e.g. `asyncWebassembly` and `topLevelAwait` in [Webpack 5](https://webpack.js.org/configuration/experiments/). + #### Example **HTML** file: ```html diff --git a/module-web.js b/module-web.js new file mode 100644 index 00000000..3b2ae969 --- /dev/null +++ b/module-web.js @@ -0,0 +1,5 @@ +import * as wasm from "./dist/sql-wasm-module-web" + +const def = await wasm.default(); + +export const Database = def.Database; diff --git a/module.js b/module.js new file mode 100644 index 00000000..63c19fe7 --- /dev/null +++ b/module.js @@ -0,0 +1,5 @@ +import * as wasm from "./dist/sql-wasm-module" + +const def = await wasm.default(); + +export const Database = def.Database; diff --git a/package.json b/package.json index 52b499ec..7d89299b 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,10 @@ ], "license": "MIT", "main": "./dist/sql-wasm.js", + "module": "./module.js", + "browser": { + "./module.js": "./module-web.js" + }, "scripts": { "build": "make", "rebuild": "npm run clean && npm run build", diff --git a/src/externs.js b/src/externs.js new file mode 100644 index 00000000..1bd7e6fe --- /dev/null +++ b/src/externs.js @@ -0,0 +1,49 @@ + +Module.Database = class Database { + constructor(data) {} + run(sql, params) {} + exec(sql, params, config) {} + each(sql, params, callback, done, config) {} + prepare(sql, params) {} + iterateStatements(sql) {} + export() {} + close() {} + handleError(returnCode) {} + getRowsModified() {} + create_function() {} + create_aggregate() {} +} + +Module.Statement = class Statement { + constructor(stmt, db) {} + bind(values) {} + step() {} + getNumber(pos) {} + getBigInt(pos) {} + getString(pos) {} + getBlob(pos) {} + get(params, config) {} + getColumnNames() {} + getAsObject() {} + getSQL() {} + getNormalizedSQL() {} + run(values) {} + bindString(string, pos) {} + bindBlob(array, pos) {} + bindNumber(num, pos) {} + bindNull(pos) {} + bindVlaue(val, pos) {} + bindFromObject(valuesObj) {} + bindFromArray(values) {} + reset() {} + freemem() {} + free() {} +} + +Module.StatementItearator = class StatementIterator { + constructor(sql, obj) {} + next() {} + finalize() {} + getRemainingSQL() {} + // [Symbol.iterator]() {} // XXX: Causes closure compiler error? com.google.javascript.rhino.Node cannot be cast to com.google.javascript.rhino.Node$StringNode +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy