@slickgrid-universal/sql 0.0.1 → 10.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +11 -39
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/interfaces/index.d.ts +4 -0
  7. package/dist/interfaces/index.d.ts.map +1 -0
  8. package/dist/interfaces/index.js +4 -0
  9. package/dist/interfaces/index.js.map +1 -0
  10. package/dist/interfaces/sqlResult.interface.d.ts +6 -0
  11. package/dist/interfaces/sqlResult.interface.d.ts.map +1 -0
  12. package/dist/interfaces/sqlResult.interface.js +2 -0
  13. package/dist/interfaces/sqlResult.interface.js.map +1 -0
  14. package/dist/interfaces/sqlServiceApi.interface.d.ts +22 -0
  15. package/dist/interfaces/sqlServiceApi.interface.d.ts.map +1 -0
  16. package/dist/interfaces/sqlServiceApi.interface.js +2 -0
  17. package/dist/interfaces/sqlServiceApi.interface.js.map +1 -0
  18. package/dist/interfaces/sqlServiceOption.interface.d.ts +54 -0
  19. package/dist/interfaces/sqlServiceOption.interface.d.ts.map +1 -0
  20. package/dist/interfaces/sqlServiceOption.interface.js +2 -0
  21. package/dist/interfaces/sqlServiceOption.interface.js.map +1 -0
  22. package/dist/services/sql.service.d.ts +69 -0
  23. package/dist/services/sql.service.d.ts.map +1 -0
  24. package/dist/services/sql.service.js +600 -0
  25. package/dist/services/sql.service.js.map +1 -0
  26. package/package.json +44 -7
  27. package/src/index.ts +2 -0
  28. package/src/interfaces/index.ts +3 -0
  29. package/src/interfaces/sqlResult.interface.ts +6 -0
  30. package/src/interfaces/sqlServiceApi.interface.ts +27 -0
  31. package/src/interfaces/sqlServiceOption.interface.ts +61 -0
  32. package/src/services/__tests__/sql.service.spec.ts +1819 -0
  33. package/src/services/sql.service.ts +691 -0
package/README.md CHANGED
@@ -1,45 +1,17 @@
1
1
  # @slickgrid-universal/sql
2
2
 
3
- ## ⚠️ IMPORTANT NOTICE ⚠️
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
- **This package is created solely for the purpose of setting up OIDC (OpenID Connect) trusted publishing with npm.**
5
+ ## Usage
6
6
 
7
- This is **NOT** a functional package and contains **NO** code or functionality beyond the OIDC setup configuration.
7
+ ```ts
8
+ import { SqlService } from '@slickgrid-universal/sql';
9
+ ```
8
10
 
9
- ## Purpose
11
+ ## Features
12
+ - Implements BackendService for SQL
13
+ - Generates SQL queries for SlickGrid
14
+ - Supports filtering, sorting, and pagination
10
15
 
11
- This package exists to:
12
- 1. Configure OIDC trusted publishing for the package name `@slickgrid-universal/sql`
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.
@@ -0,0 +1,3 @@
1
+ export { SqlService } from './services/sql.service.js';
2
+ export type * from './interfaces/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { SqlService } from './services/sql.service.js';
2
+ //# sourceMappingURL=index.js.map
@@ -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,4 @@
1
+ export * from './sqlResult.interface.js';
2
+ export * from './sqlServiceOption.interface.js';
3
+ export * from './sqlServiceApi.interface.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export * from './sqlResult.interface.js';
2
+ export * from './sqlServiceOption.interface.js';
3
+ export * from './sqlServiceApi.interface.js';
4
+ //# sourceMappingURL=index.js.map
@@ -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,6 @@
1
+ import type { Metrics } from '@slickgrid-universal/common';
2
+ export interface SqlResult<T = any> {
3
+ data: T[];
4
+ metrics?: Metrics;
5
+ }
6
+ //# sourceMappingURL=sqlResult.interface.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sqlResult.interface.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sqlServiceApi.interface.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sqlServiceOption.interface.js.map
@@ -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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"}