@postgres-language-server/wasm 0.0.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,176 @@
1
+ # @postgres-language-server/wasm
2
+
3
+ WebAssembly bindings for the Postgres Language Server. This package provides two independent APIs for working with PostgreSQL SQL in the browser and Node.js.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @postgres-language-server/wasm
9
+ # or
10
+ bun add @postgres-language-server/wasm
11
+ ```
12
+
13
+ ## Two APIs
14
+
15
+ This package provides two separate APIs. Choose the one that fits your use case:
16
+
17
+ | API | Use Case | Import Path |
18
+ |-----|----------|-------------|
19
+ | **Workspace** | Direct parse, lint, complete, hover | `@postgres-language-server/wasm/workspace` |
20
+ | **LanguageServer** | Full LSP JSON-RPC protocol | `@postgres-language-server/wasm/lsp` |
21
+
22
+ Each API manages its own workspace independently. Use one or the other, not both.
23
+
24
+ ## Workspace API
25
+
26
+ Use this for custom editor integrations, build-time SQL linting, or simple tooling that doesn't need full LSP.
27
+
28
+ ```typescript
29
+ import { createWorkspace } from '@postgres-language-server/wasm/workspace';
30
+
31
+ const workspace = await createWorkspace();
32
+
33
+ // Parse SQL and get errors
34
+ const errors = workspace.parse('SELECT * FROM users;');
35
+ console.log(errors); // []
36
+
37
+ // Insert a file and lint it
38
+ workspace.insertFile('/query.sql', 'SELECT * FROM users;');
39
+ const diagnostics = workspace.lint('/query.sql');
40
+
41
+ // Get completions
42
+ const completions = workspace.complete('/query.sql', 14); // position after "FROM "
43
+
44
+ // Get hover info
45
+ const hover = workspace.hover('/query.sql', 14); // position over "users"
46
+ ```
47
+
48
+ ### With Schema
49
+
50
+ For schema-aware completions and hover, provide your database schema:
51
+
52
+ ```typescript
53
+ const workspace = await createWorkspace();
54
+
55
+ // Set schema (matches pgls_schema_cache format)
56
+ workspace.setSchema(JSON.stringify({
57
+ schemas: [{ id: 1, name: 'public', owner: 'postgres', ... }],
58
+ tables: [{ id: 1, schema: 'public', name: 'users', ... }],
59
+ columns: [{ name: 'id', table_name: 'users', type_name: 'integer', ... }],
60
+ functions: [],
61
+ types: [],
62
+ // ...
63
+ }));
64
+
65
+ workspace.insertFile('/query.sql', 'SELECT * FROM ');
66
+ const completions = workspace.complete('/query.sql', 14);
67
+ // completions now include 'users' table
68
+ ```
69
+
70
+ ## LanguageServer API
71
+
72
+ Use this for Monaco editor integration with `monaco-languageclient` or any editor that speaks LSP protocol.
73
+
74
+ ```typescript
75
+ import { createLanguageServer } from '@postgres-language-server/wasm/lsp';
76
+
77
+ const lsp = await createLanguageServer();
78
+
79
+ // Handle LSP messages
80
+ const responses = lsp.handleMessage({
81
+ jsonrpc: '2.0',
82
+ id: 1,
83
+ method: 'initialize',
84
+ params: { capabilities: {} }
85
+ });
86
+
87
+ // responses is an array of outgoing messages
88
+ for (const msg of responses) {
89
+ // Send to client...
90
+ }
91
+ ```
92
+
93
+ ### Web Worker Integration
94
+
95
+ For Monaco editor, run the language server in a web worker:
96
+
97
+ ```typescript
98
+ // lsp-worker.js
99
+ import { createLanguageServer } from '@postgres-language-server/wasm/lsp';
100
+
101
+ let lsp = null;
102
+
103
+ self.onmessage = async (event) => {
104
+ if (!lsp) {
105
+ lsp = await createLanguageServer();
106
+ self.postMessage({ type: 'ready' });
107
+ }
108
+
109
+ const responses = lsp.handleMessage(event.data);
110
+ for (const msg of responses) {
111
+ self.postMessage(msg);
112
+ }
113
+ };
114
+ ```
115
+
116
+ ### Setting Schema via LSP
117
+
118
+ Use the `pgls/setSchema` notification:
119
+
120
+ ```typescript
121
+ lsp.handleMessage({
122
+ jsonrpc: '2.0',
123
+ method: 'pgls/setSchema',
124
+ params: { schema: JSON.stringify(schemaCache) }
125
+ });
126
+ ```
127
+
128
+ ## API Reference
129
+
130
+ ### Workspace
131
+
132
+ | Method | Description |
133
+ |--------|-------------|
134
+ | `parse(sql: string)` | Parse SQL, returns array of error messages |
135
+ | `insertFile(path, content)` | Add or update a file in the workspace |
136
+ | `removeFile(path)` | Remove a file from the workspace |
137
+ | `lint(path)` | Get diagnostics for a file |
138
+ | `complete(path, offset)` | Get completions at position |
139
+ | `hover(path, offset)` | Get hover info at position |
140
+ | `setSchema(json)` | Set database schema |
141
+ | `clearSchema()` | Clear the current schema |
142
+ | `version()` | Get library version |
143
+
144
+ ### LanguageServer
145
+
146
+ | Method | Description |
147
+ |--------|-------------|
148
+ | `handleMessage(msg)` | Process LSP JSON-RPC message, returns array of responses |
149
+
150
+ ### Supported LSP Methods
151
+
152
+ - `initialize`
153
+ - `shutdown`
154
+ - `textDocument/didOpen`
155
+ - `textDocument/didChange`
156
+ - `textDocument/didClose`
157
+ - `textDocument/completion`
158
+ - `textDocument/hover`
159
+ - `pgls/setSchema` (custom notification)
160
+
161
+ ## Building
162
+
163
+ Requires Emscripten SDK:
164
+
165
+ ```bash
166
+ # Build WASM
167
+ ./crates/pgls_wasm/build-wasm.sh --release
168
+
169
+ # Build TypeScript
170
+ cd packages/@postgres-language-server/wasm
171
+ bun run build
172
+ ```
173
+
174
+ ## License
175
+
176
+ MIT
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Common utilities shared between Workspace and LanguageServer APIs.
3
+ */
4
+ import type { PGLSModule } from "./types";
5
+ /**
6
+ * Load the WASM module.
7
+ * This is called automatically by createWorkspace/createLanguageServer,
8
+ * but can be called manually for preloading.
9
+ */
10
+ export declare function loadWasm(): Promise<PGLSModule>;
11
+ /**
12
+ * Allocate a string in WASM memory.
13
+ */
14
+ export declare function allocateString(module: PGLSModule, str: string): number;
15
+ /**
16
+ * Read and free a string from WASM memory.
17
+ */
18
+ export declare function readAndFreeString(module: PGLSModule, ptr: number): string | null;
19
+ /**
20
+ * Parse a result string that may be an error.
21
+ */
22
+ export declare function parseResult<T>(str: string | null): T;
23
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAc1C;;;;GAIG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CA4CpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOhF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,CAQpD"}
package/dist/common.js ADDED
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Common utilities shared between Workspace and LanguageServer APIs.
3
+ */
4
+ // The WASM module will be loaded dynamically
5
+ let wasmModule = null;
6
+ /**
7
+ * Detect if we're running in Node.js/Bun (vs browser)
8
+ */
9
+ function isNode() {
10
+ return typeof process !== 'undefined' &&
11
+ process.versions != null &&
12
+ (process.versions.node != null || process.versions.bun != null);
13
+ }
14
+ /**
15
+ * Load the WASM module.
16
+ * This is called automatically by createWorkspace/createLanguageServer,
17
+ * but can be called manually for preloading.
18
+ */
19
+ export async function loadWasm() {
20
+ if (wasmModule) {
21
+ return wasmModule;
22
+ }
23
+ // Dynamic import of the Emscripten-generated module
24
+ // @ts-expect-error - Generated JS file without type declarations
25
+ const createPGLS = (await import("../wasm/pgls.js")).default;
26
+ // Build options for Emscripten module initialization
27
+ const moduleOptions = {};
28
+ if (isNode()) {
29
+ // In Node.js/Bun, read the WASM file directly
30
+ const { readFileSync } = await import("fs");
31
+ const { fileURLToPath } = await import("url");
32
+ const { dirname, join } = await import("path");
33
+ const __filename = fileURLToPath(import.meta.url);
34
+ const __dirname = dirname(__filename);
35
+ const wasmPath = join(__dirname, '..', 'wasm', 'pgls.wasm');
36
+ moduleOptions.wasmBinary = readFileSync(wasmPath);
37
+ }
38
+ else {
39
+ // In browser, use locateFile to help find the .wasm file
40
+ moduleOptions.locateFile = (path) => {
41
+ if (path.endsWith('.wasm')) {
42
+ return new URL('./pgls.wasm', import.meta.url).href;
43
+ }
44
+ return path;
45
+ };
46
+ }
47
+ // Initialize the Emscripten module
48
+ const module = await createPGLS(moduleOptions);
49
+ // Initialize the workspace
50
+ const result = module._pgls_init();
51
+ if (result !== 0) {
52
+ throw new Error(`Failed to initialize PGLS: error code ${result}`);
53
+ }
54
+ wasmModule = module;
55
+ return module;
56
+ }
57
+ /**
58
+ * Allocate a string in WASM memory.
59
+ */
60
+ export function allocateString(module, str) {
61
+ const length = module.lengthBytesUTF8(str) + 1;
62
+ const ptr = module._malloc(length);
63
+ module.stringToUTF8(str, ptr, length);
64
+ return ptr;
65
+ }
66
+ /**
67
+ * Read and free a string from WASM memory.
68
+ */
69
+ export function readAndFreeString(module, ptr) {
70
+ if (ptr === 0) {
71
+ return null;
72
+ }
73
+ const str = module.UTF8ToString(ptr);
74
+ module._pgls_free_string(ptr);
75
+ return str;
76
+ }
77
+ /**
78
+ * Parse a result string that may be an error.
79
+ */
80
+ export function parseResult(str) {
81
+ if (str === null) {
82
+ return null;
83
+ }
84
+ if (str.startsWith("ERROR:")) {
85
+ throw new Error(str.substring(7).trim());
86
+ }
87
+ return JSON.parse(str);
88
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Postgres Language Server WASM bindings.
3
+ *
4
+ * This package provides two independent APIs:
5
+ *
6
+ * 1. **Workspace API** - Direct access to parse, lint, complete, hover
7
+ * ```ts
8
+ * import { createWorkspace } from '@postgres-language-server/wasm/workspace';
9
+ * ```
10
+ *
11
+ * 2. **Language Server API** - Full LSP JSON-RPC message handling
12
+ * ```ts
13
+ * import { createLanguageServer } from '@postgres-language-server/wasm/lsp';
14
+ * ```
15
+ *
16
+ * Each API manages its own workspace independently. Choose one based on your use case.
17
+ */
18
+ export * from "./workspace.js";
19
+ export * from "./lsp.js";
20
+ export { loadWasm } from "./common.js";
21
+ export type { Diagnostic, CompletionItem, SchemaCache, WorkspaceOptions, PGLSModule, JsonRpcMessage, } from "./types.js";
22
+ export { createWorkspace as default } from "./workspace.js";
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,YAAY,EACX,UAAU,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,cAAc,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Postgres Language Server WASM bindings.
3
+ *
4
+ * This package provides two independent APIs:
5
+ *
6
+ * 1. **Workspace API** - Direct access to parse, lint, complete, hover
7
+ * ```ts
8
+ * import { createWorkspace } from '@postgres-language-server/wasm/workspace';
9
+ * ```
10
+ *
11
+ * 2. **Language Server API** - Full LSP JSON-RPC message handling
12
+ * ```ts
13
+ * import { createLanguageServer } from '@postgres-language-server/wasm/lsp';
14
+ * ```
15
+ *
16
+ * Each API manages its own workspace independently. Choose one based on your use case.
17
+ */
18
+ // Re-export everything from both APIs
19
+ export * from "./workspace.js";
20
+ export * from "./lsp.js";
21
+ export { loadWasm } from "./common.js";
22
+ // Default export for convenience
23
+ export { createWorkspace as default } from "./workspace.js";
package/dist/lsp.d.ts ADDED
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Language Server API - Full LSP JSON-RPC message handling.
3
+ *
4
+ * Use this for:
5
+ * - Monaco editor with monaco-languageclient
6
+ * - Any editor that speaks LSP protocol
7
+ *
8
+ * The language server manages its own workspace internally.
9
+ * Use the `pgls/setSchema` notification to set the database schema:
10
+ * ```json
11
+ * {"jsonrpc":"2.0","method":"pgls/setSchema","params":{"schema":"..."}}
12
+ * ```
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { createLanguageServer } from '@postgres-language-server/wasm/lsp';
17
+ *
18
+ * const lsp = await createLanguageServer();
19
+ *
20
+ * // In a web worker
21
+ * self.onmessage = (event) => {
22
+ * const responses = lsp.handleMessage(event.data);
23
+ * for (const msg of responses) {
24
+ * self.postMessage(msg);
25
+ * }
26
+ * };
27
+ * ```
28
+ */
29
+ import type { PGLSModule, JsonRpcMessage } from "./types.js";
30
+ export type { PGLSModule, JsonRpcMessage };
31
+ /**
32
+ * The LanguageServer class provides a full LSP JSON-RPC message handler.
33
+ */
34
+ export declare class LanguageServer {
35
+ private module;
36
+ constructor(module: PGLSModule);
37
+ /**
38
+ * Handle an LSP JSON-RPC message.
39
+ *
40
+ * Processes an incoming LSP message and returns an array of outgoing
41
+ * messages (response + any notifications like publishDiagnostics).
42
+ *
43
+ * @param message - The JSON-RPC message as a string or object
44
+ * @returns Array of outgoing JSON-RPC messages
45
+ */
46
+ handleMessage(message: string | JsonRpcMessage): JsonRpcMessage[];
47
+ }
48
+ /**
49
+ * Create a new LanguageServer instance.
50
+ */
51
+ export declare function createLanguageServer(): Promise<LanguageServer>;
52
+ export default createLanguageServer;
53
+ //# sourceMappingURL=lsp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../src/lsp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI7D,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAE3C;;GAEG;AACH,qBAAa,cAAc;IAC1B,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAI9B;;;;;;;;OAQG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,EAAE;CAYjE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAGpE;AAED,eAAe,oBAAoB,CAAC"}
package/dist/lsp.js ADDED
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Language Server API - Full LSP JSON-RPC message handling.
3
+ *
4
+ * Use this for:
5
+ * - Monaco editor with monaco-languageclient
6
+ * - Any editor that speaks LSP protocol
7
+ *
8
+ * The language server manages its own workspace internally.
9
+ * Use the `pgls/setSchema` notification to set the database schema:
10
+ * ```json
11
+ * {"jsonrpc":"2.0","method":"pgls/setSchema","params":{"schema":"..."}}
12
+ * ```
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { createLanguageServer } from '@postgres-language-server/wasm/lsp';
17
+ *
18
+ * const lsp = await createLanguageServer();
19
+ *
20
+ * // In a web worker
21
+ * self.onmessage = (event) => {
22
+ * const responses = lsp.handleMessage(event.data);
23
+ * for (const msg of responses) {
24
+ * self.postMessage(msg);
25
+ * }
26
+ * };
27
+ * ```
28
+ */
29
+ import { loadWasm, allocateString, readAndFreeString } from "./common.js";
30
+ /**
31
+ * The LanguageServer class provides a full LSP JSON-RPC message handler.
32
+ */
33
+ export class LanguageServer {
34
+ constructor(module) {
35
+ this.module = module;
36
+ }
37
+ /**
38
+ * Handle an LSP JSON-RPC message.
39
+ *
40
+ * Processes an incoming LSP message and returns an array of outgoing
41
+ * messages (response + any notifications like publishDiagnostics).
42
+ *
43
+ * @param message - The JSON-RPC message as a string or object
44
+ * @returns Array of outgoing JSON-RPC messages
45
+ */
46
+ handleMessage(message) {
47
+ const messageStr = typeof message === "string" ? message : JSON.stringify(message);
48
+ const messagePtr = allocateString(this.module, messageStr);
49
+ try {
50
+ const resultPtr = this.module._pgls_lsp_handle_message(messagePtr);
51
+ const result = readAndFreeString(this.module, resultPtr) ?? "[]";
52
+ return JSON.parse(result);
53
+ }
54
+ finally {
55
+ this.module._free(messagePtr);
56
+ }
57
+ }
58
+ }
59
+ /**
60
+ * Create a new LanguageServer instance.
61
+ */
62
+ export async function createLanguageServer() {
63
+ const module = await loadWasm();
64
+ return new LanguageServer(module);
65
+ }
66
+ export default createLanguageServer;
package/dist/pgls.js ADDED
@@ -0,0 +1,14 @@
1
+ var createPGLS = (() => {
2
+
3
+ return (
4
+ async function(moduleArg = {}) {
5
+ var moduleRtn;
6
+
7
+ var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");var require=createRequire(import.meta.url)}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(_scriptName.startsWith("file:")){scriptDirectory=nodePath.dirname(require("url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;var isFileURI=filename=>filename.startsWith("file://");function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["aa"]()}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("pgls.wasm")}return new URL("pgls.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["$"];updateMemoryViews();wasmTable=wasmExports["xa"];removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr];case"i8":return HEAP8[ptr];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP64[ptr>>3];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort(`invalid type for getValue: ${type}`)}}var noExitRuntime=true;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr]=value;break;case"i8":HEAP8[ptr]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":HEAP64[ptr>>3]=BigInt(value);break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);var exceptionCaught=[];var uncaughtExceptionCount=0;var ___cxa_begin_catch=ptr=>{var info=new ExceptionInfo(ptr);if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(info);___cxa_increment_exception_refcount(ptr);return ___cxa_get_exception_ptr(ptr)};var exceptionLast=0;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var setTempRet0=val=>__emscripten_tempret_set(val);var findMatchingCatch=args=>{var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0}var info=new ExceptionInfo(thrown);info.set_adjusted_ptr(thrown);var thrownType=info.get_type();if(!thrownType){setTempRet0(0);return thrown}for(var caughtType of args){if(caughtType===0||caughtType===thrownType){break}var adjusted_ptr_addr=info.ptr+16;if(___cxa_can_catch(caughtType,thrownType,adjusted_ptr_addr)){setTempRet0(caughtType);return thrown}}setTempRet0(thrownType);return thrown};var ___cxa_find_matching_catch_2=()=>findMatchingCatch([]);var ___cxa_find_matching_catch_3=arg0=>findMatchingCatch([arg0]);var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var ___resumeException=ptr=>{if(!exceptionLast){exceptionLast=ptr}throw exceptionLast};var ___syscall_getcwd=(buf,size)=>{};var ___syscall_lstat64=(path,buf)=>{};var ___syscall_newfstatat=(dirfd,path,buf,flags)=>{};var ___syscall_readlinkat=(dirfd,path,buf,bufsize)=>{};var ___syscall_stat64=(path,buf)=>{};var __abort_js=()=>abort("");var runtimeKeepaliveCounter=0;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var __emscripten_throw_longjmp=()=>{throw Infinity};var timers={};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var _emscripten_get_now=()=>performance.now();var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id,timeout_ms};return 0};var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var _fd_close=fd=>52;var _fd_read=(fd,iov,iovcnt,pnum)=>52;function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var _random_get=(buffer,size)=>{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"]}Module["setValue"]=setValue;Module["getValue"]=getValue;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;var wasmImports={k:___assert_fail,Z:___cxa_begin_catch,b:___cxa_find_matching_catch_2,D:___cxa_find_matching_catch_3,U:___cxa_throw,d:___resumeException,R:___syscall_getcwd,X:___syscall_lstat64,W:___syscall_newfstatat,J:___syscall_readlinkat,Y:___syscall_stat64,_:__abort_js,M:__emscripten_runtime_keepalive_clear,H:__emscripten_throw_longjmp,E:__setitimer_js,S:_clock_time_get,B:_emscripten_get_now,T:_emscripten_resize_heap,P:_environ_get,Q:_environ_sizes_get,C:_exit,V:_fd_close,N:_fd_read,O:_fd_seek,x:_fd_write,F:invoke_fii,m:invoke_i,i:invoke_ii,g:invoke_iii,j:invoke_iiii,h:invoke_iiiii,q:invoke_iiiiii,y:invoke_iiiiiii,s:invoke_iij,u:invoke_iiji,o:invoke_jii,p:invoke_v,a:invoke_vi,c:invoke_vii,e:invoke_viii,l:invoke_viiii,f:invoke_viiiii,n:invoke_viiiiii,v:invoke_viiiiiiii,t:invoke_viiiiiiiiii,w:invoke_viiiij,r:invoke_viiij,I:invoke_viiji,G:invoke_viijii,z:invoke_vijiji,A:invoke_vji,L:_proc_exit,K:_random_get};var wasmExports=await createWasm();var ___wasm_call_ctors=wasmExports["aa"];var _pgls_init=Module["_pgls_init"]=wasmExports["ba"];var _pgls_free_string=Module["_pgls_free_string"]=wasmExports["ca"];var _pgls_set_schema=Module["_pgls_set_schema"]=wasmExports["da"];var _pgls_clear_schema=Module["_pgls_clear_schema"]=wasmExports["ea"];var _pgls_insert_file=Module["_pgls_insert_file"]=wasmExports["fa"];var _pgls_remove_file=Module["_pgls_remove_file"]=wasmExports["ga"];var _pgls_lint=Module["_pgls_lint"]=wasmExports["ha"];var _pgls_complete=Module["_pgls_complete"]=wasmExports["ia"];var _pgls_hover=Module["_pgls_hover"]=wasmExports["ja"];var _pgls_parse=Module["_pgls_parse"]=wasmExports["ka"];var _pgls_version=Module["_pgls_version"]=wasmExports["la"];var _pgls_lsp_handle_message=Module["_pgls_lsp_handle_message"]=wasmExports["ma"];var __emscripten_timeout=wasmExports["na"];var _malloc=Module["_malloc"]=wasmExports["oa"];var _free=Module["_free"]=wasmExports["pa"];var _setThrew=wasmExports["qa"];var __emscripten_tempret_set=wasmExports["ra"];var __emscripten_stack_restore=wasmExports["sa"];var _emscripten_stack_get_current=wasmExports["ta"];var ___cxa_increment_exception_refcount=wasmExports["ua"];var ___cxa_can_catch=wasmExports["va"];var ___cxa_get_exception_ptr=wasmExports["wa"];function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vji(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiij(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiij(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0);return 0n}}function invoke_viiji(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vijiji(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiji(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iij(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}function preInit(){if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}preInit();run();moduleRtn=readyPromise;
8
+
9
+
10
+ return moduleRtn;
11
+ }
12
+ );
13
+ })();
14
+ export default createPGLS;
package/dist/pgls.wasm ADDED
Binary file
@@ -0,0 +1,116 @@
1
+ /**
2
+ * TypeScript type definitions for the Postgres Language Server WASM API.
3
+ */
4
+ /**
5
+ * A diagnostic message from the linter.
6
+ */
7
+ export interface Diagnostic {
8
+ /** The category/rule name (e.g., "lint/safety/banDropColumn") */
9
+ category: string;
10
+ /** Start byte offset in the file */
11
+ start: number;
12
+ /** End byte offset in the file */
13
+ end: number;
14
+ /** The diagnostic message */
15
+ message: string;
16
+ /** Severity: "error", "warning", "info", "hint", or "fatal" */
17
+ severity: "error" | "warning" | "info" | "hint" | "fatal";
18
+ }
19
+ /**
20
+ * A completion item suggestion.
21
+ */
22
+ export interface CompletionItem {
23
+ /** The label of the completion item */
24
+ label: string;
25
+ /** The kind of completion (e.g., "table", "column", "function") */
26
+ kind: string;
27
+ /** Optional detail text */
28
+ detail?: string;
29
+ /** Optional documentation */
30
+ documentation?: string;
31
+ /** The text to insert */
32
+ insertText?: string;
33
+ }
34
+ /**
35
+ * Schema cache representing database metadata.
36
+ * This structure mirrors the Rust SchemaCache type.
37
+ */
38
+ export interface SchemaCache {
39
+ schemas: Schema[];
40
+ tables: Table[];
41
+ functions: Function[];
42
+ types: Type[];
43
+ }
44
+ export interface Schema {
45
+ name: string;
46
+ owner?: string;
47
+ }
48
+ export interface Table {
49
+ name: string;
50
+ schema: string;
51
+ columns: Column[];
52
+ }
53
+ export interface Column {
54
+ name: string;
55
+ dataType: string;
56
+ isNullable: boolean;
57
+ defaultValue?: string;
58
+ }
59
+ export interface Function {
60
+ name: string;
61
+ schema: string;
62
+ returnType: string;
63
+ arguments: string[];
64
+ }
65
+ export interface Type {
66
+ name: string;
67
+ schema: string;
68
+ kind: string;
69
+ }
70
+ /**
71
+ * Options for initializing the workspace.
72
+ */
73
+ export interface WorkspaceOptions {
74
+ /** Optional schema cache to preload */
75
+ schema?: SchemaCache | string;
76
+ }
77
+ /**
78
+ * A JSON-RPC message (request, response, or notification).
79
+ * This is the standard LSP message format.
80
+ */
81
+ export interface JsonRpcMessage {
82
+ jsonrpc: "2.0";
83
+ id?: number | string | null;
84
+ method?: string;
85
+ params?: unknown;
86
+ result?: unknown;
87
+ error?: {
88
+ code: number;
89
+ message: string;
90
+ data?: unknown;
91
+ };
92
+ }
93
+ /**
94
+ * The Emscripten module interface.
95
+ * This is the raw interface exposed by the compiled WASM.
96
+ */
97
+ export interface PGLSModule {
98
+ _malloc(size: number): number;
99
+ _free(ptr: number): void;
100
+ _pgls_init(): number;
101
+ _pgls_free_string(ptr: number): void;
102
+ _pgls_set_schema(jsonPtr: number): number;
103
+ _pgls_clear_schema(): void;
104
+ _pgls_insert_file(pathPtr: number, contentPtr: number): number;
105
+ _pgls_remove_file(pathPtr: number): void;
106
+ _pgls_lint(pathPtr: number): number;
107
+ _pgls_complete(pathPtr: number, offset: number): number;
108
+ _pgls_hover(pathPtr: number, offset: number): number;
109
+ _pgls_parse(sqlPtr: number): number;
110
+ _pgls_version(): number;
111
+ _pgls_lsp_handle_message(messagePtr: number): number;
112
+ UTF8ToString(ptr: number): string;
113
+ stringToUTF8(str: string, ptr: number, maxLength: number): void;
114
+ lengthBytesUTF8(str: string): number;
115
+ }
116
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,IAAI,EAAE,CAAC;CAEd;AAED,MAAM,WAAW,MAAM;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IAE1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAGzB,UAAU,IAAI,MAAM,CAAC;IACrB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1C,kBAAkB,IAAI,IAAI,CAAC;IAC3B,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/D,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACrD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,aAAa,IAAI,MAAM,CAAC;IAGxB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAGrD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC"}
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ /**
2
+ * TypeScript type definitions for the Postgres Language Server WASM API.
3
+ */
4
+ export {};
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Web Worker for running the Postgres Language Server in the browser.
3
+ *
4
+ * This worker implements the LSP message handling pattern compatible with
5
+ * monaco-languageclient's BrowserMessageReader/BrowserMessageWriter.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // In your main application:
10
+ * import { MonacoLanguageClient } from 'monaco-languageclient';
11
+ * import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageserver-protocol/browser';
12
+ *
13
+ * // Create worker
14
+ * const worker = new Worker(new URL('./worker.ts', import.meta.url), { type: 'module' });
15
+ *
16
+ * // Wait for worker to be ready
17
+ * await new Promise<void>((resolve) => {
18
+ * worker.onmessage = (e) => {
19
+ * if (e.data.type === 'ready') resolve();
20
+ * };
21
+ * });
22
+ *
23
+ * // Standard monaco-languageclient setup
24
+ * const reader = new BrowserMessageReader(worker);
25
+ * const writer = new BrowserMessageWriter(worker);
26
+ *
27
+ * const languageClient = new MonacoLanguageClient({
28
+ * name: 'PGLS',
29
+ * clientOptions: {
30
+ * documentSelector: [{ language: 'sql' }],
31
+ * },
32
+ * messageTransports: { reader, writer },
33
+ * });
34
+ *
35
+ * languageClient.start();
36
+ * ```
37
+ */
38
+ export type {};
39
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AA+CH,YAAY,EAAE,CAAC"}
package/dist/worker.js ADDED
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Web Worker for running the Postgres Language Server in the browser.
3
+ *
4
+ * This worker implements the LSP message handling pattern compatible with
5
+ * monaco-languageclient's BrowserMessageReader/BrowserMessageWriter.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // In your main application:
10
+ * import { MonacoLanguageClient } from 'monaco-languageclient';
11
+ * import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageserver-protocol/browser';
12
+ *
13
+ * // Create worker
14
+ * const worker = new Worker(new URL('./worker.ts', import.meta.url), { type: 'module' });
15
+ *
16
+ * // Wait for worker to be ready
17
+ * await new Promise<void>((resolve) => {
18
+ * worker.onmessage = (e) => {
19
+ * if (e.data.type === 'ready') resolve();
20
+ * };
21
+ * });
22
+ *
23
+ * // Standard monaco-languageclient setup
24
+ * const reader = new BrowserMessageReader(worker);
25
+ * const writer = new BrowserMessageWriter(worker);
26
+ *
27
+ * const languageClient = new MonacoLanguageClient({
28
+ * name: 'PGLS',
29
+ * clientOptions: {
30
+ * documentSelector: [{ language: 'sql' }],
31
+ * },
32
+ * messageTransports: { reader, writer },
33
+ * });
34
+ *
35
+ * languageClient.start();
36
+ * ```
37
+ */
38
+ import { createLanguageServer } from "./lsp.js";
39
+ let languageServer = null;
40
+ /**
41
+ * Initialize the language server.
42
+ */
43
+ async function initialize() {
44
+ if (!languageServer) {
45
+ languageServer = await createLanguageServer();
46
+ }
47
+ }
48
+ /**
49
+ * Handle incoming messages from the main thread.
50
+ */
51
+ self.onmessage = async (event) => {
52
+ // Ensure language server is initialized
53
+ if (!languageServer) {
54
+ await initialize();
55
+ }
56
+ const data = event.data;
57
+ // Handle LSP JSON-RPC messages
58
+ // The message can be a string (raw JSON) or an object
59
+ const message = data;
60
+ // Process the message and get array of outgoing messages
61
+ const outgoing = languageServer.handleMessage(message);
62
+ // Send EACH message separately via postMessage
63
+ // This is required by BrowserMessageReader which expects
64
+ // individual messages, not arrays
65
+ for (const msg of outgoing) {
66
+ self.postMessage(msg);
67
+ }
68
+ };
69
+ // Initialize immediately and signal readiness
70
+ initialize().then(() => {
71
+ self.postMessage({ type: "ready" });
72
+ });
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Workspace API - Direct access to parse, lint, complete, hover.
3
+ *
4
+ * Use this for:
5
+ * - Custom editor integrations
6
+ * - Build-time SQL linting
7
+ * - Simple tooling that doesn't need full LSP
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { createWorkspace } from '@postgres-language-server/wasm/workspace';
12
+ *
13
+ * const workspace = await createWorkspace();
14
+ * workspace.insertFile('/query.sql', 'SELECT * FROM users;');
15
+ * const diagnostics = workspace.lint('/query.sql');
16
+ * ```
17
+ */
18
+ import type { Diagnostic, CompletionItem, SchemaCache, WorkspaceOptions, PGLSModule } from "./types.js";
19
+ export type { Diagnostic, CompletionItem, SchemaCache, WorkspaceOptions, PGLSModule };
20
+ /**
21
+ * The Workspace class provides a direct API for SQL parsing, linting,
22
+ * completions, and hover information.
23
+ */
24
+ export declare class Workspace {
25
+ private module;
26
+ constructor(module: PGLSModule);
27
+ /**
28
+ * Set the database schema from a SchemaCache object or JSON string.
29
+ */
30
+ setSchema(schema: SchemaCache | string): void;
31
+ /**
32
+ * Clear the current schema.
33
+ */
34
+ clearSchema(): void;
35
+ /**
36
+ * Insert or update a file in the workspace.
37
+ */
38
+ insertFile(path: string, content: string): void;
39
+ /**
40
+ * Remove a file from the workspace.
41
+ */
42
+ removeFile(path: string): void;
43
+ /**
44
+ * Lint a file and return diagnostics.
45
+ */
46
+ lint(path: string): Diagnostic[];
47
+ /**
48
+ * Get completions at a position in a file.
49
+ */
50
+ complete(path: string, offset: number): CompletionItem[];
51
+ /**
52
+ * Get hover information at a position in a file.
53
+ */
54
+ hover(path: string, offset: number): string | null;
55
+ /**
56
+ * Parse SQL and return any parse errors.
57
+ */
58
+ parse(sql: string): string[];
59
+ /**
60
+ * Get the version of the library.
61
+ */
62
+ version(): string;
63
+ }
64
+ /**
65
+ * Create a new Workspace instance.
66
+ */
67
+ export declare function createWorkspace(options?: WorkspaceOptions): Promise<Workspace>;
68
+ export default createWorkspace;
69
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACX,UAAU,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,MAAM,YAAY,CAAC;AAIpB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;AAEtF;;;GAGG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAI9B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI;IAc7C;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAe/C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS9B;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE;IAWhC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE;IAWxD;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBlD;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAW5B;;OAEG;IACH,OAAO,IAAI,MAAM;CAIjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CASpF;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Workspace API - Direct access to parse, lint, complete, hover.
3
+ *
4
+ * Use this for:
5
+ * - Custom editor integrations
6
+ * - Build-time SQL linting
7
+ * - Simple tooling that doesn't need full LSP
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { createWorkspace } from '@postgres-language-server/wasm/workspace';
12
+ *
13
+ * const workspace = await createWorkspace();
14
+ * workspace.insertFile('/query.sql', 'SELECT * FROM users;');
15
+ * const diagnostics = workspace.lint('/query.sql');
16
+ * ```
17
+ */
18
+ import { loadWasm, allocateString, readAndFreeString, parseResult } from "./common.js";
19
+ /**
20
+ * The Workspace class provides a direct API for SQL parsing, linting,
21
+ * completions, and hover information.
22
+ */
23
+ export class Workspace {
24
+ constructor(module) {
25
+ this.module = module;
26
+ }
27
+ /**
28
+ * Set the database schema from a SchemaCache object or JSON string.
29
+ */
30
+ setSchema(schema) {
31
+ const json = typeof schema === "string" ? schema : JSON.stringify(schema);
32
+ const jsonPtr = allocateString(this.module, json);
33
+ try {
34
+ const resultPtr = this.module._pgls_set_schema(jsonPtr);
35
+ const result = readAndFreeString(this.module, resultPtr);
36
+ if (result !== null) {
37
+ throw new Error(result);
38
+ }
39
+ }
40
+ finally {
41
+ this.module._free(jsonPtr);
42
+ }
43
+ }
44
+ /**
45
+ * Clear the current schema.
46
+ */
47
+ clearSchema() {
48
+ this.module._pgls_clear_schema();
49
+ }
50
+ /**
51
+ * Insert or update a file in the workspace.
52
+ */
53
+ insertFile(path, content) {
54
+ const pathPtr = allocateString(this.module, path);
55
+ const contentPtr = allocateString(this.module, content);
56
+ try {
57
+ const resultPtr = this.module._pgls_insert_file(pathPtr, contentPtr);
58
+ const result = readAndFreeString(this.module, resultPtr);
59
+ if (result !== null) {
60
+ throw new Error(result);
61
+ }
62
+ }
63
+ finally {
64
+ this.module._free(pathPtr);
65
+ this.module._free(contentPtr);
66
+ }
67
+ }
68
+ /**
69
+ * Remove a file from the workspace.
70
+ */
71
+ removeFile(path) {
72
+ const pathPtr = allocateString(this.module, path);
73
+ try {
74
+ this.module._pgls_remove_file(pathPtr);
75
+ }
76
+ finally {
77
+ this.module._free(pathPtr);
78
+ }
79
+ }
80
+ /**
81
+ * Lint a file and return diagnostics.
82
+ */
83
+ lint(path) {
84
+ const pathPtr = allocateString(this.module, path);
85
+ try {
86
+ const resultPtr = this.module._pgls_lint(pathPtr);
87
+ const result = readAndFreeString(this.module, resultPtr);
88
+ return parseResult(result) ?? [];
89
+ }
90
+ finally {
91
+ this.module._free(pathPtr);
92
+ }
93
+ }
94
+ /**
95
+ * Get completions at a position in a file.
96
+ */
97
+ complete(path, offset) {
98
+ const pathPtr = allocateString(this.module, path);
99
+ try {
100
+ const resultPtr = this.module._pgls_complete(pathPtr, offset);
101
+ const result = readAndFreeString(this.module, resultPtr);
102
+ return parseResult(result) ?? [];
103
+ }
104
+ finally {
105
+ this.module._free(pathPtr);
106
+ }
107
+ }
108
+ /**
109
+ * Get hover information at a position in a file.
110
+ */
111
+ hover(path, offset) {
112
+ const pathPtr = allocateString(this.module, path);
113
+ try {
114
+ const resultPtr = this.module._pgls_hover(pathPtr, offset);
115
+ const result = readAndFreeString(this.module, resultPtr);
116
+ if (result === null) {
117
+ return null;
118
+ }
119
+ if (result.startsWith("ERROR:")) {
120
+ throw new Error(result.substring(7).trim());
121
+ }
122
+ return result;
123
+ }
124
+ finally {
125
+ this.module._free(pathPtr);
126
+ }
127
+ }
128
+ /**
129
+ * Parse SQL and return any parse errors.
130
+ */
131
+ parse(sql) {
132
+ const sqlPtr = allocateString(this.module, sql);
133
+ try {
134
+ const resultPtr = this.module._pgls_parse(sqlPtr);
135
+ const result = readAndFreeString(this.module, resultPtr);
136
+ return parseResult(result) ?? [];
137
+ }
138
+ finally {
139
+ this.module._free(sqlPtr);
140
+ }
141
+ }
142
+ /**
143
+ * Get the version of the library.
144
+ */
145
+ version() {
146
+ const resultPtr = this.module._pgls_version();
147
+ return readAndFreeString(this.module, resultPtr) ?? "unknown";
148
+ }
149
+ }
150
+ /**
151
+ * Create a new Workspace instance.
152
+ */
153
+ export async function createWorkspace(options) {
154
+ const module = await loadWasm();
155
+ const workspace = new Workspace(module);
156
+ if (options?.schema) {
157
+ workspace.setSchema(options.schema);
158
+ }
159
+ return workspace;
160
+ }
161
+ export default createWorkspace;
package/package.json CHANGED
@@ -1,19 +1,60 @@
1
1
  {
2
2
  "name": "@postgres-language-server/wasm",
3
- "version": "0.0.0",
4
- "main": "index.js",
3
+ "version": "0.21.0",
4
+ "description": "WebAssembly bindings for the Postgres Language Server",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./workspace": {
15
+ "types": "./dist/workspace.d.ts",
16
+ "import": "./dist/workspace.js"
17
+ },
18
+ "./lsp": {
19
+ "types": "./dist/lsp.d.ts",
20
+ "import": "./dist/lsp.js"
21
+ }
22
+ },
5
23
  "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
24
+ "build": "bun run build:wasm && bun run build:ts",
25
+ "build:wasm": "../../../crates/pgls_wasm/build-wasm.sh --release && mkdir -p wasm && cp ../../../crates/pgls_wasm/dist/pgls.js ../../../crates/pgls_wasm/dist/pgls.wasm ./wasm/",
26
+ "build:ts": "tsc -p tsconfig.build.json && cp wasm/pgls.wasm wasm/pgls.js dist/",
27
+ "build:types": "tsc --declaration --emitDeclarationOnly --outDir dist",
28
+ "test": "bun test",
29
+ "test:e2e": "playwright test",
30
+ "test:e2e:ui": "playwright test --ui",
31
+ "test:e2e:install": "playwright install chromium"
7
32
  },
33
+ "files": [
34
+ "dist/",
35
+ "wasm/",
36
+ "README.md"
37
+ ],
8
38
  "repository": {
9
39
  "type": "git",
10
- "url": "git+https://github.com/supabase-community/postgres-language-server.git"
40
+ "url": "git+https://github.com/supabase-community/postgres-language-server.git",
41
+ "directory": "packages/@postgres-language-server/wasm"
11
42
  },
12
- "author": "",
43
+ "author": "Supabase Community",
44
+ "bugs": "https://github.com/supabase-community/postgres-language-server/issues",
45
+ "keywords": [
46
+ "postgres",
47
+ "sql",
48
+ "linter",
49
+ "wasm",
50
+ "language-server"
51
+ ],
13
52
  "license": "MIT",
14
- "bugs": {
15
- "url": "https://github.com/supabase-community/postgres-language-server/issues"
53
+ "publishConfig": {
54
+ "provenance": true
16
55
  },
17
- "homepage": "https://github.com/supabase-community/postgres-language-server#readme",
18
- "description": ""
19
- }
56
+ "devDependencies": {
57
+ "@playwright/test": "^1.50.0",
58
+ "typescript": "^5.0.0"
59
+ }
60
+ }
package/wasm/pgls.js ADDED
@@ -0,0 +1,14 @@
1
+ var createPGLS = (() => {
2
+
3
+ return (
4
+ async function(moduleArg = {}) {
5
+ var moduleRtn;
6
+
7
+ var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");var require=createRequire(import.meta.url)}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(_scriptName.startsWith("file:")){scriptDirectory=nodePath.dirname(require("url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;var isFileURI=filename=>filename.startsWith("file://");function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["aa"]()}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("pgls.wasm")}return new URL("pgls.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["$"];updateMemoryViews();wasmTable=wasmExports["xa"];removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr];case"i8":return HEAP8[ptr];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP64[ptr>>3];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort(`invalid type for getValue: ${type}`)}}var noExitRuntime=true;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr]=value;break;case"i8":HEAP8[ptr]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":HEAP64[ptr>>3]=BigInt(value);break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);var exceptionCaught=[];var uncaughtExceptionCount=0;var ___cxa_begin_catch=ptr=>{var info=new ExceptionInfo(ptr);if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(info);___cxa_increment_exception_refcount(ptr);return ___cxa_get_exception_ptr(ptr)};var exceptionLast=0;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var setTempRet0=val=>__emscripten_tempret_set(val);var findMatchingCatch=args=>{var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0}var info=new ExceptionInfo(thrown);info.set_adjusted_ptr(thrown);var thrownType=info.get_type();if(!thrownType){setTempRet0(0);return thrown}for(var caughtType of args){if(caughtType===0||caughtType===thrownType){break}var adjusted_ptr_addr=info.ptr+16;if(___cxa_can_catch(caughtType,thrownType,adjusted_ptr_addr)){setTempRet0(caughtType);return thrown}}setTempRet0(thrownType);return thrown};var ___cxa_find_matching_catch_2=()=>findMatchingCatch([]);var ___cxa_find_matching_catch_3=arg0=>findMatchingCatch([arg0]);var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var ___resumeException=ptr=>{if(!exceptionLast){exceptionLast=ptr}throw exceptionLast};var ___syscall_getcwd=(buf,size)=>{};var ___syscall_lstat64=(path,buf)=>{};var ___syscall_newfstatat=(dirfd,path,buf,flags)=>{};var ___syscall_readlinkat=(dirfd,path,buf,bufsize)=>{};var ___syscall_stat64=(path,buf)=>{};var __abort_js=()=>abort("");var runtimeKeepaliveCounter=0;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var __emscripten_throw_longjmp=()=>{throw Infinity};var timers={};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var _emscripten_get_now=()=>performance.now();var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id,timeout_ms};return 0};var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var _fd_close=fd=>52;var _fd_read=(fd,iov,iovcnt,pnum)=>52;function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var _random_get=(buffer,size)=>{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"]}Module["setValue"]=setValue;Module["getValue"]=getValue;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8"]=stringToUTF8;Module["lengthBytesUTF8"]=lengthBytesUTF8;var wasmImports={k:___assert_fail,Z:___cxa_begin_catch,b:___cxa_find_matching_catch_2,D:___cxa_find_matching_catch_3,U:___cxa_throw,d:___resumeException,R:___syscall_getcwd,X:___syscall_lstat64,W:___syscall_newfstatat,J:___syscall_readlinkat,Y:___syscall_stat64,_:__abort_js,M:__emscripten_runtime_keepalive_clear,H:__emscripten_throw_longjmp,E:__setitimer_js,S:_clock_time_get,B:_emscripten_get_now,T:_emscripten_resize_heap,P:_environ_get,Q:_environ_sizes_get,C:_exit,V:_fd_close,N:_fd_read,O:_fd_seek,x:_fd_write,F:invoke_fii,m:invoke_i,i:invoke_ii,g:invoke_iii,j:invoke_iiii,h:invoke_iiiii,q:invoke_iiiiii,y:invoke_iiiiiii,s:invoke_iij,u:invoke_iiji,o:invoke_jii,p:invoke_v,a:invoke_vi,c:invoke_vii,e:invoke_viii,l:invoke_viiii,f:invoke_viiiii,n:invoke_viiiiii,v:invoke_viiiiiiii,t:invoke_viiiiiiiiii,w:invoke_viiiij,r:invoke_viiij,I:invoke_viiji,G:invoke_viijii,z:invoke_vijiji,A:invoke_vji,L:_proc_exit,K:_random_get};var wasmExports=await createWasm();var ___wasm_call_ctors=wasmExports["aa"];var _pgls_init=Module["_pgls_init"]=wasmExports["ba"];var _pgls_free_string=Module["_pgls_free_string"]=wasmExports["ca"];var _pgls_set_schema=Module["_pgls_set_schema"]=wasmExports["da"];var _pgls_clear_schema=Module["_pgls_clear_schema"]=wasmExports["ea"];var _pgls_insert_file=Module["_pgls_insert_file"]=wasmExports["fa"];var _pgls_remove_file=Module["_pgls_remove_file"]=wasmExports["ga"];var _pgls_lint=Module["_pgls_lint"]=wasmExports["ha"];var _pgls_complete=Module["_pgls_complete"]=wasmExports["ia"];var _pgls_hover=Module["_pgls_hover"]=wasmExports["ja"];var _pgls_parse=Module["_pgls_parse"]=wasmExports["ka"];var _pgls_version=Module["_pgls_version"]=wasmExports["la"];var _pgls_lsp_handle_message=Module["_pgls_lsp_handle_message"]=wasmExports["ma"];var __emscripten_timeout=wasmExports["na"];var _malloc=Module["_malloc"]=wasmExports["oa"];var _free=Module["_free"]=wasmExports["pa"];var _setThrew=wasmExports["qa"];var __emscripten_tempret_set=wasmExports["ra"];var __emscripten_stack_restore=wasmExports["sa"];var _emscripten_stack_get_current=wasmExports["ta"];var ___cxa_increment_exception_refcount=wasmExports["ua"];var ___cxa_can_catch=wasmExports["va"];var ___cxa_get_exception_ptr=wasmExports["wa"];function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vji(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiij(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiij(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0);return 0n}}function invoke_viiji(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vijiji(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiji(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iij(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}function preInit(){if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}preInit();run();moduleRtn=readyPromise;
8
+
9
+
10
+ return moduleRtn;
11
+ }
12
+ );
13
+ })();
14
+ export default createPGLS;
package/wasm/pgls.wasm ADDED
Binary file