ropegeo-common 1.1.6 → 1.2.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.
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/types/api/getRopewikiRegionImages/regionImagesCursor.d.ts +14 -0
- package/dist/types/api/getRopewikiRegionImages/regionImagesCursor.d.ts.map +1 -0
- package/dist/types/api/getRopewikiRegionImages/regionImagesCursor.js +41 -0
- package/dist/types/api/getRopewikiRegionImages/ropewikiRegionImageView.d.ts +25 -0
- package/dist/types/api/getRopewikiRegionImages/ropewikiRegionImageView.d.ts.map +1 -0
- package/dist/types/api/getRopewikiRegionImages/ropewikiRegionImageView.js +17 -0
- package/dist/types/api/getRopewikiRegionImages/ropewikiRegionImagesParams.d.ts +22 -0
- package/dist/types/api/getRopewikiRegionImages/ropewikiRegionImagesParams.d.ts.map +1 -0
- package/dist/types/api/getRopewikiRegionImages/ropewikiRegionImagesParams.js +57 -0
- package/dist/types/api/getRopewikiRegionImages/ropewikiRegionImagesResult.d.ts +11 -0
- package/dist/types/api/getRopewikiRegionImages/ropewikiRegionImagesResult.d.ts.map +1 -0
- package/dist/types/api/getRopewikiRegionImages/ropewikiRegionImagesResult.js +13 -0
- package/dist/types/api/getRopewikiRegionPreviews/regionPreviewsCursor.d.ts +14 -0
- package/dist/types/api/getRopewikiRegionPreviews/regionPreviewsCursor.d.ts.map +1 -0
- package/dist/types/api/getRopewikiRegionPreviews/regionPreviewsCursor.js +41 -0
- package/dist/types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsParams.d.ts +22 -0
- package/dist/types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsParams.d.ts.map +1 -0
- package/dist/types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsParams.js +57 -0
- package/dist/types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsResult.d.ts +12 -0
- package/dist/types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsResult.d.ts.map +1 -0
- package/dist/types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsResult.js +13 -0
- package/dist/types/api/getRopewikiRegionView/ropewikiRegionView.d.ts +43 -0
- package/dist/types/api/getRopewikiRegionView/ropewikiRegionView.d.ts.map +1 -0
- package/dist/types/api/getRopewikiRegionView/ropewikiRegionView.js +25 -0
- package/dist/types/api/getRoutes/routesParams.d.ts +21 -0
- package/dist/types/api/getRoutes/routesParams.d.ts.map +1 -0
- package/dist/types/api/getRoutes/routesParams.js +52 -0
- package/dist/types/api/search/searchParams.d.ts +2 -2
- package/dist/types/api/search/searchParams.d.ts.map +1 -1
- package/dist/types/api/search/searchParams.js +11 -37
- package/dist/types/api/search/searchResults.d.ts +2 -2
- package/dist/types/api/search/searchResults.d.ts.map +1 -1
- package/dist/types/api/search/searchResults.js +2 -2
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { PermitStatus } from './types/permitStatus';
|
|
|
4
4
|
export { GetRopewikiPagePreviewRow, PagePreview } from './types/api/getRoutePreview/pagePreview';
|
|
5
5
|
export { Route, RouteGeoJsonFeature, RouteType } from './types/route';
|
|
6
6
|
export { RoutesGeojson } from './types/api/getRoutes/routeGeojson';
|
|
7
|
+
export { RoutesParams } from './types/api/getRoutes/routesParams';
|
|
7
8
|
export type { RopewikiImageView } from './types/api/getRopewikiPageView/ropewikiImageView';
|
|
8
9
|
export type { RopewikiBetaSectionView } from './types/api/getRopewikiPageView/ropewikiBetaSectionView';
|
|
9
10
|
export type { RopewikiPageView } from './types/api/getRopewikiPageView/ropewikiPageView';
|
|
@@ -13,4 +14,14 @@ export type { SearchCursorType } from './types/api/search/searchCursor';
|
|
|
13
14
|
export { SearchParams } from './types/api/search/searchParams';
|
|
14
15
|
export type { SearchOrder } from './types/api/search/searchParams';
|
|
15
16
|
export { SearchResults } from './types/api/search/searchResults';
|
|
17
|
+
export { RopewikiRegionView } from './types/api/getRopewikiRegionView/ropewikiRegionView';
|
|
18
|
+
export type { RopewikiRegionViewRow } from './types/api/getRopewikiRegionView/ropewikiRegionView';
|
|
19
|
+
export { RegionPreviewsCursor } from './types/api/getRopewikiRegionPreviews/regionPreviewsCursor';
|
|
20
|
+
export { RopewikiRegionPreviewsParams } from './types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsParams';
|
|
21
|
+
export { RopewikiRegionPreviewsResult } from './types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsResult';
|
|
22
|
+
export { RegionImagesCursor } from './types/api/getRopewikiRegionImages/regionImagesCursor';
|
|
23
|
+
export { RopewikiRegionImageView } from './types/api/getRopewikiRegionImages/ropewikiRegionImageView';
|
|
24
|
+
export type { RopewikiRegionImageViewRow } from './types/api/getRopewikiRegionImages/ropewikiRegionImageView';
|
|
25
|
+
export { RopewikiRegionImagesParams } from './types/api/getRopewikiRegionImages/ropewikiRegionImagesParams';
|
|
26
|
+
export { RopewikiRegionImagesResult } from './types/api/getRopewikiRegionImages/ropewikiRegionImagesResult';
|
|
16
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACjG,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AAC3F,YAAY,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,YAAY,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACjG,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AAC3F,YAAY,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,YAAY,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC1F,YAAY,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;AAClG,OAAO,EAAE,4BAA4B,EAAE,MAAM,oEAAoE,CAAC;AAClH,OAAO,EAAE,4BAA4B,EAAE,MAAM,oEAAoE,CAAC;AAClH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,6DAA6D,CAAC;AACtG,YAAY,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AAC9G,OAAO,EAAE,0BAA0B,EAAE,MAAM,gEAAgE,CAAC;AAC5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,gEAAgE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SearchResults = exports.SearchParams = exports.SearchCursor = exports.RegionPreview = exports.RoutesGeojson = exports.RouteType = exports.Route = exports.PagePreview = exports.PermitStatus = exports.DifficultyWater = exports.DifficultyTime = exports.DifficultyTechnical = exports.DifficultyRisk = exports.Difficulty = exports.PageDataSource = void 0;
|
|
3
|
+
exports.RopewikiRegionImagesResult = exports.RopewikiRegionImagesParams = exports.RopewikiRegionImageView = exports.RegionImagesCursor = exports.RopewikiRegionPreviewsResult = exports.RopewikiRegionPreviewsParams = exports.RegionPreviewsCursor = exports.RopewikiRegionView = exports.SearchResults = exports.SearchParams = exports.SearchCursor = exports.RegionPreview = exports.RoutesParams = exports.RoutesGeojson = exports.RouteType = exports.Route = exports.PagePreview = exports.PermitStatus = exports.DifficultyWater = exports.DifficultyTime = exports.DifficultyTechnical = exports.DifficultyRisk = exports.Difficulty = exports.PageDataSource = void 0;
|
|
4
4
|
var pageDataSource_1 = require("./types/pageDataSource");
|
|
5
5
|
Object.defineProperty(exports, "PageDataSource", { enumerable: true, get: function () { return pageDataSource_1.PageDataSource; } });
|
|
6
6
|
var difficulty_1 = require("./types/difficulty");
|
|
@@ -18,6 +18,8 @@ Object.defineProperty(exports, "Route", { enumerable: true, get: function () { r
|
|
|
18
18
|
Object.defineProperty(exports, "RouteType", { enumerable: true, get: function () { return route_1.RouteType; } });
|
|
19
19
|
var routeGeojson_1 = require("./types/api/getRoutes/routeGeojson");
|
|
20
20
|
Object.defineProperty(exports, "RoutesGeojson", { enumerable: true, get: function () { return routeGeojson_1.RoutesGeojson; } });
|
|
21
|
+
var routesParams_1 = require("./types/api/getRoutes/routesParams");
|
|
22
|
+
Object.defineProperty(exports, "RoutesParams", { enumerable: true, get: function () { return routesParams_1.RoutesParams; } });
|
|
21
23
|
var regionPreview_1 = require("./types/api/search/regionPreview");
|
|
22
24
|
Object.defineProperty(exports, "RegionPreview", { enumerable: true, get: function () { return regionPreview_1.RegionPreview; } });
|
|
23
25
|
var searchCursor_1 = require("./types/api/search/searchCursor");
|
|
@@ -26,3 +28,19 @@ var searchParams_1 = require("./types/api/search/searchParams");
|
|
|
26
28
|
Object.defineProperty(exports, "SearchParams", { enumerable: true, get: function () { return searchParams_1.SearchParams; } });
|
|
27
29
|
var searchResults_1 = require("./types/api/search/searchResults");
|
|
28
30
|
Object.defineProperty(exports, "SearchResults", { enumerable: true, get: function () { return searchResults_1.SearchResults; } });
|
|
31
|
+
var ropewikiRegionView_1 = require("./types/api/getRopewikiRegionView/ropewikiRegionView");
|
|
32
|
+
Object.defineProperty(exports, "RopewikiRegionView", { enumerable: true, get: function () { return ropewikiRegionView_1.RopewikiRegionView; } });
|
|
33
|
+
var regionPreviewsCursor_1 = require("./types/api/getRopewikiRegionPreviews/regionPreviewsCursor");
|
|
34
|
+
Object.defineProperty(exports, "RegionPreviewsCursor", { enumerable: true, get: function () { return regionPreviewsCursor_1.RegionPreviewsCursor; } });
|
|
35
|
+
var ropewikiRegionPreviewsParams_1 = require("./types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsParams");
|
|
36
|
+
Object.defineProperty(exports, "RopewikiRegionPreviewsParams", { enumerable: true, get: function () { return ropewikiRegionPreviewsParams_1.RopewikiRegionPreviewsParams; } });
|
|
37
|
+
var ropewikiRegionPreviewsResult_1 = require("./types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsResult");
|
|
38
|
+
Object.defineProperty(exports, "RopewikiRegionPreviewsResult", { enumerable: true, get: function () { return ropewikiRegionPreviewsResult_1.RopewikiRegionPreviewsResult; } });
|
|
39
|
+
var regionImagesCursor_1 = require("./types/api/getRopewikiRegionImages/regionImagesCursor");
|
|
40
|
+
Object.defineProperty(exports, "RegionImagesCursor", { enumerable: true, get: function () { return regionImagesCursor_1.RegionImagesCursor; } });
|
|
41
|
+
var ropewikiRegionImageView_1 = require("./types/api/getRopewikiRegionImages/ropewikiRegionImageView");
|
|
42
|
+
Object.defineProperty(exports, "RopewikiRegionImageView", { enumerable: true, get: function () { return ropewikiRegionImageView_1.RopewikiRegionImageView; } });
|
|
43
|
+
var ropewikiRegionImagesParams_1 = require("./types/api/getRopewikiRegionImages/ropewikiRegionImagesParams");
|
|
44
|
+
Object.defineProperty(exports, "RopewikiRegionImagesParams", { enumerable: true, get: function () { return ropewikiRegionImagesParams_1.RopewikiRegionImagesParams; } });
|
|
45
|
+
var ropewikiRegionImagesResult_1 = require("./types/api/getRopewikiRegionImages/ropewikiRegionImagesResult");
|
|
46
|
+
Object.defineProperty(exports, "RopewikiRegionImagesResult", { enumerable: true, get: function () { return ropewikiRegionImagesResult_1.RopewikiRegionImagesResult; } });
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stub cursor for region images pagination. Encodes to base64url for the nextCursor string.
|
|
3
|
+
* Cursor logic will be implemented in Webscraper.
|
|
4
|
+
*/
|
|
5
|
+
export declare class RegionImagesCursor {
|
|
6
|
+
readonly value: string;
|
|
7
|
+
constructor(value: string);
|
|
8
|
+
encodeBase64(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Decodes a base64url-encoded cursor string. Throws if the string is invalid.
|
|
11
|
+
*/
|
|
12
|
+
static decodeBase64(encoded: string): RegionImagesCursor;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=regionImagesCursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regionImagesCursor.d.ts","sourceRoot":"","sources":["../../../../src/types/api/getRopewikiRegionImages/regionImagesCursor.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,kBAAkB;aACC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IAEzC,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB;CAkB3D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RegionImagesCursor = void 0;
|
|
5
|
+
const ENCODING = 'utf8';
|
|
6
|
+
const BASE64URL = 'base64url';
|
|
7
|
+
/**
|
|
8
|
+
* Stub cursor for region images pagination. Encodes to base64url for the nextCursor string.
|
|
9
|
+
* Cursor logic will be implemented in Webscraper.
|
|
10
|
+
*/
|
|
11
|
+
class RegionImagesCursor {
|
|
12
|
+
constructor(value) {
|
|
13
|
+
this.value = value;
|
|
14
|
+
}
|
|
15
|
+
encodeBase64() {
|
|
16
|
+
return Buffer.from(JSON.stringify({ value: this.value }), ENCODING).toString(BASE64URL);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Decodes a base64url-encoded cursor string. Throws if the string is invalid.
|
|
20
|
+
*/
|
|
21
|
+
static decodeBase64(encoded) {
|
|
22
|
+
if (typeof encoded !== 'string' || encoded === '') {
|
|
23
|
+
throw new Error('Region images cursor must be a non-empty string');
|
|
24
|
+
}
|
|
25
|
+
let decoded;
|
|
26
|
+
try {
|
|
27
|
+
const json = Buffer.from(encoded, BASE64URL).toString(ENCODING);
|
|
28
|
+
decoded = JSON.parse(json);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
32
|
+
throw new Error(`Invalid region images cursor encoding: ${message}`);
|
|
33
|
+
}
|
|
34
|
+
if (decoded == null || typeof decoded !== 'object' || !('value' in decoded)) {
|
|
35
|
+
throw new Error('Region images cursor must be an object with value');
|
|
36
|
+
}
|
|
37
|
+
const obj = decoded;
|
|
38
|
+
return new RegionImagesCursor(String(obj.value ?? ''));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.RegionImagesCursor = RegionImagesCursor;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row shape from the database (or join) for building a RopewikiRegionImageView.
|
|
3
|
+
* Column names match RopewikiImage; pageName typically comes from a join with RopewikiPage.
|
|
4
|
+
*/
|
|
5
|
+
export interface RopewikiRegionImageViewRow {
|
|
6
|
+
id: string;
|
|
7
|
+
ropewikiPage: string;
|
|
8
|
+
pageName: string;
|
|
9
|
+
fileUrl: string;
|
|
10
|
+
linkUrl: string;
|
|
11
|
+
caption?: string | null;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Image view item for getRopewikiRegionImages (GET /ropewiki/region/{id}/images).
|
|
15
|
+
*/
|
|
16
|
+
export declare class RopewikiRegionImageView {
|
|
17
|
+
id: string;
|
|
18
|
+
pageId: string;
|
|
19
|
+
pageName: string;
|
|
20
|
+
url: string;
|
|
21
|
+
externalLink: string;
|
|
22
|
+
caption: string | undefined;
|
|
23
|
+
constructor(row: RopewikiRegionImageViewRow);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ropewikiRegionImageView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ropewikiRegionImageView.d.ts","sourceRoot":"","sources":["../../../../src/types/api/getRopewikiRegionImages/ropewikiRegionImageView.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEhB,GAAG,EAAE,0BAA0B;CAQ9C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RopewikiRegionImageView = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Image view item for getRopewikiRegionImages (GET /ropewiki/region/{id}/images).
|
|
6
|
+
*/
|
|
7
|
+
class RopewikiRegionImageView {
|
|
8
|
+
constructor(row) {
|
|
9
|
+
this.id = row.id;
|
|
10
|
+
this.pageId = row.ropewikiPage;
|
|
11
|
+
this.pageName = row.pageName;
|
|
12
|
+
this.url = row.fileUrl;
|
|
13
|
+
this.externalLink = row.linkUrl;
|
|
14
|
+
this.caption = row.caption ?? undefined;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.RopewikiRegionImageView = RopewikiRegionImageView;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RegionImagesCursor } from './regionImagesCursor';
|
|
2
|
+
/**
|
|
3
|
+
* Validated params for getRopewikiRegionImages (GET /ropewiki/region/{id}/images).
|
|
4
|
+
* Cursor is stored decoded (RegionImagesCursor | null).
|
|
5
|
+
* The constructor accepts an encoded cursor string and decodes it.
|
|
6
|
+
*/
|
|
7
|
+
export declare class RopewikiRegionImagesParams {
|
|
8
|
+
readonly limit: number;
|
|
9
|
+
readonly cursor: RegionImagesCursor | null;
|
|
10
|
+
constructor(limit: number, cursorEncoded: string | null);
|
|
11
|
+
/**
|
|
12
|
+
* Returns an object suitable for use as query string parameters.
|
|
13
|
+
* Cursor is encoded for the query string.
|
|
14
|
+
*/
|
|
15
|
+
toQueryStringParams(): Record<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Parses query string parameters and returns validated params.
|
|
18
|
+
* Validation is performed by the constructor.
|
|
19
|
+
*/
|
|
20
|
+
static fromQueryStringParams(q: Record<string, string | undefined>): RopewikiRegionImagesParams;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ropewikiRegionImagesParams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ropewikiRegionImagesParams.d.ts","sourceRoot":"","sources":["../../../../src/types/api/getRopewikiRegionImages/ropewikiRegionImagesParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D;;;;GAIG;AACH,qBAAa,0BAA0B;IACnC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;gBAEtC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IA0BvD;;;OAGG;IACH,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAU7C;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CACxB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,0BAA0B;CAOhC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RopewikiRegionImagesParams = void 0;
|
|
4
|
+
const regionImagesCursor_1 = require("./regionImagesCursor");
|
|
5
|
+
const DEFAULT_LIMIT = 20;
|
|
6
|
+
/**
|
|
7
|
+
* Validated params for getRopewikiRegionImages (GET /ropewiki/region/{id}/images).
|
|
8
|
+
* Cursor is stored decoded (RegionImagesCursor | null).
|
|
9
|
+
* The constructor accepts an encoded cursor string and decodes it.
|
|
10
|
+
*/
|
|
11
|
+
class RopewikiRegionImagesParams {
|
|
12
|
+
constructor(limit, cursorEncoded) {
|
|
13
|
+
const limitNum = Number(limit);
|
|
14
|
+
if (Number.isNaN(limitNum) ||
|
|
15
|
+
!Number.isInteger(limitNum) ||
|
|
16
|
+
limitNum < 1) {
|
|
17
|
+
throw new Error('Query parameter "limit" must be a whole number greater than 0');
|
|
18
|
+
}
|
|
19
|
+
this.limit = limit;
|
|
20
|
+
if (cursorEncoded === null || cursorEncoded === '') {
|
|
21
|
+
this.cursor = null;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
try {
|
|
25
|
+
this.cursor = regionImagesCursor_1.RegionImagesCursor.decodeBase64(cursorEncoded);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error('Invalid or malformed query parameter: cursor');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns an object suitable for use as query string parameters.
|
|
34
|
+
* Cursor is encoded for the query string.
|
|
35
|
+
*/
|
|
36
|
+
toQueryStringParams() {
|
|
37
|
+
const params = {
|
|
38
|
+
limit: String(this.limit),
|
|
39
|
+
};
|
|
40
|
+
if (this.cursor !== null) {
|
|
41
|
+
params.cursor = this.cursor.encodeBase64();
|
|
42
|
+
}
|
|
43
|
+
return params;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Parses query string parameters and returns validated params.
|
|
47
|
+
* Validation is performed by the constructor.
|
|
48
|
+
*/
|
|
49
|
+
static fromQueryStringParams(q) {
|
|
50
|
+
const limitParam = q.limit ?? q.Limit ?? '';
|
|
51
|
+
const limit = limitParam === '' ? DEFAULT_LIMIT : Number(limitParam);
|
|
52
|
+
const cursorRaw = (q.cursor ?? q.Cursor ?? '').trim();
|
|
53
|
+
const cursorEncoded = cursorRaw === '' ? null : cursorRaw;
|
|
54
|
+
return new RopewikiRegionImagesParams(limit, cursorEncoded);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.RopewikiRegionImagesParams = RopewikiRegionImagesParams;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RopewikiRegionImageView } from './ropewikiRegionImageView';
|
|
2
|
+
import { RegionImagesCursor } from './regionImagesCursor';
|
|
3
|
+
/**
|
|
4
|
+
* Result of getRopewikiRegionImages (GET /ropewiki/region/{id}/images).
|
|
5
|
+
*/
|
|
6
|
+
export declare class RopewikiRegionImagesResult {
|
|
7
|
+
results: RopewikiRegionImageView[];
|
|
8
|
+
nextCursor: string | null;
|
|
9
|
+
constructor(results: RopewikiRegionImageView[], nextCursor: RegionImagesCursor | null);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ropewikiRegionImagesResult.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ropewikiRegionImagesResult.d.ts","sourceRoot":"","sources":["../../../../src/types/api/getRopewikiRegionImages/ropewikiRegionImagesResult.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,qBAAa,0BAA0B;IACnC,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGtB,OAAO,EAAE,uBAAuB,EAAE,EAClC,UAAU,EAAE,kBAAkB,GAAG,IAAI;CAK5C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RopewikiRegionImagesResult = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Result of getRopewikiRegionImages (GET /ropewiki/region/{id}/images).
|
|
6
|
+
*/
|
|
7
|
+
class RopewikiRegionImagesResult {
|
|
8
|
+
constructor(results, nextCursor) {
|
|
9
|
+
this.results = results;
|
|
10
|
+
this.nextCursor = nextCursor !== null ? nextCursor.encodeBase64() : null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.RopewikiRegionImagesResult = RopewikiRegionImagesResult;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stub cursor for region previews pagination. Encodes to base64url for the nextCursor string.
|
|
3
|
+
* Cursor logic will be implemented in Webscraper.
|
|
4
|
+
*/
|
|
5
|
+
export declare class RegionPreviewsCursor {
|
|
6
|
+
readonly value: string;
|
|
7
|
+
constructor(value: string);
|
|
8
|
+
encodeBase64(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Decodes a base64url-encoded cursor string. Throws if the string is invalid.
|
|
11
|
+
*/
|
|
12
|
+
static decodeBase64(encoded: string): RegionPreviewsCursor;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=regionPreviewsCursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regionPreviewsCursor.d.ts","sourceRoot":"","sources":["../../../../src/types/api/getRopewikiRegionPreviews/regionPreviewsCursor.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,oBAAoB;aACD,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IAEzC,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB;CAkB7D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RegionPreviewsCursor = void 0;
|
|
5
|
+
const ENCODING = 'utf8';
|
|
6
|
+
const BASE64URL = 'base64url';
|
|
7
|
+
/**
|
|
8
|
+
* Stub cursor for region previews pagination. Encodes to base64url for the nextCursor string.
|
|
9
|
+
* Cursor logic will be implemented in Webscraper.
|
|
10
|
+
*/
|
|
11
|
+
class RegionPreviewsCursor {
|
|
12
|
+
constructor(value) {
|
|
13
|
+
this.value = value;
|
|
14
|
+
}
|
|
15
|
+
encodeBase64() {
|
|
16
|
+
return Buffer.from(JSON.stringify({ value: this.value }), ENCODING).toString(BASE64URL);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Decodes a base64url-encoded cursor string. Throws if the string is invalid.
|
|
20
|
+
*/
|
|
21
|
+
static decodeBase64(encoded) {
|
|
22
|
+
if (typeof encoded !== 'string' || encoded === '') {
|
|
23
|
+
throw new Error('Region previews cursor must be a non-empty string');
|
|
24
|
+
}
|
|
25
|
+
let decoded;
|
|
26
|
+
try {
|
|
27
|
+
const json = Buffer.from(encoded, BASE64URL).toString(ENCODING);
|
|
28
|
+
decoded = JSON.parse(json);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
32
|
+
throw new Error(`Invalid region previews cursor encoding: ${message}`);
|
|
33
|
+
}
|
|
34
|
+
if (decoded == null || typeof decoded !== 'object' || !('value' in decoded)) {
|
|
35
|
+
throw new Error('Region previews cursor must be an object with value');
|
|
36
|
+
}
|
|
37
|
+
const obj = decoded;
|
|
38
|
+
return new RegionPreviewsCursor(String(obj.value ?? ''));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.RegionPreviewsCursor = RegionPreviewsCursor;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RegionPreviewsCursor } from './regionPreviewsCursor';
|
|
2
|
+
/**
|
|
3
|
+
* Validated params for getRopewikiRegionPreviews (GET /ropewiki/region/{id}/previews).
|
|
4
|
+
* Cursor is stored decoded (RegionPreviewsCursor | null).
|
|
5
|
+
* The constructor accepts an encoded cursor string and decodes it.
|
|
6
|
+
*/
|
|
7
|
+
export declare class RopewikiRegionPreviewsParams {
|
|
8
|
+
readonly limit: number;
|
|
9
|
+
readonly cursor: RegionPreviewsCursor | null;
|
|
10
|
+
constructor(limit: number, cursorEncoded: string | null);
|
|
11
|
+
/**
|
|
12
|
+
* Returns an object suitable for use as query string parameters.
|
|
13
|
+
* Cursor is encoded for the query string.
|
|
14
|
+
*/
|
|
15
|
+
toQueryStringParams(): Record<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Parses query string parameters and returns validated params.
|
|
18
|
+
* Validation is performed by the constructor.
|
|
19
|
+
*/
|
|
20
|
+
static fromQueryStringParams(q: Record<string, string | undefined>): RopewikiRegionPreviewsParams;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ropewikiRegionPreviewsParams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ropewikiRegionPreviewsParams.d.ts","sourceRoot":"","sources":["../../../../src/types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI9D;;;;GAIG;AACH,qBAAa,4BAA4B;IACrC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;gBAExC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IA0BvD;;;OAGG;IACH,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAU7C;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CACxB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,4BAA4B;CAOlC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RopewikiRegionPreviewsParams = void 0;
|
|
4
|
+
const regionPreviewsCursor_1 = require("./regionPreviewsCursor");
|
|
5
|
+
const DEFAULT_LIMIT = 20;
|
|
6
|
+
/**
|
|
7
|
+
* Validated params for getRopewikiRegionPreviews (GET /ropewiki/region/{id}/previews).
|
|
8
|
+
* Cursor is stored decoded (RegionPreviewsCursor | null).
|
|
9
|
+
* The constructor accepts an encoded cursor string and decodes it.
|
|
10
|
+
*/
|
|
11
|
+
class RopewikiRegionPreviewsParams {
|
|
12
|
+
constructor(limit, cursorEncoded) {
|
|
13
|
+
const limitNum = Number(limit);
|
|
14
|
+
if (Number.isNaN(limitNum) ||
|
|
15
|
+
!Number.isInteger(limitNum) ||
|
|
16
|
+
limitNum < 1) {
|
|
17
|
+
throw new Error('Query parameter "limit" must be a whole number greater than 0');
|
|
18
|
+
}
|
|
19
|
+
this.limit = limit;
|
|
20
|
+
if (cursorEncoded === null || cursorEncoded === '') {
|
|
21
|
+
this.cursor = null;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
try {
|
|
25
|
+
this.cursor = regionPreviewsCursor_1.RegionPreviewsCursor.decodeBase64(cursorEncoded);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error('Invalid or malformed query parameter: cursor');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns an object suitable for use as query string parameters.
|
|
34
|
+
* Cursor is encoded for the query string.
|
|
35
|
+
*/
|
|
36
|
+
toQueryStringParams() {
|
|
37
|
+
const params = {
|
|
38
|
+
limit: String(this.limit),
|
|
39
|
+
};
|
|
40
|
+
if (this.cursor !== null) {
|
|
41
|
+
params.cursor = this.cursor.encodeBase64();
|
|
42
|
+
}
|
|
43
|
+
return params;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Parses query string parameters and returns validated params.
|
|
47
|
+
* Validation is performed by the constructor.
|
|
48
|
+
*/
|
|
49
|
+
static fromQueryStringParams(q) {
|
|
50
|
+
const limitParam = q.limit ?? q.Limit ?? '';
|
|
51
|
+
const limit = limitParam === '' ? DEFAULT_LIMIT : Number(limitParam);
|
|
52
|
+
const cursorRaw = (q.cursor ?? q.Cursor ?? '').trim();
|
|
53
|
+
const cursorEncoded = cursorRaw === '' ? null : cursorRaw;
|
|
54
|
+
return new RopewikiRegionPreviewsParams(limit, cursorEncoded);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.RopewikiRegionPreviewsParams = RopewikiRegionPreviewsParams;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PagePreview } from '../getRoutePreview/pagePreview';
|
|
2
|
+
import { RegionPreview } from '../search/regionPreview';
|
|
3
|
+
import { RegionPreviewsCursor } from './regionPreviewsCursor';
|
|
4
|
+
/**
|
|
5
|
+
* Result of getRopewikiRegionPreviews (GET /ropewiki/region/{id}/previews).
|
|
6
|
+
*/
|
|
7
|
+
export declare class RopewikiRegionPreviewsResult {
|
|
8
|
+
results: (PagePreview | RegionPreview)[];
|
|
9
|
+
nextCursor: string | null;
|
|
10
|
+
constructor(results: (PagePreview | RegionPreview)[], nextCursor: RegionPreviewsCursor | null);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ropewikiRegionPreviewsResult.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ropewikiRegionPreviewsResult.d.ts","sourceRoot":"","sources":["../../../../src/types/api/getRopewikiRegionPreviews/ropewikiRegionPreviewsResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;GAEG;AACH,qBAAa,4BAA4B;IACrC,OAAO,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGtB,OAAO,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,EACxC,UAAU,EAAE,oBAAoB,GAAG,IAAI;CAK9C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RopewikiRegionPreviewsResult = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Result of getRopewikiRegionPreviews (GET /ropewiki/region/{id}/previews).
|
|
6
|
+
*/
|
|
7
|
+
class RopewikiRegionPreviewsResult {
|
|
8
|
+
constructor(results, nextCursor) {
|
|
9
|
+
this.results = results;
|
|
10
|
+
this.nextCursor = nextCursor !== null ? nextCursor.encodeBase64() : null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.RopewikiRegionPreviewsResult = RopewikiRegionPreviewsResult;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row shape from the database (or join) for building a RopewikiRegionView.
|
|
3
|
+
* Column names match the RopewikiRegion schema; parentRegionId/parentRegionName
|
|
4
|
+
* come from a join when loading the parent region.
|
|
5
|
+
*/
|
|
6
|
+
export interface RopewikiRegionViewRow {
|
|
7
|
+
name: string;
|
|
8
|
+
parentRegionId?: string | null;
|
|
9
|
+
parentRegionName?: string | null;
|
|
10
|
+
rawPageCount?: number | null;
|
|
11
|
+
truePageCount?: number | null;
|
|
12
|
+
trueRegionCount?: number | null;
|
|
13
|
+
truePageCountWithDescendents?: number | null;
|
|
14
|
+
overview?: string | null;
|
|
15
|
+
bestMonths?: string[] | null;
|
|
16
|
+
isMajorRegion?: boolean | null;
|
|
17
|
+
latestRevisionDate: Date;
|
|
18
|
+
url: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Region view for getRopewikiRegionView (GET /ropewiki/region/{id}).
|
|
22
|
+
* Contains all RopewikiRegion info for the region except the region's id.
|
|
23
|
+
*/
|
|
24
|
+
export declare class RopewikiRegionView {
|
|
25
|
+
name: string;
|
|
26
|
+
parentRegion: {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
} | null;
|
|
30
|
+
/** Actual number of pages in this region (computed). Default 0. */
|
|
31
|
+
regionCount: number;
|
|
32
|
+
/** Pages in this region only (computed). Default 0. */
|
|
33
|
+
topLevelPageCount: number;
|
|
34
|
+
/** Raw page count from getRegions API (rawPageCount). Default 0. */
|
|
35
|
+
pageCount: number;
|
|
36
|
+
overview: string | null;
|
|
37
|
+
bestMonths: string[];
|
|
38
|
+
isMajorRegion: boolean;
|
|
39
|
+
latestRevisionDate: Date;
|
|
40
|
+
externalLink: string;
|
|
41
|
+
constructor(row: RopewikiRegionViewRow);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ropewikiRegionView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ropewikiRegionView.d.ts","sourceRoot":"","sources":["../../../../src/types/api/getRopewikiRegionView/ropewikiRegionView.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,4BAA4B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,IAAI,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;gBAET,GAAG,EAAE,qBAAqB;CAezC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RopewikiRegionView = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Region view for getRopewikiRegionView (GET /ropewiki/region/{id}).
|
|
6
|
+
* Contains all RopewikiRegion info for the region except the region's id.
|
|
7
|
+
*/
|
|
8
|
+
class RopewikiRegionView {
|
|
9
|
+
constructor(row) {
|
|
10
|
+
this.name = row.name;
|
|
11
|
+
this.parentRegion =
|
|
12
|
+
row.parentRegionId != null && row.parentRegionName != null
|
|
13
|
+
? { id: row.parentRegionId, name: row.parentRegionName }
|
|
14
|
+
: null;
|
|
15
|
+
this.regionCount = row.trueRegionCount ?? 0;
|
|
16
|
+
this.topLevelPageCount = row.truePageCount ?? 0;
|
|
17
|
+
this.pageCount = row.rawPageCount ?? 0;
|
|
18
|
+
this.overview = row.overview ?? null;
|
|
19
|
+
this.bestMonths = Array.isArray(row.bestMonths) ? row.bestMonths : [];
|
|
20
|
+
this.isMajorRegion = row.isMajorRegion ?? false;
|
|
21
|
+
this.latestRevisionDate = new Date(row.latestRevisionDate);
|
|
22
|
+
this.externalLink = row.url;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.RopewikiRegionView = RopewikiRegionView;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PageDataSource } from '../../pageDataSource';
|
|
2
|
+
/**
|
|
3
|
+
* Validated params for getRoutes (GET /routes).
|
|
4
|
+
* source and region are optional with no defaults; if one is present the other must also be present.
|
|
5
|
+
*/
|
|
6
|
+
export declare class RoutesParams {
|
|
7
|
+
readonly source: PageDataSource | undefined;
|
|
8
|
+
readonly region: string | undefined;
|
|
9
|
+
constructor(source: PageDataSource | undefined, region: string | undefined);
|
|
10
|
+
/**
|
|
11
|
+
* Returns an object suitable for use as query string parameters.
|
|
12
|
+
*/
|
|
13
|
+
toQueryStringParams(): Record<string, string>;
|
|
14
|
+
/**
|
|
15
|
+
* Parses query string parameters and returns validated params.
|
|
16
|
+
* Validation is performed by the constructor.
|
|
17
|
+
*/
|
|
18
|
+
static fromQueryStringParams(q: Record<string, string | undefined>): RoutesParams;
|
|
19
|
+
private static parseSource;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=routesParams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routesParams.d.ts","sourceRoot":"","sources":["../../../../src/types/api/getRoutes/routesParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,YAAY;IACrB,SAAgB,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnD,SAAgB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE/B,MAAM,EAAE,cAAc,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;IAa1E;;OAEG;IACH,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAW7C;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CACxB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,YAAY;IAWf,OAAO,CAAC,MAAM,CAAC,WAAW;CAQ7B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RoutesParams = void 0;
|
|
4
|
+
const pageDataSource_1 = require("../../pageDataSource");
|
|
5
|
+
/**
|
|
6
|
+
* Validated params for getRoutes (GET /routes).
|
|
7
|
+
* source and region are optional with no defaults; if one is present the other must also be present.
|
|
8
|
+
*/
|
|
9
|
+
class RoutesParams {
|
|
10
|
+
constructor(source, region) {
|
|
11
|
+
const sourcePresent = source !== undefined;
|
|
12
|
+
const regionPresent = region !== undefined && typeof region === 'string' && region !== '';
|
|
13
|
+
if (sourcePresent !== regionPresent) {
|
|
14
|
+
throw new Error('Query parameters "source" and "region" must both be present or both be absent');
|
|
15
|
+
}
|
|
16
|
+
this.source = sourcePresent ? source : undefined;
|
|
17
|
+
this.region = regionPresent ? region : undefined;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns an object suitable for use as query string parameters.
|
|
21
|
+
*/
|
|
22
|
+
toQueryStringParams() {
|
|
23
|
+
const params = {};
|
|
24
|
+
if (this.source !== undefined) {
|
|
25
|
+
params.source = this.source;
|
|
26
|
+
}
|
|
27
|
+
if (this.region !== undefined) {
|
|
28
|
+
params.region = this.region;
|
|
29
|
+
}
|
|
30
|
+
return params;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Parses query string parameters and returns validated params.
|
|
34
|
+
* Validation is performed by the constructor.
|
|
35
|
+
*/
|
|
36
|
+
static fromQueryStringParams(q) {
|
|
37
|
+
const sourceRaw = (q.source ?? q.Source ?? '').trim();
|
|
38
|
+
const regionRaw = (q.region ?? q.Region ?? '').trim();
|
|
39
|
+
const source = sourceRaw === ''
|
|
40
|
+
? undefined
|
|
41
|
+
: RoutesParams.parseSource(sourceRaw);
|
|
42
|
+
const region = regionRaw === '' ? undefined : regionRaw;
|
|
43
|
+
return new RoutesParams(source, region);
|
|
44
|
+
}
|
|
45
|
+
static parseSource(value) {
|
|
46
|
+
if (value === pageDataSource_1.PageDataSource.Ropewiki) {
|
|
47
|
+
return pageDataSource_1.PageDataSource.Ropewiki;
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`Query parameter "source" must be one of: ${Object.values(pageDataSource_1.PageDataSource).join(', ')}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.RoutesParams = RoutesParams;
|
|
@@ -21,8 +21,8 @@ export declare class SearchParams {
|
|
|
21
21
|
*/
|
|
22
22
|
toQueryStringParams(): Record<string, string>;
|
|
23
23
|
/**
|
|
24
|
-
* Parses
|
|
25
|
-
*
|
|
24
|
+
* Parses query string parameters and returns validated params.
|
|
25
|
+
* Validation is performed by the constructor.
|
|
26
26
|
*/
|
|
27
27
|
static fromQueryStringParams(q: Record<string, string | undefined>): SearchParams;
|
|
28
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchParams.d.ts","sourceRoot":"","sources":["../../../../src/types/api/search/searchParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;AAOnD;;;GAGG;AACH,qBAAa,YAAY;IACrB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,mBAAmB,EAAE,MAAM,CAAC;IAC5C,SAAgB,YAAY,EAAE,OAAO,CAAC;IACtC,SAAgB,cAAc,EAAE,OAAO,CAAC;IACxC,SAAgB,UAAU,EAAE,OAAO,CAAC;IACpC,SAAgB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,SAAgB,KAAK,EAAE,WAAW,CAAC;IACnC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;gBAGxC,IAAI,EAAE,MAAM,EACZ,mBAAmB,EAAE,MAAM,EAC3B,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GAAG,IAAI;IAqEhC;;;OAGG;IACH,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAmB7C;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CACxB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,YAAY;
|
|
1
|
+
{"version":3,"file":"searchParams.d.ts","sourceRoot":"","sources":["../../../../src/types/api/search/searchParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;AAOnD;;;GAGG;AACH,qBAAa,YAAY;IACrB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,mBAAmB,EAAE,MAAM,CAAC;IAC5C,SAAgB,YAAY,EAAE,OAAO,CAAC;IACtC,SAAgB,cAAc,EAAE,OAAO,CAAC;IACxC,SAAgB,UAAU,EAAE,OAAO,CAAC;IACpC,SAAgB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,SAAgB,KAAK,EAAE,WAAW,CAAC;IACnC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;gBAGxC,IAAI,EAAE,MAAM,EACZ,mBAAmB,EAAE,MAAM,EAC3B,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GAAG,IAAI;IAqEhC;;;OAGG;IACH,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAmB7C;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CACxB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,YAAY;IA2Cf;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;CAY9B"}
|
|
@@ -82,57 +82,31 @@ class SearchParams {
|
|
|
82
82
|
return params;
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
|
-
* Parses
|
|
86
|
-
*
|
|
85
|
+
* Parses query string parameters and returns validated params.
|
|
86
|
+
* Validation is performed by the constructor.
|
|
87
87
|
*/
|
|
88
88
|
static fromQueryStringParams(q) {
|
|
89
89
|
const name = (q.name ?? q.Name ?? '').trim();
|
|
90
|
-
if (!name) {
|
|
91
|
-
throw new Error('Missing or empty required query parameter: name');
|
|
92
|
-
}
|
|
93
90
|
const limitParam = q.limit ?? q.Limit ?? '';
|
|
94
|
-
|
|
95
|
-
if (limitParam === '') {
|
|
96
|
-
limit = DEFAULT_LIMIT;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
const limitNum = Number(limitParam);
|
|
100
|
-
if (Number.isNaN(limitNum) ||
|
|
101
|
-
!Number.isInteger(limitNum) ||
|
|
102
|
-
limitNum < 1) {
|
|
103
|
-
throw new Error('Query parameter "limit" must be a whole number greater than 0');
|
|
104
|
-
}
|
|
105
|
-
limit = limitNum;
|
|
106
|
-
}
|
|
91
|
+
const limit = limitParam === '' ? DEFAULT_LIMIT : Number(limitParam);
|
|
107
92
|
const cursorRaw = (q.cursor ?? q.Cursor ?? '').trim();
|
|
108
93
|
const cursorEncoded = cursorRaw === '' ? null : cursorRaw;
|
|
109
94
|
const similarityParam = q.similarity ?? q.Similarity ?? '';
|
|
110
95
|
const similarity = similarityParam === '' ? 0.5 : Number(similarityParam);
|
|
111
96
|
const orderParam = (q.order ?? q.Order ?? '').trim().toLowerCase();
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
orderParam
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const order = orderParam === 'quality' ? 'quality' : 'similarity';
|
|
97
|
+
const order = (orderParam === 'quality'
|
|
98
|
+
? 'quality'
|
|
99
|
+
: orderParam === 'similarity'
|
|
100
|
+
? 'similarity'
|
|
101
|
+
: orderParam || 'similarity');
|
|
118
102
|
const includePages = SearchParams.parseBoolean(q['include-pages'] ?? q['Include-Pages'], true);
|
|
119
103
|
const includeRegions = SearchParams.parseBoolean(q['include-regions'] ?? q['Include-Regions'], true);
|
|
120
|
-
if (!includePages && !includeRegions) {
|
|
121
|
-
throw new Error('At least one of include-pages or include-regions must be true');
|
|
122
|
-
}
|
|
123
104
|
const includeAkaParam = q['include-aka'] ?? q['Include-Aka'];
|
|
124
105
|
const includeAkaExplicit = (includeAkaParam ?? '').trim() !== '';
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
if (includeAkaExplicit && includeAka && !includePages) {
|
|
130
|
-
throw new Error('include-aka cannot be true when include-pages is false');
|
|
131
|
-
}
|
|
106
|
+
const includeAka = includeAkaExplicit
|
|
107
|
+
? SearchParams.parseBoolean(includeAkaParam, true)
|
|
108
|
+
: includePages;
|
|
132
109
|
const region = (q.region ?? q.Region ?? '').trim() || null;
|
|
133
|
-
if (region !== null && !UUID_REGEX.test(region)) {
|
|
134
|
-
throw new Error('Query parameter "region" must be a valid UUID');
|
|
135
|
-
}
|
|
136
110
|
return new SearchParams(name, similarity, includePages, includeRegions, includeAka, region, order, limit, cursorEncoded);
|
|
137
111
|
}
|
|
138
112
|
/**
|
|
@@ -3,7 +3,7 @@ import { RegionPreview } from './regionPreview';
|
|
|
3
3
|
import { SearchCursor } from './searchCursor';
|
|
4
4
|
export declare class SearchResults {
|
|
5
5
|
results: (PagePreview | RegionPreview)[];
|
|
6
|
-
nextCursor: string;
|
|
7
|
-
constructor(results: (PagePreview | RegionPreview)[],
|
|
6
|
+
nextCursor: string | null;
|
|
7
|
+
constructor(results: (PagePreview | RegionPreview)[], nextCursor: SearchCursor | null);
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=searchResults.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchResults.d.ts","sourceRoot":"","sources":["../../../../src/types/api/search/searchResults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,aAAa;IACtB,OAAO,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"searchResults.d.ts","sourceRoot":"","sources":["../../../../src/types/api/search/searchResults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,aAAa;IACtB,OAAO,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEd,OAAO,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,EAAE,UAAU,EAAE,YAAY,GAAG,IAAI;CAIxF"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SearchResults = void 0;
|
|
4
4
|
class SearchResults {
|
|
5
|
-
constructor(results,
|
|
5
|
+
constructor(results, nextCursor) {
|
|
6
6
|
this.results = results;
|
|
7
|
-
this.nextCursor =
|
|
7
|
+
this.nextCursor = nextCursor !== null ? nextCursor.encodeBase64() : null;
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
exports.SearchResults = SearchResults;
|