@slickgrid-universal/sql 0.0.1 → 10.4.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/README.md +11 -39
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/index.d.ts +4 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +4 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/sqlResult.interface.d.ts +6 -0
- package/dist/interfaces/sqlResult.interface.d.ts.map +1 -0
- package/dist/interfaces/sqlResult.interface.js +2 -0
- package/dist/interfaces/sqlResult.interface.js.map +1 -0
- package/dist/interfaces/sqlServiceApi.interface.d.ts +22 -0
- package/dist/interfaces/sqlServiceApi.interface.d.ts.map +1 -0
- package/dist/interfaces/sqlServiceApi.interface.js +2 -0
- package/dist/interfaces/sqlServiceApi.interface.js.map +1 -0
- package/dist/interfaces/sqlServiceOption.interface.d.ts +54 -0
- package/dist/interfaces/sqlServiceOption.interface.d.ts.map +1 -0
- package/dist/interfaces/sqlServiceOption.interface.js +2 -0
- package/dist/interfaces/sqlServiceOption.interface.js.map +1 -0
- package/dist/services/sql.service.d.ts +69 -0
- package/dist/services/sql.service.d.ts.map +1 -0
- package/dist/services/sql.service.js +600 -0
- package/dist/services/sql.service.js.map +1 -0
- package/package.json +44 -7
- package/src/index.ts +2 -0
- package/src/interfaces/index.ts +3 -0
- package/src/interfaces/sqlResult.interface.ts +6 -0
- package/src/interfaces/sqlServiceApi.interface.ts +27 -0
- package/src/interfaces/sqlServiceOption.interface.ts +61 -0
- package/src/services/__tests__/sql.service.spec.ts +1819 -0
- package/src/services/sql.service.ts +691 -0
package/README.md
CHANGED
|
@@ -1,45 +1,17 @@
|
|
|
1
1
|
# @slickgrid-universal/sql
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A SlickGrid Universal backend service for SQL databases. Implements the BackendService interface and generates SQL queries for filtering, sorting, and pagination.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Usage
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```ts
|
|
8
|
+
import { SqlService } from '@slickgrid-universal/sql';
|
|
9
|
+
```
|
|
8
10
|
|
|
9
|
-
##
|
|
11
|
+
## Features
|
|
12
|
+
- Implements BackendService for SQL
|
|
13
|
+
- Generates SQL queries for SlickGrid
|
|
14
|
+
- Supports filtering, sorting, and pagination
|
|
10
15
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
2. Enable secure, token-less publishing from CI/CD workflows
|
|
14
|
-
3. Establish provenance for packages published under this name
|
|
15
|
-
|
|
16
|
-
## What is OIDC Trusted Publishing?
|
|
17
|
-
|
|
18
|
-
OIDC trusted publishing allows package maintainers to publish packages directly from their CI/CD workflows without needing to manage npm access tokens. Instead, it uses OpenID Connect to establish trust between the CI/CD provider (like GitHub Actions) and npm.
|
|
19
|
-
|
|
20
|
-
## Setup Instructions
|
|
21
|
-
|
|
22
|
-
To properly configure OIDC trusted publishing for this package:
|
|
23
|
-
|
|
24
|
-
1. Go to [npmjs.com](https://www.npmjs.com/) and navigate to your package settings
|
|
25
|
-
2. Configure the trusted publisher (e.g., GitHub Actions)
|
|
26
|
-
3. Specify the repository and workflow that should be allowed to publish
|
|
27
|
-
4. Use the configured workflow to publish your actual package
|
|
28
|
-
|
|
29
|
-
## DO NOT USE THIS PACKAGE
|
|
30
|
-
|
|
31
|
-
This package is a placeholder for OIDC configuration only. It:
|
|
32
|
-
- Contains no executable code
|
|
33
|
-
- Provides no functionality
|
|
34
|
-
- Should not be installed as a dependency
|
|
35
|
-
- Exists only for administrative purposes
|
|
36
|
-
|
|
37
|
-
## More Information
|
|
38
|
-
|
|
39
|
-
For more details about npm's trusted publishing feature, see:
|
|
40
|
-
- [npm Trusted Publishing Documentation](https://docs.npmjs.com/generating-provenance-statements)
|
|
41
|
-
- [GitHub Actions OIDC Documentation](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect)
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
**Maintained for OIDC setup purposes only**
|
|
16
|
+
## Extending
|
|
17
|
+
You can extend SqlService to support your specific SQL dialect or advanced query features.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,mBAAmB,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlResult.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/sqlResult.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,GAAG;IAChC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlResult.interface.js","sourceRoot":"","sources":["../../src/interfaces/sqlResult.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BackendServiceApi, Observable } from '@slickgrid-universal/common';
|
|
2
|
+
import type { SqlService } from '../services/sql.service.js';
|
|
3
|
+
import type { SqlResult } from './sqlResult.interface.js';
|
|
4
|
+
import type { SqlServiceOption } from './sqlServiceOption.interface.js';
|
|
5
|
+
export interface SqlServiceApi<T = any> extends BackendServiceApi {
|
|
6
|
+
/** Backend Service Options */
|
|
7
|
+
options: SqlServiceOption;
|
|
8
|
+
/** Backend Service instance */
|
|
9
|
+
service: SqlService;
|
|
10
|
+
/** On init (or on page load), what action to perform? */
|
|
11
|
+
onInit?: (query: string) => Promise<SqlResult<T>> | Observable<SqlResult<T>>;
|
|
12
|
+
/** On Processing, we get the query back from the service, and we need to provide a Promise/Observable. For example: this.http.get(mySqlUrl) */
|
|
13
|
+
process: (query: string) => Promise<SqlResult<T>> | Observable<SqlResult<T>>;
|
|
14
|
+
/** After executing the query, what action to perform? For example, stop the spinner */
|
|
15
|
+
postProcess?: (response: SqlResult<T>) => void;
|
|
16
|
+
/**
|
|
17
|
+
* INTERNAL USAGE ONLY by Slickgrid-Universal
|
|
18
|
+
* This internal process will be run just before postProcess and is meant to refresh the Dataset & Pagination after a SQL call
|
|
19
|
+
*/
|
|
20
|
+
internalPostProcess?: (result: SqlResult<T>) => void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=sqlServiceApi.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlServiceApi.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/sqlServiceApi.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,iBAAiB;IAC/D,8BAA8B;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAE1B,+BAA+B;IAC/B,OAAO,EAAE,UAAU,CAAC;IAEpB,yDAAyD;IACzD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,+IAA+I;IAC/I,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,uFAAuF;IACvF,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAE/C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlServiceApi.interface.js","sourceRoot":"","sources":["../../src/interfaces/sqlServiceApi.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { InfiniteScrollOption, SortDirection } from '@slickgrid-universal/common';
|
|
2
|
+
export type IdentifierEscapeStyle = 'doubleQuote' | 'backtick' | 'bracket';
|
|
3
|
+
export interface SqlServiceOption {
|
|
4
|
+
/** Name of the SQL table to query (required) */
|
|
5
|
+
tableName: string;
|
|
6
|
+
/** Optional: dataset/schema/database name for multi-database support */
|
|
7
|
+
datasetName?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Controls how SQL identifiers (table/schema) are escaped in generated queries.
|
|
10
|
+
* - 'doubleQuote': "identifier" (PostgreSQL, ANSI SQL, default)
|
|
11
|
+
* - 'backtick': `identifier` (MySQL)
|
|
12
|
+
* - 'bracket': [identifier] (MSSQL)
|
|
13
|
+
*/
|
|
14
|
+
identifierEscapeStyle?: IdentifierEscapeStyle;
|
|
15
|
+
/** Filtering options for WHERE clause */
|
|
16
|
+
filteringOptions?: SqlFilteringOption[];
|
|
17
|
+
/** Sorting options for ORDER BY clause */
|
|
18
|
+
sortingOptions?: SqlSortingOption[];
|
|
19
|
+
/** Pagination options (pageNumber, pageSize) */
|
|
20
|
+
paginationOptions?: SqlPaginationOption;
|
|
21
|
+
/** Any extra query arguments (for advanced use) */
|
|
22
|
+
extraQueryArguments?: SqlQueryArgument[];
|
|
23
|
+
/** Enable infinite scroll mode (disables LIMIT/OFFSET pagination) */
|
|
24
|
+
infiniteScroll?: boolean | InfiniteScrollOption;
|
|
25
|
+
/**
|
|
26
|
+
* Name of the total count column returned by the SQL query (default: 'totalCount').
|
|
27
|
+
* Use this to avoid conflicts or customize the count field name in the result set.
|
|
28
|
+
*/
|
|
29
|
+
totalCountField?: string;
|
|
30
|
+
/**
|
|
31
|
+
* When false, searchTerms may be manipulated to be functional with certain filters eg: string only filters.
|
|
32
|
+
* When true, JSON.stringify is used on the searchTerms and used in the query "as-is". It is then the responsibility of the developer to sanitise the `searchTerms` property if necessary.
|
|
33
|
+
*/
|
|
34
|
+
useVerbatimSearchTerms?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface SqlFilteringOption {
|
|
37
|
+
field: string;
|
|
38
|
+
operator: string;
|
|
39
|
+
value: any;
|
|
40
|
+
type?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface SqlSortingOption {
|
|
43
|
+
field: string;
|
|
44
|
+
direction: SortDirection;
|
|
45
|
+
}
|
|
46
|
+
export interface SqlPaginationOption {
|
|
47
|
+
pageNumber: number;
|
|
48
|
+
pageSize: number;
|
|
49
|
+
}
|
|
50
|
+
export interface SqlQueryArgument {
|
|
51
|
+
field: string;
|
|
52
|
+
value: any;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=sqlServiceOption.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlServiceOption.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/sqlServiceOption.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEvF,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACxC,0CAA0C;IAC1C,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACpC,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;IACxC,mDAAmD;IACnD,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACzC,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAEhD;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,GAAG,CAAC;CACZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlServiceOption.interface.js","sourceRoot":"","sources":["../../src/interfaces/sqlServiceOption.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { BackendService, ColumnFilters, CurrentFilter, CurrentPagination, CurrentSorter, FilterChangedArgs, GridOption, MultiColumnSort, Pagination, PaginationChangedArgs, PaginationCursorChangedArgs, SingleColumnSort, SlickGrid } from '@slickgrid-universal/common';
|
|
2
|
+
import type { SqlResult } from '../interfaces/sqlResult.interface.js';
|
|
3
|
+
import type { SqlServiceOption } from '../interfaces/sqlServiceOption.interface.js';
|
|
4
|
+
/**
|
|
5
|
+
* SqlService implements BackendService for SQL query generation.
|
|
6
|
+
* This is a basic implementation; extend as needed for your SQL dialect.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SqlService implements BackendService {
|
|
9
|
+
protected _currentFilters: ColumnFilters | CurrentFilter[];
|
|
10
|
+
protected _currentPagination: CurrentPagination | null;
|
|
11
|
+
protected _currentSorters: CurrentSorter[];
|
|
12
|
+
protected _columns?: any[];
|
|
13
|
+
protected _grid: SlickGrid | undefined;
|
|
14
|
+
options?: SqlServiceOption;
|
|
15
|
+
pagination?: Pagination;
|
|
16
|
+
/** Getter for the Grid Options pulled through the Grid Object */
|
|
17
|
+
protected get _gridOptions(): GridOption;
|
|
18
|
+
init(serviceOptions?: SqlServiceOption, pagination?: Pagination, grid?: SlickGrid): void;
|
|
19
|
+
buildQuery(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Post-process the SQL result to extract total count for pagination.
|
|
22
|
+
* Uses the configured totalCountField option (default: 'totalCount').
|
|
23
|
+
*/
|
|
24
|
+
postProcess<T = any>(processResult: SqlResult<T> | T[] | {
|
|
25
|
+
data?: T[];
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}): void;
|
|
28
|
+
clearFilters(): void;
|
|
29
|
+
clearSorters(): void;
|
|
30
|
+
/** Get the dataset name */
|
|
31
|
+
getDatasetName(): string;
|
|
32
|
+
/** Get the table name */
|
|
33
|
+
getTableName(): string;
|
|
34
|
+
/** Get the Filters that are currently used by the grid */
|
|
35
|
+
getCurrentFilters(): ColumnFilters | CurrentFilter[];
|
|
36
|
+
/** Get the Pagination that is currently used by the grid */
|
|
37
|
+
getCurrentPagination(): CurrentPagination | null;
|
|
38
|
+
/** Get the Sorters that are currently used by the grid */
|
|
39
|
+
getCurrentSorters(): CurrentSorter[];
|
|
40
|
+
/**
|
|
41
|
+
* Returns the initial pagination options for SQL queries.
|
|
42
|
+
* Returns { pageSize, offset } based on current or default pagination.
|
|
43
|
+
*/
|
|
44
|
+
getInitPaginationOptions(): {
|
|
45
|
+
pageSize: number;
|
|
46
|
+
offset: number;
|
|
47
|
+
};
|
|
48
|
+
resetPaginationOptions(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Update column filters by looping through all columns to inspect filters & update backend service filteringOptions
|
|
51
|
+
* @param columnFilters
|
|
52
|
+
*/
|
|
53
|
+
updateFilters(columnFilters: ColumnFilters | CurrentFilter[], isUpdatedByPresetOrDynamically: boolean): void;
|
|
54
|
+
updatePagination(newPage: number, pageSize: number, _cursorArgs?: PaginationCursorChangedArgs): void;
|
|
55
|
+
updateSorters(sortColumns?: Array<SingleColumnSort>, presetSorters?: CurrentSorter[]): void;
|
|
56
|
+
updateOptions(serviceOptions?: Partial<SqlServiceOption>): void;
|
|
57
|
+
processOnFilterChanged(_event: Event | KeyboardEvent | undefined, args: FilterChangedArgs): string;
|
|
58
|
+
processOnPaginationChanged(_event: Event | undefined, args: PaginationChangedArgs | (PaginationCursorChangedArgs & PaginationChangedArgs)): string;
|
|
59
|
+
processOnSortChanged(_event: Event | undefined, args: SingleColumnSort | MultiColumnSort): string;
|
|
60
|
+
protected buildWhereClause(): string;
|
|
61
|
+
protected buildOrderByClause(): string;
|
|
62
|
+
protected castFilterToColumnFilters(columnFilters: ColumnFilters | CurrentFilter[]): CurrentFilter[];
|
|
63
|
+
protected _escapeSql(val: any, type?: string): string;
|
|
64
|
+
/** Escapes SQL identifiers (table, column, etc.) based on the configured escape style. */
|
|
65
|
+
protected escapeIdentifier(identifier?: string): string;
|
|
66
|
+
/** Normalizes the search value according to field type. */
|
|
67
|
+
protected normalizeSearchValue(fieldType: string, searchValue: any): any;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=sql.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.service.d.ts","sourceRoot":"","sources":["../../src/services/sql.service.ts"],"names":[],"mappings":"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"}
|