@memberjunction/global 6.1.4 → 6.1.6

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLScreeningScanner.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/SQLScreeningScanner.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,172 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ScanSQLForScreening } from '../SQLScreeningScanner.js';
3
+ /** The text of each span the scan found, with its kind. */
4
+ function spansOf(sql, dialect) {
5
+ return ScanSQLForScreening(sql, dialect).Spans.map(s => [s.Kind, sql.slice(s.Start, s.End)]);
6
+ }
7
+ describe('ScanSQLForScreening', () => {
8
+ describe('string literals (both dialects)', () => {
9
+ it.each(['sqlserver', 'postgresql'])('reads doubled quotes as escaped quotes (%s)', dialect => {
10
+ expect(spansOf("Name = 'O''Brien' AND 1 = 1", dialect)).toEqual([['string', "'O''Brien'"]]);
11
+ });
12
+ it.each(['sqlserver', 'postgresql'])('treats a backslash as an ordinary character (%s)', dialect => {
13
+ const scan = ScanSQLForScreening("x = 'a\\' ; SELECT 1", dialect);
14
+ expect(scan.Classified).toBe(true);
15
+ expect(scan.Code).toBe('x = ; SELECT 1');
16
+ });
17
+ it.each(['sqlserver', 'postgresql'])('includes the N prefix in the literal (%s)', dialect => {
18
+ expect(spansOf("Name = N'x'", dialect)).toEqual([['string', "N'x'"]]);
19
+ });
20
+ });
21
+ describe('quoted identifiers', () => {
22
+ it('reads a SQL Server bracket identifier, with ]] as an escaped bracket, so a quote inside opens no literal', () => {
23
+ const sql = "[a']]b'] = 1 ; SELECT 1";
24
+ expect(spansOf(sql, 'sqlserver')).toEqual([['identifier', "[a']]b']"]]);
25
+ expect(ScanSQLForScreening(sql, 'sqlserver').Code).toBe(' = 1 ; SELECT 1');
26
+ });
27
+ it('treats a bracket as code on PostgreSQL, where a quote inside it opens a literal', () => {
28
+ expect(spansOf("x[1] = 'a'", 'postgresql')).toEqual([['string', "'a'"]]);
29
+ expect(spansOf("[a'] = 1 ; SELECT 1 ; SELECT [b']", 'postgresql')).toEqual([
30
+ ['string', "'] = 1 ; SELECT 1 ; SELECT [b'"],
31
+ ]);
32
+ });
33
+ it.each(['sqlserver', 'postgresql'])('reads a double-quoted identifier with "" escapes (%s)', dialect => {
34
+ expect(spansOf('"a""b\'c" = 1', dialect)).toEqual([['identifier', '"a""b\'c"']]);
35
+ });
36
+ it('writes quoted identifiers as bare names in CodeWithIdentifiers', () => {
37
+ const scan = ScanSQLForScreening('SELECT * FROM [sys].[sql_logins] WHERE [a]]b] = 1', 'sqlserver');
38
+ expect(scan.Code).toBe('SELECT * FROM . WHERE = 1');
39
+ expect(scan.CodeWithIdentifiers).toBe('SELECT * FROM sys . sql_logins WHERE a]b = 1');
40
+ });
41
+ });
42
+ describe('PostgreSQL strings', () => {
43
+ it('reads a backslash-escaped quote inside an E string', () => {
44
+ const sql = "Name = E'\\'' ; SELECT 1";
45
+ expect(spansOf(sql, 'postgresql')).toEqual([['string', "E'\\''"]]);
46
+ expect(ScanSQLForScreening(sql, 'postgresql').Code).toBe('Name = ; SELECT 1');
47
+ });
48
+ it('reads E as an ordinary word on SQL Server', () => {
49
+ expect(spansOf("Name = E'\\'' ; SELECT 1 ; '", 'sqlserver')).toEqual([['string', "'\\'' ; SELECT 1 ; '"]]);
50
+ });
51
+ it('opens an E string only at the start of a token', () => {
52
+ // `x1e` and `name` are identifiers, so the quote after them opens a plain literal.
53
+ expect(spansOf("x1e'\\'", 'postgresql')).toEqual([['string', "'\\'"]]);
54
+ expect(spansOf("name'\\' ; SELECT 1", 'postgresql')).toEqual([['string', "'\\'"]]);
55
+ // Operator characters do not extend a word, so `@@E'…'` is an operator and an E string.
56
+ expect(spansOf("'a' @@E'\\'' ; SELECT 1", 'postgresql')).toEqual([
57
+ ['string', "'a'"],
58
+ ['string', "E'\\''"],
59
+ ]);
60
+ // An exponent needs digits, so in `1e'…'` the `e` opens an E string.
61
+ expect(spansOf("1e'\\''", 'postgresql')).toEqual([['string', "e'\\''"]]);
62
+ });
63
+ it('reads dollar-quoted strings, with or without a tag', () => {
64
+ expect(spansOf("x = $$it's$$ AND y = $fn$a$$b$fn$", 'postgresql')).toEqual([
65
+ ['string', "$$it's$$"],
66
+ ['string', '$fn$a$$b$fn$'],
67
+ ]);
68
+ });
69
+ it('does not open a dollar quote inside a word or at a positional parameter', () => {
70
+ expect(spansOf('a$$b$$ = $1', 'postgresql')).toEqual([]);
71
+ });
72
+ it('treats $ as code on SQL Server', () => {
73
+ expect(spansOf("x = $$'$$ ; SELECT 1 ; '", 'sqlserver')).toEqual([['string', "'$$ ; SELECT 1 ; '"]]);
74
+ });
75
+ });
76
+ describe('comments', () => {
77
+ it.each(['sqlserver', 'postgresql'])('reads a quote inside a comment as comment text (%s)', dialect => {
78
+ const scan = ScanSQLForScreening("SELECT 1 -- it's\n; SELECT 2 /* it's */", dialect);
79
+ expect(scan.Classified).toBe(true);
80
+ expect(scan.CommentCount).toBe(2);
81
+ expect(scan.Code).toBe('SELECT 1 \n; SELECT 2 ');
82
+ });
83
+ it('reads nested block comments', () => {
84
+ expect(spansOf('/* a /* b */ c */ SELECT 1', 'sqlserver')).toEqual([['comment', '/* a /* b */ c */']]);
85
+ });
86
+ it('ends a line comment at \\r\\n and at the end of the input', () => {
87
+ const scan = ScanSQLForScreening('SELECT 1 -- a\r\nFROM T -- b', 'sqlserver');
88
+ expect(scan.Classified).toBe(true);
89
+ expect(scan.Code).toBe('SELECT 1 \r\nFROM T ');
90
+ });
91
+ });
92
+ describe('leading word', () => {
93
+ it.each(['sqlserver', 'postgresql'])('skips whitespace and comments (%s)', dialect => {
94
+ expect(ScanSQLForScreening(' -- c\n /* b */ select 1', dialect).LeadingWord).toBe('select');
95
+ expect(ScanSQLForScreening('WithdrawFunds 1', dialect).LeadingWord).toBe('WithdrawFunds');
96
+ });
97
+ it.each([
98
+ ['a bracket identifier', '[sp_who] SELECT 1', 'sqlserver'],
99
+ ['a double-quoted identifier', '"sp_who" SELECT 1', 'postgresql'],
100
+ ['a literal', "N'x' SELECT 1", 'sqlserver'],
101
+ ['a number', '1 SELECT 1', 'postgresql'],
102
+ ['a symbol', '(SELECT 1)', 'sqlserver'],
103
+ ['a Unicode space', ' SELECT 1', 'sqlserver'],
104
+ ['a word followed by a non-ASCII character', 'SELECT€1', 'sqlserver'],
105
+ ['nothing but a comment', '-- only a comment', 'postgresql'],
106
+ ])('is null when %s comes first', (_label, sql, dialect) => {
107
+ expect(ScanSQLForScreening(sql, dialect).LeadingWord).toBeNull();
108
+ });
109
+ });
110
+ describe('SQL Server words', () => {
111
+ it('reads letters of any script as part of a word', () => {
112
+ const scan = ScanSQLForScreening('Café = 1', 'sqlserver');
113
+ expect(scan.LeadingWord).toBe('Café');
114
+ expect(scan.Code).toBe('Café = 1');
115
+ });
116
+ it('reads a currency symbol as code, so the keyword after a money literal is a separate token', () => {
117
+ expect(ScanSQLForScreening('ID = ¥1SELECT 1', 'sqlserver').Code).toBe('ID = ¥1 SELECT 1');
118
+ });
119
+ it('reads non-ASCII characters as part of a word on PostgreSQL', () => {
120
+ expect(ScanSQLForScreening('ID = ¥1SELECT 1', 'postgresql').Code).toBe('ID = ¥1SELECT 1');
121
+ });
122
+ });
123
+ describe('token boundaries', () => {
124
+ it('separates a word written against a literal', () => {
125
+ expect(ScanSQLForScreening("Name = N'x'UNION SELECT 1", 'sqlserver').Code).toBe('Name = UNION SELECT 1');
126
+ });
127
+ it.each(['sqlserver', 'postgresql'])('separates a word written against a number (%s)', dialect => {
128
+ expect(ScanSQLForScreening('ID = 1UNION SELECT 1', dialect).Code).toBe('ID = 1 UNION SELECT 1');
129
+ expect(ScanSQLForScreening('ID = 0x1FUNION', dialect).Code).toBe('ID = 0x1F UNION');
130
+ expect(ScanSQLForScreening('ID = 1e5', dialect).Code).toBe('ID = 1e5');
131
+ });
132
+ });
133
+ describe('text that cannot be classified', () => {
134
+ it.each([
135
+ ['an unterminated literal', "Name = 'abc", 'sqlserver'],
136
+ ['an unterminated N literal', "Name = N'abc", 'postgresql'],
137
+ ['an unterminated bracket identifier', 'Name = [abc', 'sqlserver'],
138
+ ['an unterminated double-quoted identifier', 'Name = "abc', 'postgresql'],
139
+ ['an unterminated block comment', 'Name = 1 /* a /* b */', 'sqlserver'],
140
+ ['an unterminated E string', "Name = E'abc\\'", 'postgresql'],
141
+ ['an unterminated dollar-quoted string', 'Name = $$abc', 'postgresql'],
142
+ ['a NUL character', 'Name = 1\0', 'sqlserver'],
143
+ ['a lone carriage return in a line comment', "SELECT 1 --a\r'; SELECT 2 --'", 'postgresql'],
144
+ ['a Unicode line separator in a line comment', 'SELECT 1 --a
; SELECT 2', 'sqlserver'],
145
+ ['an E string followed by a continuation segment', "x = E'a'\n'\\'' ; SELECT 1 ; --'", 'postgresql'],
146
+ ['a number followed by E and a word on SQL Server', 'ID = 1EXEC sp_who', 'sqlserver'],
147
+ ['a money literal followed by E and a word on SQL Server', 'ID = £1EXEC sp_who', 'sqlserver'],
148
+ ])('rejects %s', (_label, sql, dialect) => {
149
+ const scan = ScanSQLForScreening(sql, dialect);
150
+ expect(scan.Classified).toBe(false);
151
+ expect(scan.Error).toBeTruthy();
152
+ });
153
+ it('leaves the unread text as written', () => {
154
+ const scan = ScanSQLForScreening("x = 1 ; 'abc", 'sqlserver');
155
+ expect(scan.Code).toBe("x = 1 ; 'abc");
156
+ });
157
+ it('rejects a dialect it does not know instead of guessing', () => {
158
+ const fromConfig = 'mysql';
159
+ const scan = ScanSQLForScreening('x = 1', fromConfig);
160
+ expect(scan.Classified).toBe(false);
161
+ expect(scan.Code).toBe('x = 1');
162
+ });
163
+ });
164
+ it('is linear-time on long input', () => {
165
+ const sql = `Name = '${'a'.repeat(200000)}`;
166
+ const start = Date.now();
167
+ ScanSQLForScreening(sql, 'sqlserver');
168
+ ScanSQLForScreening(sql, 'postgresql');
169
+ expect(Date.now() - start).toBeLessThan(1000);
170
+ });
171
+ });
172
+ //# sourceMappingURL=SQLScreeningScanner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLScreeningScanner.test.js","sourceRoot":"","sources":["../../src/__tests__/SQLScreeningScanner.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -17,6 +17,7 @@ export * from './ValidationTypes.js';
17
17
  export * from './JSONValidator.js';
18
18
  export * from './SafeExpressionEvaluator.js';
19
19
  export * from './fieldRules/index.js';
20
+ export * from './SQLScreeningScanner.js';
20
21
  export * from './SQLExpressionValidator.js';
21
22
  export * from './warningManager.js';
22
23
  export * from './EncryptionUtils.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAChE,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AACzC,cAAc,cAAc,CAAA;AAC5B,cAAc,0BAA0B,CAAA;AACxC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AAMtC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,+BAA+B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAChE,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AACzC,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AAMtC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,+BAA+B,CAAA"}
package/dist/index.js CHANGED
@@ -18,6 +18,7 @@ export * from './ValidationTypes.js';
18
18
  export * from './JSONValidator.js';
19
19
  export * from './SafeExpressionEvaluator.js';
20
20
  export * from './fieldRules/index.js';
21
+ export * from './SQLScreeningScanner.js';
21
22
  export * from './SQLExpressionValidator.js';
22
23
  export * from './warningManager.js';
23
24
  export * from './EncryptionUtils.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAChE,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AACzC,cAAc,cAAc,CAAA;AAC5B,cAAc,0BAA0B,CAAA;AACxC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AAEtC,2DAA2D;AAC3D,oCAAoC;AAEpC,0BAA0B;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,+BAA+B,CAAA;AAE7C,6DAA6D;AAC7D,oCAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAChE,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AACzC,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AAEtC,2DAA2D;AAC3D,oCAAoC;AAEpC,0BAA0B;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,+BAA+B,CAAA;AAE7C,6DAA6D;AAC7D,oCAAoC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/global",
3
3
  "type": "module",
4
- "version": "6.1.4",
4
+ "version": "6.1.6",
5
5
  "description": "MemberJunction: Global Object - Needed for ALL other MJ components",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",