data-api-client 2.1.1 → 2.1.3
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 +123 -38
- package/dist/compat/pg.d.ts.map +1 -1
- package/dist/compat/pg.js +50 -9
- package/dist/params.d.ts +1 -1
- package/dist/params.d.ts.map +1 -1
- package/dist/params.js +50 -5
- package/dist/pg-escape.d.ts +3 -0
- package/dist/pg-escape.d.ts.map +1 -0
- package/dist/pg-escape.js +184 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +16 -18
- package/package.json +1 -3
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-

|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/data-api-client)
|
|
4
4
|
[](https://www.npmjs.com/package/data-api-client)
|
|
@@ -106,11 +106,11 @@ let remove = await data.query(
|
|
|
106
106
|
{ name: 'Jan' } // Sorry Jan :(
|
|
107
107
|
)
|
|
108
108
|
|
|
109
|
-
// PostgreSQL with
|
|
109
|
+
// PostgreSQL with automatic JSONB casting for plain objects
|
|
110
110
|
let pgExample = await data.query(`INSERT INTO users (id, email, metadata) VALUES(:id, :email, :metadata)`, [
|
|
111
111
|
{ name: 'id', value: '550e8400-e29b-41d4-a716-446655440000', cast: 'uuid' },
|
|
112
112
|
{ name: 'email', value: 'user@example.com' },
|
|
113
|
-
{ name: 'metadata', value:
|
|
113
|
+
{ name: 'metadata', value: { role: 'admin', permissions: ['read', 'write'] } } // Automatically cast as JSONB!
|
|
114
114
|
])
|
|
115
115
|
|
|
116
116
|
// PostgreSQL array result (automatically converted to native JavaScript array)
|
|
@@ -178,6 +178,27 @@ Not only are there no column names, but you have to pull the value from the data
|
|
|
178
178
|
|
|
179
179
|
Lots of extra work that the **Data API Client** handles automatically for you, converting arrays to native JavaScript arrays and providing clean, usable data. 😀
|
|
180
180
|
|
|
181
|
+
### Why not use the Data API's built-in JSON support?
|
|
182
|
+
|
|
183
|
+
The AWS Data API offers a [built-in JSON format option](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api-json.html) via the `formatRecordsAs: 'JSON'` parameter. While this simplifies basic result parsing, the **Data API Client** provides significantly more value:
|
|
184
|
+
|
|
185
|
+
**Type Fidelity:** AWS's JSON format converts everything to basic JSON types, losing database-specific type information. The Data API Client preserves PostgreSQL-specific types (UUID, MACADDR, range types, etc.) using `columnMetadata.typeName` for intelligent type handling.
|
|
186
|
+
|
|
187
|
+
**Advanced Type Conversion:**
|
|
188
|
+
- **PostgreSQL arrays**: Automatically flattens complex `arrayValue` structures to native JavaScript arrays
|
|
189
|
+
- **Binary data**: Converts `Uint8Array` to Node.js `Buffer` objects
|
|
190
|
+
- **JSON columns**: Auto-parses JSON strings to objects
|
|
191
|
+
- **Date handling**: Configurable deserialization with `deserializeDate` and `treatAsLocalDate` options
|
|
192
|
+
- **MySQL YEAR type**: Converts strings to integers automatically
|
|
193
|
+
|
|
194
|
+
**Flexible Output Formats:** AWS JSON only returns objects. The Data API Client lets you choose between object format (`hydrateColumnNames: true`) for easy access by name, or array format (`hydrateColumnNames: false`) for better performance when column names aren't needed.
|
|
195
|
+
|
|
196
|
+
**Richer Result Information:** Beyond just formatted records, you get `numberOfRecordsUpdated`, `insertId`, `columnMetadata` (optional), and batch `updateResults` for comprehensive operation feedback.
|
|
197
|
+
|
|
198
|
+
**No Additional Limitations:** AWS's JSON support requires unique column names and has a 10MB response limit. The Data API Client works with any column configuration and imposes no additional size restrictions.
|
|
199
|
+
|
|
200
|
+
In summary, AWS's JSON support is a basic convenience feature, while the **Data API Client** provides true type intelligence, format flexibility, and seamless handling of complex PostgreSQL features that the native Data API doesn't support well.
|
|
201
|
+
|
|
181
202
|
## Installation and Setup
|
|
182
203
|
|
|
183
204
|
```
|
|
@@ -207,13 +228,14 @@ Below is a table containing all of the possible configuration options for the `d
|
|
|
207
228
|
| namedPlaceholders | `boolean` | Enable named placeholders (`:name` syntax) for mysql2 compatibility layer. When `true`, parameters use object format. Only applies to mysql2 compat layer. | `false` |
|
|
208
229
|
| options | `object` | An _optional_ configuration object that is passed directly into the RDSDataClient constructor. See [AWS SDK docs](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-rds-data/classes/rdsdataclient.html) for available options. | `{}` |
|
|
209
230
|
| formatOptions | `object` | Formatting options to auto parse dates and coerce native JavaScript date objects to supported date formats. Valid keys are `deserializeDate` and `treatAsLocalDate`. Both accept boolean values. | `deserializeDate: true, treatAsLocalDate: false` |
|
|
210
|
-
| retryOptions | `object` | Configuration for automatic retry logic. Valid keys are `enabled` (boolean), `maxRetries` (number), and `retryableErrors` (string array).
|
|
231
|
+
| retryOptions | `object` | Configuration for automatic retry logic. Valid keys are `enabled` (boolean), `maxRetries` (number), and `retryableErrors` (string array). | `enabled: true, maxRetries: 9` |
|
|
211
232
|
|
|
212
233
|
### Automatic Retry Logic
|
|
213
234
|
|
|
214
235
|
Version 2.1 includes built-in retry logic to handle Aurora Serverless scale-to-zero cluster wake-ups automatically. When your cluster is paused and needs to resume, the client will automatically retry your queries with optimized delays.
|
|
215
236
|
|
|
216
237
|
**Features:**
|
|
238
|
+
|
|
217
239
|
- **Smart Error Detection**: Automatically detects `DatabaseResumingException` and connection errors
|
|
218
240
|
- **Strategy-Based Retries**: Different retry strategies based on error type:
|
|
219
241
|
- DatabaseResumingException: Up to 10 attempts with progressive delays (0s, 2s, 5s, 10s, 15s, 20s, 25s, 30s, 35s, 40s)
|
|
@@ -351,17 +373,63 @@ You'll notice that we leave the _named parameters_ alone. Anything that Data API
|
|
|
351
373
|
|
|
352
374
|
The Aurora Data API can sometimes give you trouble with certain data types, such as uuid or jsonb in PostgreSQL, unless you explicitly cast them. While you can certainly do this manually in your SQL string using PostgreSQL's `::` cast syntax, the Data API Client offers an easy way to handle this for you using the parameter `cast` property.
|
|
353
375
|
|
|
354
|
-
|
|
376
|
+
#### Automatic JSONB Type Casting (PostgreSQL)
|
|
377
|
+
|
|
378
|
+
**New in v2.x:** The Data API Client now **automatically detects and casts plain JavaScript objects as JSONB** in PostgreSQL queries. This eliminates the need for manual `JSON.stringify()` or explicit `::jsonb` casts in most cases:
|
|
379
|
+
|
|
380
|
+
```javascript
|
|
381
|
+
// Plain JavaScript objects are automatically cast as JSONB
|
|
382
|
+
const metadata = { role: 'admin', permissions: ['read', 'write'], score: 95.5 }
|
|
383
|
+
|
|
384
|
+
await data.query('INSERT INTO users (email, metadata) VALUES (:email, :metadata)', {
|
|
385
|
+
email: 'user@example.com',
|
|
386
|
+
metadata: metadata // Automatically serialized and cast as ::jsonb
|
|
387
|
+
})
|
|
388
|
+
|
|
389
|
+
// Works with nested objects too
|
|
390
|
+
const complexData = {
|
|
391
|
+
user: { name: 'Alice', age: 30 },
|
|
392
|
+
tags: ['admin', 'editor'],
|
|
393
|
+
settings: { theme: 'dark', notifications: true }
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
await data.query('INSERT INTO products (name, data) VALUES (:name, :data)', {
|
|
397
|
+
name: 'Product A',
|
|
398
|
+
data: complexData // Automatically handled
|
|
399
|
+
})
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**How it works:**
|
|
403
|
+
|
|
404
|
+
- Plain JavaScript objects (not Buffers, Dates, Arrays, or Data API objects) are automatically detected
|
|
405
|
+
- The object is serialized to a JSON string
|
|
406
|
+
- A `::jsonb` cast is automatically appended to the parameter in PostgreSQL queries
|
|
407
|
+
- A `JSON` typeHint is provided to the Data API for proper handling
|
|
408
|
+
|
|
409
|
+
**When automatic casting applies:**
|
|
410
|
+
|
|
411
|
+
- ✅ Plain objects: `{ key: 'value' }`
|
|
412
|
+
- ✅ Nested objects: `{ user: { name: 'Alice' } }`
|
|
413
|
+
- ❌ Buffers: `Buffer.from('data')`
|
|
414
|
+
- ❌ Dates: `new Date()`
|
|
415
|
+
- ❌ Arrays: `[1, 2, 3]`
|
|
416
|
+
- ❌ Already-formatted Data API objects: `{ stringValue: 'text' }`
|
|
417
|
+
|
|
418
|
+
**Explicit casting still supported:**
|
|
419
|
+
|
|
420
|
+
You can still use explicit casts when needed (e.g., for UUID, custom types, or to override automatic behavior):
|
|
421
|
+
|
|
422
|
+
**PostgreSQL inline casting:**
|
|
355
423
|
|
|
356
424
|
```javascript
|
|
357
425
|
const result = await data.query('INSERT INTO users(id, email, metadata) VALUES(:id, :email, :metadata::jsonb)', {
|
|
358
|
-
id: newUserId,
|
|
426
|
+
id: newUserId,
|
|
359
427
|
email: email,
|
|
360
|
-
metadata: JSON.stringify(userMetadata) //
|
|
428
|
+
metadata: JSON.stringify(userMetadata) // explicit ::jsonb in SQL
|
|
361
429
|
})
|
|
362
430
|
```
|
|
363
431
|
|
|
364
|
-
**Parameter-based casting
|
|
432
|
+
**Parameter-based casting:**
|
|
365
433
|
|
|
366
434
|
```javascript
|
|
367
435
|
const result = await data.query(
|
|
@@ -389,7 +457,7 @@ const result = await data.query(
|
|
|
389
457
|
)
|
|
390
458
|
```
|
|
391
459
|
|
|
392
|
-
|
|
460
|
+
**Note:** Explicit casts (inline `::type` or parameter `cast` property) always take precedence over automatic casting.
|
|
393
461
|
|
|
394
462
|
### Batch Queries
|
|
395
463
|
|
|
@@ -572,38 +640,30 @@ const connection = createMySQLConnection({
|
|
|
572
640
|
resourceArn: 'arn:aws:rds:us-east-1:XXXXXXXXXXXX:cluster:my-cluster',
|
|
573
641
|
secretArn: 'arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:mySecret',
|
|
574
642
|
database: 'myDatabase',
|
|
575
|
-
namedPlaceholders: true
|
|
643
|
+
namedPlaceholders: true // Enable named placeholders
|
|
576
644
|
})
|
|
577
645
|
|
|
578
646
|
// Use named placeholders with object parameters
|
|
579
|
-
const [users] = await connection.query(
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
)
|
|
647
|
+
const [users] = await connection.query('SELECT * FROM users WHERE name = :name AND age > :age', {
|
|
648
|
+
name: 'Alice',
|
|
649
|
+
age: 25
|
|
650
|
+
})
|
|
583
651
|
|
|
584
652
|
// INSERT with named placeholders
|
|
585
|
-
await connection.query(
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
653
|
+
await connection.query('INSERT INTO users (name, email, active) VALUES (:name, :email, :active)', {
|
|
654
|
+
name: 'Bob',
|
|
655
|
+
email: 'bob@example.com',
|
|
656
|
+
active: true
|
|
657
|
+
})
|
|
589
658
|
|
|
590
659
|
// UPDATE with named placeholders
|
|
591
|
-
await connection.query(
|
|
592
|
-
'UPDATE users SET age = :newAge WHERE id = :id',
|
|
593
|
-
{ id: 123, newAge: 30 }
|
|
594
|
-
)
|
|
660
|
+
await connection.query('UPDATE users SET age = :newAge WHERE id = :id', { id: 123, newAge: 30 })
|
|
595
661
|
|
|
596
662
|
// Named placeholders work with transactions
|
|
597
663
|
await connection.beginTransaction()
|
|
598
664
|
try {
|
|
599
|
-
await connection.query(
|
|
600
|
-
|
|
601
|
-
{ userId: 123, total: 99.99 }
|
|
602
|
-
)
|
|
603
|
-
await connection.query(
|
|
604
|
-
'UPDATE users SET last_order = NOW() WHERE id = :userId',
|
|
605
|
-
{ userId: 123 }
|
|
606
|
-
)
|
|
665
|
+
await connection.query('INSERT INTO orders (user_id, total) VALUES (:userId, :total)', { userId: 123, total: 99.99 })
|
|
666
|
+
await connection.query('UPDATE users SET last_order = NOW() WHERE id = :userId', { userId: 123 })
|
|
607
667
|
await connection.commit()
|
|
608
668
|
} catch (err) {
|
|
609
669
|
await connection.rollback()
|
|
@@ -617,13 +677,14 @@ const pool = createMySQLPool({
|
|
|
617
677
|
namedPlaceholders: true
|
|
618
678
|
})
|
|
619
679
|
|
|
620
|
-
const [results] = await pool.query(
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
)
|
|
680
|
+
const [results] = await pool.query('SELECT * FROM products WHERE category = :category AND price < :maxPrice', {
|
|
681
|
+
category: 'electronics',
|
|
682
|
+
maxPrice: 500
|
|
683
|
+
})
|
|
624
684
|
```
|
|
625
685
|
|
|
626
686
|
**Named Placeholders Features:**
|
|
687
|
+
|
|
627
688
|
- Use `:paramName` syntax in SQL (colon followed by identifier)
|
|
628
689
|
- Pass parameters as objects: `{ paramName: value }`
|
|
629
690
|
- Same parameter can be referenced multiple times in the query
|
|
@@ -648,7 +709,7 @@ const connection = createMySQLConnection({
|
|
|
648
709
|
const [rows] = await connection.query(
|
|
649
710
|
{
|
|
650
711
|
sql: 'SELECT * FROM users WHERE username = :username AND age > :minAge',
|
|
651
|
-
namedPlaceholders: true
|
|
712
|
+
namedPlaceholders: true // Enable for this query only
|
|
652
713
|
},
|
|
653
714
|
{ username: 'john_doe', minAge: 25 }
|
|
654
715
|
)
|
|
@@ -657,13 +718,14 @@ const [rows] = await connection.query(
|
|
|
657
718
|
const [rows2] = await connection.query(
|
|
658
719
|
{
|
|
659
720
|
sql: 'SELECT * FROM users WHERE id = ?',
|
|
660
|
-
namedPlaceholders: false
|
|
721
|
+
namedPlaceholders: false // Use positional placeholders for this query
|
|
661
722
|
},
|
|
662
723
|
[123]
|
|
663
724
|
)
|
|
664
725
|
```
|
|
665
726
|
|
|
666
727
|
This allows you to:
|
|
728
|
+
|
|
667
729
|
- Use named placeholders in specific queries without enabling it globally
|
|
668
730
|
- Mix named and positional placeholders in different queries
|
|
669
731
|
- Override connection-level settings when needed
|
|
@@ -794,6 +856,7 @@ const users = await db.selectFrom('users').selectAll().where('id', '=', 123).exe
|
|
|
794
856
|
```
|
|
795
857
|
|
|
796
858
|
**Benefits of Compatibility Layers:**
|
|
859
|
+
|
|
797
860
|
- **Zero code changes** when migrating from mysql2 or pg
|
|
798
861
|
- **Full ORM support** (Drizzle, Kysely)
|
|
799
862
|
- **Automatic retry logic** for cluster wake-ups
|
|
@@ -915,10 +978,21 @@ await data.query('INSERT INTO files (content) VALUES (:content)', { content: bin
|
|
|
915
978
|
|
|
916
979
|
### JSON and JSONB
|
|
917
980
|
|
|
981
|
+
**Automatic JSONB Casting (New in v2.x):**
|
|
982
|
+
|
|
983
|
+
The Data API Client now automatically detects and casts plain JavaScript objects as JSONB in PostgreSQL:
|
|
984
|
+
|
|
918
985
|
```javascript
|
|
986
|
+
// Automatic JSONB casting - no manual JSON.stringify() needed!
|
|
919
987
|
const metadata = { role: 'admin', permissions: ['read', 'write'] }
|
|
920
|
-
await data.query('INSERT INTO users (metadata) VALUES (:metadata
|
|
921
|
-
metadata:
|
|
988
|
+
await data.query('INSERT INTO users (metadata) VALUES (:metadata)', {
|
|
989
|
+
metadata: metadata // Automatically serialized and cast as ::jsonb
|
|
990
|
+
})
|
|
991
|
+
|
|
992
|
+
// Works with nested objects
|
|
993
|
+
const complexData = { user: { name: 'Alice' }, settings: { theme: 'dark' } }
|
|
994
|
+
await data.query('INSERT INTO users (data) VALUES (:data)', {
|
|
995
|
+
data: complexData // Automatically handled
|
|
922
996
|
})
|
|
923
997
|
|
|
924
998
|
// Query result
|
|
@@ -926,6 +1000,17 @@ let result = await data.query('SELECT metadata FROM users WHERE id = :id', { id:
|
|
|
926
1000
|
const parsed = JSON.parse(result.records[0].metadata)
|
|
927
1001
|
```
|
|
928
1002
|
|
|
1003
|
+
**Manual casting (still supported):**
|
|
1004
|
+
|
|
1005
|
+
You can still use explicit casting when needed:
|
|
1006
|
+
|
|
1007
|
+
```javascript
|
|
1008
|
+
const metadata = { role: 'admin', permissions: ['read', 'write'] }
|
|
1009
|
+
await data.query('INSERT INTO users (metadata) VALUES (:metadata::jsonb)', {
|
|
1010
|
+
metadata: JSON.stringify(metadata) // Manual approach
|
|
1011
|
+
})
|
|
1012
|
+
```
|
|
1013
|
+
|
|
929
1014
|
### UUID
|
|
930
1015
|
|
|
931
1016
|
```javascript
|
package/dist/compat/pg.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/compat/pg.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAGrC,OAAO,KAAK,EAAE,mBAAmB,EAAoD,MAAM,UAAU,CAAA;AACrG,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAGjE,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG;IACpC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpD,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC5B,KAAK,CAAC,EAAE,GAAG,CAAA;CACZ;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;IAC7C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACpB,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;IAG1C,KAAK,CAAC,CAAC,SAAS;QAAE,MAAM,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,CAAA;IACzE,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAC3B,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAC/D,MAAM,CAAC,EAAE,GAAG,EAAE,GACb,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAA;IAC7F,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IACxF,KAAK,CAAC,CAAC,GAAG,GAAG,EACX,iBAAiB,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,EAC5D,MAAM,CAAC,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5B,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAC3B,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAC/D,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/compat/pg.ts"],"names":[],"mappings":"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"}
|
package/dist/compat/pg.js
CHANGED
|
@@ -1,12 +1,42 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
5
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
36
|
exports.createPgClient = createPgClient;
|
|
7
37
|
exports.createPgPool = createPgPool;
|
|
8
38
|
const events_1 = require("events");
|
|
9
|
-
const
|
|
39
|
+
const pgEscape = __importStar(require("../pg-escape"));
|
|
10
40
|
const client_1 = require("../client");
|
|
11
41
|
const errors_1 = require("./errors");
|
|
12
42
|
function convertPgPlaceholders(sql, params = []) {
|
|
@@ -25,7 +55,18 @@ function convertPgPlaceholders(sql, params = []) {
|
|
|
25
55
|
function inferCommand(sql) {
|
|
26
56
|
var _a;
|
|
27
57
|
const match = (_a = sql.trim().split(/\s+/)[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase();
|
|
28
|
-
const knownCommands = [
|
|
58
|
+
const knownCommands = [
|
|
59
|
+
'SELECT',
|
|
60
|
+
'INSERT',
|
|
61
|
+
'UPDATE',
|
|
62
|
+
'DELETE',
|
|
63
|
+
'CREATE',
|
|
64
|
+
'DROP',
|
|
65
|
+
'ALTER',
|
|
66
|
+
'TRUNCATE',
|
|
67
|
+
'GRANT',
|
|
68
|
+
'REVOKE'
|
|
69
|
+
];
|
|
29
70
|
return knownCommands.includes(match) ? match : 'QUERY';
|
|
30
71
|
}
|
|
31
72
|
function convertToPgResult(result, sql, rowMode) {
|
|
@@ -92,7 +133,7 @@ function createPgClient(config) {
|
|
|
92
133
|
}
|
|
93
134
|
else {
|
|
94
135
|
sql = sqlOrConfig.text;
|
|
95
|
-
values = params !== undefined ? params :
|
|
136
|
+
values = params !== undefined ? params : sqlOrConfig.values || [];
|
|
96
137
|
rowMode = sqlOrConfig.rowMode;
|
|
97
138
|
}
|
|
98
139
|
const upperSql = sql.trim().toUpperCase();
|
|
@@ -167,10 +208,10 @@ function createPgClient(config) {
|
|
|
167
208
|
resumeDrain() {
|
|
168
209
|
},
|
|
169
210
|
escapeIdentifier(str) {
|
|
170
|
-
return
|
|
211
|
+
return pgEscape.ident(str);
|
|
171
212
|
},
|
|
172
213
|
escapeLiteral(str) {
|
|
173
|
-
return
|
|
214
|
+
return pgEscape.literal(str);
|
|
174
215
|
},
|
|
175
216
|
setTypeParser(_oid, _format, _parseFn) {
|
|
176
217
|
},
|
|
@@ -240,7 +281,7 @@ function createPgPool(config) {
|
|
|
240
281
|
}
|
|
241
282
|
else {
|
|
242
283
|
sql = sqlOrConfig.text;
|
|
243
|
-
values = params !== undefined ? params :
|
|
284
|
+
values = params !== undefined ? params : sqlOrConfig.values || [];
|
|
244
285
|
rowMode = sqlOrConfig.rowMode;
|
|
245
286
|
}
|
|
246
287
|
const { sql: convertedSql, params: namedParams } = convertPgPlaceholders(sql, values);
|
package/dist/params.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare const processParams: (engine: string, sql: string, sqlParams: Rec
|
|
|
13
13
|
processedParams: (FormattedParameter | FormattedParameter[])[];
|
|
14
14
|
escapedSql: string;
|
|
15
15
|
};
|
|
16
|
-
export declare const formatParam: (n: string, v: ParameterValue, formatOptions: Required<FormatOptions
|
|
16
|
+
export declare const formatParam: (n: string, v: ParameterValue, formatOptions: Required<FormatOptions>) => FormattedParameter;
|
|
17
17
|
export declare const splitParams: (p: Record<string, ParameterValue>) => NamedParameter[];
|
|
18
18
|
export declare const formatType: (name: string, value: ParameterValue, type: SupportedType | null | undefined, typeHint: string | undefined, formatOptions: Required<FormatOptions>) => FormattedParameter;
|
|
19
19
|
//# sourceMappingURL=params.d.ts.map
|
package/dist/params.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../src/params.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,aAAa,EACd,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../src/params.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,aAAa,EACd,MAAM,SAAS,CAAA;AAahB,eAAO,MAAM,WAAW,GAAI,MAAM,GAAG,EAAE,KAAG,UAAU,EAa5C,CAAA;AAGR,eAAO,MAAM,aAAa,GAAI,QAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,KAAG,MAAM,GAAG,SAS9D,CAAA;AAGf,eAAO,MAAM,YAAY,GAAI,QAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,KAAG,OAKpC,CAAA;AAG/B,eAAO,MAAM,kBAAkB,GAAI,QAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,KAAG,QAAQ,CAAC,aAAa,CAkBrE,CAAA;AAG1B,eAAO,MAAM,aAAa,GACxB,4BAA4B,cAAc,EAC1C,MAAM,GAAG,EAAE,KACV;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAK9D,CAAA;AAOD,eAAO,MAAM,eAAe,GAAI,QAAQ,UAAU,EAAE,KAAG,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC,EAavF,CAAA;AAGH,eAAO,MAAM,aAAa,GACxB,QAAQ,MAAM,EACd,KAAK,MAAM,EACX,WAAW,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,QAAQ,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC,EAAE,EAC7C,eAAe,QAAQ,CAAC,aAAa,CAAC,EACtC,MAAK,MAAU,KACd;IAAE,eAAe,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAsCtF,CAAA;AAGD,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,eAAe,QAAQ,CAAC,aAAa,CAAC,KAAG,kBACtC,CAAA;AAG7D,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAG,cAAc,EACiB,CAAA;AAG/F,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,OAAO,cAAc,EACrB,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,EACtC,UAAU,MAAM,GAAG,SAAS,EAC5B,eAAe,QAAQ,CAAC,aAAa,CAAC,KACrC,kBAkBF,CAAA"}
|
package/dist/params.js
CHANGED
|
@@ -1,12 +1,51 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
exports.formatType = exports.splitParams = exports.formatParam = exports.processParams = exports.normalizeParams = exports.prepareParams = exports.parseFormatOptions = exports.parseHydrate = exports.parseDatabase = exports.parseParams = void 0;
|
|
7
40
|
const sqlstring_1 = __importDefault(require("sqlstring"));
|
|
8
|
-
const
|
|
41
|
+
const pgEscape = __importStar(require("./pg-escape"));
|
|
9
42
|
const utils_1 = require("./utils");
|
|
43
|
+
const isPlainObject = (val) => typeof val === 'object' &&
|
|
44
|
+
val !== null &&
|
|
45
|
+
!Buffer.isBuffer(val) &&
|
|
46
|
+
!(val instanceof Date) &&
|
|
47
|
+
!Array.isArray(val) &&
|
|
48
|
+
!(Object.keys(val).length === 1 && utils_1.supportedTypes.includes(Object.keys(val)[0]));
|
|
10
49
|
const parseParams = (args) => Array.isArray(args[0].parameters)
|
|
11
50
|
? args[0].parameters
|
|
12
51
|
: typeof args[0].parameters === 'object'
|
|
@@ -86,12 +125,16 @@ const processParams = (engine, sql, sqlParams, params, formatOptions, row = 0) =
|
|
|
86
125
|
const regex = new RegExp(':' + p.name + '\\b', 'g');
|
|
87
126
|
sql = sql.replace(regex, engine === 'pg' ? `:${p.name}::${p.cast}` : `CAST(:${p.name} AS ${p.cast})`);
|
|
88
127
|
}
|
|
89
|
-
|
|
128
|
+
else if (engine === 'pg' && isPlainObject(p.value)) {
|
|
129
|
+
const regex = new RegExp(':' + p.name + '\\b', 'g');
|
|
130
|
+
sql = sql.replace(regex, `:${p.name}::jsonb`);
|
|
131
|
+
}
|
|
132
|
+
acc.push((0, exports.formatParam)(p.name, p.value, formatOptions));
|
|
90
133
|
}
|
|
91
134
|
else if (row === 0) {
|
|
92
135
|
const regex = new RegExp('::' + p.name + '\\b', 'g');
|
|
93
136
|
const escapedId = engine === 'pg'
|
|
94
|
-
?
|
|
137
|
+
? pgEscape.ident(p.value)
|
|
95
138
|
: sqlstring_1.default.escapeId(p.value);
|
|
96
139
|
sql = sql.replace(regex, escapedId);
|
|
97
140
|
}
|
|
@@ -105,7 +148,7 @@ const processParams = (engine, sql, sqlParams, params, formatOptions, row = 0) =
|
|
|
105
148
|
};
|
|
106
149
|
};
|
|
107
150
|
exports.processParams = processParams;
|
|
108
|
-
const formatParam = (n, v, formatOptions
|
|
151
|
+
const formatParam = (n, v, formatOptions) => (0, exports.formatType)(n, v, (0, utils_1.getType)(v), (0, utils_1.getTypeHint)(v), formatOptions);
|
|
109
152
|
exports.formatParam = formatParam;
|
|
110
153
|
const splitParams = (p) => Object.keys(p).reduce((arr, x) => arr.concat({ name: x, value: p[x] }), []);
|
|
111
154
|
exports.splitParams = splitParams;
|
|
@@ -118,7 +161,9 @@ const formatType = (name, value, type, typeHint, formatOptions) => {
|
|
|
118
161
|
? true
|
|
119
162
|
: (0, utils_1.isDate)(value)
|
|
120
163
|
? (0, utils_1.formatToTimeStamp)(value, formatOptions && formatOptions.treatAsLocalDate)
|
|
121
|
-
: value
|
|
164
|
+
: isPlainObject(value)
|
|
165
|
+
? JSON.stringify(value)
|
|
166
|
+
: value
|
|
122
167
|
}
|
|
123
168
|
});
|
|
124
169
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg-escape.d.ts","sourceRoot":"","sources":["../src/pg-escape.ts"],"names":[],"mappings":"AA4MA,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMzC;AAYD,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA8BxC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ident = ident;
|
|
4
|
+
exports.literal = literal;
|
|
5
|
+
const POSTGRES_RESERVED_WORDS = new Set([
|
|
6
|
+
'aes128',
|
|
7
|
+
'aes256',
|
|
8
|
+
'all',
|
|
9
|
+
'allowoverwrite',
|
|
10
|
+
'analyse',
|
|
11
|
+
'analyze',
|
|
12
|
+
'and',
|
|
13
|
+
'any',
|
|
14
|
+
'array',
|
|
15
|
+
'as',
|
|
16
|
+
'asc',
|
|
17
|
+
'authorization',
|
|
18
|
+
'backup',
|
|
19
|
+
'between',
|
|
20
|
+
'binary',
|
|
21
|
+
'blanksasnull',
|
|
22
|
+
'both',
|
|
23
|
+
'bytedict',
|
|
24
|
+
'case',
|
|
25
|
+
'cast',
|
|
26
|
+
'check',
|
|
27
|
+
'collate',
|
|
28
|
+
'column',
|
|
29
|
+
'constraint',
|
|
30
|
+
'create',
|
|
31
|
+
'credentials',
|
|
32
|
+
'cross',
|
|
33
|
+
'current_date',
|
|
34
|
+
'current_time',
|
|
35
|
+
'current_timestamp',
|
|
36
|
+
'current_user',
|
|
37
|
+
'current_user_id',
|
|
38
|
+
'default',
|
|
39
|
+
'deferrable',
|
|
40
|
+
'deflate',
|
|
41
|
+
'defrag',
|
|
42
|
+
'delta',
|
|
43
|
+
'delta32k',
|
|
44
|
+
'desc',
|
|
45
|
+
'disable',
|
|
46
|
+
'distinct',
|
|
47
|
+
'do',
|
|
48
|
+
'else',
|
|
49
|
+
'emptyasnull',
|
|
50
|
+
'enable',
|
|
51
|
+
'encode',
|
|
52
|
+
'encrypt',
|
|
53
|
+
'encryption',
|
|
54
|
+
'end',
|
|
55
|
+
'except',
|
|
56
|
+
'explicit',
|
|
57
|
+
'false',
|
|
58
|
+
'for',
|
|
59
|
+
'foreign',
|
|
60
|
+
'freeze',
|
|
61
|
+
'from',
|
|
62
|
+
'full',
|
|
63
|
+
'globaldict256',
|
|
64
|
+
'globaldict64k',
|
|
65
|
+
'grant',
|
|
66
|
+
'group',
|
|
67
|
+
'gzip',
|
|
68
|
+
'having',
|
|
69
|
+
'identity',
|
|
70
|
+
'ignore',
|
|
71
|
+
'ilike',
|
|
72
|
+
'in',
|
|
73
|
+
'initially',
|
|
74
|
+
'inner',
|
|
75
|
+
'intersect',
|
|
76
|
+
'into',
|
|
77
|
+
'is',
|
|
78
|
+
'isnull',
|
|
79
|
+
'join',
|
|
80
|
+
'leading',
|
|
81
|
+
'left',
|
|
82
|
+
'like',
|
|
83
|
+
'limit',
|
|
84
|
+
'localtime',
|
|
85
|
+
'localtimestamp',
|
|
86
|
+
'lun',
|
|
87
|
+
'luns',
|
|
88
|
+
'lzo',
|
|
89
|
+
'lzop',
|
|
90
|
+
'minus',
|
|
91
|
+
'mostly13',
|
|
92
|
+
'mostly32',
|
|
93
|
+
'mostly8',
|
|
94
|
+
'natural',
|
|
95
|
+
'new',
|
|
96
|
+
'not',
|
|
97
|
+
'notnull',
|
|
98
|
+
'null',
|
|
99
|
+
'nulls',
|
|
100
|
+
'off',
|
|
101
|
+
'offline',
|
|
102
|
+
'offset',
|
|
103
|
+
'old',
|
|
104
|
+
'on',
|
|
105
|
+
'only',
|
|
106
|
+
'open',
|
|
107
|
+
'or',
|
|
108
|
+
'order',
|
|
109
|
+
'outer',
|
|
110
|
+
'overlaps',
|
|
111
|
+
'parallel',
|
|
112
|
+
'partition',
|
|
113
|
+
'percent',
|
|
114
|
+
'placing',
|
|
115
|
+
'primary',
|
|
116
|
+
'raw',
|
|
117
|
+
'readratio',
|
|
118
|
+
'recover',
|
|
119
|
+
'references',
|
|
120
|
+
'rejectlog',
|
|
121
|
+
'resort',
|
|
122
|
+
'restore',
|
|
123
|
+
'right',
|
|
124
|
+
'select',
|
|
125
|
+
'session_user',
|
|
126
|
+
'similar',
|
|
127
|
+
'some',
|
|
128
|
+
'sysdate',
|
|
129
|
+
'system',
|
|
130
|
+
'table',
|
|
131
|
+
'tag',
|
|
132
|
+
'tdes',
|
|
133
|
+
'text255',
|
|
134
|
+
'text32k',
|
|
135
|
+
'then',
|
|
136
|
+
'to',
|
|
137
|
+
'top',
|
|
138
|
+
'trailing',
|
|
139
|
+
'true',
|
|
140
|
+
'truncatecolumns',
|
|
141
|
+
'union',
|
|
142
|
+
'unique',
|
|
143
|
+
'user',
|
|
144
|
+
'using',
|
|
145
|
+
'verbose',
|
|
146
|
+
'wallet',
|
|
147
|
+
'when',
|
|
148
|
+
'where',
|
|
149
|
+
'with',
|
|
150
|
+
'without'
|
|
151
|
+
]);
|
|
152
|
+
function isValidIdentifier(id) {
|
|
153
|
+
if (POSTGRES_RESERVED_WORDS.has(id.toLowerCase())) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
return /^[a-z_][a-z0-9_$]*$/i.test(id);
|
|
157
|
+
}
|
|
158
|
+
function quoteIdentifier(id) {
|
|
159
|
+
const escaped = id.replace(/"/g, '""');
|
|
160
|
+
return `"${escaped}"`;
|
|
161
|
+
}
|
|
162
|
+
function ident(val) {
|
|
163
|
+
if (val == null) {
|
|
164
|
+
throw new Error('identifier required');
|
|
165
|
+
}
|
|
166
|
+
return isValidIdentifier(val) ? val : quoteIdentifier(val);
|
|
167
|
+
}
|
|
168
|
+
function literal(val) {
|
|
169
|
+
if (val == null) {
|
|
170
|
+
return 'NULL';
|
|
171
|
+
}
|
|
172
|
+
if (Array.isArray(val)) {
|
|
173
|
+
const escapedValues = val.map(literal);
|
|
174
|
+
return `(${escapedValues.join(', ')})`;
|
|
175
|
+
}
|
|
176
|
+
const str = String(val);
|
|
177
|
+
const hasBackslash = str.indexOf('\\') !== -1;
|
|
178
|
+
const prefix = hasBackslash ? 'E' : '';
|
|
179
|
+
let escaped = str.replace(/'/g, "''");
|
|
180
|
+
if (hasBackslash) {
|
|
181
|
+
escaped = escaped.replace(/\\/g, '\\\\');
|
|
182
|
+
}
|
|
183
|
+
return `${prefix}'${escaped}'`;
|
|
184
|
+
}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,6BAA6B,EAC7B,kCAAkC,EAClC,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,gCAAgC,EAChC,4BAA4B,EAC5B,iCAAiC,EACjC,cAAc,EACd,gBAAgB,EACjB,MAAM,0BAA0B,CAAA;AAGjC,MAAM,MAAM,aAAa,GACrB,YAAY,GACZ,WAAW,GACX,cAAc,GACd,aAAa,GACb,QAAQ,GACR,WAAW,GACX,aAAa,GACb,aAAa,CAAA;AAGjB,MAAM,WAAW,WAAW;IAE1B,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AAGD,MAAM,WAAW,mBAAmB;IAElC,WAAW,EAAE,MAAM,CAAA;IAEnB,SAAS,EAAE,MAAM,CAAA;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAEvB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B,aAAa,CAAC,EAAE,aAAa,CAAA;IAE7B,YAAY,CAAC,EAAE,WAAW,CAAA;IAE1B,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAE7B,MAAM,CAAC,EAAE,aAAa,CAAA;IAEtB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAGD,MAAM,WAAW,aAAa;IAE5B,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAGD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IACtC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;IACnC,GAAG,EAAE,aAAa,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAGD,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,MAAM,GACN;KAAG,GAAG,IAAI,aAAa,CAAC,CAAC,EAAE,GAAG;CAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare const isTimeString: (val: string) => boolean;
|
|
|
13
13
|
export declare const isDecimalString: (val: string) => boolean;
|
|
14
14
|
export declare const isUUIDString: (val: string) => boolean;
|
|
15
15
|
export declare const isJSONString: (val: string) => boolean;
|
|
16
|
-
export declare const getTypeHint: (val: ParameterValue
|
|
16
|
+
export declare const getTypeHint: (val: ParameterValue) => string | undefined;
|
|
17
17
|
export declare const formatToTimeStamp: (date: Date, treatAsLocalDate: boolean) => string;
|
|
18
18
|
export declare const formatFromTimeStamp: (value: string, treatAsLocalDate: boolean) => Date;
|
|
19
19
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAG1E,eAAO,MAAM,cAAc,EAAE,aAAa,EASzC,CAAA;AAGD,eAAO,MAAM,KAAK,GAAI,GAAG,KAAK,GAAG,EAAE,KAAG,KAErC,CAAA;AAGD,eAAO,MAAM,QAAQ,GAAI,MAAM,GAAG,EAAE,KAAG,MAKI,CAAA;AAG3C,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,MAAM,EAAE,KAAG,OAAO,CAAC,CAAC,CACiC,CAAA;AAGzH,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,KAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAInG,CAAA;AAGH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAG,CAAC,EAA+C,CAAA;AAGxF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CA8CrE,CAAA;AAID,eAAO,MAAM,OAAO,GAAI,KAAK,cAAc,KAAG,aAAa,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAG1E,eAAO,MAAM,cAAc,EAAE,aAAa,EASzC,CAAA;AAGD,eAAO,MAAM,KAAK,GAAI,GAAG,KAAK,GAAG,EAAE,KAAG,KAErC,CAAA;AAGD,eAAO,MAAM,QAAQ,GAAI,MAAM,GAAG,EAAE,KAAG,MAKI,CAAA;AAG3C,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,MAAM,EAAE,KAAG,OAAO,CAAC,CAAC,CACiC,CAAA;AAGzH,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,KAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAInG,CAAA;AAGH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAG,CAAC,EAA+C,CAAA;AAGxF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CA8CrE,CAAA;AAID,eAAO,MAAM,OAAO,GAAI,KAAK,cAAc,KAAG,aAAa,GAAG,IAAI,GAAG,SA6BtD,CAAA;AAKf,eAAO,MAAM,MAAM,GAAI,KAAK,GAAG,KAAG,GAAG,IAAI,IAA2B,CAAA;AAGpE,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OACV,CAAA;AAGjC,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OACE,CAAA;AAG7C,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,OACpB,CAAA;AAG1B,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OACkC,CAAA;AAG7E,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OAU1C,CAAA;AAKD,eAAO,MAAM,WAAW,GAAI,KAAK,cAAc,KAAG,MAAM,GAAG,SAsB1D,CAAA;AAID,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,EAAE,kBAAkB,OAAO,KAAG,MAezE,CAAA;AAKD,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,EAAE,kBAAkB,OAAO,KAAG,IAG1D,CAAA"}
|
package/dist/utils.js
CHANGED
|
@@ -80,7 +80,14 @@ const getType = (val) => typeof val === 'string'
|
|
|
80
80
|
Object.keys(val).length === 1 &&
|
|
81
81
|
exports.supportedTypes.includes(Object.keys(val)[0])
|
|
82
82
|
? null
|
|
83
|
-
:
|
|
83
|
+
:
|
|
84
|
+
typeof val === 'object' &&
|
|
85
|
+
val !== null &&
|
|
86
|
+
!Buffer.isBuffer(val) &&
|
|
87
|
+
!(0, exports.isDate)(val) &&
|
|
88
|
+
!Array.isArray(val)
|
|
89
|
+
? 'stringValue'
|
|
90
|
+
: undefined;
|
|
84
91
|
exports.getType = getType;
|
|
85
92
|
const isDate = (val) => val instanceof Date;
|
|
86
93
|
exports.isDate = isDate;
|
|
@@ -107,26 +114,17 @@ const isJSONString = (val) => {
|
|
|
107
114
|
}
|
|
108
115
|
};
|
|
109
116
|
exports.isJSONString = isJSONString;
|
|
110
|
-
const getTypeHint = (val
|
|
117
|
+
const getTypeHint = (val) => {
|
|
111
118
|
if ((0, exports.isDate)(val)) {
|
|
112
119
|
return 'TIMESTAMP';
|
|
113
120
|
}
|
|
114
|
-
if (typeof val === '
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if ((0, exports.isTimeString)(val)) {
|
|
122
|
-
return 'TIME';
|
|
123
|
-
}
|
|
124
|
-
if ((0, exports.isJSONString)(val) && engine !== 'mysql') {
|
|
125
|
-
return 'JSON';
|
|
126
|
-
}
|
|
127
|
-
if ((0, exports.isDecimalString)(val)) {
|
|
128
|
-
return 'DECIMAL';
|
|
129
|
-
}
|
|
121
|
+
if (typeof val === 'object' &&
|
|
122
|
+
val !== null &&
|
|
123
|
+
!Buffer.isBuffer(val) &&
|
|
124
|
+
!(0, exports.isDate)(val) &&
|
|
125
|
+
!Array.isArray(val) &&
|
|
126
|
+
!(Object.keys(val).length === 1 && exports.supportedTypes.includes(Object.keys(val)[0]))) {
|
|
127
|
+
return 'JSON';
|
|
130
128
|
}
|
|
131
129
|
return undefined;
|
|
132
130
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "data-api-client",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.3",
|
|
4
4
|
"description": "A lightweight wrapper that simplifies working with the Amazon Aurora Serverless Data API",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -77,7 +77,6 @@
|
|
|
77
77
|
"@aws-sdk/client-rds-data": "^3.712.0",
|
|
78
78
|
"@types/node": "^24.6.2",
|
|
79
79
|
"@types/pg": "^8.15.5",
|
|
80
|
-
"@types/pg-escape": "^0.2.3",
|
|
81
80
|
"@types/sqlstring": "^2.3.2",
|
|
82
81
|
"@typescript-eslint/eslint-plugin": "^8.45.0",
|
|
83
82
|
"@typescript-eslint/parser": "^8.45.0",
|
|
@@ -94,7 +93,6 @@
|
|
|
94
93
|
"vitest": "^3.2.4"
|
|
95
94
|
},
|
|
96
95
|
"dependencies": {
|
|
97
|
-
"pg-escape": "^0.2.0",
|
|
98
96
|
"sqlstring": "^2.3.2"
|
|
99
97
|
},
|
|
100
98
|
"peerDependencies": {
|