Warning, /frameworks/syntax-highlighting/autotests/folding/test.ts.fold is written in an unsupported language. File is not indexed.

0001 /// <reference types="node" />
0002 
0003 // TypeScript Test
0004 
0005 class Student <beginfold id='1'>{</beginfold id='1'>
0006     fullName: string;
0007     constructor(public firstName: string, public middleInitial: string, public lastName: string) <beginfold id='1'>{</beginfold id='1'>
0008         this.fullName = firstName + " " + middleInitial + " " + lastName;
0009     <endfold id='1'>}</endfold id='1'>
0010 <endfold id='1'>}</endfold id='1'>
0011 
0012 interface Person <beginfold id='1'>{</beginfold id='1'>
0013     firstName: string;
0014     lastName: string;
0015 <endfold id='1'>}</endfold id='1'>
0016 
0017 function greeter(person : Person) <beginfold id='1'>{</beginfold id='1'>
0018     return "Hello, " + person.firstName + " " + person.lastName;
0019 <endfold id='1'>}</endfold id='1'>
0020 
0021 let user = new Student("Jane", "M.", "User");
0022 
0023 // Built-in
0024 document.body.innerHTML = greeter(user); to
0025 JSON.stringify()
0026 console.log("Hello world");
0027 const os = require('os');
0028 Math.LOG10E;
0029 Number.MAX_SAFE_INTEGER;
0030 String.raw<beginfold id='2'>`</beginfold id='2'>raw text \.\n${}<endfold id='2'>`</endfold id='2'>
0031 
0032 import http = require<beginfold id='3'>(</beginfold id='3'>"http"<endfold id='3'>)</endfold id='3'>;
0033 import path = require<beginfold id='3'>(</beginfold id='3'>"path"<endfold id='3'>)</endfold id='3'>;
0034 import URL = url.URL;
0035 import <beginfold id='1'>{</beginfold id='1'> Readable, Writable <endfold id='1'>}</endfold id='1'> from "stream";
0036 import <beginfold id='1'>{</beginfold id='1'> isBuffer, isString, isObject <endfold id='1'>}</endfold id='1'> from "util";
0037 
0038 const port = 8_88_8;
0039 const baseUrl = new URL(<beginfold id='4'>`</beginfold id='4'>http://localhost:${port}/<endfold id='4'>`</endfold id='4'>);
0040 const rootDir = path.dirname(__dirname);
0041 
0042 const defaultBrowser = os.platform() === "win32" ? "edge" : "chrome";
0043 let browser: "edge" | "chrome" | "none" = defaultBrowser;
0044 let grep: string | undefined;
0045 
0046 interface FileBasedTestConfiguration <beginfold id='1'>{</beginfold id='1'>
0047     <beginfold id='5'>[</beginfold id='5'>setting: string<endfold id='5'>]</endfold id='5'>: string;
0048 <endfold id='1'>}</endfold id='1'>
0049 
0050 function swapCase(s: string): string <beginfold id='1'>{</beginfold id='1'>
0051     return s.replace(/\w/g, (ch) => <beginfold id='1'>{</beginfold id='1'>
0052         const up = ch.toUpperCase();
0053         return ch === up ? ch.toLowerCase() : up;
0054     <endfold id='1'>}</endfold id='1'>);
0055 <endfold id='1'>}</endfold id='1'>
0056 
0057 for (var i in pieces) <beginfold id='1'>{</beginfold id='1'>
0058     switch (true) <beginfold id='1'>{</beginfold id='1'>
0059         case /^\"?Accession\"?/.test(pieces<beginfold id='5'>[</beginfold id='5'>i<endfold id='5'>]</endfold id='5'>):
0060             numeration<beginfold id='5'>[</beginfold id='5'>0<endfold id='5'>]</endfold id='5'> = i;
0061             break;
0062     <endfold id='1'>}</endfold id='1'>
0063 <endfold id='1'>}</endfold id='1'>
0064 
0065 const enum ResponseCode <beginfold id='1'>{</beginfold id='1'>
0066     Success = 200,
0067     BadRequest = 400
0068 <endfold id='1'>}</endfold id='1'>
0069 
0070 // Substitutions
0071 export function isInOpenInterval(start: number, end: number) <beginfold id='1'>{</beginfold id='1'>
0072     return tersible(a => a > start && a < end, () => <beginfold id='4'>`</beginfold id='4'>(${start}...${end})<endfold id='4'>`</endfold id='4'>)
0073 <endfold id='1'>}</endfold id='1'>
0074 const bar = <beginfold id='4'>`</beginfold id='4'>${x} ${y}<endfold id='4'>`</endfold id='4'>;
0075 
0076 // readonly
0077 function f1(mt: <beginfold id='5'>[</beginfold id='5'>number, number<endfold id='5'>]</endfold id='5'>, rt: readonly <beginfold id='5'>[</beginfold id='5'>number, number<endfold id='5'>]</endfold id='5'>) <beginfold id='1'>{</beginfold id='1'>
0078 <endfold id='1'>}</endfold id='1'>
0079 
0080 function f2(ma: string<beginfold id='5'>[</beginfold id='5'><endfold id='5'>]</endfold id='5'>, ra: readonly string<beginfold id='5'>[</beginfold id='5'><endfold id='5'>]</endfold id='5'>, mt: <beginfold id='5'>[</beginfold id='5'>string, string<endfold id='5'>]</endfold id='5'>, rt: readonly <beginfold id='5'>[</beginfold id='5'>string, string<endfold id='5'>]</endfold id='5'>) <beginfold id='1'>{</beginfold id='1'>
0081 <endfold id='1'>}</endfold id='1'>
0082 
0083 type ReadWrite<T> = <beginfold id='1'>{</beginfold id='1'> -readonly <beginfold id='5'>[</beginfold id='5'>P in keyof T<endfold id='5'>]</endfold id='5'> : T<beginfold id='5'>[</beginfold id='5'>P<endfold id='5'>]</endfold id='5'> <endfold id='1'>}</endfold id='1'>;
0084 
0085 // const assertion
0086 let obj = <beginfold id='1'>{</beginfold id='1'> x: 10, y: <beginfold id='5'>[</beginfold id='5'>20, 30<endfold id='5'>]</endfold id='5'>, z: <beginfold id='1'>{</beginfold id='1'> a: <beginfold id='1'>{</beginfold id='1'> b: 42 <endfold id='1'>}</endfold id='1'> <endfold id='1'>}</endfold id='1'> <endfold id='1'>}</endfold id='1'> as const;
0087 let r2 = <beginfold id='1'>{</beginfold id='1'> x: 20, y: 10 <endfold id='1'>}</endfold id='1'> as const;
0088 let r2 = <beginfold id='1'>{</beginfold id='1'>...p<endfold id='1'>}</endfold id='1'> as const;
0089 let p1 = <beginfold id='1'>{</beginfold id='1'> x: 10, y: 20 as const <endfold id='1'>}</endfold id='1'>;
0090 let p2 = <beginfold id='1'>{</beginfold id='1'> 10 as const, 'foo' as const <endfold id='1'>}</endfold id='1'>;
0091 
0092 // Definite assignment operator
0093 class Cl <beginfold id='1'>{</beginfold id='1'>
0094     one?: string;
0095     two!: string;
0096 <endfold id='1'>}</endfold id='1'>
0097 let x! = 1;
0098 
0099 // Function with multiple arguments
0100 const children = <beginfold id='5'>[</beginfold id='5'><endfold id='5'>]</endfold id='5'>.map<Set<Map<number, string>>>(element => <beginfold id='1'>{</beginfold id='1'>
0101     if (!this.identityProvider) <beginfold id='1'>{</beginfold id='1'>
0102         return element;
0103     <endfold id='1'>}</endfold id='1'>
0104     return element;
0105 <endfold id='1'>}</endfold id='1'>);
0106 
0107 // Numerics
0108 var a = 0xA;
0109 var b = 0b1;
0110 var c = 0o7;
0111 var d = 1.1E+3;
0112 var e = 1.E+3;
0113 var f = .1E+3;
0114 var g = 1E+3;
0115 var h = 1.1;
0116 var i = 1.;
0117 var j = .1;
0118 var k =  1;
0119 var l = 1_2.e+3_22 | .2e2 | 0o1_23 | 11.2 | 08;
0120 
0121 // Bigint
0122 const binBig = 0b101n;
0123 const octBig = 0o567n;
0124 const hexBig = 0xC0Bn;
0125 const decBig = 123n;
0126 
0127 // Invalid numbers
0128 var l = 0xA1t;
0129 var m = 0b0123;
0130 var n = 0o29;
0131 var n = 0_7;
0132 var n = 1___1;
0133 var n = 1__;
0134 var n = 11__.;
0135 var n = 1__.e+3_22;
0136 var n = .2_e2;
0137 
0138 // Types
0139 let a: null = null;
0140 let b: number = 123;
0141 let c: number = 123.456;
0142 let d: string = <beginfold id='4'>`</beginfold id='4'>Geeks<endfold id='4'>`</endfold id='4'>;
0143 let e: undefined = undefined;
0144 let f: boolean = true;
0145 let g: number = 0b111001; // Binary
0146 let h: number = 0o436; // Octal
0147 let i: number = 0xadf0d; // Hexa-Decimal
0148 let j: bigint = 123n;
0149 
0150 const query = query<<beginfold id='5'>[</beginfold id='5'>number<endfold id='5'>]</endfold id='5'>, number>(<beginfold id='4'>`</beginfold id='4'>
0151         SELECT *
0152         FROM statistics
0153         WHERE unit_id = $1<endfold id='4'>`</endfold id='4'>)
0154 
0155 function runQuery() <beginfold id='1'>{</beginfold id='1'>
0156     const query = createQuery<<beginfold id='5'>[</beginfold id='5'>number<beginfold id='5'>[</beginfold id='5'><endfold id='5'>]</endfold id='5'><endfold id='5'>]</endfold id='5'>, Table<Columns>>(<beginfold id='4'>`</beginfold id='4'>
0157         some SQL here
0158     <endfold id='4'>`</endfold id='4'>)
0159     return database.execute(query)
0160 <endfold id='1'>}</endfold id='1'>
0161 
0162 aa: <sdf/> string ?<ssd/> string
0163  string // Don't highlight
0164 aa: string assa |
0165    string
0166    string ;
0167    string
0168 
0169 aa: <beginfold id='1'>{</beginfold id='1'> string
0170     string <endfold id='1'>}</endfold id='1'> // Don't highlight
0171 
0172 aa: <beginfold id='5'>[</beginfold id='5'> string
0173       string <endfold id='5'>]</endfold id='5'>
0174 aa: ( string
0175       string ) // Don't highlight
0176 aa: string <string>
0177 interface a <beginfold id='1'>{</beginfold id='1'>
0178     aa: <beginfold id='6'>/*</beginfold id='6'> comment
0179         <endfold id='6'>*/</endfold id='6'> string,
0180     bb: <beginfold id='6'>/*</beginfold id='6'> comment <endfold id='6'>*/</endfold id='6'>
0181         number,
0182     cc: // comment
0183         void,
0184     dd:
0185         any,
0186 <endfold id='1'>}</endfold id='1'>
0187 
0188 null, <<beginfold id='1'>{</beginfold id='1'><beginfold id='5'>[</beginfold id='5'>key<endfold id='5'>]</endfold id='5'>: () => any<endfold id='1'>}</endfold id='1'>> null
0189 null, <<beginfold id='1'>{</beginfold id='1'><beginfold id='5'>[</beginfold id='5'>key<endfold id='5'>]</endfold id='5'>: () =><beginfold id='1'>{</beginfold id='1'>a: number<endfold id='1'>}</endfold id='1'><endfold id='1'>}</endfold id='1'>> null
0190 
0191 // Correctly highlighting regular expressions
0192 dt = ((dt<beginfold id='5'>[</beginfold id='5'>0<endfold id='5'>]</endfold id='5'> * 1e9 + dt<beginfold id='5'>[</beginfold id='5'>1<endfold id='5'>]</endfold id='5'>) / 1e6).toFixed(3).replace(/\.?0+$/, '') + 'ms';
0193 (a<beginfold id='5'>[</beginfold id='5'>0<endfold id='5'>]</endfold id='5'> / 2) / (2)
0194 
0195 // Type guards
0196 function isNumber(x: any): x is number <beginfold id='1'>{</beginfold id='1'>
0197     return typeof x === "number";
0198 <endfold id='1'>}</endfold id='1'>
0199 
0200 // Conditional expressions (highlight keywords before ":")
0201 class C <beginfold id='1'>{</beginfold id='1'>
0202     w = () =>
0203         this.a() ? true : this.b() ? false : true;
0204     z = () =>
0205         this.b() ? hello : k;
0206 <endfold id='1'>}</endfold id='1'>
0207 
0208 function foo<T extends X>(arg: T): T extends B ? number : string <beginfold id='1'>{</beginfold id='1'>
0209   if (arg === "A") return <T extends B ? number : never>111;
0210   return <T extends B ? never : string>"returning a string";
0211 <endfold id='1'>}</endfold id='1'>
0212 
0213 let x = (foo === null || foo === undefined) ?
0214     undefined :
0215     foo.bar.baz();
0216 let y = (foo === null || foo === undefined) ? <beginfold id='6'>/*</beginfold id='6'> comment <endfold id='6'>*/</endfold id='6'> undefined :
0217     foo.bar.baz();
0218 
0219 // Operator ??
0220 let x = foo ?? bar();
0221 
0222 // Types and logical `&&` and `||` operators after `as` expression
0223 Date as any || null;
0224 
0225 //Assertions
0226 const assert: (value: unknown) => asserts value = value => <beginfold id='1'>{</beginfold id='1'><endfold id='1'>}</endfold id='1'>
0227 declare function assertIsString(value: unknown): asserts value is string;
0228 declare function assertIsArrayOfStrings(value: unknown): asserts value is string<beginfold id='5'>[</beginfold id='5'><endfold id='5'>]</endfold id='5'>;
0229 declare function assertDefined<T>(value: T): asserts value is NonNullable<T>;
0230 namespace Debug <beginfold id='1'>{</beginfold id='1'>
0231     export declare function assert(value: unknown, message?: string): asserts value;
0232     export declare function assertDefined<T>(value: T): asserts value is NonNullable<T>;
0233 <endfold id='1'>}</endfold id='1'>
0234 
0235 // Only highlight valid regular expressions, of a single line, after strings
0236 // See: https://github.com/microsoft/TypeScript-TmLanguage/issues/786
0237 "text" /No-Regex
0238 "text" /Regex[:)]*/;
0239 const a = "6" / 2; <beginfold id='6'>/*</beginfold id='6'>comment<endfold id='6'>*/</endfold id='6'> const b = 5;
0240 console.log("4" / "2"); // 2
0241 // Single quote
0242 const a = '6' / 2; <beginfold id='6'>/*</beginfold id='6'>comment<endfold id='6'>*/</endfold id='6'> const b = 5;
0243 console.log('4' / '2'); // 2
0244 // Template
0245 const a = <beginfold id='4'>`</beginfold id='4'>6<endfold id='4'>`</endfold id='4'> / 2; <beginfold id='6'>/*</beginfold id='6'>comment<endfold id='6'>*/</endfold id='6'> const b = 5;
0246 console.log(<beginfold id='4'>`</beginfold id='4'>4<endfold id='4'>`</endfold id='4'> / <beginfold id='4'>`</beginfold id='4'>2<endfold id='4'>`</endfold id='4'>); // 2
0247 
0248  <beginfold id='5'>[</beginfold id='5'>1, 2, 3<endfold id='5'>]</endfold id='5'>.reduce<readonly number<beginfold id='5'>[</beginfold id='5'><endfold id='5'>]</endfold id='5'>>((previous) => previous, <beginfold id='5'>[</beginfold id='5'><endfold id='5'>]</endfold id='5'>);
0249 
0250 // Multiline arrow assignment
0251 const h = <beginfold id='1'>{</beginfold id='1'>
0252   setSubProperty: <
0253       T extends A,
0254       K extends keyof T,
0255       J extends keyof T<beginfold id='5'>[</beginfold id='5'>K<endfold id='5'>]</endfold id='5'>
0256     >(
0257       property: K,
0258       key: J,
0259       value: T<beginfold id='5'>[</beginfold id='5'>K<endfold id='5'>]</endfold id='5'><beginfold id='5'>[</beginfold id='5'>J<endfold id='5'>]</endfold id='5'>
0260     ) =>  <beginfold id='1'>{</beginfold id='1'><endfold id='1'>}</endfold id='1'>
0261 <endfold id='1'>}</endfold id='1'>
0262 
0263 // Private-Named Instance Fields
0264 class Greeter <beginfold id='1'>{</beginfold id='1'>
0265     #name: string;
0266     constructor(name: string) <beginfold id='1'>{</beginfold id='1'>
0267         this.#name = name;
0268     <endfold id='1'>}</endfold id='1'>
0269     greet() <beginfold id='1'>{</beginfold id='1'>
0270         console.log(<beginfold id='4'>`</beginfold id='4'>hello ${this.#name}<endfold id='4'>`</endfold id='4'>);
0271     <endfold id='1'>}</endfold id='1'>
0272 <endfold id='1'>}</endfold id='1'>
0273 class Test <beginfold id='1'>{</beginfold id='1'>
0274     #NAME1: () => string;
0275     prop1 = x.#NAMEabc.#NAMEabc;
0276     prop2 = x.#NAMEabc.#NAMEabc();
0277     prop3 = this.#NAMEabc.#NAME();
0278 <endfold id='1'>}</endfold id='1'>
0279 
0280 // Type-only imports and exports
0281 import type T from "mod";
0282 import type <beginfold id='1'>{</beginfold id='1'> U, V <endfold id='1'>}</endfold id='1'> from "mod";
0283 import type * as types from "mod";
0284 import type from "mod";
0285 import type = require<beginfold id='3'>(</beginfold id='3'>"mod"<endfold id='3'>)</endfold id='3'>;
0286 import type T = require<beginfold id='3'>(</beginfold id='3'>"mod"<endfold id='3'>)</endfold id='3'>;
0287 
0288 export <beginfold id='1'>{</beginfold id='1'> a as b, x <endfold id='1'>}</endfold id='1'>;
0289 export * from "AnotherModule";
0290 export <beginfold id='1'>{</beginfold id='1'> k as m, l <endfold id='1'>}</endfold id='1'> from "AnotherModule";
0291 export type <beginfold id='1'>{</beginfold id='1'> T <endfold id='1'>}</endfold id='1'>;
0292 export type <beginfold id='1'>{</beginfold id='1'> U <endfold id='1'>}</endfold id='1'> from "AnotherModule";
0293 
0294 // 'awaited' type operator: https://github.com/microsoft/TypeScript/pull/35998
0295 let v1: awaited number;
0296 let v2: awaited Promise<number>;
0297 function f7<U>() <beginfold id='1'>{</beginfold id='1'>
0298     let v0: awaited U;
0299     let v1: awaited Promise<U>;
0300 <endfold id='1'>}</endfold id='1'>
0301 
0302 // Tagged template literals
0303 tagFunc<beginfold id='4'>`</beginfold id='4'>
0304     Hello world!
0305     ${ alert("Hello!"); }<endfold id='4'>`</endfold id='4'>;
0306 obj.something.tagFunc<beginfold id='4'>`</beginfold id='4'>Setting ${setting} is ${value + 5}!<endfold id='4'>`</endfold id='4'>;