@webda/ql 4.0.0-beta.7 → 4.0.0-beta.8

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 CHANGED
@@ -54,6 +54,7 @@ aggregation syntax, uppercase `COUNT`, `SUM`, `AVG`, `MIN`, `MAX`, `AS`, `DISTIN
54
54
  **Filter expressions** support:
55
55
 
56
56
  - Comparison: `field = value`, `field != value`, `field > value`, `field >= value`, `field < value`, `field <= value`
57
+ - Time function: `field > NOW()`, `field < NOW('-10m')`, `field >= NOW('+1d')` (millisecond timestamp resolution)
57
58
  - Pattern match: `field LIKE "pattern"` (`_` = single char, `%` = any chars)
58
59
  - Set membership: `field IN [value, value, ...]`
59
60
  - Array contains: `field CONTAINS value`
@@ -94,6 +95,22 @@ WebdaQL.bind("priority >= ? LIMIT ?", [2, 10]); // priority >= 2 LIMIT 10
94
95
 
95
96
  Placeholders are only allowed where a value is expected, values are escaped by type, and `= ?` / `!= ?` with `null` become `IS NULL` / `IS NOT NULL`. Template literals passed straight to a query method are escaped the same way at compile time by `webdac`. See [Parameters](../../docs/pages/Modules/ql/Parameters.md).
96
97
 
98
+ ### NOW() time function
99
+
100
+ WebdaQL supports `NOW()` to produce dynamic numeric timestamps (milliseconds since Unix epoch):
101
+
102
+ - `NOW()`: current timestamp (`Date.now()`).
103
+ - `NOW('-10m')` / `NOW('+1d')`: current timestamp offset by duration string.
104
+ - Units supported: `ms`, `s`/`sec`, `m`/`min`, `h`/`hr`, `d`/`day`, `mo`/`mon`/`month`, `y`/`yr`/`year`. Multi-part durations like `NOW('-1d2h')` are supported.
105
+ - Numeric millisecond offsets: `NOW(-60000)` or `NOW(60000)`.
106
+ - Parameters: `NOW(?)` and `NOW(:offset)` can be bound using `bind()`.
107
+ - Updates: `UPDATE SET lastLoginAt = NOW()`.
108
+ - Dynamic evaluation: Expressions with `NOW()` evaluate dynamically at query execution or access time, allowing cached queries and operation permissions to track real time:
109
+
110
+ ```typescript
111
+ @Operation({ permission: "mfa = 'verified' AND mfaAt > NOW('-10m')" })
112
+ ```
113
+
97
114
  ### Statements: SELECT, DELETE, UPDATE
98
115
 
99
116
  WebdaQL parses `SELECT`, `DELETE` and `UPDATE` statements; the parsed `Query` carries `type` (`"SELECT"` for a plain filter), `fields` (SELECT) and `assignments` (UPDATE), and `toString()` round-trips them.
@@ -124,6 +141,24 @@ q.aggregation.metrics; // { n: { fn: "COUNT" }, total: { fn: "SUM", field: "poin
124
141
  See [Statements](../../docs/pages/Modules/ql/Statements.md#aggregation-select--group-by) and
125
142
  [Repositories](../../docs/pages/Concepts/Stores/Repositories.md#aggregation).
126
143
 
144
+ ### Code completion
145
+
146
+ WebdaQL provides grammar-driven code completion powered by `antlr4-c3`. `getCompletions` returns candidates for fields, keywords, operators, enum/boolean values, and parameters for a query and caret offset:
147
+
148
+ ```typescript
149
+ import { getCompletions, fieldsFromSchema } from "@webda/ql";
150
+
151
+ const fields = [
152
+ { name: "status", type: "string", enum: ["draft", "published"] },
153
+ { name: "viewCount", type: "integer" }
154
+ ];
155
+
156
+ const { items, prefix } = getCompletions("status = 'dr", 12, { fields });
157
+ // => items offer "'draft'", replacing range [9, 13]
158
+ ```
159
+
160
+ See [Code Completion](../../docs/pages/Modules/ql/Completion.md).
161
+
127
162
  ### API reference
128
163
 
129
164
  | Export | Description |
@@ -147,6 +182,8 @@ See [Statements](../../docs/pages/Modules/ql/Statements.md#aggregation-select--g
147
182
  | `AggregationError` | Runtime aggregation error with a `code` (`AGGREGATION_NOT_NATIVE`, `AGGREGATION_TOO_MANY_GROUPS`) |
148
183
  | `Query` | Parsed query result: `{ type, filter, fields?, assignments?, aggregation?, orderBy?, limit?, continuationToken? }` |
149
184
  | `OrderBy` | `{ field: string; direction: "ASC" \| "DESC" }` |
185
+ | `getCompletions(query, caret, opts)` | Returns grammar-driven code completion candidates at a caret offset |
186
+ | `fieldsFromSchema(schema, maxDepth?)` | Flattens a JSON schema into completion fields with dotted paths |
150
187
 
151
188
  ### See also
152
189
 
@@ -154,6 +191,7 @@ See [Statements](../../docs/pages/Modules/ql/Statements.md#aggregation-select--g
154
191
  - [Operators](../../docs/pages/Modules/ql/Operators.md)
155
192
  - [Parameters](../../docs/pages/Modules/ql/Parameters.md) — binding values safely
156
193
  - [Statements](../../docs/pages/Modules/ql/Statements.md) — SELECT, DELETE, UPDATE and repository bulk operations
194
+ - [Code Completion](../../docs/pages/Modules/ql/Completion.md) — autocomplete and suggestions
157
195
  - [Store Translators](../../docs/pages/Modules/ql/Translators.md) — how each Store backend converts WQL
158
196
 
159
197
  <!-- README_FOOTER -->
@@ -46,15 +46,16 @@ export declare class WebdaQLLexer extends Lexer {
46
46
  static readonly MIN = 41;
47
47
  static readonly MAX = 42;
48
48
  static readonly STAR = 43;
49
- static readonly DQUOTED_STRING_LITERAL = 44;
50
- static readonly SQUOTED_STRING_LITERAL = 45;
51
- static readonly INTEGER_LITERAL = 46;
52
- static readonly NUMBER_LITERAL = 47;
53
- static readonly POSITIONAL_PARAMETER = 48;
54
- static readonly NAMED_PARAMETER = 49;
55
- static readonly IDENTIFIER = 50;
56
- static readonly IDENTIFIER_WITH_NUMBER = 51;
57
- static readonly FUNCTION_IDENTIFIER_WITH_UNDERSCORE = 52;
49
+ static readonly NOW = 44;
50
+ static readonly DQUOTED_STRING_LITERAL = 45;
51
+ static readonly SQUOTED_STRING_LITERAL = 46;
52
+ static readonly INTEGER_LITERAL = 47;
53
+ static readonly NUMBER_LITERAL = 48;
54
+ static readonly POSITIONAL_PARAMETER = 49;
55
+ static readonly NAMED_PARAMETER = 50;
56
+ static readonly IDENTIFIER = 51;
57
+ static readonly IDENTIFIER_WITH_NUMBER = 52;
58
+ static readonly FUNCTION_IDENTIFIER_WITH_UNDERSCORE = 53;
58
59
  static readonly channelNames: string[];
59
60
  static readonly modeNames: string[];
60
61
  static readonly ruleNames: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"WebdaQLLexer.d.ts","sourceRoot":"","sources":["../src/WebdaQLLexer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAK1C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKpD,qBAAa,YAAa,SAAQ,KAAK;IACrC,gBAAuB,KAAK,KAAK;IACjC,gBAAuB,UAAU,KAAK;IACtC,gBAAuB,UAAU,KAAK;IACtC,gBAAuB,KAAK,KAAK;IACjC,gBAAuB,iBAAiB,KAAK;IAC7C,gBAAuB,iBAAiB,KAAK;IAC7C,gBAAuB,aAAa,KAAK;IACzC,gBAAuB,aAAa,KAAK;IACzC,gBAAuB,MAAM,KAAK;IAClC,gBAAuB,MAAM,MAAM;IACnC,gBAAuB,MAAM,MAAM;IACnC,gBAAuB,GAAG,MAAM;IAChC,gBAAuB,KAAK,MAAM;IAClC,gBAAuB,GAAG,MAAM;IAChC,gBAAuB,EAAE,MAAM;IAC/B,gBAAuB,KAAK,MAAM;IAClC,gBAAuB,SAAS,MAAM;IACtC,gBAAuB,OAAO,MAAM;IACpC,gBAAuB,gBAAgB,MAAM;IAC7C,gBAAuB,IAAI,MAAM;IACjC,gBAAuB,aAAa,MAAM;IAC1C,gBAAuB,IAAI,MAAM;IACjC,gBAAuB,EAAE,MAAM;IAC/B,gBAAuB,QAAQ,MAAM;IACrC,gBAAuB,EAAE,MAAM;IAC/B,gBAAuB,GAAG,MAAM;IAChC,gBAAuB,IAAI,MAAM;IACjC,gBAAuB,IAAI,MAAM;IACjC,gBAAuB,KAAK,MAAM;IAClC,gBAAuB,KAAK,MAAM;IAClC,gBAAuB,MAAM,MAAM;IACnC,gBAAuB,QAAQ,MAAM;IACrC,gBAAuB,GAAG,MAAM;IAChC,gBAAuB,IAAI,MAAM;IACjC,gBAAuB,QAAQ,MAAM;IACrC,gBAAuB,EAAE,MAAM;IAC/B,gBAAuB,QAAQ,MAAM;IACrC,gBAAuB,KAAK,MAAM;IAClC,gBAAuB,GAAG,MAAM;IAChC,gBAAuB,GAAG,MAAM;IAChC,gBAAuB,GAAG,MAAM;IAChC,gBAAuB,GAAG,MAAM;IAChC,gBAAuB,IAAI,MAAM;IACjC,gBAAuB,sBAAsB,MAAM;IACnD,gBAAuB,sBAAsB,MAAM;IACnD,gBAAuB,eAAe,MAAM;IAC5C,gBAAuB,cAAc,MAAM;IAC3C,gBAAuB,oBAAoB,MAAM;IACjD,gBAAuB,eAAe,MAAM;IAC5C,gBAAuB,UAAU,MAAM;IACvC,gBAAuB,sBAAsB,MAAM;IACnD,gBAAuB,mCAAmC,MAAM;IAGhE,gBAAuB,YAAY,EAAE,MAAM,EAAE,CAAuC;IAGpF,gBAAuB,SAAS,EAAE,MAAM,EAAE,CAAoB;IAE9D,gBAAuB,SAAS,EAAE,MAAM,EAAE,CA2DxC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAkDpC;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAsDrC;IACF,gBAAuB,UAAU,EAAE,UAAU,CAI3C;IAIF,IAAW,UAAU,IAAI,UAAU,CAElC;IAGD,YAAY,KAAK,EAAE,UAAU,EAG5B;IAGD,IAAW,eAAe,IAAI,MAAM,CAEnC;IAGD,IAAW,SAAS,IAAI,MAAM,EAAE,CAE/B;IAGD,IAAW,aAAa,IAAI,MAAM,CAEjC;IAGD,IAAW,YAAY,IAAI,MAAM,EAAE,CAElC;IAGD,IAAW,SAAS,IAAI,MAAM,EAAE,CAE/B;IAED,gBAAuB,cAAc,EAAE,MAAM,CAwL4B;IACzE,OAAc,KAAK,EAAE,GAAG,CAAC;IACzB,WAAkB,IAAI,IAAI,GAAG,CAM5B;CACF"}
1
+ {"version":3,"file":"WebdaQLLexer.d.ts","sourceRoot":"","sources":["../src/WebdaQLLexer.ts"],"names":[],"mappings":"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"}