@dava96/osrs-wiki-bucket-builder 1.0.5 → 1.0.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.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/query-builder.d.ts +163 -39
- package/dist/query-builder.d.ts.map +1 -1
- package/dist/query-builder.js +120 -22
- package/dist/query-builder.js.map +1 -1
- package/dist/response-types.d.ts +142 -0
- package/dist/response-types.d.ts.map +1 -0
- package/dist/response-types.js +12 -0
- package/dist/response-types.js.map +1 -0
- package/dist/types.d.ts +39 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +39 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +57 -12
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
package/dist/query-builder.d.ts
CHANGED
|
@@ -1,15 +1,37 @@
|
|
|
1
|
-
import type { BucketName } from './generated/definitions.js';
|
|
1
|
+
import type { BucketName, BucketRegistry } from './generated/definitions.js';
|
|
2
|
+
import type { BucketMetaFields, SelectResult, ValidField } from './response-types.js';
|
|
2
3
|
import { type BucketCondition, type BucketHelperCondition, type Operator, type OrderByDirection, type ScalarValue } from './types.js';
|
|
3
4
|
/**
|
|
4
5
|
* A type-safe query builder for OSRS Wiki Buckets.
|
|
5
6
|
*
|
|
6
|
-
* Uses recursive generics to track joined buckets
|
|
7
|
+
* Uses recursive generics to track joined buckets, available fields, and the
|
|
8
|
+
* inferred result shape. As you chain `.select()`, `.join()`, and `.where()`,
|
|
9
|
+
* the builder accumulates type information so you get full autocomplete on
|
|
10
|
+
* field names and automatically inferred response types.
|
|
7
11
|
*
|
|
8
12
|
* @template TMain The name of the primary bucket.
|
|
9
|
-
* @template
|
|
10
|
-
* @template TSelected The shape
|
|
13
|
+
* @template TJoinMap A record mapping alias/bucket names to their target bucket names.
|
|
14
|
+
* @template TSelected The accumulated result shape (defaults to the full bucket type).
|
|
15
|
+
* @template THasSelected Whether `.select()` has been called (used to switch from
|
|
16
|
+
* full-type default to narrowed selection).
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { bucket, InferBucketResult } from '@dava96/osrs-wiki-bucket-builder';
|
|
21
|
+
*
|
|
22
|
+
* const query = bucket('exchange').select('id', 'name', 'value');
|
|
23
|
+
* type Row = InferBucketResult<typeof query>;
|
|
24
|
+
* // Row = { id: number; name: string; value: number; page_name: string; page_name_sub: string }
|
|
25
|
+
* ```
|
|
11
26
|
*/
|
|
12
|
-
export declare class BucketQueryBuilder<TMain extends BucketName,
|
|
27
|
+
export declare class BucketQueryBuilder<TMain extends BucketName, TJoinMap extends Record<string, BucketName> = Record<string, never>, TSelected = BucketRegistry[TMain] & BucketMetaFields, THasSelected extends boolean = false> {
|
|
28
|
+
/**
|
|
29
|
+
* Type-level accessor for the inferred result shape.
|
|
30
|
+
*
|
|
31
|
+
* This property does not exist at runtime — it is a compile-time brand
|
|
32
|
+
* used by {@link InferBucketResult} to extract the result type.
|
|
33
|
+
*/
|
|
34
|
+
readonly __resultType: TSelected;
|
|
13
35
|
private readonly mainBucket;
|
|
14
36
|
private joins;
|
|
15
37
|
private selections;
|
|
@@ -20,46 +42,84 @@ export declare class BucketQueryBuilder<TMain extends BucketName, TJoined extend
|
|
|
20
42
|
private aliasMap;
|
|
21
43
|
constructor(bucket: TMain);
|
|
22
44
|
/**
|
|
23
|
-
* Selects fields to retrieve.
|
|
24
|
-
*
|
|
45
|
+
* Selects fields to retrieve from the query results.
|
|
46
|
+
*
|
|
47
|
+
* Supports plain field names, dot notation for joined buckets
|
|
48
|
+
* (e.g. `'exchange.value'`), and wildcards (`'*'`, `'exchange.*'`).
|
|
49
|
+
*
|
|
50
|
+
* Multiple `.select()` calls accumulate — they merge fields rather
|
|
51
|
+
* than replacing previous selections.
|
|
52
|
+
*
|
|
53
|
+
* @param fields - One or more field names to include in the result.
|
|
54
|
+
* Your IDE will autocomplete valid field names based on the bucket
|
|
55
|
+
* and any active joins.
|
|
25
56
|
*
|
|
26
|
-
* @
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* bucket('exchange').select('id', 'name'); // plain fields
|
|
60
|
+
* bucket('exchange').select('*'); // all fields
|
|
61
|
+
* query.join('exchange', 'ex', 'item_name', 'name')
|
|
62
|
+
* .select('item_name', 'ex.value', 'ex.limit'); // joined fields
|
|
63
|
+
* ```
|
|
27
64
|
*/
|
|
28
|
-
select<F extends
|
|
29
|
-
[K in F]: unknown;
|
|
30
|
-
}>;
|
|
65
|
+
select<F extends ValidField<TMain, TJoinMap>>(...fields: F[]): BucketQueryBuilder<TMain, TJoinMap, THasSelected extends true ? TSelected & SelectResult<TMain, TJoinMap, F> : SelectResult<TMain, TJoinMap, F> & BucketMetaFields, true>;
|
|
31
66
|
/**
|
|
32
67
|
* Joins another bucket to the query.
|
|
33
68
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
69
|
+
* The join is a LEFT JOIN — main bucket rows always appear, but joined
|
|
70
|
+
* fields may be absent when there is no matching row in the target bucket
|
|
71
|
+
* (e.g. untradeable items have no exchange entry).
|
|
72
|
+
*
|
|
73
|
+
* After joining, dot-notation fields like `'exchange.value'` become
|
|
74
|
+
* available in `.select()` and `.where()`.
|
|
75
|
+
*
|
|
76
|
+
* @param targetBucket - The name of the bucket to join.
|
|
77
|
+
* @param sourceField - The field in the current result set to join ON.
|
|
78
|
+
* @param targetField - The field in the target bucket to join ON.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* bucket('infobox_item')
|
|
83
|
+
* .join('exchange', 'item_name', 'name')
|
|
84
|
+
* .select('item_name', 'exchange.value');
|
|
85
|
+
* ```
|
|
37
86
|
*/
|
|
38
|
-
join<TTarget extends BucketName>(targetBucket: TTarget, sourceField: string, targetField: string): BucketQueryBuilder<TMain,
|
|
87
|
+
join<TTarget extends BucketName>(targetBucket: TTarget, sourceField: string, targetField: string): BucketQueryBuilder<TMain, TJoinMap & Record<TTarget, TTarget>, TSelected, THasSelected>;
|
|
39
88
|
/**
|
|
40
89
|
* Joins another bucket with an alias.
|
|
41
90
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
91
|
+
* Aliases let you give joined buckets shorter names for use in
|
|
92
|
+
* `.select()` and `.where()`. The alias is resolved to the real
|
|
93
|
+
* bucket name in the generated Lua query.
|
|
94
|
+
*
|
|
95
|
+
* @param targetBucket - The name of the bucket to join.
|
|
96
|
+
* @param alias - An alias for this bucket to use in select/where.
|
|
97
|
+
* @param sourceField - The field in the current result set to join ON.
|
|
98
|
+
* @param targetField - The field in the target bucket to join ON.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```typescript
|
|
102
|
+
* bucket('infobox_item')
|
|
103
|
+
* .join('exchange', 'ex', 'item_name', 'name')
|
|
104
|
+
* .select('item_name', 'ex.value', 'ex.limit');
|
|
105
|
+
* ```
|
|
46
106
|
*/
|
|
47
|
-
join<TTarget extends BucketName, TAlias extends string>(targetBucket: TTarget, alias: TAlias, sourceField: string, targetField: string): BucketQueryBuilder<TMain,
|
|
107
|
+
join<TTarget extends BucketName, TAlias extends string>(targetBucket: TTarget, alias: TAlias, sourceField: string, targetField: string): BucketQueryBuilder<TMain, TJoinMap & Record<TAlias, TTarget>, TSelected, THasSelected>;
|
|
48
108
|
/**
|
|
49
109
|
* Filters results by field equality.
|
|
50
110
|
*
|
|
51
|
-
* @param field The field to filter on.
|
|
52
|
-
* @param value The value to match (implies `=` operator).
|
|
111
|
+
* @param field - The field to filter on. Supports autocomplete for valid field names.
|
|
112
|
+
* @param value - The value to match (implies `=` operator).
|
|
53
113
|
*/
|
|
54
|
-
where(field:
|
|
114
|
+
where(field: ValidField<TMain, TJoinMap>, value: ScalarValue | BucketHelperCondition): this;
|
|
55
115
|
/**
|
|
56
116
|
* Filters results with an explicit operator.
|
|
57
117
|
*
|
|
58
|
-
* @param field The field to filter on.
|
|
59
|
-
* @param op The comparison operator.
|
|
60
|
-
* @param value The value to compare against.
|
|
118
|
+
* @param field - The field to filter on. Supports autocomplete for valid field names.
|
|
119
|
+
* @param op - The comparison operator (`=`, `!=`, `>`, `<`, `>=`, `<=`).
|
|
120
|
+
* @param value - The value to compare against.
|
|
61
121
|
*/
|
|
62
|
-
where(field:
|
|
122
|
+
where(field: ValidField<TMain, TJoinMap>, op: Operator, value: ScalarValue | BucketHelperCondition): this;
|
|
63
123
|
/**
|
|
64
124
|
* Adds multiple conditions (implicitly AND).
|
|
65
125
|
*
|
|
@@ -68,20 +128,30 @@ export declare class BucketQueryBuilder<TMain extends BucketName, TJoined extend
|
|
|
68
128
|
where(...conditions: BucketCondition[]): this;
|
|
69
129
|
/**
|
|
70
130
|
* Shorthand for `where(field, '!=', value)`.
|
|
131
|
+
*
|
|
132
|
+
* @param field - The field to exclude matches on.
|
|
133
|
+
* @param value - The value to exclude.
|
|
71
134
|
*/
|
|
72
|
-
whereNot(field:
|
|
135
|
+
whereNot(field: ValidField<TMain, TJoinMap>, value: ScalarValue): this;
|
|
73
136
|
/**
|
|
74
137
|
* Filters for rows where field is NULL.
|
|
138
|
+
*
|
|
139
|
+
* @param field - The field to check for NULL.
|
|
75
140
|
*/
|
|
76
|
-
whereNull(field:
|
|
141
|
+
whereNull(field: ValidField<TMain, TJoinMap>): this;
|
|
77
142
|
/**
|
|
78
143
|
* Filters for rows where field is NOT NULL.
|
|
144
|
+
*
|
|
145
|
+
* @param field - The field to check for NOT NULL.
|
|
79
146
|
*/
|
|
80
|
-
whereNotNull(field:
|
|
147
|
+
whereNotNull(field: ValidField<TMain, TJoinMap>): this;
|
|
81
148
|
/**
|
|
82
149
|
* Filters for rows where field is between two values (inclusive).
|
|
150
|
+
*
|
|
151
|
+
* @param field - The field to filter on.
|
|
152
|
+
* @param range - A tuple of `[min, max]` values (inclusive on both ends).
|
|
83
153
|
*/
|
|
84
|
-
whereBetween(field:
|
|
154
|
+
whereBetween(field: ValidField<TMain, TJoinMap>, range: [ScalarValue, ScalarValue]): this;
|
|
85
155
|
/**
|
|
86
156
|
* Conditionally applies a callback to the query.
|
|
87
157
|
*
|
|
@@ -91,9 +161,17 @@ export declare class BucketQueryBuilder<TMain extends BucketName, TJoined extend
|
|
|
91
161
|
when(condition: boolean, callback: (query: this) => void): this;
|
|
92
162
|
/**
|
|
93
163
|
* Filters for rows where field matches any of the given values.
|
|
94
|
-
* Generates `Bucket.Or({field, v1}, {field, v2}, ...)
|
|
164
|
+
* Generates `Bucket.Or({field, v1}, {field, v2}, ...)` internally.
|
|
165
|
+
*
|
|
166
|
+
* @param field - The field to match against.
|
|
167
|
+
* @param values - An array of values; rows matching any value are included.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```typescript
|
|
171
|
+
* bucket('exchange').whereIn('name', ['Bronze axe', 'Iron axe', 'Steel axe']);
|
|
172
|
+
* ```
|
|
95
173
|
*/
|
|
96
|
-
whereIn(field:
|
|
174
|
+
whereIn(field: ValidField<TMain, TJoinMap>, values: ScalarValue[]): this;
|
|
97
175
|
/**
|
|
98
176
|
* Sets the maximum number of rows to return.
|
|
99
177
|
* Accepted range is 1–5000. Defaults to 500.
|
|
@@ -113,9 +191,19 @@ export declare class BucketQueryBuilder<TMain extends BucketName, TJoined extend
|
|
|
113
191
|
*/
|
|
114
192
|
paginate(page: number, perPage: number): this;
|
|
115
193
|
/**
|
|
116
|
-
* Creates an independent copy of this query builder's state.
|
|
194
|
+
* Creates an independent deep copy of this query builder's state.
|
|
195
|
+
*
|
|
196
|
+
* Useful for building query variants from a shared base without
|
|
197
|
+
* mutating the original.
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* const base = bucket('exchange').select('name', 'value').where('value', '>', 0);
|
|
202
|
+
* const expensive = base.clone().orderBy('value', 'desc').limit(5);
|
|
203
|
+
* const cheap = base.clone().orderBy('value', 'asc').limit(5);
|
|
204
|
+
* ```
|
|
117
205
|
*/
|
|
118
|
-
clone(): BucketQueryBuilder<TMain,
|
|
206
|
+
clone(): BucketQueryBuilder<TMain, TJoinMap, TSelected, THasSelected>;
|
|
119
207
|
/**
|
|
120
208
|
* Orders results by a selected field.
|
|
121
209
|
*
|
|
@@ -148,18 +236,54 @@ export declare class BucketQueryBuilder<TMain extends BucketName, TJoined extend
|
|
|
148
236
|
/**
|
|
149
237
|
* Executes the query and returns the Lua query string.
|
|
150
238
|
*
|
|
151
|
-
* @param options Configuration options.
|
|
152
|
-
* @param options.encodeURI Whether to URI encode the output (default: true).
|
|
153
|
-
*
|
|
239
|
+
* @param options - Configuration options.
|
|
240
|
+
* @param options.encodeURI - Whether to URI encode the output (default: true).
|
|
241
|
+
* Set to `false` if you need the raw Lua string for debugging.
|
|
242
|
+
*
|
|
243
|
+
* @example
|
|
244
|
+
* ```typescript
|
|
245
|
+
* const encoded = bucket('exchange').select('name').run(); // URL-encoded
|
|
246
|
+
* const raw = bucket('exchange').select('name').run({ encodeURI: false }); // raw Lua
|
|
247
|
+
* ```
|
|
154
248
|
*/
|
|
155
249
|
run(options?: {
|
|
156
250
|
encodeURI?: boolean;
|
|
157
251
|
}): string;
|
|
252
|
+
/**
|
|
253
|
+
* Generates the full OSRS Wiki Bucket API URL, ready for `fetch()`.
|
|
254
|
+
*
|
|
255
|
+
* This is a convenience method that calls `.run()` internally and
|
|
256
|
+
* wraps the result in the standard API URL template. The query is
|
|
257
|
+
* always URI-encoded.
|
|
258
|
+
*
|
|
259
|
+
* @returns The complete API URL as a string.
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* ```typescript
|
|
263
|
+
* const query = bucket('exchange').select('name', 'value').where('name', 'Abyssal whip');
|
|
264
|
+
* const data = await fetch(query.toUrl()).then(r => r.json());
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
267
|
+
toUrl(): string;
|
|
158
268
|
}
|
|
159
269
|
/**
|
|
160
270
|
* Creates a new query builder for the given bucket.
|
|
161
271
|
*
|
|
162
|
-
*
|
|
272
|
+
* This is the main entry point for building queries. The returned builder
|
|
273
|
+
* provides autocomplete for field names and tracks the result type as you
|
|
274
|
+
* chain methods.
|
|
275
|
+
*
|
|
276
|
+
* @param bucket - The name of the bucket to query.
|
|
277
|
+
*
|
|
278
|
+
* @example
|
|
279
|
+
* ```typescript
|
|
280
|
+
* import { bucket } from '@dava96/osrs-wiki-bucket-builder';
|
|
281
|
+
*
|
|
282
|
+
* const query = bucket('exchange')
|
|
283
|
+
* .select('id', 'name', 'value')
|
|
284
|
+
* .where('name', 'Abyssal whip')
|
|
285
|
+
* .run();
|
|
286
|
+
* ```
|
|
163
287
|
*/
|
|
164
288
|
export declare function bucket<K extends BucketName>(bucket: K): BucketQueryBuilder<K>;
|
|
165
289
|
//# sourceMappingURL=query-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/query-builder.js
CHANGED
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
import { BUCKET_FIELDS } from './generated/definitions.js';
|
|
2
2
|
import { Bucket, QUERY_DEFAULTS, } from './types.js';
|
|
3
|
+
/** Base URL for the OSRS Wiki Bucket API. */
|
|
4
|
+
const BUCKET_API_BASE = 'https://oldschool.runescape.wiki/api.php';
|
|
3
5
|
/**
|
|
4
6
|
* A type-safe query builder for OSRS Wiki Buckets.
|
|
5
7
|
*
|
|
6
|
-
* Uses recursive generics to track joined buckets
|
|
8
|
+
* Uses recursive generics to track joined buckets, available fields, and the
|
|
9
|
+
* inferred result shape. As you chain `.select()`, `.join()`, and `.where()`,
|
|
10
|
+
* the builder accumulates type information so you get full autocomplete on
|
|
11
|
+
* field names and automatically inferred response types.
|
|
7
12
|
*
|
|
8
13
|
* @template TMain The name of the primary bucket.
|
|
9
|
-
* @template
|
|
10
|
-
* @template TSelected The shape
|
|
14
|
+
* @template TJoinMap A record mapping alias/bucket names to their target bucket names.
|
|
15
|
+
* @template TSelected The accumulated result shape (defaults to the full bucket type).
|
|
16
|
+
* @template THasSelected Whether `.select()` has been called (used to switch from
|
|
17
|
+
* full-type default to narrowed selection).
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { bucket, InferBucketResult } from '@dava96/osrs-wiki-bucket-builder';
|
|
22
|
+
*
|
|
23
|
+
* const query = bucket('exchange').select('id', 'name', 'value');
|
|
24
|
+
* type Row = InferBucketResult<typeof query>;
|
|
25
|
+
* // Row = { id: number; name: string; value: number; page_name: string; page_name_sub: string }
|
|
26
|
+
* ```
|
|
11
27
|
*/
|
|
12
28
|
export class BucketQueryBuilder {
|
|
13
29
|
mainBucket;
|
|
@@ -23,37 +39,52 @@ export class BucketQueryBuilder {
|
|
|
23
39
|
this.aliasMap[bucket] = bucket;
|
|
24
40
|
}
|
|
25
41
|
/**
|
|
26
|
-
* Selects fields to retrieve.
|
|
27
|
-
*
|
|
42
|
+
* Selects fields to retrieve from the query results.
|
|
43
|
+
*
|
|
44
|
+
* Supports plain field names, dot notation for joined buckets
|
|
45
|
+
* (e.g. `'exchange.value'`), and wildcards (`'*'`, `'exchange.*'`).
|
|
28
46
|
*
|
|
29
|
-
*
|
|
47
|
+
* Multiple `.select()` calls accumulate — they merge fields rather
|
|
48
|
+
* than replacing previous selections.
|
|
49
|
+
*
|
|
50
|
+
* @param fields - One or more field names to include in the result.
|
|
51
|
+
* Your IDE will autocomplete valid field names based on the bucket
|
|
52
|
+
* and any active joins.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* bucket('exchange').select('id', 'name'); // plain fields
|
|
57
|
+
* bucket('exchange').select('*'); // all fields
|
|
58
|
+
* query.join('exchange', 'ex', 'item_name', 'name')
|
|
59
|
+
* .select('item_name', 'ex.value', 'ex.limit'); // joined fields
|
|
60
|
+
* ```
|
|
30
61
|
*/
|
|
31
62
|
select(...fields) {
|
|
32
63
|
this.selections.push(...fields);
|
|
33
64
|
return this;
|
|
34
65
|
}
|
|
35
|
-
join(targetBucket,
|
|
66
|
+
join(targetBucket, aliasOrSourceField, sourceOrTargetField, maybeTargetField) {
|
|
36
67
|
let alias;
|
|
37
68
|
let sourceField;
|
|
38
69
|
let targetField;
|
|
39
|
-
if (
|
|
40
|
-
alias =
|
|
41
|
-
sourceField =
|
|
42
|
-
targetField =
|
|
70
|
+
if (maybeTargetField) {
|
|
71
|
+
alias = aliasOrSourceField;
|
|
72
|
+
sourceField = sourceOrTargetField;
|
|
73
|
+
targetField = maybeTargetField;
|
|
43
74
|
}
|
|
44
75
|
else {
|
|
45
|
-
sourceField =
|
|
46
|
-
targetField =
|
|
76
|
+
sourceField = aliasOrSourceField;
|
|
77
|
+
targetField = sourceOrTargetField;
|
|
47
78
|
}
|
|
48
|
-
const
|
|
79
|
+
const joinEntry = {
|
|
49
80
|
target: targetBucket,
|
|
50
81
|
onSource: sourceField,
|
|
51
82
|
onTarget: targetField,
|
|
52
83
|
};
|
|
53
84
|
if (alias) {
|
|
54
|
-
|
|
85
|
+
joinEntry.alias = alias;
|
|
55
86
|
}
|
|
56
|
-
this.joins.push(
|
|
87
|
+
this.joins.push(joinEntry);
|
|
57
88
|
if (alias) {
|
|
58
89
|
this.aliasMap[alias] = targetBucket;
|
|
59
90
|
}
|
|
@@ -94,24 +125,34 @@ export class BucketQueryBuilder {
|
|
|
94
125
|
}
|
|
95
126
|
/**
|
|
96
127
|
* Shorthand for `where(field, '!=', value)`.
|
|
128
|
+
*
|
|
129
|
+
* @param field - The field to exclude matches on.
|
|
130
|
+
* @param value - The value to exclude.
|
|
97
131
|
*/
|
|
98
132
|
whereNot(field, value) {
|
|
99
133
|
return this.where(field, '!=', value);
|
|
100
134
|
}
|
|
101
135
|
/**
|
|
102
136
|
* Filters for rows where field is NULL.
|
|
137
|
+
*
|
|
138
|
+
* @param field - The field to check for NULL.
|
|
103
139
|
*/
|
|
104
140
|
whereNull(field) {
|
|
105
141
|
return this.where(field, Bucket.Null());
|
|
106
142
|
}
|
|
107
143
|
/**
|
|
108
144
|
* Filters for rows where field is NOT NULL.
|
|
145
|
+
*
|
|
146
|
+
* @param field - The field to check for NOT NULL.
|
|
109
147
|
*/
|
|
110
148
|
whereNotNull(field) {
|
|
111
149
|
return this.where(field, '!=', Bucket.Null());
|
|
112
150
|
}
|
|
113
151
|
/**
|
|
114
152
|
* Filters for rows where field is between two values (inclusive).
|
|
153
|
+
*
|
|
154
|
+
* @param field - The field to filter on.
|
|
155
|
+
* @param range - A tuple of `[min, max]` values (inclusive on both ends).
|
|
115
156
|
*/
|
|
116
157
|
whereBetween(field, range) {
|
|
117
158
|
return this.where(field, '>=', range[0]).where(field, '<=', range[1]);
|
|
@@ -130,7 +171,15 @@ export class BucketQueryBuilder {
|
|
|
130
171
|
}
|
|
131
172
|
/**
|
|
132
173
|
* Filters for rows where field matches any of the given values.
|
|
133
|
-
* Generates `Bucket.Or({field, v1}, {field, v2}, ...)
|
|
174
|
+
* Generates `Bucket.Or({field, v1}, {field, v2}, ...)` internally.
|
|
175
|
+
*
|
|
176
|
+
* @param field - The field to match against.
|
|
177
|
+
* @param values - An array of values; rows matching any value are included.
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* bucket('exchange').whereIn('name', ['Bronze axe', 'Iron axe', 'Steel axe']);
|
|
182
|
+
* ```
|
|
134
183
|
*/
|
|
135
184
|
whereIn(field, values) {
|
|
136
185
|
const conditions = values.map((v) => [field, v]);
|
|
@@ -175,7 +224,17 @@ export class BucketQueryBuilder {
|
|
|
175
224
|
return this;
|
|
176
225
|
}
|
|
177
226
|
/**
|
|
178
|
-
* Creates an independent copy of this query builder's state.
|
|
227
|
+
* Creates an independent deep copy of this query builder's state.
|
|
228
|
+
*
|
|
229
|
+
* Useful for building query variants from a shared base without
|
|
230
|
+
* mutating the original.
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* ```typescript
|
|
234
|
+
* const base = bucket('exchange').select('name', 'value').where('value', '>', 0);
|
|
235
|
+
* const expensive = base.clone().orderBy('value', 'desc').limit(5);
|
|
236
|
+
* const cheap = base.clone().orderBy('value', 'asc').limit(5);
|
|
237
|
+
* ```
|
|
179
238
|
*/
|
|
180
239
|
clone() {
|
|
181
240
|
const clone = new BucketQueryBuilder(this.mainBucket);
|
|
@@ -373,20 +432,59 @@ export class BucketQueryBuilder {
|
|
|
373
432
|
/**
|
|
374
433
|
* Executes the query and returns the Lua query string.
|
|
375
434
|
*
|
|
376
|
-
* @param options Configuration options.
|
|
377
|
-
* @param options.encodeURI Whether to URI encode the output (default: true).
|
|
378
|
-
*
|
|
435
|
+
* @param options - Configuration options.
|
|
436
|
+
* @param options.encodeURI - Whether to URI encode the output (default: true).
|
|
437
|
+
* Set to `false` if you need the raw Lua string for debugging.
|
|
438
|
+
*
|
|
439
|
+
* @example
|
|
440
|
+
* ```typescript
|
|
441
|
+
* const encoded = bucket('exchange').select('name').run(); // URL-encoded
|
|
442
|
+
* const raw = bucket('exchange').select('name').run({ encodeURI: false }); // raw Lua
|
|
443
|
+
* ```
|
|
379
444
|
*/
|
|
380
445
|
run(options = {}) {
|
|
381
446
|
const sql = this.printSQL();
|
|
382
447
|
const shouldEncode = options.encodeURI ?? true;
|
|
383
448
|
return shouldEncode ? encodeURIComponent(sql) : sql;
|
|
384
449
|
}
|
|
450
|
+
/**
|
|
451
|
+
* Generates the full OSRS Wiki Bucket API URL, ready for `fetch()`.
|
|
452
|
+
*
|
|
453
|
+
* This is a convenience method that calls `.run()` internally and
|
|
454
|
+
* wraps the result in the standard API URL template. The query is
|
|
455
|
+
* always URI-encoded.
|
|
456
|
+
*
|
|
457
|
+
* @returns The complete API URL as a string.
|
|
458
|
+
*
|
|
459
|
+
* @example
|
|
460
|
+
* ```typescript
|
|
461
|
+
* const query = bucket('exchange').select('name', 'value').where('name', 'Abyssal whip');
|
|
462
|
+
* const data = await fetch(query.toUrl()).then(r => r.json());
|
|
463
|
+
* ```
|
|
464
|
+
*/
|
|
465
|
+
toUrl() {
|
|
466
|
+
const encodedQuery = this.run();
|
|
467
|
+
return `${BUCKET_API_BASE}?action=bucket&format=json&query=${encodedQuery}`;
|
|
468
|
+
}
|
|
385
469
|
}
|
|
386
470
|
/**
|
|
387
471
|
* Creates a new query builder for the given bucket.
|
|
388
472
|
*
|
|
389
|
-
*
|
|
473
|
+
* This is the main entry point for building queries. The returned builder
|
|
474
|
+
* provides autocomplete for field names and tracks the result type as you
|
|
475
|
+
* chain methods.
|
|
476
|
+
*
|
|
477
|
+
* @param bucket - The name of the bucket to query.
|
|
478
|
+
*
|
|
479
|
+
* @example
|
|
480
|
+
* ```typescript
|
|
481
|
+
* import { bucket } from '@dava96/osrs-wiki-bucket-builder';
|
|
482
|
+
*
|
|
483
|
+
* const query = bucket('exchange')
|
|
484
|
+
* .select('id', 'name', 'value')
|
|
485
|
+
* .where('name', 'Abyssal whip')
|
|
486
|
+
* .run();
|
|
487
|
+
* ```
|
|
390
488
|
*/
|
|
391
489
|
export function bucket(bucket) {
|
|
392
490
|
return new BucketQueryBuilder(bucket);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-level utilities for inferring the shape of bucket query responses.
|
|
3
|
+
*
|
|
4
|
+
* These types work in tandem with {@link BucketQueryBuilder} to provide
|
|
5
|
+
* compile-time type safety for API responses. As you chain `.select()`,
|
|
6
|
+
* `.join()`, and other methods, the builder accumulates a result type
|
|
7
|
+
* that precisely describes the shape of each row returned by the API.
|
|
8
|
+
*
|
|
9
|
+
* @module response-types
|
|
10
|
+
*/
|
|
11
|
+
import type { BucketRegistry, BucketName } from './generated/definitions.js';
|
|
12
|
+
/**
|
|
13
|
+
* Meta-fields that the Wiki Bucket API injects into every response row.
|
|
14
|
+
*
|
|
15
|
+
* These are not part of any bucket's schema but are always present in
|
|
16
|
+
* the JSON response. `page_name` identifies the source wiki page and
|
|
17
|
+
* `page_name_sub` identifies the subpage or version variant.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Every row in the response includes these:
|
|
22
|
+
* // { "page_name": "Abyssal whip", "page_name_sub": "", "id": 4151, ... }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export interface BucketMetaFields {
|
|
26
|
+
/** The wiki page that sourced this row. */
|
|
27
|
+
page_name: string;
|
|
28
|
+
/** The subpage or version variant (empty string if none). */
|
|
29
|
+
page_name_sub: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Computes the union of all valid field names for a given bucket and join map.
|
|
33
|
+
*
|
|
34
|
+
* This powers autocomplete in `.select()` and `.where()`. It includes:
|
|
35
|
+
* - Direct fields from the main bucket (e.g. `'id'`, `'name'`)
|
|
36
|
+
* - Dot-prefixed fields from joined buckets (e.g. `'exchange.value'`)
|
|
37
|
+
* - The global wildcard `'*'` which selects all main bucket fields
|
|
38
|
+
* - Alias wildcards like `'exchange.*'` which select all fields from a join
|
|
39
|
+
*
|
|
40
|
+
* @template TMain - The main bucket being queried.
|
|
41
|
+
* @template TJoinMap - A record mapping alias names to their target bucket names.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // For bucket('infobox_item').join('exchange', 'ex', 'item_name', 'name'):
|
|
46
|
+
* // ValidField = 'item_name' | 'weight' | ... | 'ex.id' | 'ex.name' | ... | '*' | 'ex.*'
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export type ValidField<TMain extends BucketName, TJoinMap extends Record<string, BucketName>> = (keyof BucketRegistry[TMain] & string) | JoinedFields<TJoinMap> | '*' | JoinedWildcards<TJoinMap>;
|
|
50
|
+
/**
|
|
51
|
+
* Generates dot-prefixed field names for all joined buckets.
|
|
52
|
+
* E.g. if TJoinMap = { ex: 'exchange' }, produces `'ex.id' | 'ex.name' | ...`
|
|
53
|
+
*/
|
|
54
|
+
type JoinedFields<TJoinMap extends Record<string, BucketName>> = {
|
|
55
|
+
[A in keyof TJoinMap & string]: `${A}.${keyof BucketRegistry[TJoinMap[A]] & string}`;
|
|
56
|
+
}[keyof TJoinMap & string];
|
|
57
|
+
/**
|
|
58
|
+
* Generates wildcard selectors for all joined buckets.
|
|
59
|
+
* E.g. if TJoinMap = { ex: 'exchange' }, produces `'ex.*'`
|
|
60
|
+
*/
|
|
61
|
+
type JoinedWildcards<TJoinMap extends Record<string, BucketName>> = `${keyof TJoinMap & string}.*`;
|
|
62
|
+
/**
|
|
63
|
+
* Resolves a single field string to its TypeScript type by delegating to
|
|
64
|
+
* specialised helpers for each field format.
|
|
65
|
+
*
|
|
66
|
+
* The resolution strategy (in order):
|
|
67
|
+
* 1. `'*'` → Full main bucket type via {@link ResolveWildcard}
|
|
68
|
+
* 2. `'alias.*'` → All aliased fields via {@link ResolveAliasWildcard}
|
|
69
|
+
* 3. `'alias.field'`→ Single joined field via {@link ResolveDottedField}
|
|
70
|
+
* 4. `'field'` → Single main bucket field via {@link ResolveMainField}
|
|
71
|
+
*
|
|
72
|
+
* Falls back to `unknown` for unrecognised fields.
|
|
73
|
+
*/
|
|
74
|
+
type ResolveField<TMain extends BucketName, TJoinMap extends Record<string, BucketName>, F extends string> = F extends '*' ? ResolveWildcard<TMain> : F extends `${infer Alias}.*` ? ResolveAliasWildcard<TJoinMap, Alias> : F extends `${infer Alias}.${infer Field}` ? ResolveDottedField<TJoinMap, Alias, Field> : ResolveMainField<TMain, F>;
|
|
75
|
+
/** Resolves `'*'` to the full main bucket interface. */
|
|
76
|
+
type ResolveWildcard<TMain extends BucketName> = BucketRegistry[TMain];
|
|
77
|
+
/**
|
|
78
|
+
* Resolves `'alias.*'` to all fields from the aliased bucket,
|
|
79
|
+
* with each key prefixed by the alias (e.g. `'ex.id'`, `'ex.name'`).
|
|
80
|
+
*/
|
|
81
|
+
type ResolveAliasWildcard<TJoinMap extends Record<string, BucketName>, Alias extends string> = Alias extends keyof TJoinMap ? {
|
|
82
|
+
[K in keyof BucketRegistry[TJoinMap[Alias]] & string as `${Alias}.${K}`]: BucketRegistry[TJoinMap[Alias]][K];
|
|
83
|
+
} : unknown;
|
|
84
|
+
/**
|
|
85
|
+
* Resolves `'alias.field'` to the field's type from the joined bucket.
|
|
86
|
+
* First checks if the alias is in the join map, then falls back to
|
|
87
|
+
* checking if it's a raw bucket name (for unaliased joins).
|
|
88
|
+
*/
|
|
89
|
+
type ResolveDottedField<TJoinMap extends Record<string, BucketName>, Alias extends string, Field extends string> = Alias extends keyof TJoinMap ? LookupField<TJoinMap[Alias], Field> : Alias extends BucketName ? LookupField<Alias, Field> : unknown;
|
|
90
|
+
/** Resolves a plain field name to its type from the main bucket. */
|
|
91
|
+
type ResolveMainField<TMain extends BucketName, F extends string> = F extends keyof BucketRegistry[TMain] ? BucketRegistry[TMain][F] : unknown;
|
|
92
|
+
/** Looks up a field's type from a specific bucket, returning `unknown` if not found. */
|
|
93
|
+
type LookupField<B extends BucketName, F extends string> = F extends keyof BucketRegistry[B] ? BucketRegistry[B][F] : unknown;
|
|
94
|
+
/**
|
|
95
|
+
* Builds the result object type from a set of selected field strings.
|
|
96
|
+
*
|
|
97
|
+
* This is the core type that powers the inferred response shape. It:
|
|
98
|
+
* - Expands `'*'` to the full main bucket interface
|
|
99
|
+
* - Expands `'alias.*'` to all prefixed fields from the joined bucket
|
|
100
|
+
* - Maps plain and dotted fields to their resolved types
|
|
101
|
+
*
|
|
102
|
+
* @template TMain - The main bucket name.
|
|
103
|
+
* @template TJoinMap - Record mapping join aliases to bucket names.
|
|
104
|
+
* @template Fields - Union of selected field strings.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* type R = SelectResult<'storeline', { exchange: 'exchange' }, 'sold_by' | 'exchange.value'>;
|
|
109
|
+
* // { sold_by: string; 'exchange.value': number }
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export type SelectResult<TMain extends BucketName, TJoinMap extends Record<string, BucketName>, Fields extends string> = ('*' extends Fields ? BucketRegistry[TMain] : object) & ExpandAliasWildcards<TMain, TJoinMap, Fields> & {
|
|
113
|
+
[F in Fields as F extends '*' ? never : F extends `${string}.*` ? never : F]: ResolveField<TMain, TJoinMap, F>;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Expands alias wildcards (e.g. 'exchange.*') into their full prefixed field sets.
|
|
117
|
+
* Uses UnionToIntersection to merge multiple wildcard expansions.
|
|
118
|
+
*/
|
|
119
|
+
type ExpandAliasWildcards<TMain extends BucketName, TJoinMap extends Record<string, BucketName>, Fields extends string> = UnionToIntersection<Fields extends `${infer A}.*` ? ResolveField<TMain, TJoinMap, `${A}.*`> : never>;
|
|
120
|
+
/** Converts a union type to an intersection type. */
|
|
121
|
+
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
122
|
+
/**
|
|
123
|
+
* Extracts the inferred result type from a `BucketQueryBuilder` instance.
|
|
124
|
+
*
|
|
125
|
+
* Use this with `typeof` to get the response row shape without executing the query:
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* const query = bucket('exchange').select('id', 'name', 'value');
|
|
130
|
+
* type Row = InferBucketResult<typeof query>;
|
|
131
|
+
* // Row = { id: number; name: string; value: number; page_name: string; page_name_sub: string }
|
|
132
|
+
*
|
|
133
|
+
* const raw = await fetch(query.toUrl()).then(r => r.json());
|
|
134
|
+
* const response = new BucketResponse<Row>(raw);
|
|
135
|
+
* response.first()?.name; // ✅ autocomplete, typed as string
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
export type InferBucketResult<T> = T extends {
|
|
139
|
+
readonly __resultType: infer R;
|
|
140
|
+
} ? R : unknown;
|
|
141
|
+
export {};
|
|
142
|
+
//# sourceMappingURL=response-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-types.d.ts","sourceRoot":"","sources":["../src/response-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-level utilities for inferring the shape of bucket query responses.
|
|
3
|
+
*
|
|
4
|
+
* These types work in tandem with {@link BucketQueryBuilder} to provide
|
|
5
|
+
* compile-time type safety for API responses. As you chain `.select()`,
|
|
6
|
+
* `.join()`, and other methods, the builder accumulates a result type
|
|
7
|
+
* that precisely describes the shape of each row returned by the API.
|
|
8
|
+
*
|
|
9
|
+
* @module response-types
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=response-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-types.js","sourceRoot":"","sources":["../src/response-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
package/dist/types.d.ts
CHANGED
|
@@ -60,10 +60,48 @@ export interface BucketApiResponse<T = unknown> {
|
|
|
60
60
|
error?: string;
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
|
-
* Helper class to manipulate
|
|
63
|
+
* Helper class to manipulate and access bucket API response data.
|
|
64
|
+
*
|
|
65
|
+
* Can be instantiated directly with a generic type, or use the static
|
|
66
|
+
* {@link BucketResponse.from} factory to automatically infer the type
|
|
67
|
+
* from a query builder instance.
|
|
68
|
+
*
|
|
69
|
+
* @template T The expected shape of each result row.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* // Option 1: Manual type parameter
|
|
74
|
+
* const response = new BucketResponse<{ id: number; name: string }>(raw);
|
|
75
|
+
*
|
|
76
|
+
* // Option 2: Automatic inference via .from()
|
|
77
|
+
* const query = bucket('exchange').select('id', 'name');
|
|
78
|
+
* const response = BucketResponse.from(query, raw);
|
|
79
|
+
* response.first()?.name; // ✅ typed as string
|
|
80
|
+
* ```
|
|
64
81
|
*/
|
|
65
82
|
export declare class BucketResponse<T = unknown> {
|
|
66
83
|
private readonly raw;
|
|
84
|
+
/**
|
|
85
|
+
* Creates a typed `BucketResponse` by inferring the result type
|
|
86
|
+
* from a `BucketQueryBuilder` instance.
|
|
87
|
+
*
|
|
88
|
+
* This eliminates the need to manually specify `InferBucketResult<typeof query>`
|
|
89
|
+
* — the type flows automatically from the builder's accumulated generics.
|
|
90
|
+
*
|
|
91
|
+
* @param _query - The query builder instance (used only for type inference, not called at runtime).
|
|
92
|
+
* @param raw - The raw JSON response from the Wiki API.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* const query = bucket('exchange').select('name', 'value').where('name', 'Abyssal whip');
|
|
97
|
+
* const raw = await fetch(query.toUrl()).then(r => r.json());
|
|
98
|
+
* const response = BucketResponse.from(query, raw);
|
|
99
|
+
* response.first()?.value; // ✅ typed as number
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
static from<Q extends {
|
|
103
|
+
readonly __resultType: unknown;
|
|
104
|
+
}>(_query: Q, raw: BucketApiResponse<Q['__resultType']>): BucketResponse<Q['__resultType']>;
|
|
67
105
|
constructor(raw: BucketApiResponse<T>);
|
|
68
106
|
/**
|
|
69
107
|
* The Lua query string returned by the API.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,4BAA4B,CAAC;AAE3C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9C,eAAO,MAAM,cAAc;;;;CAI1B,CAAC;AAEF,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzE,MAAM,MAAM,eAAe,GACrB,CAAC,MAAM,EAAE,WAAW,CAAC,GACrB,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,GAC/B,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAC/B,CAAC,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AAChD,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,qBAAqB,GAAG;IAAE,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAEtG;;;GAGG;AACH,eAAO,MAAM,MAAM;IACf;;;OAGG;yBACkB,eAAe,EAAE,KAAG,qBAAqB;IAE9D;;;OAGG;wBACiB,eAAe,EAAE,KAAG,qBAAqB;IAE7D;;;OAGG;qBACc,eAAe,KAAG,qBAAqB;IAExD;;OAEG;gBACO,qBAAqB;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,4BAA4B,CAAC;AAE3C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9C,eAAO,MAAM,cAAc;;;;CAI1B,CAAC;AAEF,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzE,MAAM,MAAM,eAAe,GACrB,CAAC,MAAM,EAAE,WAAW,CAAC,GACrB,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,GAC/B,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAC/B,CAAC,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AAChD,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,qBAAqB,GAAG;IAAE,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAEtG;;;GAGG;AACH,eAAO,MAAM,MAAM;IACf;;;OAGG;yBACkB,eAAe,EAAE,KAAG,qBAAqB;IAE9D;;;OAGG;wBACiB,eAAe,EAAE,KAAG,qBAAqB;IAE7D;;;OAGG;qBACc,eAAe,KAAG,qBAAqB;IAExD;;OAEG;gBACO,qBAAqB;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAc,CAAC,CAAC,GAAG,OAAO;IA0BvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAzBhC;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;KAAE,EACpD,MAAM,EAAE,CAAC,EACT,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,GAC1C,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAIP,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEtD;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,CAAC,EAAE,CAKjB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED;;OAEG;IACH,KAAK,IAAI,CAAC,GAAG,SAAS;CAGzB"}
|
package/dist/types.js
CHANGED
|
@@ -33,10 +33,48 @@ export const Bucket = {
|
|
|
33
33
|
Null: () => ({ _type: 'NULL' }),
|
|
34
34
|
};
|
|
35
35
|
/**
|
|
36
|
-
* Helper class to manipulate
|
|
36
|
+
* Helper class to manipulate and access bucket API response data.
|
|
37
|
+
*
|
|
38
|
+
* Can be instantiated directly with a generic type, or use the static
|
|
39
|
+
* {@link BucketResponse.from} factory to automatically infer the type
|
|
40
|
+
* from a query builder instance.
|
|
41
|
+
*
|
|
42
|
+
* @template T The expected shape of each result row.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* // Option 1: Manual type parameter
|
|
47
|
+
* const response = new BucketResponse<{ id: number; name: string }>(raw);
|
|
48
|
+
*
|
|
49
|
+
* // Option 2: Automatic inference via .from()
|
|
50
|
+
* const query = bucket('exchange').select('id', 'name');
|
|
51
|
+
* const response = BucketResponse.from(query, raw);
|
|
52
|
+
* response.first()?.name; // ✅ typed as string
|
|
53
|
+
* ```
|
|
37
54
|
*/
|
|
38
55
|
export class BucketResponse {
|
|
39
56
|
raw;
|
|
57
|
+
/**
|
|
58
|
+
* Creates a typed `BucketResponse` by inferring the result type
|
|
59
|
+
* from a `BucketQueryBuilder` instance.
|
|
60
|
+
*
|
|
61
|
+
* This eliminates the need to manually specify `InferBucketResult<typeof query>`
|
|
62
|
+
* — the type flows automatically from the builder's accumulated generics.
|
|
63
|
+
*
|
|
64
|
+
* @param _query - The query builder instance (used only for type inference, not called at runtime).
|
|
65
|
+
* @param raw - The raw JSON response from the Wiki API.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const query = bucket('exchange').select('name', 'value').where('name', 'Abyssal whip');
|
|
70
|
+
* const raw = await fetch(query.toUrl()).then(r => r.json());
|
|
71
|
+
* const response = BucketResponse.from(query, raw);
|
|
72
|
+
* response.first()?.value; // ✅ typed as number
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
static from(_query, raw) {
|
|
76
|
+
return new BucketResponse(raw);
|
|
77
|
+
}
|
|
40
78
|
constructor(raw) {
|
|
41
79
|
this.raw = raw;
|
|
42
80
|
}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,4BAA4B,CAAC;AAM3C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,CAAC;CACZ,CAAC;AAyBF;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB;;;OAGG;IACH,GAAG,EAAE,CAAC,GAAG,UAA6B,EAAyB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAEhG;;;OAGG;IACH,EAAE,EAAE,CAAC,GAAG,UAA6B,EAAyB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAE9F;;;OAGG;IACH,GAAG,EAAE,CAAC,SAA0B,EAAyB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAEzF;;OAEG;IACH,IAAI,EAAE,GAA0B,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;CACzD,CAAC;AAWF
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,4BAA4B,CAAC;AAM3C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,CAAC;CACZ,CAAC;AAyBF;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB;;;OAGG;IACH,GAAG,EAAE,CAAC,GAAG,UAA6B,EAAyB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAEhG;;;OAGG;IACH,EAAE,EAAE,CAAC,GAAG,UAA6B,EAAyB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAE9F;;;OAGG;IACH,GAAG,EAAE,CAAC,SAA0B,EAAyB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAEzF;;OAEG;IACH,IAAI,EAAE,GAA0B,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;CACzD,CAAC;AAWF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,cAAc;IA0BM;IAzB7B;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,IAAI,CACP,MAAS,EACT,GAAyC;QAEzC,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,YAA6B,GAAyB;QAAzB,QAAG,GAAH,GAAG,CAAsB;IAAG,CAAC;IAE1D;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO;QACP,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;CACJ"}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -12,6 +12,7 @@ Generates valid Lua query strings that can be executed via the Wiki's `action=bu
|
|
|
12
12
|
## Features
|
|
13
13
|
|
|
14
14
|
- **Strict Typing** — TypeScript definitions generated from `Special:AllPages` ensure only valid bucket names and fields compile.
|
|
15
|
+
- **Inferred Response Types** — `.select()`, `.join()`, and `.where()` constrain fields to valid names and accumulate a result type that precisely describes each row.
|
|
15
16
|
- **Fluent API** — Chain `.select()`, `.join()`, `.where()`, `.orderBy()`, `.limit()`, `.offset()`.
|
|
16
17
|
- **Join Aliases** — Multi-bucket joins with alias support and dot-notation (`shop.price`).
|
|
17
18
|
- **Wildcard Expansion** — Client-side `*` and `alias.*` expansion to strict field lists.
|
|
@@ -26,18 +27,21 @@ npm install @dava96/osrs-wiki-bucket-builder
|
|
|
26
27
|
## Quick Start
|
|
27
28
|
|
|
28
29
|
```typescript
|
|
29
|
-
import { bucket } from '@dava96/osrs-wiki-bucket-builder';
|
|
30
|
+
import { bucket, BucketResponse } from '@dava96/osrs-wiki-bucket-builder';
|
|
31
|
+
import type { InferBucketResult } from '@dava96/osrs-wiki-bucket-builder';
|
|
30
32
|
|
|
31
33
|
const query = bucket('exchange')
|
|
32
34
|
.select('id', 'name', 'value')
|
|
33
|
-
.where('name', 'Abyssal whip')
|
|
34
|
-
.run();
|
|
35
|
+
.where('name', 'Abyssal whip');
|
|
35
36
|
|
|
36
|
-
//
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
// .toUrl() generates the full API URL, ready to fetch
|
|
38
|
+
const raw = await fetch(query.toUrl()).then(r => r.json());
|
|
39
|
+
|
|
40
|
+
// BucketResponse.from() infers the result type from the query
|
|
41
|
+
const response = BucketResponse.from(query, raw);
|
|
42
|
+
const whip = response.first();
|
|
43
|
+
console.log(whip?.name); // ✅ typed as string
|
|
44
|
+
console.log(whip?.value); // ✅ typed as number
|
|
41
45
|
```
|
|
42
46
|
|
|
43
47
|
[▶ Run this query](https://oldschool.runescape.wiki/api.php?action=bucket&query=bucket(%27exchange%27).select(%27id%27,%20%27name%27,%20%27value%27).where({%20%27name%27,%20%27Abyssal%20whip%27%20}).run())
|
|
@@ -421,11 +425,9 @@ import { bucket, BucketResponse } from '@dava96/osrs-wiki-bucket-builder';
|
|
|
421
425
|
const query = bucket('exchange')
|
|
422
426
|
.select('name', 'value')
|
|
423
427
|
.where('name', 'Abyssal whip')
|
|
424
|
-
.first()
|
|
425
|
-
.run();
|
|
428
|
+
.first();
|
|
426
429
|
|
|
427
|
-
const
|
|
428
|
-
const raw = await fetch(url).then(r => r.json());
|
|
430
|
+
const raw = await fetch(query.toUrl()).then(r => r.json());
|
|
429
431
|
const response = new BucketResponse(raw);
|
|
430
432
|
|
|
431
433
|
console.log(response.results); // Array of matching rows
|
|
@@ -434,6 +436,45 @@ console.log(response.query); // The Lua query echoed by the API
|
|
|
434
436
|
console.log(response.error); // Error message if the query failed
|
|
435
437
|
```
|
|
436
438
|
|
|
439
|
+
#### `BucketResponse.from()` — typed responses from queries
|
|
440
|
+
|
|
441
|
+
Use `BucketResponse.from(query, raw)` to automatically infer the result type from the query builder. No manual type parameter required:
|
|
442
|
+
|
|
443
|
+
```typescript
|
|
444
|
+
const query = bucket('exchange').select('name', 'value');
|
|
445
|
+
const raw = await fetch(query.toUrl()).then(r => r.json());
|
|
446
|
+
const response = BucketResponse.from(query, raw);
|
|
447
|
+
|
|
448
|
+
response.first()?.name; // ✅ typed as string
|
|
449
|
+
response.first()?.value; // ✅ typed as number
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### `InferBucketResult` — extract the result type
|
|
453
|
+
|
|
454
|
+
Use `InferBucketResult<typeof query>` to extract the inferred row type without executing the query. Useful for typing variables, function parameters, or API response handlers:
|
|
455
|
+
|
|
456
|
+
```typescript
|
|
457
|
+
import type { InferBucketResult } from '@dava96/osrs-wiki-bucket-builder';
|
|
458
|
+
|
|
459
|
+
const query = bucket('exchange').select('id', 'name', 'value');
|
|
460
|
+
type ExchangeRow = InferBucketResult<typeof query>;
|
|
461
|
+
// ExchangeRow = { id: number; name: string; value: number; page_name: string; page_name_sub: string }
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
### `.toUrl()` — generate the full API URL
|
|
465
|
+
|
|
466
|
+
Generates the complete Wiki API URL with all query parameters, ready to pass to `fetch()`:
|
|
467
|
+
|
|
468
|
+
```typescript
|
|
469
|
+
const url = bucket('exchange')
|
|
470
|
+
.select('name', 'value')
|
|
471
|
+
.where('value', '>', 100000)
|
|
472
|
+
.limit(10)
|
|
473
|
+
.toUrl();
|
|
474
|
+
|
|
475
|
+
const data = await fetch(url).then(r => r.json());
|
|
476
|
+
```
|
|
477
|
+
|
|
437
478
|
---
|
|
438
479
|
|
|
439
480
|
## Full Example
|
|
@@ -487,6 +528,7 @@ const query = bucket('infobox_item')
|
|
|
487
528
|
| `.clone()` | Deep copies the builder |
|
|
488
529
|
| `.run(options?)` | Returns the Lua query string (URI-encoded by default) |
|
|
489
530
|
| `.printSQL()` | Returns the raw Lua query string |
|
|
531
|
+
| `.toUrl()` | Generates the full Wiki API URL, ready to `fetch()` |
|
|
490
532
|
|
|
491
533
|
### Bucket Helpers
|
|
492
534
|
|
|
@@ -505,6 +547,9 @@ const query = bucket('infobox_item')
|
|
|
505
547
|
| `BucketRegistry` | Maps bucket names to their field interfaces |
|
|
506
548
|
| `BUCKET_FIELDS` | Runtime map of field names per bucket |
|
|
507
549
|
| `BucketResponse<T>` | Response wrapper class |
|
|
550
|
+
| `BucketResponse.from()` | Creates a typed response from a query builder |
|
|
551
|
+
| `InferBucketResult<T>` | Extracts the inferred row type from a query |
|
|
552
|
+
| `BucketMetaFields` | The `page_name` and `page_name_sub` fields present on every row |
|
|
508
553
|
| `Operator` | Valid comparison operators |
|
|
509
554
|
| `ScalarValue` | `string \| number \| boolean` |
|
|
510
555
|
|