@powersync/service-jpgwire 0.20.2 → 0.21.1
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/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/pgwire_types.d.ts +3 -2
- package/dist/pgwire_types.js +5 -41
- package/dist/pgwire_types.js.map +1 -1
- package/dist/structure_parser.d.ts +41 -0
- package/dist/structure_parser.js +255 -0
- package/dist/structure_parser.js.map +1 -0
- package/package.json +6 -3
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
package/dist/pgwire_types.d.ts
CHANGED
|
@@ -19,11 +19,12 @@ export declare enum PgTypeOid {
|
|
|
19
19
|
JSONB = 3802,
|
|
20
20
|
PG_LSN = 3220
|
|
21
21
|
}
|
|
22
|
+
export declare const ARRAY_TO_ELEM_OID: Map<number, number>;
|
|
22
23
|
export declare class PgType {
|
|
23
24
|
static getArrayType(typeOid: number): number | undefined;
|
|
24
25
|
static decode(text: string, typeOid: number): DatabaseInputValue;
|
|
25
|
-
static
|
|
26
|
-
static _decodeArray(text: string, elemTypeOid: number):
|
|
26
|
+
static elemTypeOid(arrayTypeOid: number): number | undefined;
|
|
27
|
+
static _decodeArray(text: string, elemTypeOid: number): DatabaseInputValue[];
|
|
27
28
|
static _decodeBytea(text: string): Uint8Array;
|
|
28
29
|
static _encodeBytea(bytes: Uint8Array): string;
|
|
29
30
|
}
|
package/dist/pgwire_types.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { JsonContainer } from '@powersync/service-jsonbig';
|
|
3
3
|
import { TimeValue } from '@powersync/service-sync-rules';
|
|
4
4
|
import { dateToSqlite, lsnMakeComparable, timestampToSqlite, timestamptzToSqlite } from './util.js';
|
|
5
|
+
import { StructureParser } from './structure_parser.js';
|
|
5
6
|
export var PgTypeOid;
|
|
6
7
|
(function (PgTypeOid) {
|
|
7
8
|
PgTypeOid[PgTypeOid["TEXT"] = 25] = "TEXT";
|
|
@@ -25,7 +26,7 @@ export var PgTypeOid;
|
|
|
25
26
|
})(PgTypeOid || (PgTypeOid = {}));
|
|
26
27
|
// Generate using:
|
|
27
28
|
// select '[' || typarray || ', ' || oid || '], // ' || typname from pg_catalog.pg_type WHERE typarray != 0;
|
|
28
|
-
const ARRAY_TO_ELEM_OID = new Map([
|
|
29
|
+
export const ARRAY_TO_ELEM_OID = new Map([
|
|
29
30
|
[1000, 16], // bool
|
|
30
31
|
[1001, 17], // bytea
|
|
31
32
|
[1002, 18], // char
|
|
@@ -136,56 +137,19 @@ export class PgType {
|
|
|
136
137
|
case PgTypeOid.PG_LSN:
|
|
137
138
|
return lsnMakeComparable(text);
|
|
138
139
|
}
|
|
139
|
-
const elemTypeid = this.
|
|
140
|
+
const elemTypeid = this.elemTypeOid(typeOid);
|
|
140
141
|
if (elemTypeid != null) {
|
|
141
142
|
return this._decodeArray(text, elemTypeid);
|
|
142
143
|
}
|
|
143
144
|
return text; // unknown type
|
|
144
145
|
}
|
|
145
|
-
static
|
|
146
|
+
static elemTypeOid(arrayTypeOid) {
|
|
146
147
|
// select 'case ' || typarray || ': return ' || oid || '; // ' || typname from pg_catalog.pg_type WHERE typarray != 0;
|
|
147
148
|
return ARRAY_TO_ELEM_OID.get(arrayTypeOid);
|
|
148
149
|
}
|
|
149
150
|
static _decodeArray(text, elemTypeOid) {
|
|
150
151
|
text = text.replace(/^\[.+=/, ''); // skip dimensions
|
|
151
|
-
|
|
152
|
-
for (let i = 0, inQuotes = false, elStart = 0, stack = []; i < text.length; i++) {
|
|
153
|
-
const ch = text.charCodeAt(i);
|
|
154
|
-
if (ch == 0x5c /*\*/) {
|
|
155
|
-
i++; // escape
|
|
156
|
-
}
|
|
157
|
-
else if (ch == 0x22 /*"*/) {
|
|
158
|
-
inQuotes = !inQuotes;
|
|
159
|
-
}
|
|
160
|
-
else if (inQuotes) {
|
|
161
|
-
}
|
|
162
|
-
else if (ch == 0x7b /*{*/) {
|
|
163
|
-
// continue
|
|
164
|
-
stack.unshift([]), (elStart = i + 1);
|
|
165
|
-
}
|
|
166
|
-
else if (ch == 0x7d /*}*/ || ch == 0x2c /*,*/) {
|
|
167
|
-
// TODO configurable delimiter
|
|
168
|
-
// TODO ensure .slice is cheap enough to do it unconditionally
|
|
169
|
-
const escaped = text.slice(elStart, i); // TODO trim ' \t\n\r\v\f'
|
|
170
|
-
if (result) {
|
|
171
|
-
stack[0].push(result);
|
|
172
|
-
}
|
|
173
|
-
else if (/^NULL$/i.test(escaped)) {
|
|
174
|
-
stack[0].push(null);
|
|
175
|
-
}
|
|
176
|
-
else if (escaped.length) {
|
|
177
|
-
const unescaped = escaped.replace(/^"|"$|(?<!\\)\\/g, '');
|
|
178
|
-
// TODO accept decodeFn as argument,
|
|
179
|
-
// extract parseArray logic out of decoder,
|
|
180
|
-
// do benchmark of static vs dynamic dispatch
|
|
181
|
-
const decoded = this.decode(unescaped, elemTypeOid);
|
|
182
|
-
stack[0].push(decoded);
|
|
183
|
-
}
|
|
184
|
-
result = ch == 0x7d /*}*/ && stack.shift();
|
|
185
|
-
elStart = i + 1; // TODO dry
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
return result;
|
|
152
|
+
return new StructureParser(text).parseArray((raw) => PgType.decode(raw, elemTypeOid));
|
|
189
153
|
}
|
|
190
154
|
static _decodeBytea(text) {
|
|
191
155
|
// https://www.postgresql.org/docs/9.6/datatype-binary.html#AEN5830
|
package/dist/pgwire_types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pgwire_types.js","sourceRoot":"","sources":["../src/pgwire_types.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAE1G,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"pgwire_types.js","sourceRoot":"","sources":["../src/pgwire_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility to parse encoded structural values, such as arrays, composite types, ranges and multiranges.
|
|
3
|
+
*/
|
|
4
|
+
export declare class StructureParser {
|
|
5
|
+
readonly source: string;
|
|
6
|
+
private offset;
|
|
7
|
+
constructor(source: string);
|
|
8
|
+
private currentCharCode;
|
|
9
|
+
private get isAtEnd();
|
|
10
|
+
private checkNotAtEnd;
|
|
11
|
+
private error;
|
|
12
|
+
private check;
|
|
13
|
+
private peek;
|
|
14
|
+
private advance;
|
|
15
|
+
private consume;
|
|
16
|
+
private maybeConsume;
|
|
17
|
+
/**
|
|
18
|
+
* Assuming that the current position contains a opening double quote for an escaped string, parses the value until
|
|
19
|
+
* the closing quote.
|
|
20
|
+
*
|
|
21
|
+
* The returned value applies escape characters, so `"foo\"bar"` would return the string `foo"bar"`.
|
|
22
|
+
*/
|
|
23
|
+
private quotedString;
|
|
24
|
+
unquotedString(endedBy: number[], illegal: number[]): string;
|
|
25
|
+
checkAtEnd(): void;
|
|
26
|
+
parseArray<T>(parseElement: (value: string) => T, delimiter?: number): ElementOrArray<T>[];
|
|
27
|
+
private parseArrayInner;
|
|
28
|
+
parseComposite(onElement: (value: string | null) => void): void;
|
|
29
|
+
private parseRangeInner;
|
|
30
|
+
parseRange<T>(parseInner: (value: string) => T): Range<T>;
|
|
31
|
+
parseMultiRange<T>(parseInner: (value: string) => T): Range<T>[];
|
|
32
|
+
}
|
|
33
|
+
export type Range<T> = {
|
|
34
|
+
lower: T | null;
|
|
35
|
+
upper: T | null;
|
|
36
|
+
lower_exclusive: boolean;
|
|
37
|
+
upper_exclusive: boolean;
|
|
38
|
+
} | 'empty';
|
|
39
|
+
export type ElementOrArray<T> = null | T | ElementOrArray<T>[];
|
|
40
|
+
export declare const CHAR_CODE_COMMA = 44;
|
|
41
|
+
export declare const CHAR_CODE_SEMICOLON = 59;
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility to parse encoded structural values, such as arrays, composite types, ranges and multiranges.
|
|
3
|
+
*/
|
|
4
|
+
export class StructureParser {
|
|
5
|
+
source;
|
|
6
|
+
offset;
|
|
7
|
+
constructor(source) {
|
|
8
|
+
this.source = source;
|
|
9
|
+
this.offset = 0;
|
|
10
|
+
}
|
|
11
|
+
currentCharCode() {
|
|
12
|
+
return this.source.charCodeAt(this.offset);
|
|
13
|
+
}
|
|
14
|
+
get isAtEnd() {
|
|
15
|
+
return this.offset == this.source.length;
|
|
16
|
+
}
|
|
17
|
+
checkNotAtEnd() {
|
|
18
|
+
if (this.isAtEnd) {
|
|
19
|
+
this.error('Unexpected end of input');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
error(msg) {
|
|
23
|
+
throw new Error(`Error decoding Postgres sequence at position ${this.offset}: ${msg}`);
|
|
24
|
+
}
|
|
25
|
+
check(expected) {
|
|
26
|
+
if (this.currentCharCode() != expected) {
|
|
27
|
+
this.error(`Expected ${String.fromCharCode(expected)}, got ${String.fromCharCode(this.currentCharCode())}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
peek() {
|
|
31
|
+
this.checkNotAtEnd();
|
|
32
|
+
return this.source.charCodeAt(this.offset + 1);
|
|
33
|
+
}
|
|
34
|
+
advance() {
|
|
35
|
+
this.checkNotAtEnd();
|
|
36
|
+
this.offset++;
|
|
37
|
+
}
|
|
38
|
+
consume(expected) {
|
|
39
|
+
this.check(expected);
|
|
40
|
+
this.advance();
|
|
41
|
+
}
|
|
42
|
+
maybeConsume(expected) {
|
|
43
|
+
if (this.currentCharCode() == expected) {
|
|
44
|
+
this.advance();
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Assuming that the current position contains a opening double quote for an escaped string, parses the value until
|
|
53
|
+
* the closing quote.
|
|
54
|
+
*
|
|
55
|
+
* The returned value applies escape characters, so `"foo\"bar"` would return the string `foo"bar"`.
|
|
56
|
+
*/
|
|
57
|
+
quotedString(allowEscapingWithDoubleDoubleQuote = false) {
|
|
58
|
+
this.consume(CHAR_CODE_DOUBLE_QUOTE);
|
|
59
|
+
const start = this.offset;
|
|
60
|
+
const charCodes = [];
|
|
61
|
+
let previousWasBackslash = false;
|
|
62
|
+
while (true) {
|
|
63
|
+
const char = this.currentCharCode();
|
|
64
|
+
if (previousWasBackslash) {
|
|
65
|
+
if (char != CHAR_CODE_DOUBLE_QUOTE && char != CHAR_CODE_BACKSLASH) {
|
|
66
|
+
this.error('Expected escaped double quote or escaped backslash');
|
|
67
|
+
}
|
|
68
|
+
charCodes.push(char);
|
|
69
|
+
previousWasBackslash = false;
|
|
70
|
+
}
|
|
71
|
+
else if (char == CHAR_CODE_DOUBLE_QUOTE) {
|
|
72
|
+
if (this.offset != start && allowEscapingWithDoubleDoubleQuote) {
|
|
73
|
+
// If the next character is also a double quote, that escapes a single double quote
|
|
74
|
+
if (this.offset < this.source.length - 1 && this.peek() == CHAR_CODE_DOUBLE_QUOTE) {
|
|
75
|
+
this.offset += 2;
|
|
76
|
+
charCodes.push(CHAR_CODE_DOUBLE_QUOTE);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
break; // End of string.
|
|
81
|
+
}
|
|
82
|
+
else if (char == CHAR_CODE_BACKSLASH) {
|
|
83
|
+
previousWasBackslash = true;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
charCodes.push(char);
|
|
87
|
+
}
|
|
88
|
+
this.advance();
|
|
89
|
+
}
|
|
90
|
+
this.consume(CHAR_CODE_DOUBLE_QUOTE);
|
|
91
|
+
return String.fromCharCode(...charCodes);
|
|
92
|
+
}
|
|
93
|
+
unquotedString(endedBy, illegal) {
|
|
94
|
+
const start = this.offset;
|
|
95
|
+
this.advance();
|
|
96
|
+
let next = this.currentCharCode();
|
|
97
|
+
while (endedBy.indexOf(next) == -1) {
|
|
98
|
+
if (illegal.indexOf(next) != -1) {
|
|
99
|
+
this.error('illegal char, should require escaping');
|
|
100
|
+
}
|
|
101
|
+
this.advance();
|
|
102
|
+
next = this.currentCharCode();
|
|
103
|
+
}
|
|
104
|
+
return this.source.substring(start, this.offset);
|
|
105
|
+
}
|
|
106
|
+
checkAtEnd() {
|
|
107
|
+
if (this.offset < this.source.length) {
|
|
108
|
+
this.error('Unexpected trailing text');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// https://www.postgresql.org/docs/current/arrays.html#ARRAYS-IO
|
|
112
|
+
parseArray(parseElement, delimiter = CHAR_CODE_COMMA) {
|
|
113
|
+
const array = this.parseArrayInner(delimiter, parseElement);
|
|
114
|
+
this.checkAtEnd();
|
|
115
|
+
return array;
|
|
116
|
+
}
|
|
117
|
+
// Recursively parses a (potentially multi-dimensional) array.
|
|
118
|
+
parseArrayInner(delimiter, parseElement) {
|
|
119
|
+
this.consume(CHAR_CODE_LEFT_BRACE);
|
|
120
|
+
if (this.maybeConsume(CHAR_CODE_RIGHT_BRACE)) {
|
|
121
|
+
return []; // Empty array ({})
|
|
122
|
+
}
|
|
123
|
+
const elements = [];
|
|
124
|
+
do {
|
|
125
|
+
// Parse a value in the array. This can either be an escaped string, an unescaped string, or a nested array.
|
|
126
|
+
const currentChar = this.currentCharCode();
|
|
127
|
+
if (currentChar == CHAR_CODE_LEFT_BRACE) {
|
|
128
|
+
// Nested array
|
|
129
|
+
elements.push(this.parseArrayInner(delimiter, parseElement));
|
|
130
|
+
}
|
|
131
|
+
else if (currentChar == CHAR_CODE_DOUBLE_QUOTE) {
|
|
132
|
+
elements.push(parseElement(this.quotedString()));
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const value = this.unquotedString([delimiter, CHAR_CODE_RIGHT_BRACE], [CHAR_CODE_DOUBLE_QUOTE, CHAR_CODE_LEFT_BRACE]);
|
|
136
|
+
elements.push(value == 'NULL' ? null : parseElement(value));
|
|
137
|
+
}
|
|
138
|
+
} while (this.maybeConsume(delimiter));
|
|
139
|
+
this.consume(CHAR_CODE_RIGHT_BRACE);
|
|
140
|
+
return elements;
|
|
141
|
+
}
|
|
142
|
+
// https://www.postgresql.org/docs/current/rowtypes.html#ROWTYPES-IO-SYNTAX
|
|
143
|
+
parseComposite(onElement) {
|
|
144
|
+
this.consume(CHAR_CODE_LEFT_PAREN);
|
|
145
|
+
do {
|
|
146
|
+
// Parse a composite value. This can either be an escaped string, an unescaped string, or an empty string.
|
|
147
|
+
const currentChar = this.currentCharCode();
|
|
148
|
+
if (currentChar == CHAR_CODE_COMMA) {
|
|
149
|
+
// Empty value. The comma is consumed by the while() below.
|
|
150
|
+
onElement(null);
|
|
151
|
+
}
|
|
152
|
+
else if (currentChar == CHAR_CODE_RIGHT_PAREN) {
|
|
153
|
+
// Empty value before end. The right parent is consumed by the line after the loop.
|
|
154
|
+
onElement(null);
|
|
155
|
+
}
|
|
156
|
+
else if (currentChar == CHAR_CODE_DOUBLE_QUOTE) {
|
|
157
|
+
onElement(this.quotedString(true));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const value = this.unquotedString([CHAR_CODE_COMMA, CHAR_CODE_RIGHT_PAREN], [CHAR_CODE_DOUBLE_QUOTE, CHAR_CODE_LEFT_PAREN]);
|
|
161
|
+
onElement(value);
|
|
162
|
+
}
|
|
163
|
+
} while (this.maybeConsume(CHAR_CODE_COMMA));
|
|
164
|
+
this.consume(CHAR_CODE_RIGHT_PAREN);
|
|
165
|
+
this.checkAtEnd();
|
|
166
|
+
}
|
|
167
|
+
// https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-IO
|
|
168
|
+
parseRangeInner(parseInner) {
|
|
169
|
+
const empty = 'empty';
|
|
170
|
+
// Parse [ or ( to start the range
|
|
171
|
+
let lowerBoundExclusive;
|
|
172
|
+
switch (this.currentCharCode()) {
|
|
173
|
+
case CHAR_CODE_LEFT_PAREN:
|
|
174
|
+
lowerBoundExclusive = true;
|
|
175
|
+
this.advance();
|
|
176
|
+
break;
|
|
177
|
+
case CHAR_CODE_LEFT_BRACKET:
|
|
178
|
+
lowerBoundExclusive = false;
|
|
179
|
+
this.advance();
|
|
180
|
+
break;
|
|
181
|
+
case empty.charCodeAt(0):
|
|
182
|
+
// Consume the string "empty"
|
|
183
|
+
for (let i = 0; i < empty.length; i++) {
|
|
184
|
+
this.consume(empty.charCodeAt(i));
|
|
185
|
+
}
|
|
186
|
+
return empty;
|
|
187
|
+
default:
|
|
188
|
+
this.error('Expected [, ( or string empty');
|
|
189
|
+
}
|
|
190
|
+
// Parse value until comma (which may be empty)
|
|
191
|
+
let lower = null;
|
|
192
|
+
if (this.currentCharCode() == CHAR_CODE_DOUBLE_QUOTE) {
|
|
193
|
+
lower = parseInner(this.quotedString());
|
|
194
|
+
}
|
|
195
|
+
else if (this.currentCharCode() != CHAR_CODE_COMMA) {
|
|
196
|
+
lower = parseInner(this.unquotedString([CHAR_CODE_COMMA], []));
|
|
197
|
+
}
|
|
198
|
+
this.consume(CHAR_CODE_COMMA);
|
|
199
|
+
let upper = null;
|
|
200
|
+
if (this.currentCharCode() == CHAR_CODE_DOUBLE_QUOTE) {
|
|
201
|
+
upper = parseInner(this.quotedString());
|
|
202
|
+
}
|
|
203
|
+
else if (this.currentCharCode() != CHAR_CODE_RIGHT_PAREN && this.currentCharCode() != CHAR_CODE_RIGHT_BRACKET) {
|
|
204
|
+
upper = parseInner(this.unquotedString([CHAR_CODE_RIGHT_PAREN, CHAR_CODE_RIGHT_BRACKET], []));
|
|
205
|
+
}
|
|
206
|
+
let upperBoundExclusive;
|
|
207
|
+
switch (this.currentCharCode()) {
|
|
208
|
+
case CHAR_CODE_RIGHT_PAREN:
|
|
209
|
+
upperBoundExclusive = true;
|
|
210
|
+
this.advance();
|
|
211
|
+
break;
|
|
212
|
+
case CHAR_CODE_RIGHT_BRACKET:
|
|
213
|
+
upperBoundExclusive = false;
|
|
214
|
+
this.advance();
|
|
215
|
+
break;
|
|
216
|
+
default:
|
|
217
|
+
this.error('Expected ] or )');
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
lower: lower,
|
|
221
|
+
upper: upper,
|
|
222
|
+
lower_exclusive: lowerBoundExclusive,
|
|
223
|
+
upper_exclusive: upperBoundExclusive
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
parseRange(parseInner) {
|
|
227
|
+
const range = this.parseRangeInner(parseInner);
|
|
228
|
+
this.checkAtEnd();
|
|
229
|
+
return range;
|
|
230
|
+
}
|
|
231
|
+
parseMultiRange(parseInner) {
|
|
232
|
+
this.consume(CHAR_CODE_LEFT_BRACE);
|
|
233
|
+
if (this.maybeConsume(CHAR_CODE_RIGHT_BRACE)) {
|
|
234
|
+
return [];
|
|
235
|
+
}
|
|
236
|
+
const values = [];
|
|
237
|
+
do {
|
|
238
|
+
values.push(this.parseRangeInner(parseInner));
|
|
239
|
+
} while (this.maybeConsume(CHAR_CODE_COMMA));
|
|
240
|
+
this.consume(CHAR_CODE_RIGHT_BRACE);
|
|
241
|
+
this.checkAtEnd();
|
|
242
|
+
return values;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const CHAR_CODE_DOUBLE_QUOTE = 0x22;
|
|
246
|
+
const CHAR_CODE_BACKSLASH = 0x5c;
|
|
247
|
+
export const CHAR_CODE_COMMA = 0x2c;
|
|
248
|
+
export const CHAR_CODE_SEMICOLON = 0x3b;
|
|
249
|
+
const CHAR_CODE_LEFT_BRACE = 0x7b;
|
|
250
|
+
const CHAR_CODE_RIGHT_BRACE = 0x7d;
|
|
251
|
+
const CHAR_CODE_LEFT_PAREN = 0x28;
|
|
252
|
+
const CHAR_CODE_RIGHT_PAREN = 0x29;
|
|
253
|
+
const CHAR_CODE_LEFT_BRACKET = 0x5b;
|
|
254
|
+
const CHAR_CODE_RIGHT_BRACKET = 0x5d;
|
|
255
|
+
//# sourceMappingURL=structure_parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure_parser.js","sourceRoot":"","sources":["../src/structure_parser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "0.
|
|
8
|
+
"version": "0.21.1",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"license": "FSL-1.1-ALv2",
|
|
11
11
|
"files": [
|
|
@@ -16,11 +16,14 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"date-fns": "^4.1.0",
|
|
18
18
|
"pgwire": "github:kagis/pgwire#f1cb95f9a0f42a612bb5a6b67bb2eb793fc5fc87",
|
|
19
|
+
"vitest": "^3.0.5",
|
|
19
20
|
"@powersync/service-jsonbig": "^0.17.11",
|
|
20
|
-
"@powersync/service-sync-rules": "^0.29.
|
|
21
|
+
"@powersync/service-sync-rules": "^0.29.2"
|
|
21
22
|
},
|
|
22
23
|
"scripts": {
|
|
23
24
|
"clean": "rm -r ./dist && tsc -b --clean",
|
|
24
|
-
"build": "tsc -b"
|
|
25
|
+
"build": "tsc -b",
|
|
26
|
+
"build:tests": "tsc -b test/tsconfig.json",
|
|
27
|
+
"test": "vitest"
|
|
25
28
|
}
|
|
26
29
|
}
|