11import type {
2+ ErrorLike ,
23 NotFoundError ,
34 NotLoggedInError ,
45 NotMemberError ,
@@ -12,18 +13,32 @@ import { BaseOptions, Result, setDefaults } from "./util.ts";
1213
1314/** Options for `getPage()` */
1415export interface GetPageOption extends BaseOptions {
15- /** use `followRename` */ followRename ?: boolean ;
16+ /** use `followRename` */
17+ followRename ?: boolean ;
18+
19+ /** project ids to get External links */
20+ projects ?: string [ ] ;
21+ }
22+
23+ export interface TooLongURIError extends ErrorLike {
24+ name : "TooLongURIError" ;
1625}
1726
1827const getPage_toRequest : GetPage [ "toRequest" ] = (
1928 project ,
2029 title ,
2130 options ,
2231) => {
23- const { sid, hostName, followRename } = setDefaults ( options ?? { } ) ;
32+ const { sid, hostName, followRename, projects } = setDefaults ( options ?? { } ) ;
33+ const params = new URLSearchParams ( ) ;
34+ params . append ( "followRename" , `${ followRename ?? true } ` ) ;
35+ for ( const id of projects ?? [ ] ) {
36+ params . append ( "projects" , id ) ;
37+ }
2438 const path = `https://${ hostName } /api/pages/${ project } /${
2539 encodeTitleURI ( title )
26- } ?followRename=${ followRename ?? true } `;
40+ } ?${ params . toString ( ) } `;
41+
2742 return new Request (
2843 path ,
2944 sid ? { headers : { Cookie : cookie ( sid ) } } : undefined ,
@@ -32,6 +47,15 @@ const getPage_toRequest: GetPage["toRequest"] = (
3247
3348const getPage_fromResponse : GetPage [ "fromResponse" ] = async ( res ) => {
3449 if ( ! res . ok ) {
50+ if ( res . status === 414 ) {
51+ return {
52+ ok : false ,
53+ value : {
54+ name : "TooLongURIError" ,
55+ message : "project ids may be too much." ,
56+ } ,
57+ } ;
58+ }
3559 return makeError < NotFoundError | NotLoggedInError | NotMemberError > ( res ) ;
3660 }
3761 const value = ( await res . json ( ) ) as Page ;
@@ -60,14 +84,14 @@ export interface GetPage {
6084 fromResponse : ( res : Response ) => Promise <
6185 Result <
6286 Page ,
63- NotFoundError | NotLoggedInError | NotMemberError
87+ NotFoundError | NotLoggedInError | NotMemberError | TooLongURIError
6488 >
6589 > ;
6690
6791 ( project : string , title : string , options ?: GetPageOption ) : Promise <
6892 Result <
6993 Page ,
70- NotFoundError | NotLoggedInError | NotMemberError
94+ NotFoundError | NotLoggedInError | NotMemberError | TooLongURIError
7195 >
7296 > ;
7397}
0 commit comments