die heldin script add
This commit is contained in:
249
customers.csv
Normal file
249
customers.csv
Normal file
@@ -0,0 +1,249 @@
|
|||||||
|
databaseId,firstname,lastname,gender,dateOfBirth,lastCheckIn,facilityName,facilityId,customerNumber,cardNumber,lockerKey,customerStatus,purchasedContingentCode,purchasedContingentType,imageUrl,checkedIn,street,houseNumber,zip,city
|
||||||
|
1210004724,Monika,Manzl,1,1947-09-21,,Die Heldin,1210002980,1-10064,,,1,,,,false,Georg-Klopp-Straße,8,5020,Salzburg
|
||||||
|
1210004921,Ernestine,Meilinger CC,1,1967-10-25,,Die Heldin,1210002980,1-10173,,,1,,,,false,Minnesheimerstraße,20,5023,Sbg
|
||||||
|
1210004824,Evelyn,Schmidjell,1,1944-05-24,,Die Heldin,1210002980,1-10105,,,1,,,,false,Bachwinkl,9,5081,Anif
|
||||||
|
1210005524,Stanisaljevic,Lydia,1,1974-07-28,,Die Heldin,1210002980,1-11162,,,1,,,,false,Josef-Resslsrt.,19,5020,Salzburg
|
||||||
|
1210005817,Brigitte,Raffetseder CC,1,1958-02-27,,Die Heldin,1210002980,1-11260,,,1,,,,false,K.H. Waggerl,Str.,5020,Sbg
|
||||||
|
1210005918,Eva,Hummer CC,1,1954-08-11,2024-01-19T10:18:37.216+01:00[Europe/Vienna],Die Heldin,1210002980,1-11301,,,1,,,,false,Salzweg,34,5082,Grödig
|
||||||
|
1210006410,Helene,Buczolits cc,1,1951-10-03,2024-04-12T10:52:49.276+02:00[Europe/Vienna],Die Heldin,1210002980,1-11441,,,1,,,,false,Erentrudisstr.,6,5020,Salzburg
|
||||||
|
1210006415,Johanna,Zehetgruber CC,1,1950-07-05,2022-06-10T07:53:06.547+02:00[Europe/Vienna],Die Heldin,1210002980,1-11481,,,1,,,,false,Naumanng.,6,5020,Salzburg
|
||||||
|
1210007405,Ulrike,Koushan CC,1,1947-07-01,,Die Heldin,1210002980,1-12132,,,1,,,,false,Leitmeritzstr.,4/38,5020,Salzburg
|
||||||
|
1210007507,Petra,Kubicza CC,1,1988-11-05,2020-10-27T17:52:12.583+01:00[Europe/Vienna],Die Heldin,1210002980,1-12155,,,1,,,,false,Hochthronstr.,13,5083,St. Leonhard
|
||||||
|
1210007609,Helga,Zach CC,1,1958-04-03,,Die Heldin,1210002980,1-12172,,,1,,,,false,Rene Marcic Strasse,4/11,5020,Salzburg
|
||||||
|
1210008886,Andrea,Lipold CC,1,1960-05-07,,Die Heldin,1210002980,1-12427,,,1,,,,false,Glanhofen,5.,5020,Salzburg
|
||||||
|
1210009582,Kerstin,Volz CC,1,1989-05-09,,Die Heldin,1210002980,1-13193,,,1,,,,false,Keine Daten,0,5020,Salzburg
|
||||||
|
1210009871,Manuela,Spießberger CC,1,1973-06-29,,Die Heldin,1210002980,1-13296,,,1,,,,false,Brunnwiesweg,1,5204,Strasswalchen
|
||||||
|
1210011422,Tanja,Lipold CC,1,1989-11-19,,Die Heldin,1210002980,1-14137,,,1,,,,false,Glanhofen,5,5020,Salzburg
|
||||||
|
1210011424,Katorina,Virojic CC,1,1985-07-30,,Die Heldin,1210002980,1-14151,,,1,,,,false,Borromäumstraße,17/4,5020,Salzburg
|
||||||
|
1210011420,Sabine,Werner CC,1,1964-05-12,,Die Heldin,1210002980,1-14117,,,1,,,,false,Minnesheimstraße,8b,5020,Salzburg
|
||||||
|
1210011510,Christine,Hucke CC,1,1945-07-01,,Die Heldin,1210002980,1-14275,,,1,,,,false,Franz Schalk Str.,6,5020,Salzburg
|
||||||
|
1210011511,Jacqueline,Rieder CC,1,1992-07-21,,Die Heldin,1210002980,1-14278,,,1,,,,false,Bayernweg,5,5400,Hallein
|
||||||
|
1210011514,Brunhilde,Klammer CC,1,1954-07-28,2024-06-06T09:54:48.203+02:00[Europe/Vienna],Die Heldin,1210002980,1-14318,,,1,,,,false,Naumanngasse,23/4,5020,Sbg
|
||||||
|
1210012025,Patricia,Nethalo,1,1989-01-20,,Die Heldin,1210002980,1-14471,,,1,,,,false,Bundschuhstrasse,20,5020,Salzburg
|
||||||
|
1210012694,Barbara,Pamperl,1,1970-01-26,,Die Heldin,1210002980,1-15009,,,1,,,,false,F.-Inhauser-str.,4,5020,Salzburg
|
||||||
|
1210013463,Helga,Pentek,1,1949-04-27,2021-06-09T08:19:24.894+02:00[Europe/Vienna],Die Heldin,1210002980,1-15094,,,1,,,,false,Otto-holzbauerstraße,11,5020,Salzburg
|
||||||
|
1210015065,Verena,Pogadl CC,1,1986-04-19,,Die Heldin,1210002980,1-15309,,,1,,,,false,Gaißbergweg,7/1,5081,Anif
|
||||||
|
1210015342,Claudia,Markut,1,1969-08-01,2022-03-03T07:51:16.894+01:00[Europe/Vienna],Die Heldin,1210002980,1-15342,,,1,,,,false,Pabensteinstr. 7,0,5400,Hallein
|
||||||
|
1210015618,Margit,Egeo CC,1,1967-08-19,,Die Heldin,1210002980,1-15383,,,1,,,,false,Quellenweg,9,5020,Salzburg
|
||||||
|
1210015897,Edith,Stromberger CC,1,1955-05-31,2020-02-21T07:49:20.002+01:00[Europe/Vienna],Die Heldin,1210002980,1-15414,,,1,,,,false,Karl Schoenherrstr.,8,5020,Salzburg
|
||||||
|
1210015985,Barbara,Geiger CC,1,1975-09-06,2021-07-05T15:24:44.126+02:00[Europe/Vienna],Die Heldin,1210002980,1-16029,,,1,,,,false,Höglwörthweg,33,5020,Sbg
|
||||||
|
1210015984,Barbara,Pamperl CC,1,1970-01-26,2021-10-18T17:49:50.830+02:00[Europe/Vienna],Die Heldin,1210002980,1-16028,,,1,,,,false,F.-Inhauser-Str.,4,5020,Sbg
|
||||||
|
1210015988,Ursula,Wegmayr,1,1958-10-23,2023-09-12T10:29:36.170+02:00[Europe/Vienna],Die Heldin,1210002980,1-16035,,,1,,,,false,Pfeifferhoferstr.,12,5020,Salzburg
|
||||||
|
1210016072,Ingrid,Fuchs,1,1958-12-29,2024-01-24T08:34:25.577+01:00[Europe/Vienna],Die Heldin,1210002980,1-16056,,,1,,,,false,Gaisberg,1,5020,Salzburg
|
||||||
|
1210016075,Erna,Glechner CC,1,1963-04-27,2022-05-23T07:48:03.946+02:00[Europe/Vienna],Die Heldin,1210002980,1-16061,,,1,,,,false,Salzachweg,55,5061,Elsbethen
|
||||||
|
1210016170,Karin,Geiger CC,1,1972-04-18,2020-07-08T17:26:08.037+02:00[Europe/Vienna],Die Heldin,1210002980,1-16078,,,1,,,,false,Mohrstr.,9,5020,Salzburg
|
||||||
|
1210016173,Monika,Posch,1,1952-01-25,,Die Heldin,1210002980,1-16082,,,1,,,,false,Schleiferbachweg,1,5023,Salzburg
|
||||||
|
1210016177,Dorota,Bednarz CC,1,1982-10-28,2020-02-21T11:02:47.539+01:00[Europe/Vienna],Die Heldin,1210002980,1-16092,,,1,,,,false,Kobergerweg,10,5020,Salzburg
|
||||||
|
1210016179,Ursula,Kroisenbrunner CC,1,1943-06-25,2023-11-13T08:56:55.447+01:00[Europe/Vienna],Die Heldin,1210002980,1-16098,,,1,,,,false,Otto Glöckel Str.,17/22,5082,Grödig
|
||||||
|
1210016272,Angelika,Spraider CC,1,1982-08-16,2020-03-13T17:27:11.084+01:00[Europe/Vienna],Die Heldin,1210002980,1-16108,,,1,,,,false,Kaiser-Karl-Strasse,3/4,5020,Salzburg
|
||||||
|
1210016643,Susanne,Felsenberger CC,1,1975-03-18,2022-01-14T07:53:25.420+01:00[Europe/Vienna],Die Heldin,1210002980,1-17005,,,1,,,,false,Friedenstr.,20,5020,Salzburg
|
||||||
|
1210016646,Michaela,Schubeck-John CC,1,1971-01-25,2023-01-19T17:15:07.943+01:00[Europe/Vienna],Die Heldin,1210002980,1-17013,,,1,,,,false,Rainweg,29,5102,Anthering
|
||||||
|
1210016842,Sylvia,Krallinger CC,1,1959-12-21,2023-09-04T07:48:49.318+02:00[Europe/Vienna],Die Heldin,1210002980,1-17054,,,1,,,,false,Achenpromenade,12,5081,Anif
|
||||||
|
1210016746,Evelyn,Hettegger CC,1,1979-08-16,2022-10-10T10:26:26.492+02:00[Europe/Vienna],Die Heldin,1210002980,1-17040,,,1,,,,false,Friedenstrasse,2/3,5020,Salzburg
|
||||||
|
1210017036,Sarah,Hyden,1,1987-09-19,,Die Heldin,1210002980,1-17090,,,1,,,,false,Hugo-Wolf-Str.,14/2,5020,Salzburg
|
||||||
|
1210017032,Viktoria,Pichler CC,1,1991-01-01,2020-09-21T14:45:26.929+02:00[Europe/Vienna],Die Heldin,1210002980,1-17086,,,1,,,,false,Ahornstr.,21,83451,Piding
|
||||||
|
1210017120,Susanne,Zwatz CC,1,1975-03-04,,Die Heldin,1210002980,1-17094,,,1,,,,false,Fürstenallee,35/9,5020,Salzburg
|
||||||
|
1210016747,Anita,Gimpl CC,1,1993-11-14,,Die Heldin,1210002980,1-17045,,,1,,,,false,Reinbergweg,5,5061,Elsbethen
|
||||||
|
1210017215,Michaela,Seer-Hetz CC,1,1976-06-27,2024-06-21T09:55:46.960+02:00[Europe/Vienna],Die Heldin,1210002980,1-18016,,,1,,,,false,Johann-Herbst-Straße,18,5061,Elsbethen
|
||||||
|
1210017492,Bettina,Holzer CC,1,1985-02-23,2022-07-11T10:47:38.078+02:00[Europe/Vienna],Die Heldin,1210002980,1-18062,,,1,,,,false,Willhelm von Exner Straße,20/2,5020,Salzburg
|
||||||
|
1210017684,Elena,Fercher CC,1,2001-05-05,2020-08-24T17:46:09.415+02:00[Europe/Vienna],Die Heldin,1210002980,1-18090,,,1,,,,false,Usnerweg,4,5412,Puch
|
||||||
|
1210017979,Heike,strobl CC,1,1983-05-09,2020-06-12T08:45:13.939+02:00[Europe/Vienna],Die Heldin,1210002980,1-18130,,,1,,,,false,Weidenweg,1,5061,Salzburg
|
||||||
|
1210017870,Cornelia,Egger cc,1,1980-03-14,2021-09-08T07:55:28.640+02:00[Europe/Vienna],Die Heldin,1210002980,1-18110,,,1,,,,false,Staufenstraße,11,5071,Wals
|
||||||
|
1210017973,Sorina,Heiser,1,1965-05-31,,Die Heldin,1210002980,1-18124,,,1,,,,false,Vierthalerstraße,1,5400,Hallein
|
||||||
|
1210018065,Claudia,Quehenberger,1,1967-09-10,,Die Heldin,1210002980,1-18300,,,1,,,,false,Ernst-Grein-Str.,6A,5020,Salzburg
|
||||||
|
1210018367,Loredana,Niculescu,1,1996-08-28,2020-06-05T16:51:03.192+02:00[Europe/Vienna],Die Heldin,1210002980,1-19035,,,1,,,,false,Salzbuger Strasse,29,5411,Hallein
|
||||||
|
1210018760,Katharina,Neureiter CC,1,1984-01-18,2021-07-08T08:56:01.702+02:00[Europe/Vienna],Die Heldin,1210002980,1-19068,,,1,,,,false,Scharten,22,5450,Werfen
|
||||||
|
1210048017,Christina,Krispler CC,1,1987-04-21,,Die Heldin,1210002980,1-2818141,,,1,,,,false,Hinterebenau,10,23,Ebenau
|
||||||
|
1210047336,Olga,Damm,1,1978-04-18,,Die Heldin,1210002980,1-2820061,,,1,,,,false,Adnet,26,5421,Adnet
|
||||||
|
1210047338,Cornelia,Ludwig CC,1,2000-11-30,2020-02-11T08:17:14.394+01:00[Europe/Vienna],Die Heldin,1210002980,1-2820063,,,1,,,,false,Neutorstr.,19,5020,Salzburg
|
||||||
|
1210047523,Eva,Sieberer CC,1,1985-11-13,2022-04-04T09:30:03.582+02:00[Europe/Vienna],Die Heldin,1210002980,1-2820078,,,1,,,,false,Heimstraße 12,a,5020,Salzburg
|
||||||
|
1210047428,Gudrun,Körbler CC,1,1961-02-27,2022-05-19T09:52:17.022+02:00[Europe/Vienna],Die Heldin,1210002980,1-2820073,,,1,,,,false,Samstrasse,38,5023,Salzburg
|
||||||
|
1210047526,Heidrun,Lehner CC,1,1964-09-19,2020-03-13T08:12:16.463+01:00[Europe/Vienna],Die Heldin,1210002980,1-2820081,,,1,,,,false,Seppenpointstr.,374,5412,Puch
|
||||||
|
1210126522,Tanja,Niedermoser,1,1983-01-11,,Die Heldin,1210002980,1-2820107,,,1,,,,false,Dorfstrasse,20,5081,Anif
|
||||||
|
1210126520,Nadine,Krebs,1,1993-09-19,2020-07-02T17:20:27.349+02:00[Europe/Vienna],Die Heldin,1210002980,1-2820100,,,1,,,,false,Kreuzbrücklweg,11,5020,Salzburg
|
||||||
|
1210125493,Gisela,König,1,1964-12-20,2022-04-26T18:29:58.831+02:00[Europe/Vienna],Die Heldin,1210002980,1-2820106,,,1,,,,false,Bairau,43,5511,Hüttau
|
||||||
|
1210220870,Barbara,Schweiger CC,1,1975-12-15,2022-01-27T10:05:05.419+01:00[Europe/Vienna],Die Heldin,1210002980,1-2820139,,,1,,,,false,Haunsbergstr.,93,5020,Salzburg
|
||||||
|
1210206270,Dummy,Dummy,1,2019-12-24,,Die Heldin,1210002980,1-2820131,,,1,,,,false,Alpenstr.,54,5020,Salzburg
|
||||||
|
1210216991,Beate,Kirschenhofer,1,1980-03-07,2020-08-06T07:47:14.732+02:00[Europe/Vienna],Die Heldin,1210002980,1-2820136,,,1,,,,false,Stegweg,2,5061,Elsbethen
|
||||||
|
1210274110,Ayhan,Kirbas,1,1968-07-19,2022-10-21T08:22:29.354+02:00[Europe/Vienna],Die Heldin,1210002980,1-2820147,,,1,,,,false,Konradlaibstrasse,10a,5020,Salzburg
|
||||||
|
1210462550,Irina,Bayrhammer,1,1983-07-16,,Die Heldin,1210002980,1-2820178,,,1,,,,false,Hintersee,42,5324,Hintersee
|
||||||
|
1210876390,Eva-Maria,heis,1,1991-07-24,,Die Heldin,1210002980,1-2820204,,,1,,,,false,Franz-ofner-Strasse,1,5020,Salzburg
|
||||||
|
1210876570,Silvia,Suler,1,1979-02-07,,Die Heldin,1210002980,1-2820205,,,1,,,,false,Siezenheimerstrasse,66,5020,Salzburg
|
||||||
|
1211550510,Petra,Kropiunik-wirlandner CC,1,1972-02-08,2022-09-15T16:25:13.232+02:00[Europe/Vienna],Die Heldin,1210002980,1-2820260,,,1,,,,false,Tannenweg,5/4,5400 hallein,Anif
|
||||||
|
1212039590,Helen,Roessler CC,2,1988-02-23,,Die Heldin,1210002980,1-2820278,,,1,,,,false,Rifer Hauptstr.,94c,5400,Hallein
|
||||||
|
1212274080,Raffaela,Egger,1,1986-08-07,,Die Heldin,1210002980,1-2820286,,,1,,,,false,Rosengasse,10,5020,Salzburg
|
||||||
|
1212331920,Claudia,Masarie,1,1973-03-16,,Die Heldin,1210002980,1-2820290,,,1,,,,false,klessheimerstrasse allee,28,5020,Salzburg
|
||||||
|
1213860190,Karin,Steingruber,1,1986-01-15,2022-06-29T09:29:39.302+02:00[Europe/Vienna],Die Heldin,1210002980,1-2820369,,,1,,,[object Object],false,Guggenmooserstr.,40,5020,Salzburg
|
||||||
|
1213781891,Michaela,Draschl CC,1,1972-08-27,,Die Heldin,1210002980,1-2820362,,,1,,,,false,H.Weixelbaumer Strasse,2/6,54/2,Puch bei Hallein
|
||||||
|
1213901770,Astrid,Pucher CC,1,1978-04-04,2022-06-28T11:22:23.284+02:00[Europe/Vienna],Die Heldin,1210002980,1-2820371,,,1,,,,false,Sportplatzweg,7,5325,Plainfeld
|
||||||
|
1213980970,Petry,Stase Agne CC,1,1989-07-29,,Die Heldin,1210002980,1-2820376,,,1,,,,false,Linzer Bundesstraße,30-12,5023,Salzburg
|
||||||
|
1214148270,Karin,Schaffer CC,1,1964-11-05,,Die Heldin,1210002980,1-2820384,,,1,,,,false,Baslerstrasse,1,5020,Salzburg
|
||||||
|
1214378610,Susanne,Gruber-Ebert CC,1,1963-03-04,2023-03-23T17:25:58.391+01:00[Europe/Vienna],Die Heldin,1210002980,1-2820395,,,1,,,,false,Neu-Aniferstraße,1,5081,Anif
|
||||||
|
1214483110,Sabine,Kralik CC,1,1976-11-07,,Die Heldin,1210002980,1-2820403,,,1,,,,false,Weideweg,1A,5111,Bürmoos
|
||||||
|
1214541960,Buket,Konstantinov,1,1989-08-27,,Die Heldin,1210002980,1-2820405,,,1,,,,false,Humboldstrasse,12/6,5020,Salzburg
|
||||||
|
1214996980,Sima,Ghawidel Asgari CC,1,1979-01-14,,Die Heldin,1210002980,1-2820411,,,1,,,,false,Trattbergstr.,216,5423,St.Koloman
|
||||||
|
1215305071,Rosi,Petsche CC,1,1969-02-17,,Die Heldin,1210002980,1-2820425,,,1,,,,false,Moosstr.,469/3,5020,Salzburg
|
||||||
|
1215477461,Helena,Danninger CC,1,1986-08-22,,Die Heldin,1210002980,1-2820435,,,1,,,,false,Tauxgasse,20,5020,Salzburg
|
||||||
|
1215441216,Ulrike,Kraft,1,1964-07-29,,Die Heldin,1210002980,1-2820430,,,1,,,,false,Unterdorfweg,23,5303,Thalgau
|
||||||
|
1215634215,Daniela,Thurner CC,1,1956-07-17,,Die Heldin,1210002980,1-2820447,,,1,,,,false,Fischbachstr.,58,5020,Salzburg
|
||||||
|
1215785124,Simone,Neuhauser,1,1966-11-28,,Die Heldin,1210002980,1-2820455,,,1,,,,false,8,6207,5020,Salzburg
|
||||||
|
1216106598,Sarah,Kuss CC,1,1995-10-18,,Die Heldin,1210002980,1-2820468,,,1,,,,false,Michael-Pacher Str.,13/12,5020,Salzburg
|
||||||
|
1215915223,Emma,Rinnerthaler,1,1966-11-21,,Die Heldin,1210002980,1-2820461,,,1,,,,false,Eberhard-Fugger-Str.,4/74,5020,Salzburg
|
||||||
|
1216106153,Susanne,Ramsauer CC,1,1986-04-03,,Die Heldin,1210002980,1-2820467,,,1,,,,false,Mascagnigasse,8,5020,Salzburg
|
||||||
|
1215882961,Anita,Deisenberger,1,1947-09-29,,Die Heldin,1210002980,1-2820460,,,1,,,,false,Roplindlweg,11,5071,Wals
|
||||||
|
1216159282,Laura,Spitzy CC,1,1957-10-19,,Die Heldin,1210002980,1-2820469,,,1,,,,false,Elsenneimstrasse,5,5020,Salzburg
|
||||||
|
1216320905,Brigitte,Schmiedbauer CC,1,1970-02-16,,Die Heldin,1210002980,1-2820478,,,1,,,,false,Friedenstraße,6c,5020,Salzburg
|
||||||
|
1216181111,Claudia,Hartl CC,1,1988-03-08,,Die Heldin,1210002980,1-2820473,,,1,,,,false,Bliemhofweg,16,5020,Salzburg
|
||||||
|
1216432802,Elke,Poltzer,1,1946-03-28,,Die Heldin,1210002980,1-2820484,,,1,,,,false,Hellbrunnerstrasse,28,5020,Salzburg
|
||||||
|
1216613893,Elfriede,Moser CC,1,1973-05-09,,Die Heldin,1210002980,1-2820488,,,1,,,,false,Laschenskystraße,32,5071,Wals
|
||||||
|
1216676572,Ines,Schütz CC,1,1974-11-19,,Die Heldin,1210002980,1-2820492,,,1,,,,false,Schwarzenbergpromenade,41,5026,Salzburg
|
||||||
|
1216917591,Emilia,Grasedieck CC,1,1978-03-30,,Die Heldin,1210002980,1-2820497,,,1,,,,false,Hermine-Weixlbaumer-Str.,5/9,5412,Puch
|
||||||
|
1217005738,Vanja,Sulic CC,1,1991-06-21,,Die Heldin,1210002980,1-2820508,,,1,,,,false,Schwetsernweg,9,5020,Salzburg
|
||||||
|
1217093292,Stefanie,Rainer CC,1,1999-05-16,,Die Heldin,1210002980,1-2820518,,,1,,,,false,Gabelsbergerstraße,11/19,5020,Salzburg
|
||||||
|
1217152063,Borbola,Török,1,1979-10-09,,Die Heldin,1210002980,1-2820530,,,1,,,,false,Leitmentzstrasse,11,5020,Salzburg
|
||||||
|
1217293230,Svitlana,Kryzhanivska,1,1986-02-23,,Die Heldin,1210002980,1-2820542,,,1,,,,false,Paracelsusstraße,30,5020,Salzburg
|
||||||
|
1217527462,Verena,Putz,1,1976-07-05,,Die Heldin,1210002980,1-2820553,,,1,,,,false,Rossfelstraße,70,83471,Berchtesgaden
|
||||||
|
1217551864,Daniela,Brandstätter,1,1982-11-13,,Die Heldin,1210002980,1-2820557,,,1,,,,false,Morzgerstr.,63,5020,Salzburg
|
||||||
|
1217544211,Vera,Lothaller,1,1969-12-09,,Die Heldin,1210002980,1-2820555,,,1,,,,false,Naglstraße,24,5121,Ostermiething
|
||||||
|
1217518621,Emma,Ebner CC,1,1961-06-10,,Die Heldin,1210002980,1-2820551,,,1,,,,false,Enzersbergstraße,34,5303,Thalgau
|
||||||
|
1217553182,Hanna,Siiki-Hölbing,1,1982-09-20,,Die Heldin,1210002980,1-2820558,,,1,,,,false,Stizhaimerstr.,13/8,5020,Salzburg
|
||||||
|
1217639311,Ingrid,Bedel CC,1,1978-03-04,,Die Heldin,1210002980,1-2820566,,,1,,,,false,Modereggweg,14,83471,Schönau
|
||||||
|
1217705473,Sonja,Frey,1,1979-11-09,,Die Heldin,1210002980,1-2820579,,,1,,,,false,Bachwinkl,12,5031,Grödig
|
||||||
|
1217656421,Elena,Kraus,1,1961-08-30,,Die Heldin,1210002980,1-2820571,,,1,,,,false,bayeischplatzerlstraße,21,5020,Salzburg
|
||||||
|
1217653123,Patricia,Diehl,1,1972-03-19,,Die Heldin,1210002980,1-2820570,,,1,,,,false,Am Goring,13,83435,Bad Reichenhall
|
||||||
|
1217714324,Renate,Fuchs,1,1972-05-31,,Die Heldin,1210002980,1-2820582,,,1,,,,false,Prödschhofstraße,17,5082,Grödig
|
||||||
|
1217770843,Antonia,Csepreghy CC,1,1976-06-07,,Die Heldin,1210002980,1-2820587,,,1,,,,false,Römerstrasse,10/1,5081,Anif
|
||||||
|
1217808882,Bojana,Jerinic CC,1,1995-04-28,,Die Heldin,1210002980,1-2820592,,,1,,,,false,Salzburgerstraße,49,5400,Hallein
|
||||||
|
1217875039,Nadja,Hinterhöller CC,1,1983-11-14,,Die Heldin,1210002980,1-2820599,,,1,,,,false,Eisgraben,14,5082,Grödig
|
||||||
|
1217826154,Hanna,Bürgschwendtner CC,1,1990-01-23,,Die Heldin,1210002980,1-2820595,,,1,,,,false,Schloss-Str.,13,5081,Anif
|
||||||
|
1217986210,Elisabeth,Harl,1,1979-03-16,,Die Heldin,1210002980,1-2820608,,,1,,,,false,Staufenstrasse,351,5084,Grossgmain
|
||||||
|
1217985901,Teresa,Lüftinger,1,1994-03-12,,Die Heldin,1210002980,1-2820609,,,1,,,,false,Marie-Andeßner Platz,5,5020,Salzburg
|
||||||
|
1217902480,Mirela,Muhic,1,1982-07-05,,Die Heldin,1210002980,1-2820600,,,1,,,,false,Rottweg,70 A,5020,Salzburg
|
||||||
|
1217910612,Sigrid,Pancis CC,1,1961-03-07,,Die Heldin,1210002980,1-2820602,,,1,,,,false,Kleingmainergasse,15a,5020,Salzburg
|
||||||
|
1218081862,Christine,Tarazi,1,1967-01-18,,Die Heldin,1210002980,1-2820618,,,1,,,,false,Schlossstrasse,26b,5020,Salzburg
|
||||||
|
1218011365,Lisa,Kühn CC,1,1996-02-04,,Die Heldin,1210002980,1-2820612,,,1,,,,false,Hans-Webersdorfer Straße,29,5020,Salzburg
|
||||||
|
1218147031,Waltraud,Wieser CC,1,1958-09-20,,Die Heldin,1210002980,1-2820622,,,1,,,,false,Mühlbachstraße,23,5412,Puch
|
||||||
|
1218354951,Anita,Koch CC,1,1981-08-17,,Die Heldin,1210002980,1-2820636,,,1,,,,false,Untersbergstraße,7,5411,Oberalm
|
||||||
|
1218505040,Monika,Weinberger,1,1970-11-07,,Die Heldin,1210002980,1-2820649,,,1,,,,false,Akademiestr.,17/3,5020,Salzburg
|
||||||
|
1218408681,Johanna,Schwarz CC,1,1981-03-06,,Die Heldin,1210002980,1-2820642,,,1,,,,false,Golsweg,50,5412,St.Jakob am Thurn
|
||||||
|
1218466604,Mariana,Deußner,1,1991-11-14,,Die Heldin,1210002980,1-2820648,,,1,,,,false,Birkenstraße,42,5020,Salzburg
|
||||||
|
1218627171,Desiree,Blattert,1,1973-10-24,,Die Heldin,1210002980,1-2820659,,,1,,,,false,Amselweg,6,5071,Wals
|
||||||
|
1218505521,Franziska,Oberholzner CC,1,1970-12-13,,Die Heldin,1210002980,1-2820651,,,1,,,,false,Traunstr.,25,5026,Aigen
|
||||||
|
1218554362,Amela,Demir CC,1,1990-10-01,,Die Heldin,1210002980,1-2820655,,,1,,,,false,Nikolaus Kroner Straße,20,5020,Salzburg
|
||||||
|
1218613671,Birgit,Enzensberger CC,1,1969-07-04,,Die Heldin,1210002980,1-2820657,,,1,,,,false,Pfarrhofgutweg,12,5400,Hallein
|
||||||
|
1218635894,Sonja,Höll CC,1,1955-07-24,,Die Heldin,1210002980,1-2820661,,,1,,,,false,Friedrich Inhauserstraße,4,5026,Salzburg
|
||||||
|
1218642396,Johanna,Helpferer,1,1948-08-19,,Die Heldin,1210002980,1-2820664,,,1,,,,false,Traunstr.,11,5026,Aigen
|
||||||
|
1218902354,Waltraud,Bonnecken,1,1968-12-05,,Die Heldin,1210002980,1-2820675,,,1,,,,false,Fischer von Erlach Straße,23,5020,Salzburg
|
||||||
|
1218924710,Andrea,Wendl CC,1,1966-07-03,,Die Heldin,1210002980,1-2820677,,,1,,,,false,Schwedenstr.,3,5020,Salzburg
|
||||||
|
1218847794,Walter,Erika,1,1952-09-21,,Die Heldin,1210002980,1-2820672,,,1,,,,false,Kreuzbergprommenade,17,5020,Salzburg
|
||||||
|
1218966091,Andrea,bsteh CC,1,1957-09-12,,Die Heldin,1210002980,1-2820679,,,1,,,,false,Moosstraße,116g,5020,Salzburg
|
||||||
|
1218847960,Bärbl,Stadlbauer,1,1943-03-29,,Die Heldin,1210002980,1-2820671,,,1,,,,false,Fischer von Erlach,13,5020,Salzburg
|
||||||
|
1219115441,Marie-Christine,Marie-Christine,1,1992-01-23,,Die Heldin,1210002980,1-2820686,,,1,,,,false,Elsbethen,50,5061,Elsbethen
|
||||||
|
1218994320,Claudia,Wallner,1,1971-11-18,,Die Heldin,1210002980,1-2820680,,,1,,,,false,Sportplatzstraße,7,5020,Salzburg
|
||||||
|
1218993542,Julia,Birnbaum CC,1,1969-03-26,,Die Heldin,1210002980,1-2820681,,,1,,,,false,Ramsaustraße,22,5324,Faistenau
|
||||||
|
1219237420,Chistiane,Frimbichler,1,1982-07-22,,Die Heldin,1210002980,1-2820688,,,1,,,,false,Ramsaustr.,1,5324,Faistenau
|
||||||
|
1219115592,Dinka,Ceperkovic CC,1,1983-10-04,,Die Heldin,1210002980,1-2820687,,,1,,,,false,Lindachstraße,2,5110,Oberndorf
|
||||||
|
1219268502,Ulrike,Ulmann CC,1,1970-10-19,,Die Heldin,1210002980,1-2820689,,,1,,,,false,Mascggnigasse,33/14,5020,Salzburg
|
||||||
|
1219453502,Julia,Ptacinova,1,1967-07-21,,Die Heldin,1210002980,1-2820699,,,1,,,,false,Borromäumstr.,11/4,5020,Salzburg
|
||||||
|
1219399051,Waltraud,Franke CC,1,1960-02-17,,Die Heldin,1210002980,1-2820698,,,1,,,,false,Eisgrabenweg,14,5081,Anif
|
||||||
|
1219527384,Margit,Prüwasser,1,1953-03-23,,Die Heldin,1210002980,1-2820707,,,1,,,,false,General Arnoldstr,17,5020,Salzburg
|
||||||
|
1219453833,Sefidin,Shlahan-Ramush,0,1956-10-10,,Die Heldin,1210002980,1-2820700,,,1,,,,false,borromäusstr.,11/4,5020,Salzburg
|
||||||
|
1219538711,Isabella,Hupf,1,1970-06-08,,Die Heldin,1210002980,1-2820709,,,1,,,,false,Stadlerweg,15a,5340,St. Gilgen
|
||||||
|
1219459283,Patricia,Späth CC,1,1981-01-17,,Die Heldin,1210002980,1-2820702,,,1,,,,false,Konnrad-Seydenstraße,3,5301,Eugendorf
|
||||||
|
1219463653,Susanna,Payer CC,1,1957-08-09,,Die Heldin,1210002980,1-2820703,,,1,,,,false,Nonnthaler-Hauptsrasse,9a,5020,Salzburg
|
||||||
|
1219515831,Sibel,Nowatschek CC,1,1998-06-09,,Die Heldin,1210002980,1-2820705,,,1,,,,false,Klessheimallee,53b,5020,Salzburg
|
||||||
|
1219625274,Margit,Ebner 2.0,1,1971-11-08,,Die Heldin,1210002980,1-2820716,,,1,,,,false,Brunnleitenweg,7,5061,Elsbethen
|
||||||
|
1219552525,Nadine,Bernegger CC,1,1985-11-29,,Die Heldin,1210002980,1-2820711,,,1,,,,false,Moostraße,98b,5020,Salzburg
|
||||||
|
1219612272,Denise,San CC,1,1991-08-25,,Die Heldin,1210002980,1-2820714,,,1,,,,false,Südtirolerstraße,71/14,5500,Bischofshofen
|
||||||
|
1219649524,Barbara,Schmalzmaier,1,1978-03-09,,Die Heldin,1210002980,1-2820719,,,1,,,,false,Moartalstr.,379/2,5440,Golling
|
||||||
|
1219610622,Sabine,Schörghofer CC,1,1970-03-23,,Die Heldin,1210002980,1-2820713,,,1,,,,false,Salzweg,35,508L,Grödig
|
||||||
|
1219649681,Liliane,Ebner,1,1951-12-21,,Die Heldin,1210002980,1-2820718,,,1,,,,false,Rosittenstraße,2,5082,2
|
||||||
|
1220189000,Alexandra,CC Luger,1,1968-05-09,,Die Heldin,1210002980,1-2820725,,,1,,,,false,Auerspergstraße,52,5020,Salzburg
|
||||||
|
1220208801,Saskia,Pesendorfer CC,1,1991-04-10,,Die Heldin,1210002980,1-2820726,,,1,,,,false,Albert- Schweitzerstr.,17,5020,Salzburg
|
||||||
|
1219657520,Anita,Brandauer CC,1,1989-04-29,,Die Heldin,1210002980,1-2820721,,,1,,,,false,Moos,72,5431,Kuchl
|
||||||
|
1220295051,Beate,Fenninger CC,1,1975-10-30,,Die Heldin,1210002980,1-2820729,,,1,,,,false,Ehrenbachstraße,22,5161,Elixhausen
|
||||||
|
1219708251,Susanna,Andreini,1,1965-06-22,,Die Heldin,1210002980,1-2820723,,,1,,,,false,Fürstenallee,52,5020,Salzburg
|
||||||
|
1219657801,Verena,Kraus CC,1,1990-11-20,,Die Heldin,1210002980,1-2820722,,,1,,,,false,Martkl,166c,5431,Kuchl
|
||||||
|
1220377862,Andrea,Hitzfeld CC,1,1980-10-10,,Die Heldin,1210002980,1-2820733,,,1,,,,false,Franz-Josef Straße,23,5020,Salzburg
|
||||||
|
1220416773,Sabine,CC Becker,1,1984-03-21,,Die Heldin,1210002980,1-2820737,,,1,,,,false,Gattsreithweg,11,5301,Eugendorf
|
||||||
|
1220312675,Andrea,Fuchs CC,1,1966-07-13,,Die Heldin,1210002980,1-2820731,,,1,,,,false,Moorweg,3,5071,Wals
|
||||||
|
1220391462,Gabriela,Kovacs CC,1,1964-09-05,,Die Heldin,1210002980,1-2820736,,,1,,,,false,Gaisbergstraße,9A,5020,Salzburg
|
||||||
|
1220312831,Sarah,Bsteh CC,1,1988-03-30,,Die Heldin,1210002980,1-2820730,,,1,,,,false,Gärtnerstraße,26,5020,Salzburg
|
||||||
|
1220378021,Floripes,Andexer CC,1,1961-11-23,,Die Heldin,1210002980,1-2820734,,,1,,,,false,Hühnerauweg,24,5400,Hallein
|
||||||
|
1220564774,Nicole,CC Wintersteller,1,1980-07-28,,Die Heldin,1210002980,1-2820748,,,1,,,,false,Hauptstraße,6/15,5082,Grödig
|
||||||
|
1220477450,Sophia,Pogadl CC,1,2008-08-11,,Die Heldin,1210002980,1-2820741,,,1,,,,false,Gaisbergweg,7,5081,Anif
|
||||||
|
1220584882,Veronika,Einberger,1,1962-08-09,,Die Heldin,1210002980,1-2820749,,,1,,,,false,Friedenstraße,2A,5020,Salzburg
|
||||||
|
1220521510,Catalin-Laur,Alixandru,0,2000-05-08,,Die Heldin,1210002980,1-2820745,,,1,,,,false,Wagrainerstraße,12,5600,Pongau
|
||||||
|
1220660332,Aloise,Ebner CC,1,1963-05-28,,Die Heldin,1210002980,1-2820752,,,1,,,,false,Oberfeld,6a,5082,Grödig
|
||||||
|
1220678844,Angelika CC,Russold,1,1974-04-07,,Die Heldin,1210002980,1-2820755,,,1,,,,false,Ramsaustraße,88,5324,Faistenau
|
||||||
|
1220679180,Eva,Frisch CC,1,1983-08-12,,Die Heldin,1210002980,1-2820754,,,1,,,,false,Adam-Müller-Gzttenbrunstraße,32,5020,Salzburg
|
||||||
|
1220697841,Andrea,Berger CC,1,1978-09-03,,Die Heldin,1210002980,1-2820757,,,1,,,,false,Kastnerweg,7,5081,Anif
|
||||||
|
1220736303,Melissa,Neschki CC,1,2001-04-14,,Die Heldin,1210002980,1-2820759,,,1,,,,false,Albert-Schweitzer-Straße,29,5020,Salzburg
|
||||||
|
1220668071,Ulrike,Tschinkel CC,1,1962-04-20,,Die Heldin,1210002980,1-2820753,,,1,,,,false,Kreuzhofweg,24,5020,Salzburg
|
||||||
|
1220861782,Sandra,Doppler CC,1,1975-02-07,,Die Heldin,1210002980,1-2820766,,,1,,,,false,Pfeifferhofstraße,3,5020,Salzburg
|
||||||
|
1220798800,Helene,Hostalek,1,1944-10-18,,Die Heldin,1210002980,1-2820763,,,1,,,,false,Siebenstätterstraße,29,5020,Salzburg
|
||||||
|
1220822661,Marion,Behrend,1,1946-10-30,,Die Heldin,1210002980,1-2820765,,,1,,,,false,Goethessttraße,3,5020,Salzburg
|
||||||
|
1220866351,Elfriede,Brandstätter CC,1,1968-03-31,,Die Heldin,1210002980,1-2820767,,,1,,,,false,Priesterbauchweg,46,5400,Hallein
|
||||||
|
1220890801,Nathalie,Stadnyk,1,1979-02-24,,Die Heldin,1210002980,1-2820768,,,1,,,,false,Rudolf-Bieblstraße,44,5020,Salzburg
|
||||||
|
1221138392,Maria,Brandauer CC,1,1958-12-27,,Die Heldin,1210002980,1-2820777,,,1,,,,false,Sonnenscheinweg,8,5400,Hallein
|
||||||
|
1221089505,Christine,Löffelberger CC,1,1991-05-02,,Die Heldin,1210002980,1-2820775,,,1,,,,false,Föhrenweg,3,5081,Anif
|
||||||
|
1221124052,Anna,Högg CC,1,1990-03-02,,Die Heldin,1210002980,1-2820776,,,1,,,,false,Kaigasse 38,2,5020,Salzburg
|
||||||
|
1221145464,Nicole,Wintersteller,1,1980-07-28,,Die Heldin,1210002980,1-2820779,,,1,,,,false,Hauptstraße,6/15,5082,Grödig
|
||||||
|
1220974170,Karin,Holeczy,1,1956-11-13,,Die Heldin,1210002980,1-2820770,,,1,,,,false,Hans Schmidingerstraße,8,5303,Thalgau
|
||||||
|
1221090180,Elisabeth,Denkl,1,1995-11-01,,Die Heldin,1210002980,1-2820774,,,1,,,,false,Weizensteinerstraße,17,5020,Sakzburg
|
||||||
|
1221145610,Aloise,Ebner,1,1963-05-28,,Die Heldin,1210002980,1-2820778,,,1,,,,false,Oberfeld,6A,5082,Grödig
|
||||||
|
1220983911,Petra,Schmid CC,1,1993-08-03,,Die Heldin,1210002980,1-2820771,,,1,,,,false,Fischhornstraße,8,5020,Salzburg
|
||||||
|
1221006072,Sherin,Shahin,1,1981-11-25,,Die Heldin,1210002980,1-2820772,,,1,,,,false,Rossegerstraße,12,5020,Salzburg
|
||||||
|
1221160106,Andrea,Neater,1,1951-05-20,,Die Heldin,1210002980,1-2820782,,,1,,,,false,Pezolt Gasse,12,5020,Salzburg
|
||||||
|
1221193770,Simone,Thaler CC,1,1981-05-15,,Die Heldin,1210002980,1-2820784,,,1,,,,false,Bachweg,23,5412,Puch
|
||||||
|
1221202933,Marita,Sporeni CC,1,1970-05-15,,Die Heldin,1210002980,1-2820785,,,1,,,,false,Winklerstraße,8/12,5400,Hallein
|
||||||
|
1221160790,Albina,Kustrah,1,1980-06-16,,Die Heldin,1210002980,1-2820781,,,1,,,,false,Ludwig Richter Straße,49,5026,Salzburg
|
||||||
|
1221177041,Daniela,Rünzler,1,1971-10-29,,Die Heldin,1210002980,1-2820783,,,1,,,,false,Schallmoser Hauptstr.,6a,5020,Salzburg
|
||||||
|
1221146193,Angelika,Grünanger CC,1,1961-10-02,,Die Heldin,1210002980,1-2820780,,,1,,,,false,Krögerbaumstraße,4,5411,Oberalm
|
||||||
|
1221387190,Maja,Stevic,1,1994-12-28,,Die Heldin,1210002980,1-2820795,,,1,,,,false,Otto-Glöckel Straße,1,5082,Grödig
|
||||||
|
1221313882,Medina,Sarsakova,1,2005-09-02,,Die Heldin,1210002980,1-2820793,,,1,,,,false,Laufenstraße,44,5020,Salzurg
|
||||||
|
1221387192,Sabine,Heigl CC,1,1988-04-12,,Die Heldin,1210002980,1-2820796,,,1,,,,false,Schrannengasse,10/13,5020,Salzburg
|
||||||
|
1221387655,Anke,Ranggetinger CC,1,1983-08-02,,Die Heldin,1210002980,1-2820798,,,1,,,,false,Fürstenallee,35,5020,Salzburg
|
||||||
|
1221386847,Mirsada,Adiloski,1,1981-06-20,,Die Heldin,1210002980,1-2820797,,,1,,,,false,Karlheinz Böhmstraße,6/10,5082,Grödig
|
||||||
|
1221429311,Monika,Lovric CC,1,1976-01-25,,Die Heldin,1210002980,1-2820799,,,1,,,,false,Halleinerlandestraße,,5411,Oberalm
|
||||||
|
1221366351,Ulrike,Hafner,1,1957-05-20,,Die Heldin,1210002980,1-2820794,,,1,,,,false,Franz-Martin-Straße,4A,5020,Salzburg
|
||||||
|
1221455550,Erika,Thaler CC,1,1957-07-23,,Die Heldin,1210002980,1-2820800,,,1,,,,false,Stanzingstraße,1,5061,Glasenbach
|
||||||
|
1221525552,Jaqueline,Wirrer,1,1993-12-16,,Die Heldin,1210002980,1-2820806,,,1,,,,false,Josef-Hautthalerstraße,43a,5071,Wals
|
||||||
|
1221544102,Shuena,Yunus Oma CC,1,1973-12-12,,Die Heldin,1210002980,1-2820807,,,1,,,,false,Röcklbrunnerstraße,18-4-28,5020,Salzburg
|
||||||
|
1221524182,Eva,Wenzl CC,1,1981-07-01,,Die Heldin,1210002980,1-2820804,,,1,,,,false,Lindenweg,22,5120,St. Partaleon
|
||||||
|
1221582372,Sabrina Karg,Neumann CC,1,1988-10-22,,Die Heldin,1210002980,1-2820808,,,1,,,,false,Kleingmainer Gasse,23/A,5020,Salzburg
|
||||||
|
1221616432,Alxeandra,Quintus CC,1,1979-07-31,,Die Heldin,1210002980,1-2820809,,,1,,,,false,kleingmainer Gasse,23a,5020,Salzburg
|
||||||
|
1221854131,Erhard,Imelda CC,1,1976-01-30,,Die Heldin,1210002980,1-2820821,,,1,,,,false,Höhenroid,21/2,5203,Köstendorf
|
||||||
|
1221861641,Marica,Ketonic CC,1,1958-12-27,,Die Heldin,1210002980,1-2820823,,,1,,,,false,St. Julienstraße,27/2/9,5020,Salzburg
|
||||||
|
1221859513,Eva,Brudl-Schober CC,1,1975-06-27,,Die Heldin,1210002980,1-2820822,,,1,,,,false,Kasermühlweg,3/3,5411,Oberalm
|
||||||
|
1222007641,Dragana,Stankovic CC,1,1995-07-26,,Die Heldin,1210002980,1-2820829,,,1,,,,false,Geyereck,11,5082,Grödig
|
||||||
|
1222035092,Sabine,Schneider,1,1979-03-23,,Die Heldin,1210002980,1-2820833,,,1,,,,false,Wimberg,170,5421,Adnet
|
||||||
|
1222024470,Ümmü,Ata CC,1,1987-06-09,,Die Heldin,1210002980,1-2820831,,,1,,,,false,Neualmstraße,6,5400,Hallein
|
||||||
|
1221712733,Eder,Annemarie CC,1,1960-12-10,,Die Heldin,1210002980,1-2820814,,,1,,,,false,Staufenweg,22,5400,Taxach/ Rif
|
||||||
|
1221712552,Ingeborg,Schuffert CC,1,1970-02-10,,Die Heldin,1210002980,1-2820813,,,1,,,,false,Fischhornstraße,39,5020,Salzburg
|
||||||
|
1222007291,Barbara,Flak cc,1,1974-01-10,,Die Heldin,1210002980,1-2820830,,,1,,,,false,Nicolaus Gartner,10,5303,Thalgau
|
||||||
|
1221470963,Mirsada,Adiloski CC,1,1981-06-20,,Die Heldin,1210002980,1-2820802,,,1,,,,false,Karlheinz Böhmstraße,6/10,5082,Grödig
|
||||||
|
1221827693,Miriam CC,Knoll,1,1984-12-22,,Die Heldin,1210002980,1-2820818,,,1,,,,false,Hammerstraße,42,5411,Oberalm
|
||||||
|
1221845692,Ursula,Berk CC,1,1969-05-11,,Die Heldin,1210002980,1-2820820,,,1,,,,false,Bäslestraße,8,5020,Salzburg
|
||||||
|
1221873102,Jaqueline,Wertschnig CC,1,1991-08-13,,Die Heldin,1210002980,1-2820824,,,1,,,,false,Rettenbacherstraße,13,5020,Salzburg
|
||||||
|
1221896554,Serpil,Ibrahim,1,1978-11-19,,Die Heldin,1210002980,1-2820826,,,1,,,,false,Fürstensallee,36F / 8,5020,Salzburg
|
||||||
|
1221988662,Catalina,Mitu CC,1,1988-06-20,,Die Heldin,1210002980,1-2820828,,,1,,,,false,Schiessstattstraße,27,5020,Salzurg
|
||||||
|
1221926573,Dragana,Dokic CC,1,1993-03-31,,Die Heldin,1210002980,1-2820827,,,1,,,,false,Salzachtalbundestraße,12,5081,Anif
|
||||||
|
1221692453,Adriane,Steiner,1,1964-06-12,,Die Heldin,1210002980,1-2820812,,,1,,,,false,Ford-Parscherstraße,8,5071,Wals
|
||||||
|
1221834705,Tanja CC,Winkler,1,1975-06-01,,Die Heldin,1210002980,1-2820819,,,1,,,,false,Auweg,19D,5400,Taxach
|
||||||
|
1222055012,Paulus,Edtih CC,1,1964-09-19,,Die Heldin,1210002980,1-2820834,,,1,,,,false,Adlgasserweg,17,5020,Salzburg
|
||||||
|
1221467740,Brigitte,Melnik,1,1981-05-24,,Die Heldin,1210002980,1-2820801,,,1,,,,false,Franztalerstraße,4,5020,Salzburg
|
||||||
|
1221524184,Ulrike,Hafner CC,1,1957-05-20,,Die Heldin,1210002980,1-2820805,,,1,,,,false,Franz martin Straße,4a,5020,Salzburg
|
||||||
|
1221628931,Padungchit,Weber,1,1948-12-26,,Die Heldin,1210002980,1-2820810,,,1,,,,false,Süssmayerstraße,14,5020,Salzburg
|
||||||
|
1221508820,Sabine,Schneider CC,1,1976-03-23,,Die Heldin,1210002980,1-2820803,,,1,,,,false,Wimberg,170,5421,Adnet
|
||||||
|
1221650972,Maria,Wischner CC,1,1964-10-29,,Die Heldin,1210002980,1-2820811,,,1,,,,false,Anton-Graf-Straße,6a,5020,Salzburg
|
||||||
|
1221881151,Maria,Brandauer,1,1958-12-27,,Die Heldin,1210002980,1-2820825,,,1,,,,false,Sonnenscheinweg,,5400,Hallein
|
||||||
|
1222028942,Desiree,Moser CC,1,1989-11-27,,Die Heldin,1210002980,1-2820832,,,1,,,,false,Schlossstraße,24/7,5020,Salzburg
|
||||||
|
1210004169,Melanie,Steinhagen,1,1991-11-10,,Die Heldin,1210002980,1-29,,,1,,,,false,Gartenstraße,52,5072,Siezenheim
|
||||||
|
1210004243,Regina,Putz CC,1,1972-03-12,,Die Heldin,1210002980,1-33,,,1,,,,false,Georgenberg,349,5431,Kuchl
|
||||||
|
1210004244,Nicole,Schwaiger CC,1,1964-06-29,2020-03-06T15:05:43.131+01:00[Europe/Vienna],Die Heldin,1210002980,1-34,,,1,,,,false,Schiffhofweg,9,5020,Salzburg
|
||||||
|
1210004351,Melanie,Ruckenthaler,1,1984-10-14,,Die Heldin,1210002980,1-41,,,1,,,,false,Versorgungshausstrasse,22,5020,Salzburg
|
||||||
|
1210042263,Karin,Kaindl,1,1960-02-01,,Die Heldin,1210002980,1-446430,,,1,,,,false,Dr. Sylvesterstr.,12,5020,Salzburg
|
||||||
|
1210044959,Daniela,Hemetinger CC,1,1982-12-19,,Die Heldin,1210002980,1-446716,,,1,,,,false,Generationenweg,12,5412,Puch
|
||||||
|
1210045815,Selina,Brenner CC,1,1976-09-30,,Die Heldin,1210002980,1-446802,,,1,,,,false,Henry-Dunant-Straße,44/24,5020,Salzburg
|
||||||
|
1210003966,Richarda,Sunkler,1,1949-12-23,2020-06-08T10:23:12.326+02:00[Europe/Vienna],Die Heldin,1210002980,1-6,,,1,,,,false,Wiesbauerstr.,6,5020,Salzburg
|
||||||
|
273
customers.html
Normal file
273
customers.html
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Customers – 23.2.2026</title>
|
||||||
|
<style>
|
||||||
|
body { font-family: sans-serif; font-size: 13px; padding: 1rem; }
|
||||||
|
h1 { margin-bottom: 0.5rem; }
|
||||||
|
p.meta { color: #666; margin-bottom: 1rem; }
|
||||||
|
table { border-collapse: collapse; width: 100%; }
|
||||||
|
th, td { border: 1px solid #ccc; padding: 4px 8px; text-align: left; white-space: nowrap; }
|
||||||
|
th { background: #f0f0f0; position: sticky; top: 0; }
|
||||||
|
tr:nth-child(even) { background: #fafafa; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Customer Export</h1>
|
||||||
|
<p class="meta">Generated: 2026-02-23T20:29:12.712Z | Total: 248</p>
|
||||||
|
<table>
|
||||||
|
<thead><tr><th>databaseId</th><th>firstname</th><th>lastname</th><th>gender</th><th>dateOfBirth</th><th>lastCheckIn</th><th>facilityName</th><th>facilityId</th><th>customerNumber</th><th>cardNumber</th><th>lockerKey</th><th>customerStatus</th><th>purchasedContingentCode</th><th>purchasedContingentType</th><th>imageUrl</th><th>checkedIn</th><th>street</th><th>houseNumber</th><th>zip</th><th>city</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td>1210004724</td><td>Monika</td><td>Manzl</td><td>1</td><td>1947-09-21</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-10064</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Georg-Klopp-Straße</td><td>8</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210004921</td><td>Ernestine</td><td>Meilinger CC</td><td>1</td><td>1967-10-25</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-10173</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Minnesheimerstraße</td><td>20</td><td>5023</td><td>Sbg</td></tr>
|
||||||
|
<tr><td>1210004824</td><td>Evelyn</td><td>Schmidjell</td><td>1</td><td>1944-05-24</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-10105</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Bachwinkl</td><td>9</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1210005524</td><td>Stanisaljevic</td><td>Lydia</td><td>1</td><td>1974-07-28</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-11162</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Josef-Resslsrt.</td><td>19</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210005817</td><td>Brigitte</td><td>Raffetseder CC</td><td>1</td><td>1958-02-27</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-11260</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>K.H. Waggerl</td><td>Str.</td><td>5020</td><td>Sbg</td></tr>
|
||||||
|
<tr><td>1210005918</td><td>Eva</td><td>Hummer CC</td><td>1</td><td>1954-08-11</td><td>2024-01-19T10:18:37.216+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-11301</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Salzweg</td><td>34</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1210006410</td><td>Helene</td><td>Buczolits cc</td><td>1</td><td>1951-10-03</td><td>2024-04-12T10:52:49.276+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-11441</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Erentrudisstr.</td><td>6</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210006415</td><td>Johanna</td><td>Zehetgruber CC</td><td>1</td><td>1950-07-05</td><td>2022-06-10T07:53:06.547+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-11481</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Naumanng.</td><td>6</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210007405</td><td>Ulrike</td><td>Koushan CC</td><td>1</td><td>1947-07-01</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-12132</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Leitmeritzstr.</td><td>4/38</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210007507</td><td>Petra</td><td>Kubicza CC</td><td>1</td><td>1988-11-05</td><td>2020-10-27T17:52:12.583+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-12155</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hochthronstr.</td><td>13</td><td>5083</td><td>St. Leonhard</td></tr>
|
||||||
|
<tr><td>1210007609</td><td>Helga</td><td>Zach CC</td><td>1</td><td>1958-04-03</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-12172</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rene Marcic Strasse</td><td>4/11</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210008886</td><td>Andrea</td><td>Lipold CC</td><td>1</td><td>1960-05-07</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-12427</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Glanhofen</td><td>5.</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210009582</td><td>Kerstin</td><td>Volz CC</td><td>1</td><td>1989-05-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-13193</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Keine Daten</td><td>0</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210009871</td><td>Manuela</td><td>Spießberger CC</td><td>1</td><td>1973-06-29</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-13296</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Brunnwiesweg</td><td>1</td><td>5204</td><td>Strasswalchen</td></tr>
|
||||||
|
<tr><td>1210011422</td><td>Tanja</td><td>Lipold CC</td><td>1</td><td>1989-11-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-14137</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Glanhofen</td><td>5</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210011424</td><td>Katorina</td><td>Virojic CC</td><td>1</td><td>1985-07-30</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-14151</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Borromäumstraße</td><td>17/4</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210011420</td><td>Sabine</td><td>Werner CC</td><td>1</td><td>1964-05-12</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-14117</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Minnesheimstraße</td><td>8b</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210011510</td><td>Christine</td><td>Hucke CC</td><td>1</td><td>1945-07-01</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-14275</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Franz Schalk Str.</td><td>6</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210011511</td><td>Jacqueline</td><td>Rieder CC</td><td>1</td><td>1992-07-21</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-14278</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Bayernweg</td><td>5</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1210011514</td><td>Brunhilde</td><td>Klammer CC</td><td>1</td><td>1954-07-28</td><td>2024-06-06T09:54:48.203+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-14318</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Naumanngasse</td><td>23/4</td><td>5020</td><td>Sbg</td></tr>
|
||||||
|
<tr><td>1210012025</td><td>Patricia</td><td>Nethalo</td><td>1</td><td>1989-01-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-14471</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Bundschuhstrasse</td><td>20</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210012694</td><td>Barbara</td><td>Pamperl</td><td>1</td><td>1970-01-26</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-15009</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>F.-Inhauser-str.</td><td>4</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210013463</td><td>Helga</td><td>Pentek</td><td>1</td><td>1949-04-27</td><td>2021-06-09T08:19:24.894+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-15094</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Otto-holzbauerstraße</td><td>11</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210015065</td><td>Verena</td><td>Pogadl CC</td><td>1</td><td>1986-04-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-15309</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Gaißbergweg</td><td>7/1</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1210015342</td><td>Claudia</td><td>Markut</td><td>1</td><td>1969-08-01</td><td>2022-03-03T07:51:16.894+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-15342</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Pabensteinstr. 7</td><td>0</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1210015618</td><td>Margit</td><td>Egeo CC</td><td>1</td><td>1967-08-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-15383</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Quellenweg</td><td>9</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210015897</td><td>Edith</td><td>Stromberger CC</td><td>1</td><td>1955-05-31</td><td>2020-02-21T07:49:20.002+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-15414</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Karl Schoenherrstr.</td><td>8</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210015985</td><td>Barbara</td><td>Geiger CC</td><td>1</td><td>1975-09-06</td><td>2021-07-05T15:24:44.126+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-16029</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Höglwörthweg</td><td>33</td><td>5020</td><td>Sbg</td></tr>
|
||||||
|
<tr><td>1210015984</td><td>Barbara</td><td>Pamperl CC</td><td>1</td><td>1970-01-26</td><td>2021-10-18T17:49:50.830+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-16028</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>F.-Inhauser-Str.</td><td>4</td><td>5020</td><td>Sbg</td></tr>
|
||||||
|
<tr><td>1210015988</td><td>Ursula</td><td>Wegmayr</td><td>1</td><td>1958-10-23</td><td>2023-09-12T10:29:36.170+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-16035</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Pfeifferhoferstr.</td><td>12</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210016072</td><td>Ingrid</td><td>Fuchs</td><td>1</td><td>1958-12-29</td><td>2024-01-24T08:34:25.577+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-16056</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Gaisberg</td><td>1</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210016075</td><td>Erna</td><td>Glechner CC</td><td>1</td><td>1963-04-27</td><td>2022-05-23T07:48:03.946+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-16061</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Salzachweg</td><td>55</td><td>5061</td><td>Elsbethen</td></tr>
|
||||||
|
<tr><td>1210016170</td><td>Karin</td><td>Geiger CC</td><td>1</td><td>1972-04-18</td><td>2020-07-08T17:26:08.037+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-16078</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Mohrstr.</td><td>9</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210016173</td><td>Monika</td><td>Posch</td><td>1</td><td>1952-01-25</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-16082</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schleiferbachweg</td><td>1</td><td>5023</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210016177</td><td>Dorota</td><td>Bednarz CC</td><td>1</td><td>1982-10-28</td><td>2020-02-21T11:02:47.539+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-16092</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kobergerweg</td><td>10</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210016179</td><td>Ursula</td><td>Kroisenbrunner CC</td><td>1</td><td>1943-06-25</td><td>2023-11-13T08:56:55.447+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-16098</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Otto Glöckel Str.</td><td>17/22</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1210016272</td><td>Angelika</td><td>Spraider CC</td><td>1</td><td>1982-08-16</td><td>2020-03-13T17:27:11.084+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-16108</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kaiser-Karl-Strasse</td><td>3/4</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210016643</td><td>Susanne</td><td>Felsenberger CC</td><td>1</td><td>1975-03-18</td><td>2022-01-14T07:53:25.420+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-17005</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Friedenstr.</td><td>20</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210016646</td><td>Michaela</td><td>Schubeck-John CC</td><td>1</td><td>1971-01-25</td><td>2023-01-19T17:15:07.943+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-17013</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rainweg</td><td>29</td><td>5102</td><td>Anthering</td></tr>
|
||||||
|
<tr><td>1210016842</td><td>Sylvia</td><td>Krallinger CC</td><td>1</td><td>1959-12-21</td><td>2023-09-04T07:48:49.318+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-17054</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Achenpromenade</td><td>12</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1210016746</td><td>Evelyn</td><td>Hettegger CC</td><td>1</td><td>1979-08-16</td><td>2022-10-10T10:26:26.492+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-17040</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Friedenstrasse</td><td>2/3</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210017036</td><td>Sarah</td><td>Hyden</td><td>1</td><td>1987-09-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-17090</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hugo-Wolf-Str.</td><td>14/2</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210017032</td><td>Viktoria</td><td>Pichler CC</td><td>1</td><td>1991-01-01</td><td>2020-09-21T14:45:26.929+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-17086</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Ahornstr.</td><td>21</td><td>83451</td><td>Piding</td></tr>
|
||||||
|
<tr><td>1210017120</td><td>Susanne</td><td>Zwatz CC</td><td>1</td><td>1975-03-04</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-17094</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Fürstenallee</td><td>35/9</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210016747</td><td>Anita</td><td>Gimpl CC</td><td>1</td><td>1993-11-14</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-17045</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Reinbergweg</td><td>5</td><td>5061</td><td>Elsbethen</td></tr>
|
||||||
|
<tr><td>1210017215</td><td>Michaela</td><td>Seer-Hetz CC</td><td>1</td><td>1976-06-27</td><td>2024-06-21T09:55:46.960+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-18016</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Johann-Herbst-Straße</td><td>18</td><td>5061</td><td>Elsbethen</td></tr>
|
||||||
|
<tr><td>1210017492</td><td>Bettina</td><td>Holzer CC</td><td>1</td><td>1985-02-23</td><td>2022-07-11T10:47:38.078+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-18062</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Willhelm von Exner Straße</td><td>20/2</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210017684</td><td>Elena</td><td>Fercher CC</td><td>1</td><td>2001-05-05</td><td>2020-08-24T17:46:09.415+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-18090</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Usnerweg</td><td>4</td><td>5412</td><td>Puch</td></tr>
|
||||||
|
<tr><td>1210017979</td><td>Heike</td><td>strobl CC</td><td>1</td><td>1983-05-09</td><td>2020-06-12T08:45:13.939+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-18130</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Weidenweg</td><td>1</td><td>5061</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210017870</td><td>Cornelia</td><td>Egger cc</td><td>1</td><td>1980-03-14</td><td>2021-09-08T07:55:28.640+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-18110</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Staufenstraße</td><td>11</td><td>5071</td><td>Wals</td></tr>
|
||||||
|
<tr><td>1210017973</td><td>Sorina</td><td>Heiser</td><td>1</td><td>1965-05-31</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-18124</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Vierthalerstraße</td><td>1</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1210018065</td><td>Claudia</td><td>Quehenberger</td><td>1</td><td>1967-09-10</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-18300</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Ernst-Grein-Str.</td><td>6A</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210018367</td><td>Loredana</td><td>Niculescu</td><td>1</td><td>1996-08-28</td><td>2020-06-05T16:51:03.192+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-19035</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Salzbuger Strasse</td><td>29</td><td>5411</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1210018760</td><td>Katharina</td><td>Neureiter CC</td><td>1</td><td>1984-01-18</td><td>2021-07-08T08:56:01.702+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-19068</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Scharten</td><td>22</td><td>5450</td><td>Werfen</td></tr>
|
||||||
|
<tr><td>1210048017</td><td>Christina</td><td>Krispler CC</td><td>1</td><td>1987-04-21</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2818141</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hinterebenau</td><td>10</td><td>23</td><td>Ebenau</td></tr>
|
||||||
|
<tr><td>1210047336</td><td>Olga</td><td>Damm</td><td>1</td><td>1978-04-18</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820061</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Adnet</td><td>26</td><td>5421</td><td>Adnet</td></tr>
|
||||||
|
<tr><td>1210047338</td><td>Cornelia</td><td>Ludwig CC</td><td>1</td><td>2000-11-30</td><td>2020-02-11T08:17:14.394+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820063</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Neutorstr.</td><td>19</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210047523</td><td>Eva</td><td>Sieberer CC</td><td>1</td><td>1985-11-13</td><td>2022-04-04T09:30:03.582+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820078</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Heimstraße 12</td><td>a</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210047428</td><td>Gudrun</td><td>Körbler CC</td><td>1</td><td>1961-02-27</td><td>2022-05-19T09:52:17.022+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820073</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Samstrasse</td><td>38</td><td>5023</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210047526</td><td>Heidrun</td><td>Lehner CC</td><td>1</td><td>1964-09-19</td><td>2020-03-13T08:12:16.463+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820081</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Seppenpointstr.</td><td>374</td><td>5412</td><td>Puch</td></tr>
|
||||||
|
<tr><td>1210126522</td><td>Tanja</td><td>Niedermoser</td><td>1</td><td>1983-01-11</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820107</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Dorfstrasse</td><td>20</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1210126520</td><td>Nadine</td><td>Krebs</td><td>1</td><td>1993-09-19</td><td>2020-07-02T17:20:27.349+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820100</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kreuzbrücklweg</td><td>11</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210125493</td><td>Gisela</td><td>König</td><td>1</td><td>1964-12-20</td><td>2022-04-26T18:29:58.831+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820106</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Bairau</td><td>43</td><td>5511</td><td>Hüttau</td></tr>
|
||||||
|
<tr><td>1210220870</td><td>Barbara</td><td>Schweiger CC</td><td>1</td><td>1975-12-15</td><td>2022-01-27T10:05:05.419+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820139</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Haunsbergstr.</td><td>93</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210206270</td><td>Dummy</td><td>Dummy</td><td>1</td><td>2019-12-24</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820131</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Alpenstr.</td><td>54</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210216991</td><td>Beate</td><td>Kirschenhofer</td><td>1</td><td>1980-03-07</td><td>2020-08-06T07:47:14.732+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820136</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Stegweg</td><td>2</td><td>5061</td><td>Elsbethen</td></tr>
|
||||||
|
<tr><td>1210274110</td><td>Ayhan</td><td>Kirbas</td><td>1</td><td>1968-07-19</td><td>2022-10-21T08:22:29.354+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820147</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Konradlaibstrasse</td><td>10a</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210462550</td><td>Irina</td><td>Bayrhammer</td><td>1</td><td>1983-07-16</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820178</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hintersee</td><td>42</td><td>5324</td><td>Hintersee</td></tr>
|
||||||
|
<tr><td>1210876390</td><td>Eva-Maria</td><td>heis</td><td>1</td><td>1991-07-24</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820204</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Franz-ofner-Strasse</td><td>1</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210876570</td><td>Silvia</td><td>Suler</td><td>1</td><td>1979-02-07</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820205</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Siezenheimerstrasse</td><td>66</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1211550510</td><td>Petra</td><td>Kropiunik-wirlandner CC</td><td>1</td><td>1972-02-08</td><td>2022-09-15T16:25:13.232+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820260</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Tannenweg</td><td>5/4</td><td>5400 hallein</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1212039590</td><td>Helen</td><td>Roessler CC</td><td>2</td><td>1988-02-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820278</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rifer Hauptstr.</td><td>94c</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1212274080</td><td>Raffaela</td><td>Egger</td><td>1</td><td>1986-08-07</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820286</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rosengasse</td><td>10</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1212331920</td><td>Claudia</td><td>Masarie</td><td>1</td><td>1973-03-16</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820290</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>klessheimerstrasse allee</td><td>28</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1213860190</td><td>Karin</td><td>Steingruber</td><td>1</td><td>1986-01-15</td><td>2022-06-29T09:29:39.302+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820369</td><td></td><td></td><td>1</td><td></td><td></td><td>[object Object]</td><td>false</td><td>Guggenmooserstr.</td><td>40</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1213781891</td><td>Michaela</td><td>Draschl CC</td><td>1</td><td>1972-08-27</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820362</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>H.Weixelbaumer Strasse</td><td>2/6</td><td>54/2</td><td>Puch bei Hallein</td></tr>
|
||||||
|
<tr><td>1213901770</td><td>Astrid</td><td>Pucher CC</td><td>1</td><td>1978-04-04</td><td>2022-06-28T11:22:23.284+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820371</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Sportplatzweg</td><td>7</td><td>5325</td><td>Plainfeld</td></tr>
|
||||||
|
<tr><td>1213980970</td><td>Petry</td><td>Stase Agne CC</td><td>1</td><td>1989-07-29</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820376</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Linzer Bundesstraße</td><td>30-12</td><td>5023</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1214148270</td><td>Karin</td><td>Schaffer CC</td><td>1</td><td>1964-11-05</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820384</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Baslerstrasse</td><td>1</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1214378610</td><td>Susanne</td><td>Gruber-Ebert CC</td><td>1</td><td>1963-03-04</td><td>2023-03-23T17:25:58.391+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-2820395</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Neu-Aniferstraße</td><td>1</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1214483110</td><td>Sabine</td><td>Kralik CC</td><td>1</td><td>1976-11-07</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820403</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Weideweg</td><td>1A</td><td>5111</td><td>Bürmoos</td></tr>
|
||||||
|
<tr><td>1214541960</td><td>Buket</td><td>Konstantinov</td><td>1</td><td>1989-08-27</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820405</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Humboldstrasse</td><td>12/6</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1214996980</td><td>Sima</td><td>Ghawidel Asgari CC</td><td>1</td><td>1979-01-14</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820411</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Trattbergstr.</td><td>216</td><td>5423</td><td>St.Koloman</td></tr>
|
||||||
|
<tr><td>1215305071</td><td>Rosi</td><td>Petsche CC</td><td>1</td><td>1969-02-17</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820425</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Moosstr.</td><td>469/3</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1215477461</td><td>Helena</td><td>Danninger CC</td><td>1</td><td>1986-08-22</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820435</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Tauxgasse</td><td>20</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1215441216</td><td>Ulrike</td><td>Kraft</td><td>1</td><td>1964-07-29</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820430</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Unterdorfweg</td><td>23</td><td>5303</td><td>Thalgau</td></tr>
|
||||||
|
<tr><td>1215634215</td><td>Daniela</td><td>Thurner CC</td><td>1</td><td>1956-07-17</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820447</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Fischbachstr.</td><td>58</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1215785124</td><td>Simone</td><td>Neuhauser</td><td>1</td><td>1966-11-28</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820455</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>8</td><td>6207</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1216106598</td><td>Sarah</td><td>Kuss CC</td><td>1</td><td>1995-10-18</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820468</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Michael-Pacher Str.</td><td>13/12</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1215915223</td><td>Emma</td><td>Rinnerthaler</td><td>1</td><td>1966-11-21</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820461</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Eberhard-Fugger-Str.</td><td>4/74</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1216106153</td><td>Susanne</td><td>Ramsauer CC</td><td>1</td><td>1986-04-03</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820467</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Mascagnigasse</td><td>8</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1215882961</td><td>Anita</td><td>Deisenberger</td><td>1</td><td>1947-09-29</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820460</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Roplindlweg</td><td>11</td><td>5071</td><td>Wals</td></tr>
|
||||||
|
<tr><td>1216159282</td><td>Laura</td><td>Spitzy CC</td><td>1</td><td>1957-10-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820469</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Elsenneimstrasse</td><td>5</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1216320905</td><td>Brigitte</td><td>Schmiedbauer CC</td><td>1</td><td>1970-02-16</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820478</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Friedenstraße</td><td>6c</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1216181111</td><td>Claudia</td><td>Hartl CC</td><td>1</td><td>1988-03-08</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820473</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Bliemhofweg</td><td>16</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1216432802</td><td>Elke</td><td>Poltzer</td><td>1</td><td>1946-03-28</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820484</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hellbrunnerstrasse</td><td>28</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1216613893</td><td>Elfriede</td><td>Moser CC</td><td>1</td><td>1973-05-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820488</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Laschenskystraße</td><td>32</td><td>5071</td><td>Wals</td></tr>
|
||||||
|
<tr><td>1216676572</td><td>Ines</td><td>Schütz CC</td><td>1</td><td>1974-11-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820492</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schwarzenbergpromenade</td><td>41</td><td>5026</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1216917591</td><td>Emilia</td><td>Grasedieck CC</td><td>1</td><td>1978-03-30</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820497</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hermine-Weixlbaumer-Str.</td><td>5/9</td><td>5412</td><td>Puch</td></tr>
|
||||||
|
<tr><td>1217005738</td><td>Vanja</td><td>Sulic CC</td><td>1</td><td>1991-06-21</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820508</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schwetsernweg</td><td>9</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1217093292</td><td>Stefanie</td><td>Rainer CC</td><td>1</td><td>1999-05-16</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820518</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Gabelsbergerstraße</td><td>11/19</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1217152063</td><td>Borbola</td><td>Török</td><td>1</td><td>1979-10-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820530</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Leitmentzstrasse</td><td>11</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1217293230</td><td>Svitlana</td><td>Kryzhanivska</td><td>1</td><td>1986-02-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820542</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Paracelsusstraße</td><td>30</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1217527462</td><td>Verena</td><td>Putz</td><td>1</td><td>1976-07-05</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820553</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rossfelstraße</td><td>70</td><td>83471</td><td>Berchtesgaden</td></tr>
|
||||||
|
<tr><td>1217551864</td><td>Daniela</td><td>Brandstätter</td><td>1</td><td>1982-11-13</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820557</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Morzgerstr.</td><td>63</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1217544211</td><td>Vera</td><td>Lothaller</td><td>1</td><td>1969-12-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820555</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Naglstraße</td><td>24</td><td>5121</td><td>Ostermiething</td></tr>
|
||||||
|
<tr><td>1217518621</td><td>Emma</td><td>Ebner CC</td><td>1</td><td>1961-06-10</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820551</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Enzersbergstraße</td><td>34</td><td>5303</td><td>Thalgau</td></tr>
|
||||||
|
<tr><td>1217553182</td><td>Hanna</td><td>Siiki-Hölbing</td><td>1</td><td>1982-09-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820558</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Stizhaimerstr.</td><td>13/8</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1217639311</td><td>Ingrid</td><td>Bedel CC</td><td>1</td><td>1978-03-04</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820566</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Modereggweg</td><td>14</td><td>83471</td><td>Schönau</td></tr>
|
||||||
|
<tr><td>1217705473</td><td>Sonja</td><td>Frey</td><td>1</td><td>1979-11-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820579</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Bachwinkl</td><td>12</td><td>5031</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1217656421</td><td>Elena</td><td>Kraus</td><td>1</td><td>1961-08-30</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820571</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>bayeischplatzerlstraße</td><td>21</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1217653123</td><td>Patricia</td><td>Diehl</td><td>1</td><td>1972-03-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820570</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Am Goring</td><td>13</td><td>83435</td><td>Bad Reichenhall</td></tr>
|
||||||
|
<tr><td>1217714324</td><td>Renate</td><td>Fuchs</td><td>1</td><td>1972-05-31</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820582</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Prödschhofstraße</td><td>17</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1217770843</td><td>Antonia</td><td>Csepreghy CC</td><td>1</td><td>1976-06-07</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820587</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Römerstrasse</td><td>10/1</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1217808882</td><td>Bojana</td><td>Jerinic CC</td><td>1</td><td>1995-04-28</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820592</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Salzburgerstraße</td><td>49</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1217875039</td><td>Nadja</td><td>Hinterhöller CC</td><td>1</td><td>1983-11-14</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820599</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Eisgraben</td><td>14</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1217826154</td><td>Hanna</td><td>Bürgschwendtner CC</td><td>1</td><td>1990-01-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820595</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schloss-Str.</td><td>13</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1217986210</td><td>Elisabeth</td><td>Harl</td><td>1</td><td>1979-03-16</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820608</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Staufenstrasse</td><td>351</td><td>5084</td><td>Grossgmain</td></tr>
|
||||||
|
<tr><td>1217985901</td><td>Teresa</td><td>Lüftinger</td><td>1</td><td>1994-03-12</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820609</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Marie-Andeßner Platz</td><td>5</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1217902480</td><td>Mirela</td><td>Muhic</td><td>1</td><td>1982-07-05</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820600</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rottweg</td><td>70 A</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1217910612</td><td>Sigrid</td><td>Pancis CC</td><td>1</td><td>1961-03-07</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820602</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kleingmainergasse</td><td>15a</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218081862</td><td>Christine</td><td>Tarazi</td><td>1</td><td>1967-01-18</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820618</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schlossstrasse</td><td>26b</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218011365</td><td>Lisa</td><td>Kühn CC</td><td>1</td><td>1996-02-04</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820612</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hans-Webersdorfer Straße</td><td>29</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218147031</td><td>Waltraud</td><td>Wieser CC</td><td>1</td><td>1958-09-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820622</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Mühlbachstraße</td><td>23</td><td>5412</td><td>Puch</td></tr>
|
||||||
|
<tr><td>1218354951</td><td>Anita</td><td>Koch CC</td><td>1</td><td>1981-08-17</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820636</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Untersbergstraße</td><td>7</td><td>5411</td><td>Oberalm</td></tr>
|
||||||
|
<tr><td>1218505040</td><td>Monika</td><td>Weinberger</td><td>1</td><td>1970-11-07</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820649</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Akademiestr.</td><td>17/3</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218408681</td><td>Johanna</td><td>Schwarz CC</td><td>1</td><td>1981-03-06</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820642</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Golsweg</td><td>50</td><td>5412</td><td>St.Jakob am Thurn</td></tr>
|
||||||
|
<tr><td>1218466604</td><td>Mariana</td><td>Deußner</td><td>1</td><td>1991-11-14</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820648</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Birkenstraße</td><td>42</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218627171</td><td>Desiree</td><td>Blattert</td><td>1</td><td>1973-10-24</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820659</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Amselweg</td><td>6</td><td>5071</td><td>Wals</td></tr>
|
||||||
|
<tr><td>1218505521</td><td>Franziska</td><td>Oberholzner CC</td><td>1</td><td>1970-12-13</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820651</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Traunstr.</td><td>25</td><td>5026</td><td>Aigen</td></tr>
|
||||||
|
<tr><td>1218554362</td><td>Amela</td><td>Demir CC</td><td>1</td><td>1990-10-01</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820655</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Nikolaus Kroner Straße</td><td>20</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218613671</td><td>Birgit</td><td>Enzensberger CC</td><td>1</td><td>1969-07-04</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820657</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Pfarrhofgutweg</td><td>12</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1218635894</td><td>Sonja</td><td>Höll CC</td><td>1</td><td>1955-07-24</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820661</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Friedrich Inhauserstraße</td><td>4</td><td>5026</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218642396</td><td>Johanna</td><td>Helpferer</td><td>1</td><td>1948-08-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820664</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Traunstr.</td><td>11</td><td>5026</td><td>Aigen</td></tr>
|
||||||
|
<tr><td>1218902354</td><td>Waltraud</td><td>Bonnecken</td><td>1</td><td>1968-12-05</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820675</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Fischer von Erlach Straße</td><td>23</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218924710</td><td>Andrea</td><td>Wendl CC</td><td>1</td><td>1966-07-03</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820677</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schwedenstr.</td><td>3</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218847794</td><td>Walter</td><td>Erika</td><td>1</td><td>1952-09-21</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820672</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kreuzbergprommenade</td><td>17</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218966091</td><td>Andrea</td><td>bsteh CC</td><td>1</td><td>1957-09-12</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820679</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Moosstraße</td><td>116g</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218847960</td><td>Bärbl</td><td>Stadlbauer</td><td>1</td><td>1943-03-29</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820671</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Fischer von Erlach</td><td>13</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219115441</td><td>Marie-Christine</td><td>Marie-Christine</td><td>1</td><td>1992-01-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820686</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Elsbethen</td><td>50</td><td>5061</td><td>Elsbethen</td></tr>
|
||||||
|
<tr><td>1218994320</td><td>Claudia</td><td>Wallner</td><td>1</td><td>1971-11-18</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820680</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Sportplatzstraße</td><td>7</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1218993542</td><td>Julia</td><td>Birnbaum CC</td><td>1</td><td>1969-03-26</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820681</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Ramsaustraße</td><td>22</td><td>5324</td><td>Faistenau</td></tr>
|
||||||
|
<tr><td>1219237420</td><td>Chistiane</td><td>Frimbichler</td><td>1</td><td>1982-07-22</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820688</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Ramsaustr.</td><td>1</td><td>5324</td><td>Faistenau</td></tr>
|
||||||
|
<tr><td>1219115592</td><td>Dinka</td><td>Ceperkovic CC</td><td>1</td><td>1983-10-04</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820687</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Lindachstraße</td><td>2</td><td>5110</td><td>Oberndorf</td></tr>
|
||||||
|
<tr><td>1219268502</td><td>Ulrike</td><td>Ulmann CC</td><td>1</td><td>1970-10-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820689</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Mascggnigasse</td><td>33/14</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219453502</td><td>Julia</td><td>Ptacinova</td><td>1</td><td>1967-07-21</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820699</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Borromäumstr.</td><td>11/4</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219399051</td><td>Waltraud</td><td>Franke CC</td><td>1</td><td>1960-02-17</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820698</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Eisgrabenweg</td><td>14</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1219527384</td><td>Margit</td><td>Prüwasser</td><td>1</td><td>1953-03-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820707</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>General Arnoldstr</td><td>17</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219453833</td><td>Sefidin</td><td>Shlahan-Ramush</td><td>0</td><td>1956-10-10</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820700</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>borromäusstr.</td><td>11/4</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219538711</td><td>Isabella</td><td>Hupf</td><td>1</td><td>1970-06-08</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820709</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Stadlerweg</td><td>15a</td><td>5340</td><td>St. Gilgen</td></tr>
|
||||||
|
<tr><td>1219459283</td><td>Patricia</td><td>Späth CC</td><td>1</td><td>1981-01-17</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820702</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Konnrad-Seydenstraße</td><td>3</td><td>5301</td><td>Eugendorf</td></tr>
|
||||||
|
<tr><td>1219463653</td><td>Susanna</td><td>Payer CC</td><td>1</td><td>1957-08-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820703</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Nonnthaler-Hauptsrasse</td><td>9a</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219515831</td><td>Sibel</td><td>Nowatschek CC</td><td>1</td><td>1998-06-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820705</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Klessheimallee</td><td>53b</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219625274</td><td>Margit</td><td>Ebner 2.0</td><td>1</td><td>1971-11-08</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820716</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Brunnleitenweg</td><td>7</td><td>5061</td><td>Elsbethen</td></tr>
|
||||||
|
<tr><td>1219552525</td><td>Nadine</td><td>Bernegger CC</td><td>1</td><td>1985-11-29</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820711</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Moostraße</td><td>98b</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219612272</td><td>Denise</td><td>San CC</td><td>1</td><td>1991-08-25</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820714</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Südtirolerstraße</td><td>71/14</td><td>5500</td><td>Bischofshofen</td></tr>
|
||||||
|
<tr><td>1219649524</td><td>Barbara</td><td>Schmalzmaier</td><td>1</td><td>1978-03-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820719</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Moartalstr.</td><td>379/2</td><td>5440</td><td>Golling</td></tr>
|
||||||
|
<tr><td>1219610622</td><td>Sabine</td><td>Schörghofer CC</td><td>1</td><td>1970-03-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820713</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Salzweg</td><td>35</td><td>508L</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1219649681</td><td>Liliane</td><td>Ebner</td><td>1</td><td>1951-12-21</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820718</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rosittenstraße</td><td>2</td><td>5082</td><td>2</td></tr>
|
||||||
|
<tr><td>1220189000</td><td>Alexandra</td><td>CC Luger</td><td>1</td><td>1968-05-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820725</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Auerspergstraße</td><td>52</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220208801</td><td>Saskia</td><td>Pesendorfer CC</td><td>1</td><td>1991-04-10</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820726</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Albert- Schweitzerstr.</td><td>17</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219657520</td><td>Anita</td><td>Brandauer CC</td><td>1</td><td>1989-04-29</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820721</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Moos</td><td>72</td><td>5431</td><td>Kuchl</td></tr>
|
||||||
|
<tr><td>1220295051</td><td>Beate</td><td>Fenninger CC</td><td>1</td><td>1975-10-30</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820729</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Ehrenbachstraße</td><td>22</td><td>5161</td><td>Elixhausen</td></tr>
|
||||||
|
<tr><td>1219708251</td><td>Susanna</td><td>Andreini</td><td>1</td><td>1965-06-22</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820723</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Fürstenallee</td><td>52</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1219657801</td><td>Verena</td><td>Kraus CC</td><td>1</td><td>1990-11-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820722</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Martkl</td><td>166c</td><td>5431</td><td>Kuchl</td></tr>
|
||||||
|
<tr><td>1220377862</td><td>Andrea</td><td>Hitzfeld CC</td><td>1</td><td>1980-10-10</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820733</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Franz-Josef Straße</td><td>23</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220416773</td><td>Sabine</td><td>CC Becker</td><td>1</td><td>1984-03-21</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820737</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Gattsreithweg</td><td>11</td><td>5301</td><td>Eugendorf</td></tr>
|
||||||
|
<tr><td>1220312675</td><td>Andrea</td><td>Fuchs CC</td><td>1</td><td>1966-07-13</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820731</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Moorweg</td><td>3</td><td>5071</td><td>Wals</td></tr>
|
||||||
|
<tr><td>1220391462</td><td>Gabriela</td><td>Kovacs CC</td><td>1</td><td>1964-09-05</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820736</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Gaisbergstraße</td><td>9A</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220312831</td><td>Sarah</td><td>Bsteh CC</td><td>1</td><td>1988-03-30</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820730</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Gärtnerstraße</td><td>26</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220378021</td><td>Floripes</td><td>Andexer CC</td><td>1</td><td>1961-11-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820734</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hühnerauweg</td><td>24</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1220564774</td><td>Nicole</td><td>CC Wintersteller</td><td>1</td><td>1980-07-28</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820748</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hauptstraße</td><td>6/15</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1220477450</td><td>Sophia</td><td>Pogadl CC</td><td>1</td><td>2008-08-11</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820741</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Gaisbergweg</td><td>7</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1220584882</td><td>Veronika</td><td>Einberger</td><td>1</td><td>1962-08-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820749</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Friedenstraße</td><td>2A</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220521510</td><td>Catalin-Laur</td><td>Alixandru</td><td>0</td><td>2000-05-08</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820745</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Wagrainerstraße</td><td>12</td><td>5600</td><td>Pongau</td></tr>
|
||||||
|
<tr><td>1220660332</td><td>Aloise</td><td>Ebner CC</td><td>1</td><td>1963-05-28</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820752</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Oberfeld</td><td>6a</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1220678844</td><td>Angelika CC</td><td>Russold</td><td>1</td><td>1974-04-07</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820755</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Ramsaustraße</td><td>88</td><td>5324</td><td>Faistenau</td></tr>
|
||||||
|
<tr><td>1220679180</td><td>Eva</td><td>Frisch CC</td><td>1</td><td>1983-08-12</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820754</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Adam-Müller-Gzttenbrunstraße</td><td>32</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220697841</td><td>Andrea</td><td>Berger CC</td><td>1</td><td>1978-09-03</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820757</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kastnerweg</td><td>7</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1220736303</td><td>Melissa</td><td>Neschki CC</td><td>1</td><td>2001-04-14</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820759</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Albert-Schweitzer-Straße</td><td>29</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220668071</td><td>Ulrike</td><td>Tschinkel CC</td><td>1</td><td>1962-04-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820753</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kreuzhofweg</td><td>24</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220861782</td><td>Sandra</td><td>Doppler CC</td><td>1</td><td>1975-02-07</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820766</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Pfeifferhofstraße</td><td>3</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220798800</td><td>Helene</td><td>Hostalek</td><td>1</td><td>1944-10-18</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820763</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Siebenstätterstraße</td><td>29</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220822661</td><td>Marion</td><td>Behrend</td><td>1</td><td>1946-10-30</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820765</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Goethessttraße</td><td>3</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1220866351</td><td>Elfriede</td><td>Brandstätter CC</td><td>1</td><td>1968-03-31</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820767</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Priesterbauchweg</td><td>46</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1220890801</td><td>Nathalie</td><td>Stadnyk</td><td>1</td><td>1979-02-24</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820768</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rudolf-Bieblstraße</td><td>44</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221138392</td><td>Maria</td><td>Brandauer CC</td><td>1</td><td>1958-12-27</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820777</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Sonnenscheinweg</td><td>8</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1221089505</td><td>Christine</td><td>Löffelberger CC</td><td>1</td><td>1991-05-02</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820775</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Föhrenweg</td><td>3</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1221124052</td><td>Anna</td><td>Högg CC</td><td>1</td><td>1990-03-02</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820776</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kaigasse 38</td><td>2</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221145464</td><td>Nicole</td><td>Wintersteller</td><td>1</td><td>1980-07-28</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820779</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hauptstraße</td><td>6/15</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1220974170</td><td>Karin</td><td>Holeczy</td><td>1</td><td>1956-11-13</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820770</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hans Schmidingerstraße</td><td>8</td><td>5303</td><td>Thalgau</td></tr>
|
||||||
|
<tr><td>1221090180</td><td>Elisabeth</td><td>Denkl</td><td>1</td><td>1995-11-01</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820774</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Weizensteinerstraße</td><td>17</td><td>5020</td><td>Sakzburg</td></tr>
|
||||||
|
<tr><td>1221145610</td><td>Aloise</td><td>Ebner</td><td>1</td><td>1963-05-28</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820778</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Oberfeld</td><td>6A</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1220983911</td><td>Petra</td><td>Schmid CC</td><td>1</td><td>1993-08-03</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820771</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Fischhornstraße</td><td>8</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221006072</td><td>Sherin</td><td>Shahin</td><td>1</td><td>1981-11-25</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820772</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rossegerstraße</td><td>12</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221160106</td><td>Andrea</td><td>Neater</td><td>1</td><td>1951-05-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820782</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Pezolt Gasse</td><td>12</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221193770</td><td>Simone</td><td>Thaler CC</td><td>1</td><td>1981-05-15</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820784</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Bachweg</td><td>23</td><td>5412</td><td>Puch</td></tr>
|
||||||
|
<tr><td>1221202933</td><td>Marita</td><td>Sporeni CC</td><td>1</td><td>1970-05-15</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820785</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Winklerstraße</td><td>8/12</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1221160790</td><td>Albina</td><td>Kustrah</td><td>1</td><td>1980-06-16</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820781</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Ludwig Richter Straße</td><td>49</td><td>5026</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221177041</td><td>Daniela</td><td>Rünzler</td><td>1</td><td>1971-10-29</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820783</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schallmoser Hauptstr.</td><td>6a</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221146193</td><td>Angelika</td><td>Grünanger CC</td><td>1</td><td>1961-10-02</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820780</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Krögerbaumstraße</td><td>4</td><td>5411</td><td>Oberalm</td></tr>
|
||||||
|
<tr><td>1221387190</td><td>Maja</td><td>Stevic</td><td>1</td><td>1994-12-28</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820795</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Otto-Glöckel Straße</td><td>1</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1221313882</td><td>Medina</td><td>Sarsakova</td><td>1</td><td>2005-09-02</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820793</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Laufenstraße</td><td>44</td><td>5020</td><td>Salzurg</td></tr>
|
||||||
|
<tr><td>1221387192</td><td>Sabine</td><td>Heigl CC</td><td>1</td><td>1988-04-12</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820796</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schrannengasse</td><td>10/13</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221387655</td><td>Anke</td><td>Ranggetinger CC</td><td>1</td><td>1983-08-02</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820798</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Fürstenallee</td><td>35</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221386847</td><td>Mirsada</td><td>Adiloski</td><td>1</td><td>1981-06-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820797</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Karlheinz Böhmstraße</td><td>6/10</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1221429311</td><td>Monika</td><td>Lovric CC</td><td>1</td><td>1976-01-25</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820799</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Halleinerlandestraße</td><td></td><td>5411</td><td>Oberalm</td></tr>
|
||||||
|
<tr><td>1221366351</td><td>Ulrike</td><td>Hafner</td><td>1</td><td>1957-05-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820794</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Franz-Martin-Straße</td><td>4A</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221455550</td><td>Erika</td><td>Thaler CC</td><td>1</td><td>1957-07-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820800</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Stanzingstraße</td><td>1</td><td>5061</td><td>Glasenbach</td></tr>
|
||||||
|
<tr><td>1221525552</td><td>Jaqueline</td><td>Wirrer</td><td>1</td><td>1993-12-16</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820806</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Josef-Hautthalerstraße</td><td>43a</td><td>5071</td><td>Wals</td></tr>
|
||||||
|
<tr><td>1221544102</td><td>Shuena</td><td>Yunus Oma CC</td><td>1</td><td>1973-12-12</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820807</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Röcklbrunnerstraße</td><td>18-4-28</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221524182</td><td>Eva</td><td>Wenzl CC</td><td>1</td><td>1981-07-01</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820804</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Lindenweg</td><td>22</td><td>5120</td><td>St. Partaleon</td></tr>
|
||||||
|
<tr><td>1221582372</td><td>Sabrina Karg</td><td>Neumann CC</td><td>1</td><td>1988-10-22</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820808</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kleingmainer Gasse</td><td>23/A</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221616432</td><td>Alxeandra</td><td>Quintus CC</td><td>1</td><td>1979-07-31</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820809</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>kleingmainer Gasse</td><td>23a</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221854131</td><td>Erhard</td><td>Imelda CC</td><td>1</td><td>1976-01-30</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820821</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Höhenroid</td><td>21/2</td><td>5203</td><td>Köstendorf</td></tr>
|
||||||
|
<tr><td>1221861641</td><td>Marica</td><td>Ketonic CC</td><td>1</td><td>1958-12-27</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820823</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>St. Julienstraße</td><td>27/2/9</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221859513</td><td>Eva</td><td>Brudl-Schober CC</td><td>1</td><td>1975-06-27</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820822</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Kasermühlweg</td><td>3/3</td><td>5411</td><td>Oberalm</td></tr>
|
||||||
|
<tr><td>1222007641</td><td>Dragana</td><td>Stankovic CC</td><td>1</td><td>1995-07-26</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820829</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Geyereck</td><td>11</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1222035092</td><td>Sabine</td><td>Schneider</td><td>1</td><td>1979-03-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820833</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Wimberg</td><td>170</td><td>5421</td><td>Adnet</td></tr>
|
||||||
|
<tr><td>1222024470</td><td>Ümmü</td><td>Ata CC</td><td>1</td><td>1987-06-09</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820831</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Neualmstraße</td><td>6</td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1221712733</td><td>Eder</td><td>Annemarie CC</td><td>1</td><td>1960-12-10</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820814</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Staufenweg</td><td>22</td><td>5400</td><td>Taxach/ Rif</td></tr>
|
||||||
|
<tr><td>1221712552</td><td>Ingeborg</td><td>Schuffert CC</td><td>1</td><td>1970-02-10</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820813</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Fischhornstraße</td><td>39</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1222007291</td><td>Barbara</td><td>Flak cc</td><td>1</td><td>1974-01-10</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820830</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Nicolaus Gartner</td><td>10</td><td>5303</td><td>Thalgau</td></tr>
|
||||||
|
<tr><td>1221470963</td><td>Mirsada</td><td>Adiloski CC</td><td>1</td><td>1981-06-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820802</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Karlheinz Böhmstraße</td><td>6/10</td><td>5082</td><td>Grödig</td></tr>
|
||||||
|
<tr><td>1221827693</td><td>Miriam CC</td><td>Knoll</td><td>1</td><td>1984-12-22</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820818</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Hammerstraße</td><td>42</td><td>5411</td><td>Oberalm</td></tr>
|
||||||
|
<tr><td>1221845692</td><td>Ursula</td><td>Berk CC</td><td>1</td><td>1969-05-11</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820820</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Bäslestraße</td><td>8</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221873102</td><td>Jaqueline</td><td>Wertschnig CC</td><td>1</td><td>1991-08-13</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820824</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Rettenbacherstraße</td><td>13</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221896554</td><td>Serpil</td><td>Ibrahim</td><td>1</td><td>1978-11-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820826</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Fürstensallee</td><td>36F / 8</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221988662</td><td>Catalina</td><td>Mitu CC</td><td>1</td><td>1988-06-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820828</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schiessstattstraße</td><td>27</td><td>5020</td><td>Salzurg</td></tr>
|
||||||
|
<tr><td>1221926573</td><td>Dragana</td><td>Dokic CC</td><td>1</td><td>1993-03-31</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820827</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Salzachtalbundestraße</td><td>12</td><td>5081</td><td>Anif</td></tr>
|
||||||
|
<tr><td>1221692453</td><td>Adriane</td><td>Steiner</td><td>1</td><td>1964-06-12</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820812</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Ford-Parscherstraße</td><td>8</td><td>5071</td><td>Wals</td></tr>
|
||||||
|
<tr><td>1221834705</td><td>Tanja CC</td><td>Winkler</td><td>1</td><td>1975-06-01</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820819</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Auweg</td><td>19D</td><td>5400</td><td>Taxach</td></tr>
|
||||||
|
<tr><td>1222055012</td><td>Paulus</td><td>Edtih CC</td><td>1</td><td>1964-09-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820834</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Adlgasserweg</td><td>17</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221467740</td><td>Brigitte</td><td>Melnik</td><td>1</td><td>1981-05-24</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820801</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Franztalerstraße</td><td>4</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221524184</td><td>Ulrike</td><td>Hafner CC</td><td>1</td><td>1957-05-20</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820805</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Franz martin Straße</td><td>4a</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221628931</td><td>Padungchit</td><td>Weber</td><td>1</td><td>1948-12-26</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820810</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Süssmayerstraße</td><td>14</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221508820</td><td>Sabine</td><td>Schneider CC</td><td>1</td><td>1976-03-23</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820803</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Wimberg</td><td>170</td><td>5421</td><td>Adnet</td></tr>
|
||||||
|
<tr><td>1221650972</td><td>Maria</td><td>Wischner CC</td><td>1</td><td>1964-10-29</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820811</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Anton-Graf-Straße</td><td>6a</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1221881151</td><td>Maria</td><td>Brandauer</td><td>1</td><td>1958-12-27</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820825</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Sonnenscheinweg</td><td></td><td>5400</td><td>Hallein</td></tr>
|
||||||
|
<tr><td>1222028942</td><td>Desiree</td><td>Moser CC</td><td>1</td><td>1989-11-27</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-2820832</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schlossstraße</td><td>24/7</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210004169</td><td>Melanie</td><td>Steinhagen</td><td>1</td><td>1991-11-10</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-29</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Gartenstraße</td><td>52</td><td>5072</td><td>Siezenheim</td></tr>
|
||||||
|
<tr><td>1210004243</td><td>Regina</td><td>Putz CC</td><td>1</td><td>1972-03-12</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-33</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Georgenberg</td><td>349</td><td>5431</td><td>Kuchl</td></tr>
|
||||||
|
<tr><td>1210004244</td><td>Nicole</td><td>Schwaiger CC</td><td>1</td><td>1964-06-29</td><td>2020-03-06T15:05:43.131+01:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-34</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Schiffhofweg</td><td>9</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210004351</td><td>Melanie</td><td>Ruckenthaler</td><td>1</td><td>1984-10-14</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-41</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Versorgungshausstrasse</td><td>22</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210042263</td><td>Karin</td><td>Kaindl</td><td>1</td><td>1960-02-01</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-446430</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Dr. Sylvesterstr.</td><td>12</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210044959</td><td>Daniela</td><td>Hemetinger CC</td><td>1</td><td>1982-12-19</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-446716</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Generationenweg</td><td>12</td><td>5412</td><td>Puch</td></tr>
|
||||||
|
<tr><td>1210045815</td><td>Selina</td><td>Brenner CC</td><td>1</td><td>1976-09-30</td><td></td><td>Die Heldin</td><td>1210002980</td><td>1-446802</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Henry-Dunant-Straße</td><td>44/24</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
<tr><td>1210003966</td><td>Richarda</td><td>Sunkler</td><td>1</td><td>1949-12-23</td><td>2020-06-08T10:23:12.326+02:00[Europe/Vienna]</td><td>Die Heldin</td><td>1210002980</td><td>1-6</td><td></td><td></td><td>1</td><td></td><td></td><td></td><td>false</td><td>Wiesbauerstr.</td><td>6</td><td>5020</td><td>Salzburg</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
156
export-customers.ts
Normal file
156
export-customers.ts
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
import { writeFileSync } from "node:fs"
|
||||||
|
import { Openmagicline } from "openmagicline"
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Config – set via environment variables or edit directly below
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
const GYM = process.env.MAGICLINE_GYM ?? "dieheldin"
|
||||||
|
const USERNAME = process.env.MAGICLINE_USER ?? "tanja.wild"
|
||||||
|
const PASSWORD = process.env.MAGICLINE_PASS ?? "Luna22111993"
|
||||||
|
|
||||||
|
if (!GYM || !USERNAME || !PASSWORD) {
|
||||||
|
console.error(
|
||||||
|
"Missing credentials. Set MAGICLINE_GYM, MAGICLINE_USER, and MAGICLINE_PASS.",
|
||||||
|
)
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Helpers
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/** Escape a value for use in a CSV cell. */
|
||||||
|
function csvCell(value: unknown): string {
|
||||||
|
if (value === null || value === undefined) return ""
|
||||||
|
const str = String(value)
|
||||||
|
if (str.includes(",") || str.includes('"') || str.includes("\n")) {
|
||||||
|
return `"${str.replace(/"/g, '""')}"`
|
||||||
|
}
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Escape a value for use in HTML table cell content. */
|
||||||
|
function htmlEscape(value: unknown): string {
|
||||||
|
if (value === null || value === undefined) return ""
|
||||||
|
return String(value)
|
||||||
|
.replace(/&/g, "&")
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
.replace(/"/g, """)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Main
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const mgl = new Openmagicline({ gym: GYM, username: USERNAME, password: PASSWORD })
|
||||||
|
await mgl.login()
|
||||||
|
console.log("Logged in.")
|
||||||
|
|
||||||
|
// Fetch the real facility/organization unit ID — searching with facility:0 returns nothing.
|
||||||
|
const facilityId = await mgl.util.getDefaultUnitID()
|
||||||
|
console.log(`Using facility ID: ${facilityId}`)
|
||||||
|
|
||||||
|
const SEARCH_CAP = 50
|
||||||
|
|
||||||
|
const seen = new Set<number>()
|
||||||
|
const customers: Record<string, unknown>[] = []
|
||||||
|
|
||||||
|
async function sweep(prefix: string): Promise<void> {
|
||||||
|
const results = await mgl.customer.search(prefix, {
|
||||||
|
facility: facilityId,
|
||||||
|
showAllFacilities: false,
|
||||||
|
searchInName: false,
|
||||||
|
searchInCustomerNumber: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (results.length === SEARCH_CAP) {
|
||||||
|
for (const d of "0123456789") {
|
||||||
|
await sweep(prefix + d)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const c of results) {
|
||||||
|
if (!seen.has(c.databaseId) && c.customerStatus === 1) {
|
||||||
|
seen.add(c.databaseId)
|
||||||
|
customers.push(c as unknown as Record<string, unknown>)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const d of "0123456789") {
|
||||||
|
const prefix = `1-${d}`
|
||||||
|
process.stdout.write(`Sweeping '${prefix}'… `)
|
||||||
|
const before = customers.length
|
||||||
|
await sweep(prefix)
|
||||||
|
console.log(`+${customers.length - before} (total: ${customers.length})`)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (customers.length === 0) {
|
||||||
|
console.error("No customers found.")
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collect the union of all keys across all customer records
|
||||||
|
const allKeys = Array.from(
|
||||||
|
customers.reduce((keys, c) => {
|
||||||
|
for (const k of Object.keys(c)) keys.add(k)
|
||||||
|
return keys
|
||||||
|
}, new Set<string>()),
|
||||||
|
)
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// CSV export
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const csvLines = [
|
||||||
|
allKeys.map(csvCell).join(","),
|
||||||
|
...customers.map((c) => allKeys.map((k) => csvCell(c[k])).join(",")),
|
||||||
|
]
|
||||||
|
const csvPath = "customers.csv"
|
||||||
|
writeFileSync(csvPath, csvLines.join("\n"), "utf-8")
|
||||||
|
console.log(`CSV written to ${csvPath} (${customers.length} rows)`)
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// HTML export
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const headerCells = allKeys.map((k) => `<th>${htmlEscape(k)}</th>`).join("")
|
||||||
|
const bodyRows = customers
|
||||||
|
.map(
|
||||||
|
(c) =>
|
||||||
|
`<tr>${allKeys.map((k) => `<td>${htmlEscape(c[k])}</td>`).join("")}</tr>`,
|
||||||
|
)
|
||||||
|
.join("\n")
|
||||||
|
|
||||||
|
const html = `<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Customers – ${new Date().toLocaleDateString()}</title>
|
||||||
|
<style>
|
||||||
|
body { font-family: sans-serif; font-size: 13px; padding: 1rem; }
|
||||||
|
h1 { margin-bottom: 0.5rem; }
|
||||||
|
p.meta { color: #666; margin-bottom: 1rem; }
|
||||||
|
table { border-collapse: collapse; width: 100%; }
|
||||||
|
th, td { border: 1px solid #ccc; padding: 4px 8px; text-align: left; white-space: nowrap; }
|
||||||
|
th { background: #f0f0f0; position: sticky; top: 0; }
|
||||||
|
tr:nth-child(even) { background: #fafafa; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Customer Export</h1>
|
||||||
|
<p class="meta">Generated: ${new Date().toISOString()} | Total: ${customers.length}</p>
|
||||||
|
<table>
|
||||||
|
<thead><tr>${headerCells}</tr></thead>
|
||||||
|
<tbody>
|
||||||
|
${bodyRows}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>`
|
||||||
|
|
||||||
|
const htmlPath = "customers.html"
|
||||||
|
writeFileSync(htmlPath, html, "utf-8")
|
||||||
|
console.log(`HTML written to ${htmlPath}`)
|
||||||
1
node_modules/.bin/esbuild
generated
vendored
Symbolic link
1
node_modules/.bin/esbuild
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../esbuild/bin/esbuild
|
||||||
1
node_modules/.bin/tsc
generated
vendored
Symbolic link
1
node_modules/.bin/tsc
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../typescript/bin/tsc
|
||||||
1
node_modules/.bin/tsserver
generated
vendored
Symbolic link
1
node_modules/.bin/tsserver
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../typescript/bin/tsserver
|
||||||
1
node_modules/.bin/tsx
generated
vendored
Symbolic link
1
node_modules/.bin/tsx
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../tsx/dist/cli.mjs
|
||||||
455
node_modules/.package-lock.json
generated
vendored
Normal file
455
node_modules/.package-lock.json
generated
vendored
Normal file
@@ -0,0 +1,455 @@
|
|||||||
|
{
|
||||||
|
"name": "dieheldin-export",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"node_modules/@esbuild/linux-x64": {
|
||||||
|
"version": "0.27.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
|
||||||
|
"integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@stomp/stompjs": {
|
||||||
|
"version": "6.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@stomp/stompjs/-/stompjs-6.1.2.tgz",
|
||||||
|
"integrity": "sha512-FHDTrIFM5Ospi4L3Xhj6v2+NzCVAeNDcBe95YjUWhWiRMrBF6uN3I7AUOlRgT6jU/2WQvvYK8ZaIxFfxFp+uHQ=="
|
||||||
|
},
|
||||||
|
"node_modules/@types/node": {
|
||||||
|
"version": "25.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz",
|
||||||
|
"integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"undici-types": "~7.18.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/asynckit": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||||
|
},
|
||||||
|
"node_modules/axios": {
|
||||||
|
"version": "0.21.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
|
||||||
|
"integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
|
||||||
|
"dependencies": {
|
||||||
|
"follow-redirects": "^1.14.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/axios-auth-refresh": {
|
||||||
|
"version": "3.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/axios-auth-refresh/-/axios-auth-refresh-3.3.6.tgz",
|
||||||
|
"integrity": "sha512-2CeBUce/SxIfFxow5/n8vApJ97yYF6qoV4gh1UrswT7aEOnlOdBLxxyhOI4IaxGs6BY0l8YujU2jlc4aCmK17Q==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"axios": ">= 0.18 < 0.19.0 || >= 0.19.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/call-bind-apply-helpers": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"es-errors": "^1.3.0",
|
||||||
|
"function-bind": "^1.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/combined-stream": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
|
"dependencies": {
|
||||||
|
"delayed-stream": "~1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/debug": {
|
||||||
|
"version": "4.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
||||||
|
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "^2.1.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"supports-color": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/delayed-stream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/dunder-proto": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind-apply-helpers": "^1.0.1",
|
||||||
|
"es-errors": "^1.3.0",
|
||||||
|
"gopd": "^1.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/es-define-property": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/es-errors": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/es-object-atoms": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
||||||
|
"dependencies": {
|
||||||
|
"es-errors": "^1.3.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/es-set-tostringtag": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
||||||
|
"dependencies": {
|
||||||
|
"es-errors": "^1.3.0",
|
||||||
|
"get-intrinsic": "^1.2.6",
|
||||||
|
"has-tostringtag": "^1.0.2",
|
||||||
|
"hasown": "^2.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild": {
|
||||||
|
"version": "0.27.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
|
||||||
|
"integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
|
||||||
|
"dev": true,
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"esbuild": "bin/esbuild"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@esbuild/aix-ppc64": "0.27.3",
|
||||||
|
"@esbuild/android-arm": "0.27.3",
|
||||||
|
"@esbuild/android-arm64": "0.27.3",
|
||||||
|
"@esbuild/android-x64": "0.27.3",
|
||||||
|
"@esbuild/darwin-arm64": "0.27.3",
|
||||||
|
"@esbuild/darwin-x64": "0.27.3",
|
||||||
|
"@esbuild/freebsd-arm64": "0.27.3",
|
||||||
|
"@esbuild/freebsd-x64": "0.27.3",
|
||||||
|
"@esbuild/linux-arm": "0.27.3",
|
||||||
|
"@esbuild/linux-arm64": "0.27.3",
|
||||||
|
"@esbuild/linux-ia32": "0.27.3",
|
||||||
|
"@esbuild/linux-loong64": "0.27.3",
|
||||||
|
"@esbuild/linux-mips64el": "0.27.3",
|
||||||
|
"@esbuild/linux-ppc64": "0.27.3",
|
||||||
|
"@esbuild/linux-riscv64": "0.27.3",
|
||||||
|
"@esbuild/linux-s390x": "0.27.3",
|
||||||
|
"@esbuild/linux-x64": "0.27.3",
|
||||||
|
"@esbuild/netbsd-arm64": "0.27.3",
|
||||||
|
"@esbuild/netbsd-x64": "0.27.3",
|
||||||
|
"@esbuild/openbsd-arm64": "0.27.3",
|
||||||
|
"@esbuild/openbsd-x64": "0.27.3",
|
||||||
|
"@esbuild/openharmony-arm64": "0.27.3",
|
||||||
|
"@esbuild/sunos-x64": "0.27.3",
|
||||||
|
"@esbuild/win32-arm64": "0.27.3",
|
||||||
|
"@esbuild/win32-ia32": "0.27.3",
|
||||||
|
"@esbuild/win32-x64": "0.27.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/follow-redirects": {
|
||||||
|
"version": "1.15.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
|
||||||
|
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "individual",
|
||||||
|
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"debug": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/form-data": {
|
||||||
|
"version": "4.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
|
||||||
|
"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
|
||||||
|
"dependencies": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"es-set-tostringtag": "^2.1.0",
|
||||||
|
"hasown": "^2.0.2",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/function-bind": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/get-intrinsic": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind-apply-helpers": "^1.0.2",
|
||||||
|
"es-define-property": "^1.0.1",
|
||||||
|
"es-errors": "^1.3.0",
|
||||||
|
"es-object-atoms": "^1.1.1",
|
||||||
|
"function-bind": "^1.1.2",
|
||||||
|
"get-proto": "^1.0.1",
|
||||||
|
"gopd": "^1.2.0",
|
||||||
|
"has-symbols": "^1.1.0",
|
||||||
|
"hasown": "^2.0.2",
|
||||||
|
"math-intrinsics": "^1.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/get-proto": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
||||||
|
"dependencies": {
|
||||||
|
"dunder-proto": "^1.0.1",
|
||||||
|
"es-object-atoms": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/get-tsconfig": {
|
||||||
|
"version": "4.13.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz",
|
||||||
|
"integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"resolve-pkg-maps": "^1.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/gopd": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has-symbols": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has-tostringtag": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
||||||
|
"dependencies": {
|
||||||
|
"has-symbols": "^1.0.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/hasown": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lodash": {
|
||||||
|
"version": "4.17.23",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
|
||||||
|
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="
|
||||||
|
},
|
||||||
|
"node_modules/math-intrinsics": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-db": {
|
||||||
|
"version": "1.52.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-types": {
|
||||||
|
"version": "2.1.35",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-db": "1.52.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
|
},
|
||||||
|
"node_modules/openmagicline": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/openmagicline/-/openmagicline-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-zAARHNrjvtDyNG+i8nlroEy6wcsCfEpR1RSNpgCTFDbsZwbNlqA2T8TvxGL0l1rz35ibNttGYaf95LxSjqwI5w==",
|
||||||
|
"dependencies": {
|
||||||
|
"@stomp/stompjs": "^6.1.0",
|
||||||
|
"axios": "^0.21.1",
|
||||||
|
"axios-auth-refresh": "^3.3.4",
|
||||||
|
"debug": "^4.3.1",
|
||||||
|
"form-data": "^4.0.0",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
|
"ws": "^7.5.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/resolve-pkg-maps": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tsx": {
|
||||||
|
"version": "4.21.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
|
||||||
|
"integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"esbuild": "~0.27.0",
|
||||||
|
"get-tsconfig": "^4.7.5"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"tsx": "dist/cli.mjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18.0.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"fsevents": "~2.3.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typescript": {
|
||||||
|
"version": "5.9.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||||
|
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"tsc": "bin/tsc",
|
||||||
|
"tsserver": "bin/tsserver"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.17"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/undici-types": {
|
||||||
|
"version": "7.18.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
|
||||||
|
"integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/ws": {
|
||||||
|
"version": "7.5.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
|
||||||
|
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.3.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"bufferutil": "^4.0.1",
|
||||||
|
"utf-8-validate": "^5.0.2"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"bufferutil": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"utf-8-validate": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
3
node_modules/@esbuild/linux-x64/README.md
generated
vendored
Normal file
3
node_modules/@esbuild/linux-x64/README.md
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# esbuild
|
||||||
|
|
||||||
|
This is the Linux 64-bit binary for esbuild, a JavaScript bundler and minifier. See https://github.com/evanw/esbuild for details.
|
||||||
BIN
node_modules/@esbuild/linux-x64/bin/esbuild
generated
vendored
Executable file
BIN
node_modules/@esbuild/linux-x64/bin/esbuild
generated
vendored
Executable file
Binary file not shown.
20
node_modules/@esbuild/linux-x64/package.json
generated
vendored
Normal file
20
node_modules/@esbuild/linux-x64/package.json
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"name": "@esbuild/linux-x64",
|
||||||
|
"version": "0.27.3",
|
||||||
|
"description": "The Linux 64-bit binary for esbuild, a JavaScript bundler.",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/evanw/esbuild.git"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"preferUnplugged": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
]
|
||||||
|
}
|
||||||
202
node_modules/@stomp/stompjs/LICENSE
generated
vendored
Normal file
202
node_modules/@stomp/stompjs/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright 2018-2020 Deepak Kumar <deepak@kreatio.com>
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
89
node_modules/@stomp/stompjs/README.md
generated
vendored
Normal file
89
node_modules/@stomp/stompjs/README.md
generated
vendored
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
# STOMP.js
|
||||||
|
|
||||||
|
[](https://travis-ci.org/stomp-js/stompjs)
|
||||||
|
|
||||||
|
This library provides a STOMP over WebSocket client for Web browser and node.js applications.
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
|
||||||
|
This repository is for version 5 and above of this library.
|
||||||
|
Lower versions are not supported any longer.
|
||||||
|
|
||||||
|
This library allows you to connect to a STOMP broker over WebSocket. This library
|
||||||
|
supports complete STOMP specifications including all current protocol variants. Most
|
||||||
|
popular messaging brokers support STOMP and STOMP over WebSockets either natively
|
||||||
|
or using plugins.
|
||||||
|
|
||||||
|
In general JavaScript engines in browsers are not friendly to binary protocols,
|
||||||
|
so using STOMP is a good option because it is a text-oriented protocol.
|
||||||
|
|
||||||
|
This library has its roots in a version released by [Jeff Mesnil](http://jmesnil.net/).
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Version 5 of this library has been bottom-up rewritten using TypeScript (versions 3/4
|
||||||
|
use CoffeeScript). The code has substantially changed, so, while there is a compatibility
|
||||||
|
mode, you might need to update your code.
|
||||||
|
|
||||||
|
This library is feature complete and has been used in production for many years. It
|
||||||
|
is actively maintained. You are welcome to file issues and submit pull requests.
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
The API documentation is hosted as GitHub pages for the entire StompJS family of libraries.
|
||||||
|
You may head straight to the https://stomp-js.github.io/api-docs/latest/
|
||||||
|
|
||||||
|
This library comes with detailed usage instructions. Please find it at
|
||||||
|
[Usage instructions](https://stomp-js.github.io/guide/stompjs/using-stompjs-v5.html).
|
||||||
|
Check out other guides at https://stomp-js.github.io/.
|
||||||
|
|
||||||
|
There are quite detailed API documentation,
|
||||||
|
you should start at https://stomp-js.github.io/api-docs/latest/classes/Client.html.
|
||||||
|
|
||||||
|
## Upgrading
|
||||||
|
|
||||||
|
if you were using an older version of this library, you would need to make changes
|
||||||
|
to your code. Head to
|
||||||
|
[Upgrading](https://stomp-js.github.io/#upgrading).
|
||||||
|
|
||||||
|
## Usage with RxJS
|
||||||
|
|
||||||
|
https://github.com/stomp-js/rx-stomp is based on this library and exposes the entire functionality
|
||||||
|
offered by this library as RxJS Observables.
|
||||||
|
|
||||||
|
## Usage with Angular2+
|
||||||
|
|
||||||
|
https://github.com/stomp-js/ng2-stompjs is based on https://github.com/stomp-js/rx-stomp
|
||||||
|
and exposes key classes as Angular Injectable Services.
|
||||||
|
|
||||||
|
## TypeScript definitions
|
||||||
|
|
||||||
|
The npm package includes TypeScript definitions, so there is no need no install it separately.
|
||||||
|
|
||||||
|
## Change-log
|
||||||
|
|
||||||
|
Please visit [Change Log](Change-log.md).
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
If you want to understand the code, develop, or contribute. Please visit
|
||||||
|
[How to contribute](Contribute.md).
|
||||||
|
|
||||||
|
## Authors
|
||||||
|
|
||||||
|
- [Jeff Mesnil](http://jmesnil.net/)
|
||||||
|
- [Jeff Lindsay](http://github.com/progrium)
|
||||||
|
- [Vanessa Williams](http://github.com/fridgebuzz)
|
||||||
|
- [Deepak Kumar](https://github.com/kum-deepak)
|
||||||
|
- [Astha Deep](https://github.com/astha183)
|
||||||
|
- [Dillon Sellars](https://github.com/dillon-sellars)
|
||||||
|
- [Jimi Charalampidis](https://github.com/jimic)
|
||||||
|
- [Raul](https://github.com/rulonder)
|
||||||
|
- [Dimitar Georgiev](https://github.com/iMitaka)
|
||||||
|
- [Genadi](https://github.com/genadis)
|
||||||
|
- [Bobohuochai](https://github.com/bobohuochai)
|
||||||
|
- [Sailai](https://github.com/sailai)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[License](LICENSE) - Apache-2.0
|
||||||
2170
node_modules/@stomp/stompjs/bundles/stomp.umd.js
generated
vendored
Normal file
2170
node_modules/@stomp/stompjs/bundles/stomp.umd.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
node_modules/@stomp/stompjs/bundles/stomp.umd.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/bundles/stomp.umd.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
2
node_modules/@stomp/stompjs/bundles/stomp.umd.min.js
generated
vendored
Normal file
2
node_modules/@stomp/stompjs/bundles/stomp.umd.min.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
node_modules/@stomp/stompjs/bundles/stomp.umd.min.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/bundles/stomp.umd.min.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
5
node_modules/@stomp/stompjs/esm6/augment-websocket.d.ts
generated
vendored
Normal file
5
node_modules/@stomp/stompjs/esm6/augment-websocket.d.ts
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { IStompSocket } from './types';
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export declare function augmentWebsocket(webSocket: IStompSocket, debug: (msg: string) => void): void;
|
||||||
26
node_modules/@stomp/stompjs/esm6/augment-websocket.js
generated
vendored
Normal file
26
node_modules/@stomp/stompjs/esm6/augment-websocket.js
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export function augmentWebsocket(webSocket, debug) {
|
||||||
|
webSocket.terminate = function () {
|
||||||
|
const noOp = () => { };
|
||||||
|
// set all callbacks to no op
|
||||||
|
this.onerror = noOp;
|
||||||
|
this.onmessage = noOp;
|
||||||
|
this.onopen = noOp;
|
||||||
|
const ts = new Date();
|
||||||
|
const origOnClose = this.onclose;
|
||||||
|
// Track delay in actual closure of the socket
|
||||||
|
this.onclose = closeEvent => {
|
||||||
|
const delay = new Date().getTime() - ts.getTime();
|
||||||
|
debug(`Discarded socket closed after ${delay}ms, with code/reason: ${closeEvent.code}/${closeEvent.reason}`);
|
||||||
|
};
|
||||||
|
this.close();
|
||||||
|
origOnClose.call(this, {
|
||||||
|
code: 4001,
|
||||||
|
reason: 'Heartbeat failure, discarding the socket',
|
||||||
|
wasClean: false,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=augment-websocket.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/augment-websocket.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/augment-websocket.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"augment-websocket.js","sourceRoot":"","sources":["../src/augment-websocket.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAuB,EACvB,KAA4B;IAE5B,SAAS,CAAC,SAAS,GAAG;QACpB,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QAEtB,6BAA6B;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;QAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;QAEjC,8CAA8C;QAC9C,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE;YAC1B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAClD,KAAK,CACH,iCAAiC,KAAK,yBAAyB,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,CACtG,CAAC;QACJ,CAAC,CAAC;QAEF,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;YACrB,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,0CAA0C;YAClD,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
||||||
11
node_modules/@stomp/stompjs/esm6/byte.d.ts
generated
vendored
Normal file
11
node_modules/@stomp/stompjs/esm6/byte.d.ts
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* Some byte values, used as per STOMP specifications.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export declare const BYTE: {
|
||||||
|
LF: string;
|
||||||
|
NULL: string;
|
||||||
|
};
|
||||||
14
node_modules/@stomp/stompjs/esm6/byte.js
generated
vendored
Normal file
14
node_modules/@stomp/stompjs/esm6/byte.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* Some byte values, used as per STOMP specifications.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export const BYTE = {
|
||||||
|
// LINEFEED byte (octet 10)
|
||||||
|
LF: '\x0A',
|
||||||
|
// NULL byte (octet 0)
|
||||||
|
NULL: '\x00',
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=byte.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/byte.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/byte.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"byte.js","sourceRoot":"","sources":["../src/byte.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,2BAA2B;IAC3B,EAAE,EAAE,MAAM;IACV,sBAAsB;IACtB,IAAI,EAAE,MAAM;CACb,CAAC"}
|
||||||
475
node_modules/@stomp/stompjs/esm6/client.d.ts
generated
vendored
Normal file
475
node_modules/@stomp/stompjs/esm6/client.d.ts
generated
vendored
Normal file
@@ -0,0 +1,475 @@
|
|||||||
|
import { ITransaction } from './i-transaction';
|
||||||
|
import { StompConfig } from './stomp-config';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
import { StompSubscription } from './stomp-subscription';
|
||||||
|
import { ActivationState, closeEventCallbackType, debugFnType, frameCallbackType, IPublishParams, IStompSocket, messageCallbackType, wsErrorCallbackType } from './types';
|
||||||
|
import { Versions } from './versions';
|
||||||
|
/**
|
||||||
|
* STOMP Client Class.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare class Client {
|
||||||
|
/**
|
||||||
|
* The URL for the STOMP broker to connect to.
|
||||||
|
* Typically like `"ws://broker.329broker.com:15674/ws"` or `"wss://broker.329broker.com:15674/ws"`.
|
||||||
|
*
|
||||||
|
* Only one of this or [Client#webSocketFactory]{@link Client#webSocketFactory} need to be set.
|
||||||
|
* If both are set, [Client#webSocketFactory]{@link Client#webSocketFactory} will be used.
|
||||||
|
*
|
||||||
|
* If your environment does not support WebSockets natively, please refer to
|
||||||
|
* [Polyfills]{@link https://stomp-js.github.io/guide/stompjs/rx-stomp/ng2-stompjs/pollyfils-for-stompjs-v5.html}.
|
||||||
|
*/
|
||||||
|
brokerURL: string;
|
||||||
|
/**
|
||||||
|
* STOMP versions to attempt during STOMP handshake. By default versions `1.0`, `1.1`, and `1.2` are attempted.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```javascript
|
||||||
|
* // Try only versions 1.0 and 1.1
|
||||||
|
* client.stompVersions = new Versions(['1.0', '1.1'])
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
stompVersions: Versions;
|
||||||
|
/**
|
||||||
|
* This function should return a WebSocket or a similar (e.g. SockJS) object.
|
||||||
|
* If your environment does not support WebSockets natively, please refer to
|
||||||
|
* [Polyfills]{@link https://stomp-js.github.io/guide/stompjs/rx-stomp/ng2-stompjs/pollyfils-for-stompjs-v5.html}.
|
||||||
|
* If your STOMP Broker supports WebSockets, prefer setting [Client#brokerURL]{@link Client#brokerURL}.
|
||||||
|
*
|
||||||
|
* If both this and [Client#brokerURL]{@link Client#brokerURL} are set, this will be used.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```javascript
|
||||||
|
* // use a WebSocket
|
||||||
|
* client.webSocketFactory= function () {
|
||||||
|
* return new WebSocket("wss://broker.329broker.com:15674/ws");
|
||||||
|
* };
|
||||||
|
*
|
||||||
|
* // Typical usage with SockJS
|
||||||
|
* client.webSocketFactory= function () {
|
||||||
|
* return new SockJS("http://broker.329broker.com/stomp");
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
webSocketFactory: () => IStompSocket;
|
||||||
|
/**
|
||||||
|
* Will retry if Stomp connection is not established in specified milliseconds.
|
||||||
|
* Default 0, which implies wait for ever.
|
||||||
|
*/
|
||||||
|
connectionTimeout: number;
|
||||||
|
private _connectionWatcher;
|
||||||
|
/**
|
||||||
|
* automatically reconnect with delay in milliseconds, set to 0 to disable.
|
||||||
|
*/
|
||||||
|
reconnectDelay: number;
|
||||||
|
/**
|
||||||
|
* Incoming heartbeat interval in milliseconds. Set to 0 to disable.
|
||||||
|
*/
|
||||||
|
heartbeatIncoming: number;
|
||||||
|
/**
|
||||||
|
* Outgoing heartbeat interval in milliseconds. Set to 0 to disable.
|
||||||
|
*/
|
||||||
|
heartbeatOutgoing: number;
|
||||||
|
/**
|
||||||
|
* This switches on a non standard behavior while sending WebSocket packets.
|
||||||
|
* It splits larger (text) packets into chunks of [maxWebSocketChunkSize]{@link Client#maxWebSocketChunkSize}.
|
||||||
|
* Only Java Spring brokers seems to use this mode.
|
||||||
|
*
|
||||||
|
* WebSockets, by itself, split large (text) packets,
|
||||||
|
* so it is not needed with a truly compliant STOMP/WebSocket broker.
|
||||||
|
* Actually setting it for such broker will cause large messages to fail.
|
||||||
|
*
|
||||||
|
* `false` by default.
|
||||||
|
*
|
||||||
|
* Binary frames are never split.
|
||||||
|
*/
|
||||||
|
splitLargeFrames: boolean;
|
||||||
|
/**
|
||||||
|
* See [splitLargeFrames]{@link Client#splitLargeFrames}.
|
||||||
|
* This has no effect if [splitLargeFrames]{@link Client#splitLargeFrames} is `false`.
|
||||||
|
*/
|
||||||
|
maxWebSocketChunkSize: number;
|
||||||
|
/**
|
||||||
|
* Usually the
|
||||||
|
* [type of WebSocket frame]{@link https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send#Parameters}
|
||||||
|
* is automatically decided by type of the payload.
|
||||||
|
* Default is `false`, which should work with all compliant brokers.
|
||||||
|
*
|
||||||
|
* Set this flag to force binary frames.
|
||||||
|
*/
|
||||||
|
forceBinaryWSFrames: boolean;
|
||||||
|
/**
|
||||||
|
* A bug in ReactNative chops a string on occurrence of a NULL.
|
||||||
|
* See issue [https://github.com/stomp-js/stompjs/issues/89]{@link https://github.com/stomp-js/stompjs/issues/89}.
|
||||||
|
* This makes incoming WebSocket messages invalid STOMP packets.
|
||||||
|
* Setting this flag attempts to reverse the damage by appending a NULL.
|
||||||
|
* If the broker splits a large message into multiple WebSocket messages,
|
||||||
|
* this flag will cause data loss and abnormal termination of connection.
|
||||||
|
*
|
||||||
|
* This is not an ideal solution, but a stop gap until the underlying issue is fixed at ReactNative library.
|
||||||
|
*/
|
||||||
|
appendMissingNULLonIncoming: boolean;
|
||||||
|
/**
|
||||||
|
* Underlying WebSocket instance, READONLY.
|
||||||
|
*/
|
||||||
|
readonly webSocket: IStompSocket;
|
||||||
|
/**
|
||||||
|
* Connection headers, important keys - `login`, `passcode`, `host`.
|
||||||
|
* Though STOMP 1.2 standard marks these keys to be present, check your broker documentation for
|
||||||
|
* details specific to your broker.
|
||||||
|
*/
|
||||||
|
connectHeaders: StompHeaders;
|
||||||
|
/**
|
||||||
|
* Disconnection headers.
|
||||||
|
*/
|
||||||
|
disconnectHeaders: StompHeaders;
|
||||||
|
private _disconnectHeaders;
|
||||||
|
/**
|
||||||
|
* This function will be called for any unhandled messages.
|
||||||
|
* It is useful for receiving messages sent to RabbitMQ temporary queues.
|
||||||
|
*
|
||||||
|
* It can also get invoked with stray messages while the server is processing
|
||||||
|
* a request to [Client#unsubscribe]{@link Client#unsubscribe}
|
||||||
|
* from an endpoint.
|
||||||
|
*
|
||||||
|
* The actual {@link IMessage} will be passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
onUnhandledMessage: messageCallbackType;
|
||||||
|
/**
|
||||||
|
* STOMP brokers can be requested to notify when an operation is actually completed.
|
||||||
|
* Prefer using [Client#watchForReceipt]{@link Client#watchForReceipt}. See
|
||||||
|
* [Client#watchForReceipt]{@link Client#watchForReceipt} for examples.
|
||||||
|
*
|
||||||
|
* The actual {@link FrameImpl} will be passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
onUnhandledReceipt: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* Will be invoked if {@link FrameImpl} of unknown type is received from the STOMP broker.
|
||||||
|
*
|
||||||
|
* The actual {@link IFrame} will be passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
onUnhandledFrame: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* `true` if there is a active connection with STOMP Broker
|
||||||
|
*/
|
||||||
|
readonly connected: boolean;
|
||||||
|
/**
|
||||||
|
* Callback, invoked on before a connection connection to the STOMP broker.
|
||||||
|
*
|
||||||
|
* You can change options on the client, which will impact the immediate connect.
|
||||||
|
* It is valid to call [Client#decativate]{@link Client#deactivate} in this callback.
|
||||||
|
*
|
||||||
|
* As of version 5.1, this callback can be
|
||||||
|
* [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)
|
||||||
|
* (i.e., it can return a
|
||||||
|
* [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)).
|
||||||
|
* In that case connect will be called only after the Promise is resolved.
|
||||||
|
* This can be used to reliably fetch credentials, access token etc. from some other service
|
||||||
|
* in an asynchronous way.
|
||||||
|
*/
|
||||||
|
beforeConnect: () => void | Promise<void>;
|
||||||
|
/**
|
||||||
|
* Callback, invoked on every successful connection to the STOMP broker.
|
||||||
|
*
|
||||||
|
* The actual {@link FrameImpl} will be passed as parameter to the callback.
|
||||||
|
* Sometimes clients will like to use headers from this frame.
|
||||||
|
*/
|
||||||
|
onConnect: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* Callback, invoked on every successful disconnection from the STOMP broker. It will not be invoked if
|
||||||
|
* the STOMP broker disconnected due to an error.
|
||||||
|
*
|
||||||
|
* The actual Receipt {@link FrameImpl} acknowledging the DISCONNECT will be passed as parameter to the callback.
|
||||||
|
*
|
||||||
|
* The way STOMP protocol is designed, the connection may close/terminate without the client
|
||||||
|
* receiving the Receipt {@link FrameImpl} acknowledging the DISCONNECT.
|
||||||
|
* You might find [Client#onWebSocketClose]{@link Client#onWebSocketClose} more appropriate to watch
|
||||||
|
* STOMP broker disconnects.
|
||||||
|
*/
|
||||||
|
onDisconnect: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* Callback, invoked on an ERROR frame received from the STOMP Broker.
|
||||||
|
* A compliant STOMP Broker will close the connection after this type of frame.
|
||||||
|
* Please check broker specific documentation for exact behavior.
|
||||||
|
*
|
||||||
|
* The actual {@link IFrame} will be passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
onStompError: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* Callback, invoked when underlying WebSocket is closed.
|
||||||
|
*
|
||||||
|
* Actual [CloseEvent]{@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}
|
||||||
|
* is passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
onWebSocketClose: closeEventCallbackType;
|
||||||
|
/**
|
||||||
|
* Callback, invoked when underlying WebSocket raises an error.
|
||||||
|
*
|
||||||
|
* Actual [Event]{@link https://developer.mozilla.org/en-US/docs/Web/API/Event}
|
||||||
|
* is passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
onWebSocketError: wsErrorCallbackType;
|
||||||
|
/**
|
||||||
|
* Set it to log the actual raw communication with the broker.
|
||||||
|
* When unset, it logs headers of the parsed frames.
|
||||||
|
*
|
||||||
|
* Change in this effects from next broker reconnect.
|
||||||
|
*
|
||||||
|
* **Caution: this assumes that frames only have valid UTF8 strings.**
|
||||||
|
*/
|
||||||
|
logRawCommunication: boolean;
|
||||||
|
/**
|
||||||
|
* By default, debug messages are discarded. To log to `console` following can be used:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* client.debug = function(str) {
|
||||||
|
* console.log(str);
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Currently this method does not support levels of log. Be aware that the output can be quite verbose
|
||||||
|
* and may contain sensitive information (like passwords, tokens etc.).
|
||||||
|
*/
|
||||||
|
debug: debugFnType;
|
||||||
|
/**
|
||||||
|
* Browsers do not immediately close WebSockets when `.close` is issued.
|
||||||
|
* This may cause reconnection to take a longer on certain type of failures.
|
||||||
|
* In case of incoming heartbeat failure, this experimental flag instructs the library
|
||||||
|
* to discard the socket immediately (even before it is actually closed).
|
||||||
|
*/
|
||||||
|
discardWebsocketOnCommFailure: boolean;
|
||||||
|
/**
|
||||||
|
* version of STOMP protocol negotiated with the server, READONLY
|
||||||
|
*/
|
||||||
|
readonly connectedVersion: string;
|
||||||
|
private _stompHandler;
|
||||||
|
/**
|
||||||
|
* if the client is active (connected or going to reconnect)
|
||||||
|
*/
|
||||||
|
readonly active: boolean;
|
||||||
|
/**
|
||||||
|
* It will be called on state change.
|
||||||
|
*
|
||||||
|
* When deactivating it may go from ACTIVE to INACTIVE without entering DEACTIVATING.
|
||||||
|
*/
|
||||||
|
onChangeState: (state: ActivationState) => void;
|
||||||
|
private _changeState;
|
||||||
|
private _resolveSocketClose;
|
||||||
|
/**
|
||||||
|
* Activation state.
|
||||||
|
*
|
||||||
|
* It will usually be ACTIVE or INACTIVE.
|
||||||
|
* When deactivating it may go from ACTIVE to INACTIVE without entering DEACTIVATING.
|
||||||
|
*/
|
||||||
|
state: ActivationState;
|
||||||
|
private _reconnector;
|
||||||
|
/**
|
||||||
|
* Create an instance.
|
||||||
|
*/
|
||||||
|
constructor(conf?: StompConfig);
|
||||||
|
/**
|
||||||
|
* Update configuration.
|
||||||
|
*/
|
||||||
|
configure(conf: StompConfig): void;
|
||||||
|
/**
|
||||||
|
* Initiate the connection with the broker.
|
||||||
|
* If the connection breaks, as per [Client#reconnectDelay]{@link Client#reconnectDelay},
|
||||||
|
* it will keep trying to reconnect.
|
||||||
|
*
|
||||||
|
* Call [Client#deactivate]{@link Client#deactivate} to disconnect and stop reconnection attempts.
|
||||||
|
*/
|
||||||
|
activate(): void;
|
||||||
|
private _connect;
|
||||||
|
private _createWebSocket;
|
||||||
|
private _schedule_reconnect;
|
||||||
|
/**
|
||||||
|
* Disconnect if connected and stop auto reconnect loop.
|
||||||
|
* Appropriate callbacks will be invoked if underlying STOMP connection was connected.
|
||||||
|
*
|
||||||
|
* This call is async, it will resolve immediately if there is no underlying active websocket,
|
||||||
|
* otherwise, it will resolve after underlying websocket is properly disposed.
|
||||||
|
*
|
||||||
|
* To reactivate you can call [Client#activate]{@link Client#activate}.
|
||||||
|
*/
|
||||||
|
deactivate(): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Force disconnect if there is an active connection by directly closing the underlying WebSocket.
|
||||||
|
* This is different than a normal disconnect where a DISCONNECT sequence is carried out with the broker.
|
||||||
|
* After forcing disconnect, automatic reconnect will be attempted.
|
||||||
|
* To stop further reconnects call [Client#deactivate]{@link Client#deactivate} as well.
|
||||||
|
*/
|
||||||
|
forceDisconnect(): void;
|
||||||
|
private _disposeStompHandler;
|
||||||
|
/**
|
||||||
|
* Send a message to a named destination. Refer to your STOMP broker documentation for types
|
||||||
|
* and naming of destinations.
|
||||||
|
*
|
||||||
|
* STOMP protocol specifies and suggests some headers and also allows broker specific headers.
|
||||||
|
*
|
||||||
|
* `body` must be String.
|
||||||
|
* You will need to covert the payload to string in case it is not string (e.g. JSON).
|
||||||
|
*
|
||||||
|
* To send a binary message body use binaryBody parameter. It should be a
|
||||||
|
* [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array).
|
||||||
|
* Sometimes brokers may not support binary frames out of the box.
|
||||||
|
* Please check your broker documentation.
|
||||||
|
*
|
||||||
|
* `content-length` header is automatically added to the STOMP Frame sent to the broker.
|
||||||
|
* Set `skipContentLengthHeader` to indicate that `content-length` header should not be added.
|
||||||
|
* For binary messages `content-length` header is always added.
|
||||||
|
*
|
||||||
|
* Caution: The broker will, most likely, report an error and disconnect if message body has NULL octet(s)
|
||||||
|
* and `content-length` header is missing.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* client.publish({destination: "/queue/test", headers: {priority: 9}, body: "Hello, STOMP"});
|
||||||
|
*
|
||||||
|
* // Only destination is mandatory parameter
|
||||||
|
* client.publish({destination: "/queue/test", body: "Hello, STOMP"});
|
||||||
|
*
|
||||||
|
* // Skip content-length header in the frame to the broker
|
||||||
|
* client.publish({"/queue/test", body: "Hello, STOMP", skipContentLengthHeader: true});
|
||||||
|
*
|
||||||
|
* var binaryData = generateBinaryData(); // This need to be of type Uint8Array
|
||||||
|
* // setting content-type header is not mandatory, however a good practice
|
||||||
|
* client.publish({destination: '/topic/special', binaryBody: binaryData,
|
||||||
|
* headers: {'content-type': 'application/octet-stream'}});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
publish(params: IPublishParams): void;
|
||||||
|
/**
|
||||||
|
* STOMP brokers may carry out operation asynchronously and allow requesting for acknowledgement.
|
||||||
|
* To request an acknowledgement, a `receipt` header needs to be sent with the actual request.
|
||||||
|
* The value (say receipt-id) for this header needs to be unique for each use. Typically a sequence, a UUID, a
|
||||||
|
* random number or a combination may be used.
|
||||||
|
*
|
||||||
|
* A complaint broker will send a RECEIPT frame when an operation has actually been completed.
|
||||||
|
* The operation needs to be matched based in the value of the receipt-id.
|
||||||
|
*
|
||||||
|
* This method allow watching for a receipt and invoke the callback
|
||||||
|
* when corresponding receipt has been received.
|
||||||
|
*
|
||||||
|
* The actual {@link FrameImpl} will be passed as parameter to the callback.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```javascript
|
||||||
|
* // Subscribing with acknowledgement
|
||||||
|
* let receiptId = randomText();
|
||||||
|
*
|
||||||
|
* client.watchForReceipt(receiptId, function() {
|
||||||
|
* // Will be called after server acknowledges
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* client.subscribe(TEST.destination, onMessage, {receipt: receiptId});
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* // Publishing with acknowledgement
|
||||||
|
* receiptId = randomText();
|
||||||
|
*
|
||||||
|
* client.watchForReceipt(receiptId, function() {
|
||||||
|
* // Will be called after server acknowledges
|
||||||
|
* });
|
||||||
|
* client.publish({destination: TEST.destination, headers: {receipt: receiptId}, body: msg});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
watchForReceipt(receiptId: string, callback: frameCallbackType): void;
|
||||||
|
/**
|
||||||
|
* Subscribe to a STOMP Broker location. The callback will be invoked for each received message with
|
||||||
|
* the {@link IMessage} as argument.
|
||||||
|
*
|
||||||
|
* Note: The library will generate an unique ID if there is none provided in the headers.
|
||||||
|
* To use your own ID, pass it using the headers argument.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* callback = function(message) {
|
||||||
|
* // called when the client receives a STOMP message from the server
|
||||||
|
* if (message.body) {
|
||||||
|
* alert("got message with body " + message.body)
|
||||||
|
* } else {
|
||||||
|
* alert("got empty message");
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* var subscription = client.subscribe("/queue/test", callback);
|
||||||
|
*
|
||||||
|
* // Explicit subscription id
|
||||||
|
* var mySubId = 'my-subscription-id-001';
|
||||||
|
* var subscription = client.subscribe(destination, callback, { id: mySubId });
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
subscribe(destination: string, callback: messageCallbackType, headers?: StompHeaders): StompSubscription;
|
||||||
|
/**
|
||||||
|
* It is preferable to unsubscribe from a subscription by calling
|
||||||
|
* `unsubscribe()` directly on {@link StompSubscription} returned by `client.subscribe()`:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var subscription = client.subscribe(destination, onmessage);
|
||||||
|
* // ...
|
||||||
|
* subscription.unsubscribe();
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* See: http://stomp.github.com/stomp-specification-1.2.html#UNSUBSCRIBE UNSUBSCRIBE Frame
|
||||||
|
*/
|
||||||
|
unsubscribe(id: string, headers?: StompHeaders): void;
|
||||||
|
/**
|
||||||
|
* Start a transaction, the returned {@link ITransaction} has methods - [commit]{@link ITransaction#commit}
|
||||||
|
* and [abort]{@link ITransaction#abort}.
|
||||||
|
*
|
||||||
|
* `transactionId` is optional, if not passed the library will generate it internally.
|
||||||
|
*/
|
||||||
|
begin(transactionId?: string): ITransaction;
|
||||||
|
/**
|
||||||
|
* Commit a transaction.
|
||||||
|
*
|
||||||
|
* It is preferable to commit a transaction by calling [commit]{@link ITransaction#commit} directly on
|
||||||
|
* {@link ITransaction} returned by [client.begin]{@link Client#begin}.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var tx = client.begin(txId);
|
||||||
|
* //...
|
||||||
|
* tx.commit();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
commit(transactionId: string): void;
|
||||||
|
/**
|
||||||
|
* Abort a transaction.
|
||||||
|
* It is preferable to abort a transaction by calling [abort]{@link ITransaction#abort} directly on
|
||||||
|
* {@link ITransaction} returned by [client.begin]{@link Client#begin}.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var tx = client.begin(txId);
|
||||||
|
* //...
|
||||||
|
* tx.abort();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
abort(transactionId: string): void;
|
||||||
|
/**
|
||||||
|
* ACK a message. It is preferable to acknowledge a message by calling [ack]{@link IMessage#ack} directly
|
||||||
|
* on the {@link IMessage} handled by a subscription callback:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var callback = function (message) {
|
||||||
|
* // process the message
|
||||||
|
* // acknowledge it
|
||||||
|
* message.ack();
|
||||||
|
* };
|
||||||
|
* client.subscribe(destination, callback, {'ack': 'client'});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
ack(messageId: string, subscriptionId: string, headers?: StompHeaders): void;
|
||||||
|
/**
|
||||||
|
* NACK a message. It is preferable to acknowledge a message by calling [nack]{@link IMessage#nack} directly
|
||||||
|
* on the {@link IMessage} handled by a subscription callback:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var callback = function (message) {
|
||||||
|
* // process the message
|
||||||
|
* // an error occurs, nack it
|
||||||
|
* message.nack();
|
||||||
|
* };
|
||||||
|
* client.subscribe(destination, callback, {'ack': 'client'});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
nack(messageId: string, subscriptionId: string, headers?: StompHeaders): void;
|
||||||
|
}
|
||||||
539
node_modules/@stomp/stompjs/esm6/client.js
generated
vendored
Normal file
539
node_modules/@stomp/stompjs/esm6/client.js
generated
vendored
Normal file
@@ -0,0 +1,539 @@
|
|||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
import { StompHandler } from './stomp-handler';
|
||||||
|
import { ActivationState, StompSocketState, } from './types';
|
||||||
|
import { Versions } from './versions';
|
||||||
|
/**
|
||||||
|
* STOMP Client Class.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class Client {
|
||||||
|
/**
|
||||||
|
* Create an instance.
|
||||||
|
*/
|
||||||
|
constructor(conf = {}) {
|
||||||
|
/**
|
||||||
|
* STOMP versions to attempt during STOMP handshake. By default versions `1.0`, `1.1`, and `1.2` are attempted.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```javascript
|
||||||
|
* // Try only versions 1.0 and 1.1
|
||||||
|
* client.stompVersions = new Versions(['1.0', '1.1'])
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
this.stompVersions = Versions.default;
|
||||||
|
/**
|
||||||
|
* Will retry if Stomp connection is not established in specified milliseconds.
|
||||||
|
* Default 0, which implies wait for ever.
|
||||||
|
*/
|
||||||
|
this.connectionTimeout = 0;
|
||||||
|
/**
|
||||||
|
* automatically reconnect with delay in milliseconds, set to 0 to disable.
|
||||||
|
*/
|
||||||
|
this.reconnectDelay = 5000;
|
||||||
|
/**
|
||||||
|
* Incoming heartbeat interval in milliseconds. Set to 0 to disable.
|
||||||
|
*/
|
||||||
|
this.heartbeatIncoming = 10000;
|
||||||
|
/**
|
||||||
|
* Outgoing heartbeat interval in milliseconds. Set to 0 to disable.
|
||||||
|
*/
|
||||||
|
this.heartbeatOutgoing = 10000;
|
||||||
|
/**
|
||||||
|
* This switches on a non standard behavior while sending WebSocket packets.
|
||||||
|
* It splits larger (text) packets into chunks of [maxWebSocketChunkSize]{@link Client#maxWebSocketChunkSize}.
|
||||||
|
* Only Java Spring brokers seems to use this mode.
|
||||||
|
*
|
||||||
|
* WebSockets, by itself, split large (text) packets,
|
||||||
|
* so it is not needed with a truly compliant STOMP/WebSocket broker.
|
||||||
|
* Actually setting it for such broker will cause large messages to fail.
|
||||||
|
*
|
||||||
|
* `false` by default.
|
||||||
|
*
|
||||||
|
* Binary frames are never split.
|
||||||
|
*/
|
||||||
|
this.splitLargeFrames = false;
|
||||||
|
/**
|
||||||
|
* See [splitLargeFrames]{@link Client#splitLargeFrames}.
|
||||||
|
* This has no effect if [splitLargeFrames]{@link Client#splitLargeFrames} is `false`.
|
||||||
|
*/
|
||||||
|
this.maxWebSocketChunkSize = 8 * 1024;
|
||||||
|
/**
|
||||||
|
* Usually the
|
||||||
|
* [type of WebSocket frame]{@link https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send#Parameters}
|
||||||
|
* is automatically decided by type of the payload.
|
||||||
|
* Default is `false`, which should work with all compliant brokers.
|
||||||
|
*
|
||||||
|
* Set this flag to force binary frames.
|
||||||
|
*/
|
||||||
|
this.forceBinaryWSFrames = false;
|
||||||
|
/**
|
||||||
|
* A bug in ReactNative chops a string on occurrence of a NULL.
|
||||||
|
* See issue [https://github.com/stomp-js/stompjs/issues/89]{@link https://github.com/stomp-js/stompjs/issues/89}.
|
||||||
|
* This makes incoming WebSocket messages invalid STOMP packets.
|
||||||
|
* Setting this flag attempts to reverse the damage by appending a NULL.
|
||||||
|
* If the broker splits a large message into multiple WebSocket messages,
|
||||||
|
* this flag will cause data loss and abnormal termination of connection.
|
||||||
|
*
|
||||||
|
* This is not an ideal solution, but a stop gap until the underlying issue is fixed at ReactNative library.
|
||||||
|
*/
|
||||||
|
this.appendMissingNULLonIncoming = false;
|
||||||
|
/**
|
||||||
|
* Activation state.
|
||||||
|
*
|
||||||
|
* It will usually be ACTIVE or INACTIVE.
|
||||||
|
* When deactivating it may go from ACTIVE to INACTIVE without entering DEACTIVATING.
|
||||||
|
*/
|
||||||
|
this.state = ActivationState.INACTIVE;
|
||||||
|
// Dummy callbacks
|
||||||
|
const noOp = () => { };
|
||||||
|
this.debug = noOp;
|
||||||
|
this.beforeConnect = noOp;
|
||||||
|
this.onConnect = noOp;
|
||||||
|
this.onDisconnect = noOp;
|
||||||
|
this.onUnhandledMessage = noOp;
|
||||||
|
this.onUnhandledReceipt = noOp;
|
||||||
|
this.onUnhandledFrame = noOp;
|
||||||
|
this.onStompError = noOp;
|
||||||
|
this.onWebSocketClose = noOp;
|
||||||
|
this.onWebSocketError = noOp;
|
||||||
|
this.logRawCommunication = false;
|
||||||
|
this.onChangeState = noOp;
|
||||||
|
// These parameters would typically get proper values before connect is called
|
||||||
|
this.connectHeaders = {};
|
||||||
|
this._disconnectHeaders = {};
|
||||||
|
// Apply configuration
|
||||||
|
this.configure(conf);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Underlying WebSocket instance, READONLY.
|
||||||
|
*/
|
||||||
|
get webSocket() {
|
||||||
|
return this._stompHandler ? this._stompHandler._webSocket : undefined;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Disconnection headers.
|
||||||
|
*/
|
||||||
|
get disconnectHeaders() {
|
||||||
|
return this._disconnectHeaders;
|
||||||
|
}
|
||||||
|
set disconnectHeaders(value) {
|
||||||
|
this._disconnectHeaders = value;
|
||||||
|
if (this._stompHandler) {
|
||||||
|
this._stompHandler.disconnectHeaders = this._disconnectHeaders;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* `true` if there is a active connection with STOMP Broker
|
||||||
|
*/
|
||||||
|
get connected() {
|
||||||
|
return !!this._stompHandler && this._stompHandler.connected;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* version of STOMP protocol negotiated with the server, READONLY
|
||||||
|
*/
|
||||||
|
get connectedVersion() {
|
||||||
|
return this._stompHandler ? this._stompHandler.connectedVersion : undefined;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* if the client is active (connected or going to reconnect)
|
||||||
|
*/
|
||||||
|
get active() {
|
||||||
|
return this.state === ActivationState.ACTIVE;
|
||||||
|
}
|
||||||
|
_changeState(state) {
|
||||||
|
this.state = state;
|
||||||
|
this.onChangeState(state);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Update configuration.
|
||||||
|
*/
|
||||||
|
configure(conf) {
|
||||||
|
// bulk assign all properties to this
|
||||||
|
Object.assign(this, conf);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Initiate the connection with the broker.
|
||||||
|
* If the connection breaks, as per [Client#reconnectDelay]{@link Client#reconnectDelay},
|
||||||
|
* it will keep trying to reconnect.
|
||||||
|
*
|
||||||
|
* Call [Client#deactivate]{@link Client#deactivate} to disconnect and stop reconnection attempts.
|
||||||
|
*/
|
||||||
|
activate() {
|
||||||
|
if (this.state === ActivationState.DEACTIVATING) {
|
||||||
|
this.debug('Still DEACTIVATING, please await call to deactivate before trying to re-activate');
|
||||||
|
throw new Error('Still DEACTIVATING, can not activate now');
|
||||||
|
}
|
||||||
|
if (this.active) {
|
||||||
|
this.debug('Already ACTIVE, ignoring request to activate');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._changeState(ActivationState.ACTIVE);
|
||||||
|
this._connect();
|
||||||
|
}
|
||||||
|
_connect() {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (this.connected) {
|
||||||
|
this.debug('STOMP: already connected, nothing to do');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
yield this.beforeConnect();
|
||||||
|
if (!this.active) {
|
||||||
|
this.debug('Client has been marked inactive, will not attempt to connect');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// setup connection watcher
|
||||||
|
if (this.connectionTimeout > 0) {
|
||||||
|
// clear first
|
||||||
|
if (this._connectionWatcher) {
|
||||||
|
clearTimeout(this._connectionWatcher);
|
||||||
|
}
|
||||||
|
this._connectionWatcher = setTimeout(() => {
|
||||||
|
if (this.connected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Connection not established, close the underlying socket
|
||||||
|
// a reconnection will be attempted
|
||||||
|
this.debug(`Connection not established in ${this.connectionTimeout}ms, closing socket`);
|
||||||
|
this.forceDisconnect();
|
||||||
|
}, this.connectionTimeout);
|
||||||
|
}
|
||||||
|
this.debug('Opening Web Socket...');
|
||||||
|
// Get the actual WebSocket (or a similar object)
|
||||||
|
const webSocket = this._createWebSocket();
|
||||||
|
this._stompHandler = new StompHandler(this, webSocket, {
|
||||||
|
debug: this.debug,
|
||||||
|
stompVersions: this.stompVersions,
|
||||||
|
connectHeaders: this.connectHeaders,
|
||||||
|
disconnectHeaders: this._disconnectHeaders,
|
||||||
|
heartbeatIncoming: this.heartbeatIncoming,
|
||||||
|
heartbeatOutgoing: this.heartbeatOutgoing,
|
||||||
|
splitLargeFrames: this.splitLargeFrames,
|
||||||
|
maxWebSocketChunkSize: this.maxWebSocketChunkSize,
|
||||||
|
forceBinaryWSFrames: this.forceBinaryWSFrames,
|
||||||
|
logRawCommunication: this.logRawCommunication,
|
||||||
|
appendMissingNULLonIncoming: this.appendMissingNULLonIncoming,
|
||||||
|
discardWebsocketOnCommFailure: this.discardWebsocketOnCommFailure,
|
||||||
|
onConnect: frame => {
|
||||||
|
// Successfully connected, stop the connection watcher
|
||||||
|
if (this._connectionWatcher) {
|
||||||
|
clearTimeout(this._connectionWatcher);
|
||||||
|
this._connectionWatcher = undefined;
|
||||||
|
}
|
||||||
|
if (!this.active) {
|
||||||
|
this.debug('STOMP got connected while deactivate was issued, will disconnect now');
|
||||||
|
this._disposeStompHandler();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.onConnect(frame);
|
||||||
|
},
|
||||||
|
onDisconnect: frame => {
|
||||||
|
this.onDisconnect(frame);
|
||||||
|
},
|
||||||
|
onStompError: frame => {
|
||||||
|
this.onStompError(frame);
|
||||||
|
},
|
||||||
|
onWebSocketClose: evt => {
|
||||||
|
this._stompHandler = undefined; // a new one will be created in case of a reconnect
|
||||||
|
if (this.state === ActivationState.DEACTIVATING) {
|
||||||
|
// Mark deactivation complete
|
||||||
|
this._resolveSocketClose();
|
||||||
|
this._resolveSocketClose = undefined;
|
||||||
|
this._changeState(ActivationState.INACTIVE);
|
||||||
|
}
|
||||||
|
this.onWebSocketClose(evt);
|
||||||
|
// The callback is called before attempting to reconnect, this would allow the client
|
||||||
|
// to be `deactivated` in the callback.
|
||||||
|
if (this.active) {
|
||||||
|
this._schedule_reconnect();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onWebSocketError: evt => {
|
||||||
|
this.onWebSocketError(evt);
|
||||||
|
},
|
||||||
|
onUnhandledMessage: message => {
|
||||||
|
this.onUnhandledMessage(message);
|
||||||
|
},
|
||||||
|
onUnhandledReceipt: frame => {
|
||||||
|
this.onUnhandledReceipt(frame);
|
||||||
|
},
|
||||||
|
onUnhandledFrame: frame => {
|
||||||
|
this.onUnhandledFrame(frame);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
this._stompHandler.start();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_createWebSocket() {
|
||||||
|
let webSocket;
|
||||||
|
if (this.webSocketFactory) {
|
||||||
|
webSocket = this.webSocketFactory();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
webSocket = new WebSocket(this.brokerURL, this.stompVersions.protocolVersions());
|
||||||
|
}
|
||||||
|
webSocket.binaryType = 'arraybuffer';
|
||||||
|
return webSocket;
|
||||||
|
}
|
||||||
|
_schedule_reconnect() {
|
||||||
|
if (this.reconnectDelay > 0) {
|
||||||
|
this.debug(`STOMP: scheduling reconnection in ${this.reconnectDelay}ms`);
|
||||||
|
this._reconnector = setTimeout(() => {
|
||||||
|
this._connect();
|
||||||
|
}, this.reconnectDelay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Disconnect if connected and stop auto reconnect loop.
|
||||||
|
* Appropriate callbacks will be invoked if underlying STOMP connection was connected.
|
||||||
|
*
|
||||||
|
* This call is async, it will resolve immediately if there is no underlying active websocket,
|
||||||
|
* otherwise, it will resolve after underlying websocket is properly disposed.
|
||||||
|
*
|
||||||
|
* To reactivate you can call [Client#activate]{@link Client#activate}.
|
||||||
|
*/
|
||||||
|
deactivate() {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
let retPromise;
|
||||||
|
if (this.state !== ActivationState.ACTIVE) {
|
||||||
|
this.debug(`Already ${ActivationState[this.state]}, ignoring call to deactivate`);
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
this._changeState(ActivationState.DEACTIVATING);
|
||||||
|
// Clear if a reconnection was scheduled
|
||||||
|
if (this._reconnector) {
|
||||||
|
clearTimeout(this._reconnector);
|
||||||
|
}
|
||||||
|
if (this._stompHandler &&
|
||||||
|
this.webSocket.readyState !== StompSocketState.CLOSED) {
|
||||||
|
// we need to wait for underlying websocket to close
|
||||||
|
retPromise = new Promise((resolve, reject) => {
|
||||||
|
this._resolveSocketClose = resolve;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// indicate that auto reconnect loop should terminate
|
||||||
|
this._changeState(ActivationState.INACTIVE);
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
this._disposeStompHandler();
|
||||||
|
return retPromise;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Force disconnect if there is an active connection by directly closing the underlying WebSocket.
|
||||||
|
* This is different than a normal disconnect where a DISCONNECT sequence is carried out with the broker.
|
||||||
|
* After forcing disconnect, automatic reconnect will be attempted.
|
||||||
|
* To stop further reconnects call [Client#deactivate]{@link Client#deactivate} as well.
|
||||||
|
*/
|
||||||
|
forceDisconnect() {
|
||||||
|
if (this._stompHandler) {
|
||||||
|
this._stompHandler.forceDisconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_disposeStompHandler() {
|
||||||
|
// Dispose STOMP Handler
|
||||||
|
if (this._stompHandler) {
|
||||||
|
this._stompHandler.dispose();
|
||||||
|
this._stompHandler = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Send a message to a named destination. Refer to your STOMP broker documentation for types
|
||||||
|
* and naming of destinations.
|
||||||
|
*
|
||||||
|
* STOMP protocol specifies and suggests some headers and also allows broker specific headers.
|
||||||
|
*
|
||||||
|
* `body` must be String.
|
||||||
|
* You will need to covert the payload to string in case it is not string (e.g. JSON).
|
||||||
|
*
|
||||||
|
* To send a binary message body use binaryBody parameter. It should be a
|
||||||
|
* [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array).
|
||||||
|
* Sometimes brokers may not support binary frames out of the box.
|
||||||
|
* Please check your broker documentation.
|
||||||
|
*
|
||||||
|
* `content-length` header is automatically added to the STOMP Frame sent to the broker.
|
||||||
|
* Set `skipContentLengthHeader` to indicate that `content-length` header should not be added.
|
||||||
|
* For binary messages `content-length` header is always added.
|
||||||
|
*
|
||||||
|
* Caution: The broker will, most likely, report an error and disconnect if message body has NULL octet(s)
|
||||||
|
* and `content-length` header is missing.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* client.publish({destination: "/queue/test", headers: {priority: 9}, body: "Hello, STOMP"});
|
||||||
|
*
|
||||||
|
* // Only destination is mandatory parameter
|
||||||
|
* client.publish({destination: "/queue/test", body: "Hello, STOMP"});
|
||||||
|
*
|
||||||
|
* // Skip content-length header in the frame to the broker
|
||||||
|
* client.publish({"/queue/test", body: "Hello, STOMP", skipContentLengthHeader: true});
|
||||||
|
*
|
||||||
|
* var binaryData = generateBinaryData(); // This need to be of type Uint8Array
|
||||||
|
* // setting content-type header is not mandatory, however a good practice
|
||||||
|
* client.publish({destination: '/topic/special', binaryBody: binaryData,
|
||||||
|
* headers: {'content-type': 'application/octet-stream'}});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
publish(params) {
|
||||||
|
this._stompHandler.publish(params);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* STOMP brokers may carry out operation asynchronously and allow requesting for acknowledgement.
|
||||||
|
* To request an acknowledgement, a `receipt` header needs to be sent with the actual request.
|
||||||
|
* The value (say receipt-id) for this header needs to be unique for each use. Typically a sequence, a UUID, a
|
||||||
|
* random number or a combination may be used.
|
||||||
|
*
|
||||||
|
* A complaint broker will send a RECEIPT frame when an operation has actually been completed.
|
||||||
|
* The operation needs to be matched based in the value of the receipt-id.
|
||||||
|
*
|
||||||
|
* This method allow watching for a receipt and invoke the callback
|
||||||
|
* when corresponding receipt has been received.
|
||||||
|
*
|
||||||
|
* The actual {@link FrameImpl} will be passed as parameter to the callback.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```javascript
|
||||||
|
* // Subscribing with acknowledgement
|
||||||
|
* let receiptId = randomText();
|
||||||
|
*
|
||||||
|
* client.watchForReceipt(receiptId, function() {
|
||||||
|
* // Will be called after server acknowledges
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* client.subscribe(TEST.destination, onMessage, {receipt: receiptId});
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* // Publishing with acknowledgement
|
||||||
|
* receiptId = randomText();
|
||||||
|
*
|
||||||
|
* client.watchForReceipt(receiptId, function() {
|
||||||
|
* // Will be called after server acknowledges
|
||||||
|
* });
|
||||||
|
* client.publish({destination: TEST.destination, headers: {receipt: receiptId}, body: msg});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
watchForReceipt(receiptId, callback) {
|
||||||
|
this._stompHandler.watchForReceipt(receiptId, callback);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Subscribe to a STOMP Broker location. The callback will be invoked for each received message with
|
||||||
|
* the {@link IMessage} as argument.
|
||||||
|
*
|
||||||
|
* Note: The library will generate an unique ID if there is none provided in the headers.
|
||||||
|
* To use your own ID, pass it using the headers argument.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* callback = function(message) {
|
||||||
|
* // called when the client receives a STOMP message from the server
|
||||||
|
* if (message.body) {
|
||||||
|
* alert("got message with body " + message.body)
|
||||||
|
* } else {
|
||||||
|
* alert("got empty message");
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* var subscription = client.subscribe("/queue/test", callback);
|
||||||
|
*
|
||||||
|
* // Explicit subscription id
|
||||||
|
* var mySubId = 'my-subscription-id-001';
|
||||||
|
* var subscription = client.subscribe(destination, callback, { id: mySubId });
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
subscribe(destination, callback, headers = {}) {
|
||||||
|
return this._stompHandler.subscribe(destination, callback, headers);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* It is preferable to unsubscribe from a subscription by calling
|
||||||
|
* `unsubscribe()` directly on {@link StompSubscription} returned by `client.subscribe()`:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var subscription = client.subscribe(destination, onmessage);
|
||||||
|
* // ...
|
||||||
|
* subscription.unsubscribe();
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* See: http://stomp.github.com/stomp-specification-1.2.html#UNSUBSCRIBE UNSUBSCRIBE Frame
|
||||||
|
*/
|
||||||
|
unsubscribe(id, headers = {}) {
|
||||||
|
this._stompHandler.unsubscribe(id, headers);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Start a transaction, the returned {@link ITransaction} has methods - [commit]{@link ITransaction#commit}
|
||||||
|
* and [abort]{@link ITransaction#abort}.
|
||||||
|
*
|
||||||
|
* `transactionId` is optional, if not passed the library will generate it internally.
|
||||||
|
*/
|
||||||
|
begin(transactionId) {
|
||||||
|
return this._stompHandler.begin(transactionId);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Commit a transaction.
|
||||||
|
*
|
||||||
|
* It is preferable to commit a transaction by calling [commit]{@link ITransaction#commit} directly on
|
||||||
|
* {@link ITransaction} returned by [client.begin]{@link Client#begin}.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var tx = client.begin(txId);
|
||||||
|
* //...
|
||||||
|
* tx.commit();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
commit(transactionId) {
|
||||||
|
this._stompHandler.commit(transactionId);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Abort a transaction.
|
||||||
|
* It is preferable to abort a transaction by calling [abort]{@link ITransaction#abort} directly on
|
||||||
|
* {@link ITransaction} returned by [client.begin]{@link Client#begin}.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var tx = client.begin(txId);
|
||||||
|
* //...
|
||||||
|
* tx.abort();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
abort(transactionId) {
|
||||||
|
this._stompHandler.abort(transactionId);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* ACK a message. It is preferable to acknowledge a message by calling [ack]{@link IMessage#ack} directly
|
||||||
|
* on the {@link IMessage} handled by a subscription callback:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var callback = function (message) {
|
||||||
|
* // process the message
|
||||||
|
* // acknowledge it
|
||||||
|
* message.ack();
|
||||||
|
* };
|
||||||
|
* client.subscribe(destination, callback, {'ack': 'client'});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
ack(messageId, subscriptionId, headers = {}) {
|
||||||
|
this._stompHandler.ack(messageId, subscriptionId, headers);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* NACK a message. It is preferable to acknowledge a message by calling [nack]{@link IMessage#nack} directly
|
||||||
|
* on the {@link IMessage} handled by a subscription callback:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var callback = function (message) {
|
||||||
|
* // process the message
|
||||||
|
* // an error occurs, nack it
|
||||||
|
* message.nack();
|
||||||
|
* };
|
||||||
|
* client.subscribe(destination, callback, {'ack': 'client'});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
nack(messageId, subscriptionId, headers = {}) {
|
||||||
|
this._stompHandler.nack(messageId, subscriptionId, headers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=client.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/client.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/client.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
149
node_modules/@stomp/stompjs/esm6/compatibility/compat-client.d.ts
generated
vendored
Normal file
149
node_modules/@stomp/stompjs/esm6/compatibility/compat-client.d.ts
generated
vendored
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
import { Client } from '../client';
|
||||||
|
import { StompHeaders } from '../stomp-headers';
|
||||||
|
import { frameCallbackType, messageCallbackType } from '../types';
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using {@link Client}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
export declare class CompatClient extends Client {
|
||||||
|
/**
|
||||||
|
* It is no op now. No longer needed. Large packets work out of the box.
|
||||||
|
*/
|
||||||
|
maxWebSocketFrameSize: number;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using {@link Client}
|
||||||
|
* and [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
constructor(webSocketFactory: () => any);
|
||||||
|
private _parseConnect;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using [Client#activate]{@link Client#activate}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* The `connect` method accepts different number of arguments and types. See the Overloads list. Use the
|
||||||
|
* version with headers to pass your broker specific options.
|
||||||
|
*
|
||||||
|
* overloads:
|
||||||
|
* - connect(headers, connectCallback)
|
||||||
|
* - connect(headers, connectCallback, errorCallback)
|
||||||
|
* - connect(login, passcode, connectCallback)
|
||||||
|
* - connect(login, passcode, connectCallback, errorCallback)
|
||||||
|
* - connect(login, passcode, connectCallback, errorCallback, closeEventCallback)
|
||||||
|
* - connect(login, passcode, connectCallback, errorCallback, closeEventCallback, host)
|
||||||
|
*
|
||||||
|
* params:
|
||||||
|
* - headers, see [Client#connectHeaders]{@link Client#connectHeaders}
|
||||||
|
* - connectCallback, see [Client#onConnect]{@link Client#onConnect}
|
||||||
|
* - errorCallback, see [Client#onStompError]{@link Client#onStompError}
|
||||||
|
* - closeEventCallback, see [Client#onWebSocketClose]{@link Client#onWebSocketClose}
|
||||||
|
* - login [String], see [Client#connectHeaders](../classes/Client.html#connectHeaders)
|
||||||
|
* - passcode [String], [Client#connectHeaders](../classes/Client.html#connectHeaders)
|
||||||
|
* - host [String], see [Client#connectHeaders](../classes/Client.html#connectHeaders)
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
connect(...args: any[]): void;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using [Client#deactivate]{@link Client#deactivate}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* See:
|
||||||
|
* [Client#onDisconnect]{@link Client#onDisconnect}, and
|
||||||
|
* [Client#disconnectHeaders]{@link Client#disconnectHeaders}
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
disconnect(disconnectCallback?: any, headers?: StompHeaders): void;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, use [Client#publish]{@link Client#publish}.
|
||||||
|
*
|
||||||
|
* Send a message to a named destination. Refer to your STOMP broker documentation for types
|
||||||
|
* and naming of destinations. The headers will, typically, be available to the subscriber.
|
||||||
|
* However, there may be special purpose headers corresponding to your STOMP broker.
|
||||||
|
*
|
||||||
|
* **Deprecated**, use [Client#publish]{@link Client#publish}
|
||||||
|
*
|
||||||
|
* Note: Body must be String. You will need to covert the payload to string in case it is not string (e.g. JSON)
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* client.send("/queue/test", {priority: 9}, "Hello, STOMP");
|
||||||
|
*
|
||||||
|
* // If you want to send a message with a body, you must also pass the headers argument.
|
||||||
|
* client.send("/queue/test", {}, "Hello, STOMP");
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
send(destination: string, headers?: {
|
||||||
|
[key: string]: any;
|
||||||
|
}, body?: string): void;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#reconnectDelay]{@link Client#reconnectDelay}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
reconnect_delay: number;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#webSocket]{@link Client#webSocket}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
readonly ws: any;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#connectedVersion]{@link Client#connectedVersion}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
readonly version: string;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
onreceive: messageCallbackType;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledReceipt]{@link Client#onUnhandledReceipt}.
|
||||||
|
* Prefer using [Client#watchForReceipt]{@link Client#watchForReceipt}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledReceipt]{@link Client#onUnhandledReceipt}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
onreceipt: frameCallbackType;
|
||||||
|
private _heartbeatInfo;
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#heartbeatIncoming]{@link Client#heartbeatIncoming}
|
||||||
|
* [Client#heartbeatOutgoing]{@link Client#heartbeatOutgoing}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#heartbeatIncoming]{@link Client#heartbeatIncoming}
|
||||||
|
* [Client#heartbeatOutgoing]{@link Client#heartbeatOutgoing}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
heartbeat: {
|
||||||
|
incoming: number;
|
||||||
|
outgoing: number;
|
||||||
|
};
|
||||||
|
}
|
||||||
241
node_modules/@stomp/stompjs/esm6/compatibility/compat-client.js
generated
vendored
Normal file
241
node_modules/@stomp/stompjs/esm6/compatibility/compat-client.js
generated
vendored
Normal file
@@ -0,0 +1,241 @@
|
|||||||
|
import { Client } from '../client';
|
||||||
|
import { HeartbeatInfo } from './heartbeat-info';
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using {@link Client}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
export class CompatClient extends Client {
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using {@link Client}
|
||||||
|
* and [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
constructor(webSocketFactory) {
|
||||||
|
super();
|
||||||
|
/**
|
||||||
|
* It is no op now. No longer needed. Large packets work out of the box.
|
||||||
|
*/
|
||||||
|
this.maxWebSocketFrameSize = 16 * 1024;
|
||||||
|
this._heartbeatInfo = new HeartbeatInfo(this);
|
||||||
|
this.reconnect_delay = 0;
|
||||||
|
this.webSocketFactory = webSocketFactory;
|
||||||
|
// Default from previous version
|
||||||
|
this.debug = (...message) => {
|
||||||
|
console.log(...message);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
_parseConnect(...args) {
|
||||||
|
let closeEventCallback;
|
||||||
|
let connectCallback;
|
||||||
|
let errorCallback;
|
||||||
|
let headers = {};
|
||||||
|
if (args.length < 2) {
|
||||||
|
throw new Error('Connect requires at least 2 arguments');
|
||||||
|
}
|
||||||
|
if (typeof args[1] === 'function') {
|
||||||
|
[headers, connectCallback, errorCallback, closeEventCallback] = args;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
switch (args.length) {
|
||||||
|
case 6:
|
||||||
|
[
|
||||||
|
headers.login,
|
||||||
|
headers.passcode,
|
||||||
|
connectCallback,
|
||||||
|
errorCallback,
|
||||||
|
closeEventCallback,
|
||||||
|
headers.host,
|
||||||
|
] = args;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
[
|
||||||
|
headers.login,
|
||||||
|
headers.passcode,
|
||||||
|
connectCallback,
|
||||||
|
errorCallback,
|
||||||
|
closeEventCallback,
|
||||||
|
] = args;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [headers, connectCallback, errorCallback, closeEventCallback];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using [Client#activate]{@link Client#activate}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* The `connect` method accepts different number of arguments and types. See the Overloads list. Use the
|
||||||
|
* version with headers to pass your broker specific options.
|
||||||
|
*
|
||||||
|
* overloads:
|
||||||
|
* - connect(headers, connectCallback)
|
||||||
|
* - connect(headers, connectCallback, errorCallback)
|
||||||
|
* - connect(login, passcode, connectCallback)
|
||||||
|
* - connect(login, passcode, connectCallback, errorCallback)
|
||||||
|
* - connect(login, passcode, connectCallback, errorCallback, closeEventCallback)
|
||||||
|
* - connect(login, passcode, connectCallback, errorCallback, closeEventCallback, host)
|
||||||
|
*
|
||||||
|
* params:
|
||||||
|
* - headers, see [Client#connectHeaders]{@link Client#connectHeaders}
|
||||||
|
* - connectCallback, see [Client#onConnect]{@link Client#onConnect}
|
||||||
|
* - errorCallback, see [Client#onStompError]{@link Client#onStompError}
|
||||||
|
* - closeEventCallback, see [Client#onWebSocketClose]{@link Client#onWebSocketClose}
|
||||||
|
* - login [String], see [Client#connectHeaders](../classes/Client.html#connectHeaders)
|
||||||
|
* - passcode [String], [Client#connectHeaders](../classes/Client.html#connectHeaders)
|
||||||
|
* - host [String], see [Client#connectHeaders](../classes/Client.html#connectHeaders)
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
connect(...args) {
|
||||||
|
const out = this._parseConnect(...args);
|
||||||
|
if (out[0]) {
|
||||||
|
this.connectHeaders = out[0];
|
||||||
|
}
|
||||||
|
if (out[1]) {
|
||||||
|
this.onConnect = out[1];
|
||||||
|
}
|
||||||
|
if (out[2]) {
|
||||||
|
this.onStompError = out[2];
|
||||||
|
}
|
||||||
|
if (out[3]) {
|
||||||
|
this.onWebSocketClose = out[3];
|
||||||
|
}
|
||||||
|
super.activate();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using [Client#deactivate]{@link Client#deactivate}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* See:
|
||||||
|
* [Client#onDisconnect]{@link Client#onDisconnect}, and
|
||||||
|
* [Client#disconnectHeaders]{@link Client#disconnectHeaders}
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
disconnect(disconnectCallback, headers = {}) {
|
||||||
|
if (disconnectCallback) {
|
||||||
|
this.onDisconnect = disconnectCallback;
|
||||||
|
}
|
||||||
|
this.disconnectHeaders = headers;
|
||||||
|
super.deactivate();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, use [Client#publish]{@link Client#publish}.
|
||||||
|
*
|
||||||
|
* Send a message to a named destination. Refer to your STOMP broker documentation for types
|
||||||
|
* and naming of destinations. The headers will, typically, be available to the subscriber.
|
||||||
|
* However, there may be special purpose headers corresponding to your STOMP broker.
|
||||||
|
*
|
||||||
|
* **Deprecated**, use [Client#publish]{@link Client#publish}
|
||||||
|
*
|
||||||
|
* Note: Body must be String. You will need to covert the payload to string in case it is not string (e.g. JSON)
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* client.send("/queue/test", {priority: 9}, "Hello, STOMP");
|
||||||
|
*
|
||||||
|
* // If you want to send a message with a body, you must also pass the headers argument.
|
||||||
|
* client.send("/queue/test", {}, "Hello, STOMP");
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
send(destination, headers = {}, body = '') {
|
||||||
|
headers = Object.assign({}, headers);
|
||||||
|
const skipContentLengthHeader = headers['content-length'] === false;
|
||||||
|
if (skipContentLengthHeader) {
|
||||||
|
delete headers['content-length'];
|
||||||
|
}
|
||||||
|
this.publish({
|
||||||
|
destination,
|
||||||
|
headers: headers,
|
||||||
|
body,
|
||||||
|
skipContentLengthHeader,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#reconnectDelay]{@link Client#reconnectDelay}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
set reconnect_delay(value) {
|
||||||
|
this.reconnectDelay = value;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#webSocket]{@link Client#webSocket}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get ws() {
|
||||||
|
return this.webSocket;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#connectedVersion]{@link Client#connectedVersion}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get version() {
|
||||||
|
return this.connectedVersion;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get onreceive() {
|
||||||
|
return this.onUnhandledMessage;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
set onreceive(value) {
|
||||||
|
this.onUnhandledMessage = value;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledReceipt]{@link Client#onUnhandledReceipt}.
|
||||||
|
* Prefer using [Client#watchForReceipt]{@link Client#watchForReceipt}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get onreceipt() {
|
||||||
|
return this.onUnhandledReceipt;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledReceipt]{@link Client#onUnhandledReceipt}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
set onreceipt(value) {
|
||||||
|
this.onUnhandledReceipt = value;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#heartbeatIncoming]{@link Client#heartbeatIncoming}
|
||||||
|
* [Client#heartbeatOutgoing]{@link Client#heartbeatOutgoing}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get heartbeat() {
|
||||||
|
return this._heartbeatInfo;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#heartbeatIncoming]{@link Client#heartbeatIncoming}
|
||||||
|
* [Client#heartbeatOutgoing]{@link Client#heartbeatOutgoing}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
set heartbeat(value) {
|
||||||
|
this.heartbeatIncoming = value.incoming;
|
||||||
|
this.heartbeatOutgoing = value.outgoing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=compat-client.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/compatibility/compat-client.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/compatibility/compat-client.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"compat-client.js","sourceRoot":"","sources":["../../src/compatibility/compat-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAa,SAAQ,MAAM;IAMtC;;;;;;;OAOG;IACH,YAAY,gBAA2B;QACrC,KAAK,EAAE,CAAC;QAdV;;WAEG;QACI,0BAAqB,GAAW,EAAE,GAAG,IAAI,CAAC;QAoOzC,mBAAc,GAAkB,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QAxN9D,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,gCAAgC;QAChC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,OAAc,EAAE,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,GAAG,IAAW;QAClC,IAAI,kBAAkB,CAAC;QACvB,IAAI,eAAe,CAAC;QACpB,IAAI,aAAa,CAAC;QAClB,IAAI,OAAO,GAAiB,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;QACD,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;YACjC,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,CAAC,GAAG,IAAI,CAAC;SACtE;aAAM;YACL,QAAQ,IAAI,CAAC,MAAM,EAAE;gBACnB,KAAK,CAAC;oBACJ;wBACE,OAAO,CAAC,KAAK;wBACb,OAAO,CAAC,QAAQ;wBAChB,eAAe;wBACf,aAAa;wBACb,kBAAkB;wBAClB,OAAO,CAAC,IAAI;qBACb,GAAG,IAAI,CAAC;oBACT,MAAM;gBACR;oBACE;wBACE,OAAO,CAAC,KAAK;wBACb,OAAO,CAAC,QAAQ;wBAChB,eAAe;wBACf,aAAa;wBACb,kBAAkB;qBACnB,GAAG,IAAI,CAAC;aACZ;SACF;QAED,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,OAAO,CAAC,GAAG,IAAW;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC;QAExC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;YACV,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SAC9B;QACD,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;YACV,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SAC5B;QACD,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;YACV,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SAChC;QAED,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnB,CAAC;IAED;;;;;;;;;;OAUG;IACI,UAAU,CACf,kBAAwB,EACxB,UAAwB,EAAE;QAE1B,IAAI,kBAAkB,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC;SACxC;QACD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;QAEjC,KAAK,CAAC,UAAU,EAAE,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACI,IAAI,CACT,WAAmB,EACnB,UAAkC,EAAE,EACpC,OAAe,EAAE;QAEjB,OAAO,GAAI,MAAc,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAE9C,MAAM,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,KAAK,CAAC;QACpE,IAAI,uBAAuB,EAAE;YAC3B,OAAO,OAAO,CAAC,gBAAgB,CAAC,CAAC;SAClC;QACD,IAAI,CAAC,OAAO,CAAC;YACX,WAAW;YACX,OAAO,EAAE,OAAuB;YAChC,IAAI;YACJ,uBAAuB;SACxB,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,IAAI,eAAe,CAAC,KAAa;QAC/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,IAAI,SAAS,CAAC,KAA0B;QACtC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,IAAI,SAAS,CAAC,KAAwB;QACpC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAClC,CAAC;IAID;;;;;OAKG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,IAAI,SAAS,CAAC,KAA6C;QACzD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1C,CAAC;CACF"}
|
||||||
12
node_modules/@stomp/stompjs/esm6/compatibility/heartbeat-info.d.ts
generated
vendored
Normal file
12
node_modules/@stomp/stompjs/esm6/compatibility/heartbeat-info.d.ts
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { CompatClient } from './compat-client';
|
||||||
|
/**
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export declare class HeartbeatInfo {
|
||||||
|
private client;
|
||||||
|
constructor(client: CompatClient);
|
||||||
|
outgoing: number;
|
||||||
|
incoming: number;
|
||||||
|
}
|
||||||
23
node_modules/@stomp/stompjs/esm6/compatibility/heartbeat-info.js
generated
vendored
Normal file
23
node_modules/@stomp/stompjs/esm6/compatibility/heartbeat-info.js
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export class HeartbeatInfo {
|
||||||
|
constructor(client) {
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
get outgoing() {
|
||||||
|
return this.client.heartbeatOutgoing;
|
||||||
|
}
|
||||||
|
set outgoing(value) {
|
||||||
|
this.client.heartbeatOutgoing = value;
|
||||||
|
}
|
||||||
|
get incoming() {
|
||||||
|
return this.client.heartbeatIncoming;
|
||||||
|
}
|
||||||
|
set incoming(value) {
|
||||||
|
this.client.heartbeatIncoming = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=heartbeat-info.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/compatibility/heartbeat-info.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/compatibility/heartbeat-info.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"heartbeat-info.js","sourceRoot":"","sources":["../../src/compatibility/heartbeat-info.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACxB,YAAoB,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE5C,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;IACvC,CAAC;IAED,IAAI,QAAQ,CAAC,KAAa;QACxB,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACxC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;IACvC,CAAC;IAED,IAAI,QAAQ,CAAC,KAAa;QACxB,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACxC,CAAC;CACF"}
|
||||||
67
node_modules/@stomp/stompjs/esm6/compatibility/stomp.d.ts
generated
vendored
Normal file
67
node_modules/@stomp/stompjs/esm6/compatibility/stomp.d.ts
generated
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
import { CompatClient } from './compat-client';
|
||||||
|
/**
|
||||||
|
* STOMP Class, acts like a factory to create {@link Client}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}.
|
||||||
|
*/
|
||||||
|
export declare class Stomp {
|
||||||
|
/**
|
||||||
|
* In case you need to use a non standard class for WebSocket.
|
||||||
|
*
|
||||||
|
* For example when using within NodeJS environment:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* StompJs = require('../../esm5/');
|
||||||
|
* Stomp = StompJs.Stomp;
|
||||||
|
* Stomp.WebSocketClass = require('websocket').w3cwebsocket;
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}
|
||||||
|
* using [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*/
|
||||||
|
static WebSocketClass: any;
|
||||||
|
/**
|
||||||
|
* This method creates a WebSocket client that is connected to
|
||||||
|
* the STOMP server located at the url.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var url = "ws://localhost:61614/stomp";
|
||||||
|
* var client = Stomp.client(url);
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}
|
||||||
|
* using [Client#brokerURL]{@link Client#brokerURL}.
|
||||||
|
*/
|
||||||
|
static client(url: string, protocols?: string[]): CompatClient;
|
||||||
|
/**
|
||||||
|
* This method is an alternative to [Stomp#client]{@link Stomp#client} to let the user
|
||||||
|
* specify the WebSocket to use (either a standard HTML5 WebSocket or
|
||||||
|
* a similar object).
|
||||||
|
*
|
||||||
|
* In order to support reconnection, the function Client._connect should be callable more than once.
|
||||||
|
* While reconnecting
|
||||||
|
* a new instance of underlying transport (TCP Socket, WebSocket or SockJS) will be needed. So, this function
|
||||||
|
* alternatively allows passing a function that should return a new instance of the underlying socket.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var client = Stomp.over(function(){
|
||||||
|
* return new WebSocket('ws://localhost:15674/ws')
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}
|
||||||
|
* using [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*/
|
||||||
|
static over(ws: any): CompatClient;
|
||||||
|
}
|
||||||
102
node_modules/@stomp/stompjs/esm6/compatibility/stomp.js
generated
vendored
Normal file
102
node_modules/@stomp/stompjs/esm6/compatibility/stomp.js
generated
vendored
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
import { Versions } from '../versions';
|
||||||
|
import { CompatClient } from './compat-client';
|
||||||
|
/**
|
||||||
|
* STOMP Class, acts like a factory to create {@link Client}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}.
|
||||||
|
*/
|
||||||
|
export class Stomp {
|
||||||
|
/**
|
||||||
|
* This method creates a WebSocket client that is connected to
|
||||||
|
* the STOMP server located at the url.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var url = "ws://localhost:61614/stomp";
|
||||||
|
* var client = Stomp.client(url);
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}
|
||||||
|
* using [Client#brokerURL]{@link Client#brokerURL}.
|
||||||
|
*/
|
||||||
|
static client(url, protocols) {
|
||||||
|
// This is a hack to allow another implementation than the standard
|
||||||
|
// HTML5 WebSocket class.
|
||||||
|
//
|
||||||
|
// It is possible to use another class by calling
|
||||||
|
//
|
||||||
|
// Stomp.WebSocketClass = MozWebSocket
|
||||||
|
//
|
||||||
|
// *prior* to call `Stomp.client()`.
|
||||||
|
//
|
||||||
|
// This hack is deprecated and `Stomp.over()` method should be used
|
||||||
|
// instead.
|
||||||
|
// See remarks on the function Stomp.over
|
||||||
|
if (protocols == null) {
|
||||||
|
protocols = Versions.default.protocolVersions();
|
||||||
|
}
|
||||||
|
const wsFn = () => {
|
||||||
|
const klass = Stomp.WebSocketClass || WebSocket;
|
||||||
|
return new klass(url, protocols);
|
||||||
|
};
|
||||||
|
return new CompatClient(wsFn);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* This method is an alternative to [Stomp#client]{@link Stomp#client} to let the user
|
||||||
|
* specify the WebSocket to use (either a standard HTML5 WebSocket or
|
||||||
|
* a similar object).
|
||||||
|
*
|
||||||
|
* In order to support reconnection, the function Client._connect should be callable more than once.
|
||||||
|
* While reconnecting
|
||||||
|
* a new instance of underlying transport (TCP Socket, WebSocket or SockJS) will be needed. So, this function
|
||||||
|
* alternatively allows passing a function that should return a new instance of the underlying socket.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var client = Stomp.over(function(){
|
||||||
|
* return new WebSocket('ws://localhost:15674/ws')
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}
|
||||||
|
* using [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*/
|
||||||
|
static over(ws) {
|
||||||
|
let wsFn;
|
||||||
|
if (typeof ws === 'function') {
|
||||||
|
wsFn = ws;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.warn('Stomp.over did not receive a factory, auto reconnect will not work. ' +
|
||||||
|
'Please see https://stomp-js.github.io/api-docs/latest/classes/Stomp.html#over');
|
||||||
|
wsFn = () => ws;
|
||||||
|
}
|
||||||
|
return new CompatClient(wsFn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* In case you need to use a non standard class for WebSocket.
|
||||||
|
*
|
||||||
|
* For example when using within NodeJS environment:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* StompJs = require('../../esm5/');
|
||||||
|
* Stomp = StompJs.Stomp;
|
||||||
|
* Stomp.WebSocketClass = require('websocket').w3cwebsocket;
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}
|
||||||
|
* using [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*/
|
||||||
|
// tslint:disable-next-line:variable-name
|
||||||
|
Stomp.WebSocketClass = null;
|
||||||
|
//# sourceMappingURL=stomp.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/compatibility/stomp.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/compatibility/stomp.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"stomp.js","sourceRoot":"","sources":["../../src/compatibility/stomp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAW/C;;;;;;;;GAQG;AACH,MAAM,OAAO,KAAK;IAqBhB;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,MAAM,CAAC,GAAW,EAAE,SAAoB;QACpD,mEAAmE;QACnE,yBAAyB;QACzB,EAAE;QACF,iDAAiD;QACjD,EAAE;QACF,0CAA0C;QAC1C,EAAE;QACF,oCAAoC;QACpC,EAAE;QACF,mEAAmE;QACnE,WAAW;QAEX,yCAAyC;QACzC,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;SACjD;QACD,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,IAAI,SAAS,CAAC;YAChD,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACnC,CAAC,CAAC;QAEF,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,MAAM,CAAC,IAAI,CAAC,EAAO;QACxB,IAAI,IAAe,CAAC;QAEpB,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAC5B,IAAI,GAAG,EAAE,CAAC;SACX;aAAM;YACL,OAAO,CAAC,IAAI,CACV,sEAAsE;gBACpE,+EAA+E,CAClF,CAAC;YACF,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;SACjB;QAED,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;;AA9FD;;;;;;;;;;;;;;;;GAgBG;AACH,yCAAyC;AAC3B,oBAAc,GAAQ,IAAI,CAAC"}
|
||||||
95
node_modules/@stomp/stompjs/esm6/frame-impl.d.ts
generated
vendored
Normal file
95
node_modules/@stomp/stompjs/esm6/frame-impl.d.ts
generated
vendored
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
import { IFrame } from './i-frame';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
import { IRawFrameType } from './types';
|
||||||
|
/**
|
||||||
|
* Frame class represents a STOMP frame.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export declare class FrameImpl implements IFrame {
|
||||||
|
/**
|
||||||
|
* STOMP Command
|
||||||
|
*/
|
||||||
|
command: string;
|
||||||
|
/**
|
||||||
|
* Headers, key value pairs.
|
||||||
|
*/
|
||||||
|
headers: StompHeaders;
|
||||||
|
/**
|
||||||
|
* Is this frame binary (based on whether body/binaryBody was passed when creating this frame).
|
||||||
|
*/
|
||||||
|
isBinaryBody: boolean;
|
||||||
|
/**
|
||||||
|
* body of the frame
|
||||||
|
*/
|
||||||
|
readonly body: string;
|
||||||
|
private _body;
|
||||||
|
/**
|
||||||
|
* body as Uint8Array
|
||||||
|
*/
|
||||||
|
readonly binaryBody: Uint8Array;
|
||||||
|
private _binaryBody;
|
||||||
|
private escapeHeaderValues;
|
||||||
|
private skipContentLengthHeader;
|
||||||
|
/**
|
||||||
|
* Frame constructor. `command`, `headers` and `body` are available as properties.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
constructor(params: {
|
||||||
|
command: string;
|
||||||
|
headers?: StompHeaders;
|
||||||
|
body?: string;
|
||||||
|
binaryBody?: Uint8Array;
|
||||||
|
escapeHeaderValues?: boolean;
|
||||||
|
skipContentLengthHeader?: boolean;
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
* deserialize a STOMP Frame from raw data.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
static fromRawFrame(rawFrame: IRawFrameType, escapeHeaderValues: boolean): FrameImpl;
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
toString(): string;
|
||||||
|
/**
|
||||||
|
* serialize this Frame in a format suitable to be passed to WebSocket.
|
||||||
|
* If the body is string the output will be string.
|
||||||
|
* If the body is binary (i.e. of type Unit8Array) it will be serialized to ArrayBuffer.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
serialize(): string | ArrayBuffer;
|
||||||
|
private serializeCmdAndHeaders;
|
||||||
|
private isBodyEmpty;
|
||||||
|
private bodyLength;
|
||||||
|
/**
|
||||||
|
* Compute the size of a UTF-8 string by counting its number of bytes
|
||||||
|
* (and not the number of characters composing the string)
|
||||||
|
*/
|
||||||
|
private static sizeOfUTF8;
|
||||||
|
private static toUnit8Array;
|
||||||
|
/**
|
||||||
|
* Serialize a STOMP frame as per STOMP standards, suitable to be sent to the STOMP broker.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
static marshall(params: {
|
||||||
|
command: string;
|
||||||
|
headers?: StompHeaders;
|
||||||
|
body?: string;
|
||||||
|
binaryBody?: Uint8Array;
|
||||||
|
escapeHeaderValues?: boolean;
|
||||||
|
skipContentLengthHeader?: boolean;
|
||||||
|
}): string | ArrayBuffer;
|
||||||
|
/**
|
||||||
|
* Escape header values
|
||||||
|
*/
|
||||||
|
private static hdrValueEscape;
|
||||||
|
/**
|
||||||
|
* UnEscape header values
|
||||||
|
*/
|
||||||
|
private static hdrValueUnEscape;
|
||||||
|
}
|
||||||
170
node_modules/@stomp/stompjs/esm6/frame-impl.js
generated
vendored
Normal file
170
node_modules/@stomp/stompjs/esm6/frame-impl.js
generated
vendored
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
import { BYTE } from './byte';
|
||||||
|
/**
|
||||||
|
* Frame class represents a STOMP frame.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export class FrameImpl {
|
||||||
|
/**
|
||||||
|
* Frame constructor. `command`, `headers` and `body` are available as properties.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
constructor(params) {
|
||||||
|
const { command, headers, body, binaryBody, escapeHeaderValues, skipContentLengthHeader, } = params;
|
||||||
|
this.command = command;
|
||||||
|
this.headers = Object.assign({}, headers || {});
|
||||||
|
if (binaryBody) {
|
||||||
|
this._binaryBody = binaryBody;
|
||||||
|
this.isBinaryBody = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this._body = body || '';
|
||||||
|
this.isBinaryBody = false;
|
||||||
|
}
|
||||||
|
this.escapeHeaderValues = escapeHeaderValues || false;
|
||||||
|
this.skipContentLengthHeader = skipContentLengthHeader || false;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* body of the frame
|
||||||
|
*/
|
||||||
|
get body() {
|
||||||
|
if (!this._body && this.isBinaryBody) {
|
||||||
|
this._body = new TextDecoder().decode(this._binaryBody);
|
||||||
|
}
|
||||||
|
return this._body;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* body as Uint8Array
|
||||||
|
*/
|
||||||
|
get binaryBody() {
|
||||||
|
if (!this._binaryBody && !this.isBinaryBody) {
|
||||||
|
this._binaryBody = new TextEncoder().encode(this._body);
|
||||||
|
}
|
||||||
|
return this._binaryBody;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* deserialize a STOMP Frame from raw data.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
static fromRawFrame(rawFrame, escapeHeaderValues) {
|
||||||
|
const headers = {};
|
||||||
|
const trim = (str) => str.replace(/^\s+|\s+$/g, '');
|
||||||
|
// In case of repeated headers, as per standards, first value need to be used
|
||||||
|
for (const header of rawFrame.headers.reverse()) {
|
||||||
|
const idx = header.indexOf(':');
|
||||||
|
const key = trim(header[0]);
|
||||||
|
let value = trim(header[1]);
|
||||||
|
if (escapeHeaderValues &&
|
||||||
|
rawFrame.command !== 'CONNECT' &&
|
||||||
|
rawFrame.command !== 'CONNECTED') {
|
||||||
|
value = FrameImpl.hdrValueUnEscape(value);
|
||||||
|
}
|
||||||
|
headers[key] = value;
|
||||||
|
}
|
||||||
|
return new FrameImpl({
|
||||||
|
command: rawFrame.command,
|
||||||
|
headers,
|
||||||
|
binaryBody: rawFrame.binaryBody,
|
||||||
|
escapeHeaderValues,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
toString() {
|
||||||
|
return this.serializeCmdAndHeaders();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* serialize this Frame in a format suitable to be passed to WebSocket.
|
||||||
|
* If the body is string the output will be string.
|
||||||
|
* If the body is binary (i.e. of type Unit8Array) it will be serialized to ArrayBuffer.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
serialize() {
|
||||||
|
const cmdAndHeaders = this.serializeCmdAndHeaders();
|
||||||
|
if (this.isBinaryBody) {
|
||||||
|
return FrameImpl.toUnit8Array(cmdAndHeaders, this._binaryBody).buffer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return cmdAndHeaders + this._body + BYTE.NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
serializeCmdAndHeaders() {
|
||||||
|
const lines = [this.command];
|
||||||
|
if (this.skipContentLengthHeader) {
|
||||||
|
delete this.headers['content-length'];
|
||||||
|
}
|
||||||
|
for (const name of Object.keys(this.headers || {})) {
|
||||||
|
const value = this.headers[name];
|
||||||
|
if (this.escapeHeaderValues &&
|
||||||
|
this.command !== 'CONNECT' &&
|
||||||
|
this.command !== 'CONNECTED') {
|
||||||
|
lines.push(`${name}:${FrameImpl.hdrValueEscape(`${value}`)}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lines.push(`${name}:${value}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.isBinaryBody ||
|
||||||
|
(!this.isBodyEmpty() && !this.skipContentLengthHeader)) {
|
||||||
|
lines.push(`content-length:${this.bodyLength()}`);
|
||||||
|
}
|
||||||
|
return lines.join(BYTE.LF) + BYTE.LF + BYTE.LF;
|
||||||
|
}
|
||||||
|
isBodyEmpty() {
|
||||||
|
return this.bodyLength() === 0;
|
||||||
|
}
|
||||||
|
bodyLength() {
|
||||||
|
const binaryBody = this.binaryBody;
|
||||||
|
return binaryBody ? binaryBody.length : 0;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Compute the size of a UTF-8 string by counting its number of bytes
|
||||||
|
* (and not the number of characters composing the string)
|
||||||
|
*/
|
||||||
|
static sizeOfUTF8(s) {
|
||||||
|
return s ? new TextEncoder().encode(s).length : 0;
|
||||||
|
}
|
||||||
|
static toUnit8Array(cmdAndHeaders, binaryBody) {
|
||||||
|
const uint8CmdAndHeaders = new TextEncoder().encode(cmdAndHeaders);
|
||||||
|
const nullTerminator = new Uint8Array([0]);
|
||||||
|
const uint8Frame = new Uint8Array(uint8CmdAndHeaders.length + binaryBody.length + nullTerminator.length);
|
||||||
|
uint8Frame.set(uint8CmdAndHeaders);
|
||||||
|
uint8Frame.set(binaryBody, uint8CmdAndHeaders.length);
|
||||||
|
uint8Frame.set(nullTerminator, uint8CmdAndHeaders.length + binaryBody.length);
|
||||||
|
return uint8Frame;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Serialize a STOMP frame as per STOMP standards, suitable to be sent to the STOMP broker.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
static marshall(params) {
|
||||||
|
const frame = new FrameImpl(params);
|
||||||
|
return frame.serialize();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Escape header values
|
||||||
|
*/
|
||||||
|
static hdrValueEscape(str) {
|
||||||
|
return str
|
||||||
|
.replace(/\\/g, '\\\\')
|
||||||
|
.replace(/\r/g, '\\r')
|
||||||
|
.replace(/\n/g, '\\n')
|
||||||
|
.replace(/:/g, '\\c');
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* UnEscape header values
|
||||||
|
*/
|
||||||
|
static hdrValueUnEscape(str) {
|
||||||
|
return str
|
||||||
|
.replace(/\\r/g, '\r')
|
||||||
|
.replace(/\\n/g, '\n')
|
||||||
|
.replace(/\\c/g, ':')
|
||||||
|
.replace(/\\\\/g, '\\');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=frame-impl.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/frame-impl.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/frame-impl.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"frame-impl.js","sourceRoot":"","sources":["../src/frame-impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAK9B;;;;GAIG;AACH,MAAM,OAAO,SAAS;IAyCpB;;;;OAIG;IACH,YAAY,MAOX;QACC,MAAM,EACJ,OAAO,EACP,OAAO,EACP,IAAI,EACJ,UAAU,EACV,kBAAkB,EAClB,uBAAuB,GACxB,GAAG,MAAM,CAAC;QACX,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAI,MAAc,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAEzD,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC3B;QACD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,IAAI,KAAK,CAAC;QACtD,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,IAAI,KAAK,CAAC;IAClE,CAAC;IA1DD;;OAEG;IACH,IAAI,IAAI;QACN,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;YACpC,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACzD;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAGD;;OAEG;IACH,IAAI,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACzD;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAyCD;;;;OAIG;IACI,MAAM,CAAC,YAAY,CACxB,QAAuB,EACvB,kBAA2B;QAE3B,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAEpE,6EAA6E;QAC7E,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;YAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5B,IACE,kBAAkB;gBAClB,QAAQ,CAAC,OAAO,KAAK,SAAS;gBAC9B,QAAQ,CAAC,OAAO,KAAK,WAAW,EAChC;gBACA,KAAK,GAAG,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aAC3C;YAED,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACtB;QAED,OAAO,IAAI,SAAS,CAAC;YACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO;YACP,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,kBAAkB;SACnB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;IACvC,CAAC;IAED;;;;;;OAMG;IACI,SAAS;QACd,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEpD,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;SACvE;aAAM;YACL,OAAO,aAAa,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;SAC/C;IACH,CAAC;IAEO,sBAAsB;QAC5B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;SACvC;QAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjC,IACE,IAAI,CAAC,kBAAkB;gBACvB,IAAI,CAAC,OAAO,KAAK,SAAS;gBAC1B,IAAI,CAAC,OAAO,KAAK,WAAW,EAC5B;gBACA,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,cAAc,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;aAC/D;iBAAM;gBACL,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;aAChC;SACF;QACD,IACE,IAAI,CAAC,YAAY;YACjB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,EACtD;YACA,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SACnD;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACjD,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAEO,UAAU;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,UAAU,CAAC,CAAS;QACjC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAEO,MAAM,CAAC,YAAY,CACzB,aAAqB,EACrB,UAAsB;QAEtB,MAAM,kBAAkB,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACnE,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,UAAU,CAC/B,kBAAkB,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CACtE,CAAC;QAEF,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACnC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACtD,UAAU,CAAC,GAAG,CACZ,cAAc,EACd,kBAAkB,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAC9C,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,QAAQ,CAAC,MAOtB;QACC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,GAAW;QACvC,OAAO,GAAG;aACP,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;aACtB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,gBAAgB,CAAC,GAAW;QACzC,OAAO,GAAG;aACP,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF"}
|
||||||
35
node_modules/@stomp/stompjs/esm6/i-frame.d.ts
generated
vendored
Normal file
35
node_modules/@stomp/stompjs/esm6/i-frame.d.ts
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
/**
|
||||||
|
* It represents a STOMP frame. Many of the callbacks pass an IFrame received from
|
||||||
|
* the STOMP broker. For advanced usage you might need to access [headers]{@link IFrame#headers}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* {@link IMessage} is an extended IFrame.
|
||||||
|
*/
|
||||||
|
export interface IFrame {
|
||||||
|
/**
|
||||||
|
* STOMP Command
|
||||||
|
*/
|
||||||
|
command: string;
|
||||||
|
/**
|
||||||
|
* Headers, key value pairs.
|
||||||
|
*/
|
||||||
|
headers: StompHeaders;
|
||||||
|
/**
|
||||||
|
* Is this frame binary (based on whether body/binaryBody was passed when creating this frame).
|
||||||
|
*/
|
||||||
|
isBinaryBody: boolean;
|
||||||
|
/**
|
||||||
|
* body of the frame as string
|
||||||
|
*/
|
||||||
|
readonly body: string;
|
||||||
|
/**
|
||||||
|
* body as Uint8Array
|
||||||
|
*/
|
||||||
|
readonly binaryBody: Uint8Array;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Alias for {@link IFrame}
|
||||||
|
*/
|
||||||
|
export declare type Frame = IFrame;
|
||||||
1
node_modules/@stomp/stompjs/esm6/i-frame.js
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/i-frame.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
//# sourceMappingURL=i-frame.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/i-frame.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/i-frame.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"i-frame.js","sourceRoot":"","sources":["../src/i-frame.ts"],"names":[],"mappings":""}
|
||||||
32
node_modules/@stomp/stompjs/esm6/i-message.d.ts
generated
vendored
Normal file
32
node_modules/@stomp/stompjs/esm6/i-message.d.ts
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { IFrame } from './i-frame';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
/**
|
||||||
|
* Instance of Message will be passed to [subscription callback]{@link Client#subscribe}
|
||||||
|
* and [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
* Since it is an extended {@link FrameImpl}, you can access [headers]{@link FrameImpl#headers}
|
||||||
|
* and [body]{@link FrameImpl#body} as properties.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* See [Client#subscribe]{@link Client#subscribe} for example.
|
||||||
|
*/
|
||||||
|
export interface IMessage extends IFrame {
|
||||||
|
/**
|
||||||
|
* When subscribing with manual acknowledgement, call this method on the message to ACK the message.
|
||||||
|
*
|
||||||
|
* See [Client#ack]{@link Client#ack} for an example.
|
||||||
|
*/
|
||||||
|
ack: (headers?: StompHeaders) => void;
|
||||||
|
/**
|
||||||
|
* When subscribing with manual acknowledgement, call this method on the message to NACK the message.
|
||||||
|
*
|
||||||
|
* See [Client#nack]{@link Client#nack} for an example.
|
||||||
|
*/
|
||||||
|
nack: (headers?: StompHeaders) => void;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Aliased to {@link IMessage}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare type Message = IMessage;
|
||||||
1
node_modules/@stomp/stompjs/esm6/i-message.js
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/i-message.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
//# sourceMappingURL=i-message.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/i-message.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/i-message.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"i-message.js","sourceRoot":"","sources":["../src/i-message.ts"],"names":[],"mappings":""}
|
||||||
21
node_modules/@stomp/stompjs/esm6/i-transaction.d.ts
generated
vendored
Normal file
21
node_modules/@stomp/stompjs/esm6/i-transaction.d.ts
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/**
|
||||||
|
* A Transaction is created by calling [Client#begin]{@link Client#begin}
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* TODO: Example and caveat
|
||||||
|
*/
|
||||||
|
export interface ITransaction {
|
||||||
|
/**
|
||||||
|
* You will need to access this to send, ack, or nack within this transaction.
|
||||||
|
*/
|
||||||
|
id: string;
|
||||||
|
/**
|
||||||
|
* Commit this transaction. See [Client#commit]{@link Client#commit} for an example.
|
||||||
|
*/
|
||||||
|
commit: () => void;
|
||||||
|
/**
|
||||||
|
* Abort this transaction. See [Client#abort]{@link Client#abort} for an example.
|
||||||
|
*/
|
||||||
|
abort: () => void;
|
||||||
|
}
|
||||||
1
node_modules/@stomp/stompjs/esm6/i-transaction.js
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/i-transaction.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
//# sourceMappingURL=i-transaction.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/i-transaction.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/i-transaction.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"i-transaction.js","sourceRoot":"","sources":["../src/i-transaction.ts"],"names":[],"mappings":""}
|
||||||
13
node_modules/@stomp/stompjs/esm6/index.d.ts
generated
vendored
Normal file
13
node_modules/@stomp/stompjs/esm6/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
export * from './client';
|
||||||
|
export * from './frame-impl';
|
||||||
|
export * from './i-frame';
|
||||||
|
export * from './i-message';
|
||||||
|
export * from './parser';
|
||||||
|
export * from './stomp-config';
|
||||||
|
export * from './stomp-headers';
|
||||||
|
export * from './stomp-subscription';
|
||||||
|
export * from './i-transaction';
|
||||||
|
export * from './types';
|
||||||
|
export * from './versions';
|
||||||
|
export * from './compatibility/compat-client';
|
||||||
|
export * from './compatibility/stomp';
|
||||||
12
node_modules/@stomp/stompjs/esm6/index.js
generated
vendored
Normal file
12
node_modules/@stomp/stompjs/esm6/index.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
export * from './client';
|
||||||
|
export * from './frame-impl';
|
||||||
|
export * from './parser';
|
||||||
|
export * from './stomp-config';
|
||||||
|
export * from './stomp-headers';
|
||||||
|
export * from './stomp-subscription';
|
||||||
|
export * from './types';
|
||||||
|
export * from './versions';
|
||||||
|
// Compatibility code
|
||||||
|
export * from './compatibility/compat-client';
|
||||||
|
export * from './compatibility/stomp';
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/index.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/index.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAG7B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAE3B,qBAAqB;AACrB,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC"}
|
||||||
70
node_modules/@stomp/stompjs/esm6/parser.d.ts
generated
vendored
Normal file
70
node_modules/@stomp/stompjs/esm6/parser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
import { IRawFrameType } from './types';
|
||||||
|
/**
|
||||||
|
* This is an evented, rec descent parser.
|
||||||
|
* A stream of Octets can be passed and whenever it recognizes
|
||||||
|
* a complete Frame or an incoming ping it will invoke the registered callbacks.
|
||||||
|
*
|
||||||
|
* All incoming Octets are fed into _onByte function.
|
||||||
|
* Depending on current state the _onByte function keeps changing.
|
||||||
|
* Depending on the state it keeps accumulating into _token and _results.
|
||||||
|
* State is indicated by current value of _onByte, all states are named as _collect.
|
||||||
|
*
|
||||||
|
* STOMP standards https://stomp.github.io/stomp-specification-1.2.html
|
||||||
|
* imply that all lengths are considered in bytes (instead of string lengths).
|
||||||
|
* So, before actual parsing, if the incoming data is String it is converted to Octets.
|
||||||
|
* This allows faithful implementation of the protocol and allows NULL Octets to be present in the body.
|
||||||
|
*
|
||||||
|
* There is no peek function on the incoming data.
|
||||||
|
* When a state change occurs based on an Octet without consuming the Octet,
|
||||||
|
* the Octet, after state change, is fed again (_reinjectByte).
|
||||||
|
* This became possible as the state change can be determined by inspecting just one Octet.
|
||||||
|
*
|
||||||
|
* There are two modes to collect the body, if content-length header is there then it by counting Octets
|
||||||
|
* otherwise it is determined by NULL terminator.
|
||||||
|
*
|
||||||
|
* Following the standards, the command and headers are converted to Strings
|
||||||
|
* and the body is returned as Octets.
|
||||||
|
* Headers are returned as an array and not as Hash - to allow multiple occurrence of an header.
|
||||||
|
*
|
||||||
|
* This parser does not use Regular Expressions as that can only operate on Strings.
|
||||||
|
*
|
||||||
|
* It handles if multiple STOMP frames are given as one chunk, a frame is split into multiple chunks, or
|
||||||
|
* any combination there of. The parser remembers its state (any partial frame) and continues when a new chunk
|
||||||
|
* is pushed.
|
||||||
|
*
|
||||||
|
* Typically the higher level function will convert headers to Hash, handle unescaping of header values
|
||||||
|
* (which is protocol version specific), and convert body to text.
|
||||||
|
*
|
||||||
|
* Check the parser.spec.js to understand cases that this parser is supposed to handle.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export declare class Parser {
|
||||||
|
onFrame: (rawFrame: IRawFrameType) => void;
|
||||||
|
onIncomingPing: () => void;
|
||||||
|
private readonly _encoder;
|
||||||
|
private readonly _decoder;
|
||||||
|
private _results;
|
||||||
|
private _token;
|
||||||
|
private _headerKey;
|
||||||
|
private _bodyBytesRemaining;
|
||||||
|
private _onByte;
|
||||||
|
constructor(onFrame: (rawFrame: IRawFrameType) => void, onIncomingPing: () => void);
|
||||||
|
parseChunk(segment: string | ArrayBuffer, appendMissingNULLonIncoming?: boolean): void;
|
||||||
|
private _collectFrame;
|
||||||
|
private _collectCommand;
|
||||||
|
private _collectHeaders;
|
||||||
|
private _reinjectByte;
|
||||||
|
private _collectHeaderKey;
|
||||||
|
private _collectHeaderValue;
|
||||||
|
private _setupCollectBody;
|
||||||
|
private _collectBodyNullTerminated;
|
||||||
|
private _collectBodyFixedSize;
|
||||||
|
private _retrievedBody;
|
||||||
|
private _consumeByte;
|
||||||
|
private _consumeTokenAsUTF8;
|
||||||
|
private _consumeTokenAsRaw;
|
||||||
|
private _initState;
|
||||||
|
}
|
||||||
214
node_modules/@stomp/stompjs/esm6/parser.js
generated
vendored
Normal file
214
node_modules/@stomp/stompjs/esm6/parser.js
generated
vendored
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
const NULL = 0;
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
const LF = 10;
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
const CR = 13;
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
const COLON = 58;
|
||||||
|
/**
|
||||||
|
* This is an evented, rec descent parser.
|
||||||
|
* A stream of Octets can be passed and whenever it recognizes
|
||||||
|
* a complete Frame or an incoming ping it will invoke the registered callbacks.
|
||||||
|
*
|
||||||
|
* All incoming Octets are fed into _onByte function.
|
||||||
|
* Depending on current state the _onByte function keeps changing.
|
||||||
|
* Depending on the state it keeps accumulating into _token and _results.
|
||||||
|
* State is indicated by current value of _onByte, all states are named as _collect.
|
||||||
|
*
|
||||||
|
* STOMP standards https://stomp.github.io/stomp-specification-1.2.html
|
||||||
|
* imply that all lengths are considered in bytes (instead of string lengths).
|
||||||
|
* So, before actual parsing, if the incoming data is String it is converted to Octets.
|
||||||
|
* This allows faithful implementation of the protocol and allows NULL Octets to be present in the body.
|
||||||
|
*
|
||||||
|
* There is no peek function on the incoming data.
|
||||||
|
* When a state change occurs based on an Octet without consuming the Octet,
|
||||||
|
* the Octet, after state change, is fed again (_reinjectByte).
|
||||||
|
* This became possible as the state change can be determined by inspecting just one Octet.
|
||||||
|
*
|
||||||
|
* There are two modes to collect the body, if content-length header is there then it by counting Octets
|
||||||
|
* otherwise it is determined by NULL terminator.
|
||||||
|
*
|
||||||
|
* Following the standards, the command and headers are converted to Strings
|
||||||
|
* and the body is returned as Octets.
|
||||||
|
* Headers are returned as an array and not as Hash - to allow multiple occurrence of an header.
|
||||||
|
*
|
||||||
|
* This parser does not use Regular Expressions as that can only operate on Strings.
|
||||||
|
*
|
||||||
|
* It handles if multiple STOMP frames are given as one chunk, a frame is split into multiple chunks, or
|
||||||
|
* any combination there of. The parser remembers its state (any partial frame) and continues when a new chunk
|
||||||
|
* is pushed.
|
||||||
|
*
|
||||||
|
* Typically the higher level function will convert headers to Hash, handle unescaping of header values
|
||||||
|
* (which is protocol version specific), and convert body to text.
|
||||||
|
*
|
||||||
|
* Check the parser.spec.js to understand cases that this parser is supposed to handle.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export class Parser {
|
||||||
|
constructor(onFrame, onIncomingPing) {
|
||||||
|
this.onFrame = onFrame;
|
||||||
|
this.onIncomingPing = onIncomingPing;
|
||||||
|
this._encoder = new TextEncoder();
|
||||||
|
this._decoder = new TextDecoder();
|
||||||
|
this._token = [];
|
||||||
|
this._initState();
|
||||||
|
}
|
||||||
|
parseChunk(segment, appendMissingNULLonIncoming = false) {
|
||||||
|
let chunk;
|
||||||
|
if (segment instanceof ArrayBuffer) {
|
||||||
|
chunk = new Uint8Array(segment);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
chunk = this._encoder.encode(segment);
|
||||||
|
}
|
||||||
|
// See https://github.com/stomp-js/stompjs/issues/89
|
||||||
|
// Remove when underlying issue is fixed.
|
||||||
|
//
|
||||||
|
// Send a NULL byte, if the last byte of a Text frame was not NULL.F
|
||||||
|
if (appendMissingNULLonIncoming && chunk[chunk.length - 1] !== 0) {
|
||||||
|
const chunkWithNull = new Uint8Array(chunk.length + 1);
|
||||||
|
chunkWithNull.set(chunk, 0);
|
||||||
|
chunkWithNull[chunk.length] = 0;
|
||||||
|
chunk = chunkWithNull;
|
||||||
|
}
|
||||||
|
// tslint:disable-next-line:prefer-for-of
|
||||||
|
for (let i = 0; i < chunk.length; i++) {
|
||||||
|
const byte = chunk[i];
|
||||||
|
this._onByte(byte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// The following implements a simple Rec Descent Parser.
|
||||||
|
// The grammar is simple and just one byte tells what should be the next state
|
||||||
|
_collectFrame(byte) {
|
||||||
|
if (byte === NULL) {
|
||||||
|
// Ignore
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === CR) {
|
||||||
|
// Ignore CR
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === LF) {
|
||||||
|
// Incoming Ping
|
||||||
|
this.onIncomingPing();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._onByte = this._collectCommand;
|
||||||
|
this._reinjectByte(byte);
|
||||||
|
}
|
||||||
|
_collectCommand(byte) {
|
||||||
|
if (byte === CR) {
|
||||||
|
// Ignore CR
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === LF) {
|
||||||
|
this._results.command = this._consumeTokenAsUTF8();
|
||||||
|
this._onByte = this._collectHeaders;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
_collectHeaders(byte) {
|
||||||
|
if (byte === CR) {
|
||||||
|
// Ignore CR
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === LF) {
|
||||||
|
this._setupCollectBody();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._onByte = this._collectHeaderKey;
|
||||||
|
this._reinjectByte(byte);
|
||||||
|
}
|
||||||
|
_reinjectByte(byte) {
|
||||||
|
this._onByte(byte);
|
||||||
|
}
|
||||||
|
_collectHeaderKey(byte) {
|
||||||
|
if (byte === COLON) {
|
||||||
|
this._headerKey = this._consumeTokenAsUTF8();
|
||||||
|
this._onByte = this._collectHeaderValue;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
_collectHeaderValue(byte) {
|
||||||
|
if (byte === CR) {
|
||||||
|
// Ignore CR
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === LF) {
|
||||||
|
this._results.headers.push([this._headerKey, this._consumeTokenAsUTF8()]);
|
||||||
|
this._headerKey = undefined;
|
||||||
|
this._onByte = this._collectHeaders;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
_setupCollectBody() {
|
||||||
|
const contentLengthHeader = this._results.headers.filter((header) => {
|
||||||
|
return header[0] === 'content-length';
|
||||||
|
})[0];
|
||||||
|
if (contentLengthHeader) {
|
||||||
|
this._bodyBytesRemaining = parseInt(contentLengthHeader[1], 10);
|
||||||
|
this._onByte = this._collectBodyFixedSize;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this._onByte = this._collectBodyNullTerminated;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_collectBodyNullTerminated(byte) {
|
||||||
|
if (byte === NULL) {
|
||||||
|
this._retrievedBody();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
_collectBodyFixedSize(byte) {
|
||||||
|
// It is post decrement, so that we discard the trailing NULL octet
|
||||||
|
if (this._bodyBytesRemaining-- === 0) {
|
||||||
|
this._retrievedBody();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
_retrievedBody() {
|
||||||
|
this._results.binaryBody = this._consumeTokenAsRaw();
|
||||||
|
this.onFrame(this._results);
|
||||||
|
this._initState();
|
||||||
|
}
|
||||||
|
// Rec Descent Parser helpers
|
||||||
|
_consumeByte(byte) {
|
||||||
|
this._token.push(byte);
|
||||||
|
}
|
||||||
|
_consumeTokenAsUTF8() {
|
||||||
|
return this._decoder.decode(this._consumeTokenAsRaw());
|
||||||
|
}
|
||||||
|
_consumeTokenAsRaw() {
|
||||||
|
const rawResult = new Uint8Array(this._token);
|
||||||
|
this._token = [];
|
||||||
|
return rawResult;
|
||||||
|
}
|
||||||
|
_initState() {
|
||||||
|
this._results = {
|
||||||
|
command: undefined,
|
||||||
|
headers: [],
|
||||||
|
binaryBody: undefined,
|
||||||
|
};
|
||||||
|
this._token = [];
|
||||||
|
this._headerKey = undefined;
|
||||||
|
this._onByte = this._collectFrame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=parser.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/parser.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/parser.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,IAAI,GAAG,CAAC,CAAC;AACf;;GAEG;AACH,MAAM,EAAE,GAAG,EAAE,CAAC;AACd;;GAEG;AACH,MAAM,EAAE,GAAG,EAAE,CAAC;AACd;;GAEG;AACH,MAAM,KAAK,GAAG,EAAE,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,OAAO,MAAM;IAYjB,YACS,OAA0C,EAC1C,cAA0B;QAD1B,YAAO,GAAP,OAAO,CAAmC;QAC1C,mBAAc,GAAd,cAAc,CAAY;QAblB,aAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAC7B,aAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAItC,WAAM,GAAa,EAAE,CAAC;QAU5B,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEM,UAAU,CACf,OAA6B,EAC7B,8BAAuC,KAAK;QAE5C,IAAI,KAAiB,CAAC;QAEtB,IAAI,OAAO,YAAY,WAAW,EAAE;YAClC,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;SACjC;aAAM;YACL,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SACvC;QAED,oDAAoD;QACpD,yCAAyC;QACzC,EAAE;QACF,oEAAoE;QACpE,IAAI,2BAA2B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvD,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5B,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,KAAK,GAAG,aAAa,CAAC;SACvB;QAED,yCAAyC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACpB;IACH,CAAC;IAED,wDAAwD;IACxD,8EAA8E;IAEtE,aAAa,CAAC,IAAY;QAChC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,SAAS;YACT,OAAO;SACR;QACD,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,YAAY;YACZ,OAAO;SACR;QACD,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,gBAAgB;YAChB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO;SACR;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,YAAY;YACZ,OAAO;SACR;QACD,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;YACpC,OAAO;SACR;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,YAAY;YACZ,OAAO;SACR;QACD,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO;SACR;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACxC,OAAO;SACR;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,mBAAmB,CAAC,IAAY;QACtC,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,YAAY;YACZ,OAAO;SACR;QACD,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;YACpC,OAAO;SACR;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,iBAAiB;QACvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CACtD,CAAC,MAAwB,EAAE,EAAE;YAC3B,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC;QACxC,CAAC,CACF,CAAC,CAAC,CAAC,CAAC;QAEL,IAAI,mBAAmB,EAAE;YACvB,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC;SAC3C;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAAC;SAChD;IACH,CAAC;IAEO,0BAA0B,CAAC,IAAY;QAC7C,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO;SACR;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,qBAAqB,CAAC,IAAY;QACxC,mEAAmE;QACnE,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE;YACpC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO;SACR;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAErD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,6BAA6B;IAErB,YAAY,CAAC,IAAY;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,mBAAmB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzD,CAAC;IAEO,kBAAkB;QACxB,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,QAAQ,GAAG;YACd,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,SAAS;SACtB,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;IACpC,CAAC;CACF"}
|
||||||
119
node_modules/@stomp/stompjs/esm6/stomp-config.d.ts
generated
vendored
Normal file
119
node_modules/@stomp/stompjs/esm6/stomp-config.d.ts
generated
vendored
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
import { ActivationState, closeEventCallbackType, debugFnType, frameCallbackType, messageCallbackType, wsErrorCallbackType } from './types';
|
||||||
|
import { Versions } from './versions';
|
||||||
|
/**
|
||||||
|
* Configuration options for STOMP Client, each key corresponds to
|
||||||
|
* field by the same name in {@link Client}. This can be passed to
|
||||||
|
* the constructor of {@link Client} or to [Client#configure]{@link Client#configure}.
|
||||||
|
*
|
||||||
|
* There used to be a class with the same name in `@stomp/ng2-stompjs`, which has been replaced by
|
||||||
|
* {@link RxStompConfig} and {@link InjectableRxStompConfig}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare class StompConfig {
|
||||||
|
/**
|
||||||
|
* See [Client#brokerURL]{@link Client#brokerURL}.
|
||||||
|
*/
|
||||||
|
brokerURL?: string;
|
||||||
|
/**
|
||||||
|
* See See [Client#stompVersions]{@link Client#stompVersions}.
|
||||||
|
*/
|
||||||
|
stompVersions?: Versions;
|
||||||
|
/**
|
||||||
|
* See [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*/
|
||||||
|
webSocketFactory?: () => any;
|
||||||
|
/**
|
||||||
|
* See [Client#connectionTimeout]{@link Client#connectionTimeout}.
|
||||||
|
*/
|
||||||
|
connectionTimeout?: number;
|
||||||
|
/**
|
||||||
|
* See [Client#reconnectDelay]{@link Client#reconnectDelay}.
|
||||||
|
*/
|
||||||
|
reconnectDelay?: number;
|
||||||
|
/**
|
||||||
|
* See [Client#heartbeatIncoming]{@link Client#heartbeatIncoming}.
|
||||||
|
*/
|
||||||
|
heartbeatIncoming?: number;
|
||||||
|
/**
|
||||||
|
* See [Client#heartbeatOutgoing]{@link Client#heartbeatOutgoing}.
|
||||||
|
*/
|
||||||
|
heartbeatOutgoing?: number;
|
||||||
|
/**
|
||||||
|
* See [Client#splitLargeFrames]{@link Client#splitLargeFrames}.
|
||||||
|
*/
|
||||||
|
splitLargeFrames?: boolean;
|
||||||
|
/**
|
||||||
|
* See [Client#forceBinaryWSFrames]{@link Client#forceBinaryWSFrames}.
|
||||||
|
*/
|
||||||
|
forceBinaryWSFrames?: boolean;
|
||||||
|
/**
|
||||||
|
* See [Client#appendMissingNULLonIncoming]{@link Client#appendMissingNULLonIncoming}.
|
||||||
|
*/
|
||||||
|
appendMissingNULLonIncoming?: boolean;
|
||||||
|
/**
|
||||||
|
* See [Client#maxWebSocketChunkSize]{@link Client#maxWebSocketChunkSize}.
|
||||||
|
*/
|
||||||
|
maxWebSocketChunkSize?: number;
|
||||||
|
/**
|
||||||
|
* See [Client#connectHeaders]{@link Client#connectHeaders}.
|
||||||
|
*/
|
||||||
|
connectHeaders?: StompHeaders;
|
||||||
|
/**
|
||||||
|
* See [Client#disconnectHeaders]{@link Client#disconnectHeaders}.
|
||||||
|
*/
|
||||||
|
disconnectHeaders?: StompHeaders;
|
||||||
|
/**
|
||||||
|
* See [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
*/
|
||||||
|
onUnhandledMessage?: messageCallbackType;
|
||||||
|
/**
|
||||||
|
* See [Client#onUnhandledReceipt]{@link Client#onUnhandledReceipt}.
|
||||||
|
*/
|
||||||
|
onUnhandledReceipt?: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* See [Client#onUnhandledFrame]{@link Client#onUnhandledFrame}.
|
||||||
|
*/
|
||||||
|
onUnhandledFrame?: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* See [Client#beforeConnect]{@link Client#beforeConnect}.
|
||||||
|
*/
|
||||||
|
beforeConnect?: () => void | Promise<void>;
|
||||||
|
/**
|
||||||
|
* See [Client#onConnect]{@link Client#onConnect}.
|
||||||
|
*/
|
||||||
|
onConnect?: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* See [Client#onDisconnect]{@link Client#onDisconnect}.
|
||||||
|
*/
|
||||||
|
onDisconnect?: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* See [Client#onStompError]{@link Client#onStompError}.
|
||||||
|
*/
|
||||||
|
onStompError?: frameCallbackType;
|
||||||
|
/**
|
||||||
|
* See [Client#onWebSocketClose]{@link Client#onWebSocketClose}.
|
||||||
|
*/
|
||||||
|
onWebSocketClose?: closeEventCallbackType;
|
||||||
|
/**
|
||||||
|
* See [Client#onWebSocketError]{@link Client#onWebSocketError}.
|
||||||
|
*/
|
||||||
|
onWebSocketError?: wsErrorCallbackType;
|
||||||
|
/**
|
||||||
|
* See [Client#logRawCommunication]{@link Client#logRawCommunication}.
|
||||||
|
*/
|
||||||
|
logRawCommunication?: boolean;
|
||||||
|
/**
|
||||||
|
* See [Client#debug]{@link Client#debug}.
|
||||||
|
*/
|
||||||
|
debug?: debugFnType;
|
||||||
|
/**
|
||||||
|
* See [Client#discardWebsocketOnCommFailure]{@link Client#discardWebsocketOnCommFailure}.
|
||||||
|
*/
|
||||||
|
discardWebsocketOnCommFailure?: boolean;
|
||||||
|
/**
|
||||||
|
* See [Client#onChangeState]{@link Client#onChangeState}.
|
||||||
|
*/
|
||||||
|
onChangeState?: (state: ActivationState) => void;
|
||||||
|
}
|
||||||
13
node_modules/@stomp/stompjs/esm6/stomp-config.js
generated
vendored
Normal file
13
node_modules/@stomp/stompjs/esm6/stomp-config.js
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Configuration options for STOMP Client, each key corresponds to
|
||||||
|
* field by the same name in {@link Client}. This can be passed to
|
||||||
|
* the constructor of {@link Client} or to [Client#configure]{@link Client#configure}.
|
||||||
|
*
|
||||||
|
* There used to be a class with the same name in `@stomp/ng2-stompjs`, which has been replaced by
|
||||||
|
* {@link RxStompConfig} and {@link InjectableRxStompConfig}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class StompConfig {
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=stomp-config.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/stomp-config.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/stomp-config.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"stomp-config.js","sourceRoot":"","sources":["../src/stomp-config.ts"],"names":[],"mappings":"AAWA;;;;;;;;;GASG;AACH,MAAM,OAAO,WAAW;CAkIvB"}
|
||||||
72
node_modules/@stomp/stompjs/esm6/stomp-handler.d.ts
generated
vendored
Normal file
72
node_modules/@stomp/stompjs/esm6/stomp-handler.d.ts
generated
vendored
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
import { Client } from './client';
|
||||||
|
import { ITransaction } from './i-transaction';
|
||||||
|
import { StompConfig } from './stomp-config';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
import { StompSubscription } from './stomp-subscription';
|
||||||
|
import { closeEventCallbackType, debugFnType, frameCallbackType, IPublishParams, IStompSocket, messageCallbackType, wsErrorCallbackType } from './types';
|
||||||
|
import { Versions } from './versions';
|
||||||
|
/**
|
||||||
|
* The STOMP protocol handler
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export declare class StompHandler {
|
||||||
|
private _client;
|
||||||
|
_webSocket: IStompSocket;
|
||||||
|
debug: debugFnType;
|
||||||
|
stompVersions: Versions;
|
||||||
|
connectHeaders: StompHeaders;
|
||||||
|
disconnectHeaders: StompHeaders;
|
||||||
|
heartbeatIncoming: number;
|
||||||
|
heartbeatOutgoing: number;
|
||||||
|
onUnhandledMessage: messageCallbackType;
|
||||||
|
onUnhandledReceipt: frameCallbackType;
|
||||||
|
onUnhandledFrame: frameCallbackType;
|
||||||
|
onConnect: frameCallbackType;
|
||||||
|
onDisconnect: frameCallbackType;
|
||||||
|
onStompError: frameCallbackType;
|
||||||
|
onWebSocketClose: closeEventCallbackType;
|
||||||
|
onWebSocketError: wsErrorCallbackType;
|
||||||
|
logRawCommunication: boolean;
|
||||||
|
splitLargeFrames: boolean;
|
||||||
|
maxWebSocketChunkSize: number;
|
||||||
|
forceBinaryWSFrames: boolean;
|
||||||
|
appendMissingNULLonIncoming: boolean;
|
||||||
|
discardWebsocketOnCommFailure: boolean;
|
||||||
|
readonly connectedVersion: string;
|
||||||
|
private _connectedVersion;
|
||||||
|
readonly connected: boolean;
|
||||||
|
private _connected;
|
||||||
|
private readonly _subscriptions;
|
||||||
|
private readonly _receiptWatchers;
|
||||||
|
private _partialData;
|
||||||
|
private _escapeHeaderValues;
|
||||||
|
private _counter;
|
||||||
|
private _pinger;
|
||||||
|
private _ponger;
|
||||||
|
private _lastServerActivityTS;
|
||||||
|
private _onclose;
|
||||||
|
constructor(_client: Client, _webSocket: IStompSocket, config?: StompConfig);
|
||||||
|
configure(conf: StompConfig): void;
|
||||||
|
start(): void;
|
||||||
|
private readonly _serverFrameHandlers;
|
||||||
|
private _setupHeartbeat;
|
||||||
|
private _closeOrDiscardWebsocket;
|
||||||
|
forceDisconnect(): void;
|
||||||
|
_closeWebsocket(): void;
|
||||||
|
private _discardWebsocket;
|
||||||
|
private _transmit;
|
||||||
|
dispose(): void;
|
||||||
|
private _cleanUp;
|
||||||
|
publish(params: IPublishParams): void;
|
||||||
|
watchForReceipt(receiptId: string, callback: frameCallbackType): void;
|
||||||
|
subscribe(destination: string, callback: messageCallbackType, headers?: StompHeaders): StompSubscription;
|
||||||
|
unsubscribe(id: string, headers?: StompHeaders): void;
|
||||||
|
begin(transactionId: string): ITransaction;
|
||||||
|
commit(transactionId: string): void;
|
||||||
|
abort(transactionId: string): void;
|
||||||
|
ack(messageId: string, subscriptionId: string, headers?: StompHeaders): void;
|
||||||
|
nack(messageId: string, subscriptionId: string, headers?: StompHeaders): void;
|
||||||
|
}
|
||||||
373
node_modules/@stomp/stompjs/esm6/stomp-handler.js
generated
vendored
Normal file
373
node_modules/@stomp/stompjs/esm6/stomp-handler.js
generated
vendored
Normal file
@@ -0,0 +1,373 @@
|
|||||||
|
import { BYTE } from './byte';
|
||||||
|
import { FrameImpl } from './frame-impl';
|
||||||
|
import { Parser } from './parser';
|
||||||
|
import { StompSocketState, } from './types';
|
||||||
|
import { Versions } from './versions';
|
||||||
|
import { augmentWebsocket } from './augment-websocket';
|
||||||
|
/**
|
||||||
|
* The STOMP protocol handler
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export class StompHandler {
|
||||||
|
constructor(_client, _webSocket, config = {}) {
|
||||||
|
this._client = _client;
|
||||||
|
this._webSocket = _webSocket;
|
||||||
|
this._serverFrameHandlers = {
|
||||||
|
// [CONNECTED Frame](http://stomp.github.com/stomp-specification-1.2.html#CONNECTED_Frame)
|
||||||
|
CONNECTED: frame => {
|
||||||
|
this.debug(`connected to server ${frame.headers.server}`);
|
||||||
|
this._connected = true;
|
||||||
|
this._connectedVersion = frame.headers.version;
|
||||||
|
// STOMP version 1.2 needs header values to be escaped
|
||||||
|
if (this._connectedVersion === Versions.V1_2) {
|
||||||
|
this._escapeHeaderValues = true;
|
||||||
|
}
|
||||||
|
this._setupHeartbeat(frame.headers);
|
||||||
|
this.onConnect(frame);
|
||||||
|
},
|
||||||
|
// [MESSAGE Frame](http://stomp.github.com/stomp-specification-1.2.html#MESSAGE)
|
||||||
|
MESSAGE: frame => {
|
||||||
|
// the callback is registered when the client calls
|
||||||
|
// `subscribe()`.
|
||||||
|
// If there is no registered subscription for the received message,
|
||||||
|
// the default `onUnhandledMessage` callback is used that the client can set.
|
||||||
|
// This is useful for subscriptions that are automatically created
|
||||||
|
// on the browser side (e.g. [RabbitMQ's temporary
|
||||||
|
// queues](http://www.rabbitmq.com/stomp.html)).
|
||||||
|
const subscription = frame.headers.subscription;
|
||||||
|
const onReceive = this._subscriptions[subscription] || this.onUnhandledMessage;
|
||||||
|
// bless the frame to be a Message
|
||||||
|
const message = frame;
|
||||||
|
const client = this;
|
||||||
|
const messageId = this._connectedVersion === Versions.V1_2
|
||||||
|
? message.headers.ack
|
||||||
|
: message.headers['message-id'];
|
||||||
|
// add `ack()` and `nack()` methods directly to the returned frame
|
||||||
|
// so that a simple call to `message.ack()` can acknowledge the message.
|
||||||
|
message.ack = (headers = {}) => {
|
||||||
|
return client.ack(messageId, subscription, headers);
|
||||||
|
};
|
||||||
|
message.nack = (headers = {}) => {
|
||||||
|
return client.nack(messageId, subscription, headers);
|
||||||
|
};
|
||||||
|
onReceive(message);
|
||||||
|
},
|
||||||
|
// [RECEIPT Frame](http://stomp.github.com/stomp-specification-1.2.html#RECEIPT)
|
||||||
|
RECEIPT: frame => {
|
||||||
|
const callback = this._receiptWatchers[frame.headers['receipt-id']];
|
||||||
|
if (callback) {
|
||||||
|
callback(frame);
|
||||||
|
// Server will acknowledge only once, remove the callback
|
||||||
|
delete this._receiptWatchers[frame.headers['receipt-id']];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.onUnhandledReceipt(frame);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// [ERROR Frame](http://stomp.github.com/stomp-specification-1.2.html#ERROR)
|
||||||
|
ERROR: frame => {
|
||||||
|
this.onStompError(frame);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
// used to index subscribers
|
||||||
|
this._counter = 0;
|
||||||
|
// subscription callbacks indexed by subscriber's ID
|
||||||
|
this._subscriptions = {};
|
||||||
|
// receipt-watchers indexed by receipts-ids
|
||||||
|
this._receiptWatchers = {};
|
||||||
|
this._partialData = '';
|
||||||
|
this._escapeHeaderValues = false;
|
||||||
|
this._lastServerActivityTS = Date.now();
|
||||||
|
this.configure(config);
|
||||||
|
}
|
||||||
|
get connectedVersion() {
|
||||||
|
return this._connectedVersion;
|
||||||
|
}
|
||||||
|
get connected() {
|
||||||
|
return this._connected;
|
||||||
|
}
|
||||||
|
configure(conf) {
|
||||||
|
// bulk assign all properties to this
|
||||||
|
Object.assign(this, conf);
|
||||||
|
}
|
||||||
|
start() {
|
||||||
|
const parser = new Parser(
|
||||||
|
// On Frame
|
||||||
|
rawFrame => {
|
||||||
|
const frame = FrameImpl.fromRawFrame(rawFrame, this._escapeHeaderValues);
|
||||||
|
// if this.logRawCommunication is set, the rawChunk is logged at this._webSocket.onmessage
|
||||||
|
if (!this.logRawCommunication) {
|
||||||
|
this.debug(`<<< ${frame}`);
|
||||||
|
}
|
||||||
|
const serverFrameHandler = this._serverFrameHandlers[frame.command] || this.onUnhandledFrame;
|
||||||
|
serverFrameHandler(frame);
|
||||||
|
},
|
||||||
|
// On Incoming Ping
|
||||||
|
() => {
|
||||||
|
this.debug('<<< PONG');
|
||||||
|
});
|
||||||
|
this._webSocket.onmessage = (evt) => {
|
||||||
|
this.debug('Received data');
|
||||||
|
this._lastServerActivityTS = Date.now();
|
||||||
|
if (this.logRawCommunication) {
|
||||||
|
const rawChunkAsString = evt.data instanceof ArrayBuffer
|
||||||
|
? new TextDecoder().decode(evt.data)
|
||||||
|
: evt.data;
|
||||||
|
this.debug(`<<< ${rawChunkAsString}`);
|
||||||
|
}
|
||||||
|
parser.parseChunk(evt.data, this.appendMissingNULLonIncoming);
|
||||||
|
};
|
||||||
|
this._onclose = (closeEvent) => {
|
||||||
|
this.debug(`Connection closed to ${this._client.brokerURL}`);
|
||||||
|
this._cleanUp();
|
||||||
|
this.onWebSocketClose(closeEvent);
|
||||||
|
};
|
||||||
|
this._webSocket.onclose = this._onclose;
|
||||||
|
this._webSocket.onerror = (errorEvent) => {
|
||||||
|
this.onWebSocketError(errorEvent);
|
||||||
|
};
|
||||||
|
this._webSocket.onopen = () => {
|
||||||
|
// Clone before updating
|
||||||
|
const connectHeaders = Object.assign({}, this.connectHeaders);
|
||||||
|
this.debug('Web Socket Opened...');
|
||||||
|
connectHeaders['accept-version'] = this.stompVersions.supportedVersions();
|
||||||
|
connectHeaders['heart-beat'] = [
|
||||||
|
this.heartbeatOutgoing,
|
||||||
|
this.heartbeatIncoming,
|
||||||
|
].join(',');
|
||||||
|
this._transmit({ command: 'CONNECT', headers: connectHeaders });
|
||||||
|
};
|
||||||
|
}
|
||||||
|
_setupHeartbeat(headers) {
|
||||||
|
if (headers.version !== Versions.V1_1 &&
|
||||||
|
headers.version !== Versions.V1_2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// It is valid for the server to not send this header
|
||||||
|
// https://stomp.github.io/stomp-specification-1.2.html#Heart-beating
|
||||||
|
if (!headers['heart-beat']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// heart-beat header received from the server looks like:
|
||||||
|
//
|
||||||
|
// heart-beat: sx, sy
|
||||||
|
const [serverOutgoing, serverIncoming] = headers['heart-beat']
|
||||||
|
.split(',')
|
||||||
|
.map((v) => parseInt(v, 10));
|
||||||
|
if (this.heartbeatOutgoing !== 0 && serverIncoming !== 0) {
|
||||||
|
const ttl = Math.max(this.heartbeatOutgoing, serverIncoming);
|
||||||
|
this.debug(`send PING every ${ttl}ms`);
|
||||||
|
this._pinger = setInterval(() => {
|
||||||
|
if (this._webSocket.readyState === StompSocketState.OPEN) {
|
||||||
|
this._webSocket.send(BYTE.LF);
|
||||||
|
this.debug('>>> PING');
|
||||||
|
}
|
||||||
|
}, ttl);
|
||||||
|
}
|
||||||
|
if (this.heartbeatIncoming !== 0 && serverOutgoing !== 0) {
|
||||||
|
const ttl = Math.max(this.heartbeatIncoming, serverOutgoing);
|
||||||
|
this.debug(`check PONG every ${ttl}ms`);
|
||||||
|
this._ponger = setInterval(() => {
|
||||||
|
const delta = Date.now() - this._lastServerActivityTS;
|
||||||
|
// We wait twice the TTL to be flexible on window's setInterval calls
|
||||||
|
if (delta > ttl * 2) {
|
||||||
|
this.debug(`did not receive server activity for the last ${delta}ms`);
|
||||||
|
this._closeOrDiscardWebsocket();
|
||||||
|
}
|
||||||
|
}, ttl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_closeOrDiscardWebsocket() {
|
||||||
|
if (this.discardWebsocketOnCommFailure) {
|
||||||
|
this.debug('Discarding websocket, the underlying socket may linger for a while');
|
||||||
|
this._discardWebsocket();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.debug('Issuing close on the websocket');
|
||||||
|
this._closeWebsocket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
forceDisconnect() {
|
||||||
|
if (this._webSocket) {
|
||||||
|
if (this._webSocket.readyState === StompSocketState.CONNECTING ||
|
||||||
|
this._webSocket.readyState === StompSocketState.OPEN) {
|
||||||
|
this._closeOrDiscardWebsocket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_closeWebsocket() {
|
||||||
|
this._webSocket.onmessage = () => { }; // ignore messages
|
||||||
|
this._webSocket.close();
|
||||||
|
}
|
||||||
|
_discardWebsocket() {
|
||||||
|
if (!this._webSocket.terminate) {
|
||||||
|
augmentWebsocket(this._webSocket, (msg) => this.debug(msg));
|
||||||
|
}
|
||||||
|
this._webSocket.terminate();
|
||||||
|
}
|
||||||
|
_transmit(params) {
|
||||||
|
const { command, headers, body, binaryBody, skipContentLengthHeader } = params;
|
||||||
|
const frame = new FrameImpl({
|
||||||
|
command,
|
||||||
|
headers,
|
||||||
|
body,
|
||||||
|
binaryBody,
|
||||||
|
escapeHeaderValues: this._escapeHeaderValues,
|
||||||
|
skipContentLengthHeader,
|
||||||
|
});
|
||||||
|
let rawChunk = frame.serialize();
|
||||||
|
if (this.logRawCommunication) {
|
||||||
|
this.debug(`>>> ${rawChunk}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.debug(`>>> ${frame}`);
|
||||||
|
}
|
||||||
|
if (this.forceBinaryWSFrames && typeof rawChunk === 'string') {
|
||||||
|
rawChunk = new TextEncoder().encode(rawChunk);
|
||||||
|
}
|
||||||
|
if (typeof rawChunk !== 'string' || !this.splitLargeFrames) {
|
||||||
|
this._webSocket.send(rawChunk);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let out = rawChunk;
|
||||||
|
while (out.length > 0) {
|
||||||
|
const chunk = out.substring(0, this.maxWebSocketChunkSize);
|
||||||
|
out = out.substring(this.maxWebSocketChunkSize);
|
||||||
|
this._webSocket.send(chunk);
|
||||||
|
this.debug(`chunk sent = ${chunk.length}, remaining = ${out.length}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dispose() {
|
||||||
|
if (this.connected) {
|
||||||
|
try {
|
||||||
|
// clone before updating
|
||||||
|
const disconnectHeaders = Object.assign({}, this.disconnectHeaders);
|
||||||
|
if (!disconnectHeaders.receipt) {
|
||||||
|
disconnectHeaders.receipt = `close-${this._counter++}`;
|
||||||
|
}
|
||||||
|
this.watchForReceipt(disconnectHeaders.receipt, frame => {
|
||||||
|
this._closeWebsocket();
|
||||||
|
this._cleanUp();
|
||||||
|
this.onDisconnect(frame);
|
||||||
|
});
|
||||||
|
this._transmit({ command: 'DISCONNECT', headers: disconnectHeaders });
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
this.debug(`Ignoring error during disconnect ${error}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (this._webSocket.readyState === StompSocketState.CONNECTING ||
|
||||||
|
this._webSocket.readyState === StompSocketState.OPEN) {
|
||||||
|
this._closeWebsocket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_cleanUp() {
|
||||||
|
this._connected = false;
|
||||||
|
if (this._pinger) {
|
||||||
|
clearInterval(this._pinger);
|
||||||
|
}
|
||||||
|
if (this._ponger) {
|
||||||
|
clearInterval(this._ponger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
publish(params) {
|
||||||
|
const { destination, headers, body, binaryBody, skipContentLengthHeader } = params;
|
||||||
|
const hdrs = Object.assign({ destination }, headers);
|
||||||
|
this._transmit({
|
||||||
|
command: 'SEND',
|
||||||
|
headers: hdrs,
|
||||||
|
body,
|
||||||
|
binaryBody,
|
||||||
|
skipContentLengthHeader,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
watchForReceipt(receiptId, callback) {
|
||||||
|
this._receiptWatchers[receiptId] = callback;
|
||||||
|
}
|
||||||
|
subscribe(destination, callback, headers = {}) {
|
||||||
|
headers = Object.assign({}, headers);
|
||||||
|
if (!headers.id) {
|
||||||
|
headers.id = `sub-${this._counter++}`;
|
||||||
|
}
|
||||||
|
headers.destination = destination;
|
||||||
|
this._subscriptions[headers.id] = callback;
|
||||||
|
this._transmit({ command: 'SUBSCRIBE', headers });
|
||||||
|
const client = this;
|
||||||
|
return {
|
||||||
|
id: headers.id,
|
||||||
|
unsubscribe(hdrs) {
|
||||||
|
return client.unsubscribe(headers.id, hdrs);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
unsubscribe(id, headers = {}) {
|
||||||
|
headers = Object.assign({}, headers);
|
||||||
|
delete this._subscriptions[id];
|
||||||
|
headers.id = id;
|
||||||
|
this._transmit({ command: 'UNSUBSCRIBE', headers });
|
||||||
|
}
|
||||||
|
begin(transactionId) {
|
||||||
|
const txId = transactionId || `tx-${this._counter++}`;
|
||||||
|
this._transmit({
|
||||||
|
command: 'BEGIN',
|
||||||
|
headers: {
|
||||||
|
transaction: txId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const client = this;
|
||||||
|
return {
|
||||||
|
id: txId,
|
||||||
|
commit() {
|
||||||
|
client.commit(txId);
|
||||||
|
},
|
||||||
|
abort() {
|
||||||
|
client.abort(txId);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
commit(transactionId) {
|
||||||
|
this._transmit({
|
||||||
|
command: 'COMMIT',
|
||||||
|
headers: {
|
||||||
|
transaction: transactionId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
abort(transactionId) {
|
||||||
|
this._transmit({
|
||||||
|
command: 'ABORT',
|
||||||
|
headers: {
|
||||||
|
transaction: transactionId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
ack(messageId, subscriptionId, headers = {}) {
|
||||||
|
headers = Object.assign({}, headers);
|
||||||
|
if (this._connectedVersion === Versions.V1_2) {
|
||||||
|
headers.id = messageId;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
headers['message-id'] = messageId;
|
||||||
|
}
|
||||||
|
headers.subscription = subscriptionId;
|
||||||
|
this._transmit({ command: 'ACK', headers });
|
||||||
|
}
|
||||||
|
nack(messageId, subscriptionId, headers = {}) {
|
||||||
|
headers = Object.assign({}, headers);
|
||||||
|
if (this._connectedVersion === Versions.V1_2) {
|
||||||
|
headers.id = messageId;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
headers['message-id'] = messageId;
|
||||||
|
}
|
||||||
|
headers.subscription = subscriptionId;
|
||||||
|
return this._transmit({ command: 'NACK', headers });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=stomp-handler.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/stomp-handler.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/stomp-handler.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
12
node_modules/@stomp/stompjs/esm6/stomp-headers.d.ts
generated
vendored
Normal file
12
node_modules/@stomp/stompjs/esm6/stomp-headers.d.ts
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* STOMP headers. Many functions calls will accept headers as parameters.
|
||||||
|
* The headers sent by Broker will be available as [IFrame#headers]{@link IFrame#headers}.
|
||||||
|
*
|
||||||
|
* `key` and `value` must be valid strings.
|
||||||
|
* In addition, `key` must not contain `CR`, `LF`, or `:`.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare class StompHeaders {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
12
node_modules/@stomp/stompjs/esm6/stomp-headers.js
generated
vendored
Normal file
12
node_modules/@stomp/stompjs/esm6/stomp-headers.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* STOMP headers. Many functions calls will accept headers as parameters.
|
||||||
|
* The headers sent by Broker will be available as [IFrame#headers]{@link IFrame#headers}.
|
||||||
|
*
|
||||||
|
* `key` and `value` must be valid strings.
|
||||||
|
* In addition, `key` must not contain `CR`, `LF`, or `:`.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class StompHeaders {
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=stomp-headers.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/stomp-headers.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/stomp-headers.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"stomp-headers.js","sourceRoot":"","sources":["../src/stomp-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;CAExB"}
|
||||||
16
node_modules/@stomp/stompjs/esm6/stomp-subscription.d.ts
generated
vendored
Normal file
16
node_modules/@stomp/stompjs/esm6/stomp-subscription.d.ts
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
/**
|
||||||
|
* Call [Client#subscribe]{@link Client#subscribe} to create a StompSubscription.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare class StompSubscription {
|
||||||
|
/**
|
||||||
|
* Id associated with this subscription.
|
||||||
|
*/
|
||||||
|
id: string;
|
||||||
|
/**
|
||||||
|
* Unsubscribe. See [Client#unsubscribe]{@link Client#unsubscribe} for an example.
|
||||||
|
*/
|
||||||
|
unsubscribe: (headers?: StompHeaders) => void;
|
||||||
|
}
|
||||||
8
node_modules/@stomp/stompjs/esm6/stomp-subscription.js
generated
vendored
Normal file
8
node_modules/@stomp/stompjs/esm6/stomp-subscription.js
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
/**
|
||||||
|
* Call [Client#subscribe]{@link Client#subscribe} to create a StompSubscription.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class StompSubscription {
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=stomp-subscription.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/stomp-subscription.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/stomp-subscription.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"stomp-subscription.js","sourceRoot":"","sources":["../src/stomp-subscription.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;CAU7B"}
|
||||||
140
node_modules/@stomp/stompjs/esm6/types.d.ts
generated
vendored
Normal file
140
node_modules/@stomp/stompjs/esm6/types.d.ts
generated
vendored
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
import { IFrame } from './i-frame';
|
||||||
|
import { IMessage } from './i-message';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
/**
|
||||||
|
* This callback will receive a `string` as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare type debugFnType = (msg: string) => void;
|
||||||
|
/**
|
||||||
|
* This callback will receive a {@link IMessage} as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare type messageCallbackType = (message: IMessage) => void;
|
||||||
|
/**
|
||||||
|
* This callback will receive a {@link IFrame} as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare type frameCallbackType = (receipt: IFrame) => void;
|
||||||
|
/**
|
||||||
|
* This callback will receive a [CloseEvent]{@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}
|
||||||
|
* as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare type closeEventCallbackType<T = any> = (evt: T) => void;
|
||||||
|
/**
|
||||||
|
* This callback will receive an [Event]{@link https://developer.mozilla.org/en-US/docs/Web/API/Event}
|
||||||
|
* as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare type wsErrorCallbackType<T = any> = (evt: T) => void;
|
||||||
|
/**
|
||||||
|
* Parameters for [Client#publish]{@link Client#publish}.
|
||||||
|
* Aliased as publishParams as well.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export interface IPublishParams {
|
||||||
|
/**
|
||||||
|
* destination end point
|
||||||
|
*/
|
||||||
|
destination: string;
|
||||||
|
/**
|
||||||
|
* headers (optional)
|
||||||
|
*/
|
||||||
|
headers?: StompHeaders;
|
||||||
|
/**
|
||||||
|
* body (optional)
|
||||||
|
*/
|
||||||
|
body?: string;
|
||||||
|
/**
|
||||||
|
* binary body (optional)
|
||||||
|
*/
|
||||||
|
binaryBody?: Uint8Array;
|
||||||
|
/**
|
||||||
|
* By default a `content-length` header will be added in the Frame to the broker.
|
||||||
|
* Set it to `true` for the header to be skipped.
|
||||||
|
*/
|
||||||
|
skipContentLengthHeader?: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Backward compatibility, switch to {@link IPublishParams}.
|
||||||
|
*/
|
||||||
|
export declare type publishParams = IPublishParams;
|
||||||
|
/**
|
||||||
|
* Used in {@link IRawFrameType}
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export declare type RawHeaderType = [string, string];
|
||||||
|
/**
|
||||||
|
* The parser yield frames in this structure
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export interface IRawFrameType {
|
||||||
|
command: string;
|
||||||
|
headers: RawHeaderType[];
|
||||||
|
binaryBody: Uint8Array;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export interface IStompSocketMessageEvent {
|
||||||
|
data?: string | ArrayBuffer;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Copied from Websocket interface to avoid dom typelib dependency.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export interface IStompSocket {
|
||||||
|
onclose: ((this: IStompSocket, ev?: any) => any) | null;
|
||||||
|
onerror: ((this: IStompSocket, ev: any) => any) | null;
|
||||||
|
onmessage: ((this: IStompSocket, ev: IStompSocketMessageEvent) => any) | null;
|
||||||
|
onopen: ((this: IStompSocket, ev?: any) => any) | null;
|
||||||
|
terminate?: ((this: IStompSocket) => any) | null;
|
||||||
|
/**
|
||||||
|
* Returns a string that indicates how binary data from the socket is exposed to scripts:
|
||||||
|
* We support only 'arraybuffer'.
|
||||||
|
*/
|
||||||
|
binaryType: 'arraybuffer';
|
||||||
|
/**
|
||||||
|
* Returns the state of the socket connection. It can have the values of StompSocketState.
|
||||||
|
*/
|
||||||
|
readonly readyState: number;
|
||||||
|
/**
|
||||||
|
* Closes the connection.
|
||||||
|
*/
|
||||||
|
close(): void;
|
||||||
|
/**
|
||||||
|
* Transmits data using the connection. data can be a string or an ArrayBuffer.
|
||||||
|
*/
|
||||||
|
send(data: string | ArrayBuffer): void;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Possible states for the IStompSocket
|
||||||
|
*/
|
||||||
|
export declare enum StompSocketState {
|
||||||
|
CONNECTING = 0,
|
||||||
|
OPEN = 1,
|
||||||
|
CLOSING = 2,
|
||||||
|
CLOSED = 3
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Possible activation state
|
||||||
|
*/
|
||||||
|
export declare enum ActivationState {
|
||||||
|
ACTIVE = 0,
|
||||||
|
DEACTIVATING = 1,
|
||||||
|
INACTIVE = 2
|
||||||
|
}
|
||||||
20
node_modules/@stomp/stompjs/esm6/types.js
generated
vendored
Normal file
20
node_modules/@stomp/stompjs/esm6/types.js
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* Possible states for the IStompSocket
|
||||||
|
*/
|
||||||
|
export var StompSocketState;
|
||||||
|
(function (StompSocketState) {
|
||||||
|
StompSocketState[StompSocketState["CONNECTING"] = 0] = "CONNECTING";
|
||||||
|
StompSocketState[StompSocketState["OPEN"] = 1] = "OPEN";
|
||||||
|
StompSocketState[StompSocketState["CLOSING"] = 2] = "CLOSING";
|
||||||
|
StompSocketState[StompSocketState["CLOSED"] = 3] = "CLOSED";
|
||||||
|
})(StompSocketState || (StompSocketState = {}));
|
||||||
|
/**
|
||||||
|
* Possible activation state
|
||||||
|
*/
|
||||||
|
export var ActivationState;
|
||||||
|
(function (ActivationState) {
|
||||||
|
ActivationState[ActivationState["ACTIVE"] = 0] = "ACTIVE";
|
||||||
|
ActivationState[ActivationState["DEACTIVATING"] = 1] = "DEACTIVATING";
|
||||||
|
ActivationState[ActivationState["INACTIVE"] = 2] = "INACTIVE";
|
||||||
|
})(ActivationState || (ActivationState = {}));
|
||||||
|
//# sourceMappingURL=types.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/types.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/types.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA0IA;;GAEG;AACH,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,mEAAU,CAAA;IACV,uDAAI,CAAA;IACJ,6DAAO,CAAA;IACP,2DAAM,CAAA;AACR,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,yDAAM,CAAA;IACN,qEAAY,CAAA;IACZ,6DAAQ,CAAA;AACV,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B"}
|
||||||
39
node_modules/@stomp/stompjs/esm6/versions.d.ts
generated
vendored
Normal file
39
node_modules/@stomp/stompjs/esm6/versions.d.ts
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/**
|
||||||
|
* Supported STOMP versions
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export declare class Versions {
|
||||||
|
versions: string[];
|
||||||
|
/**
|
||||||
|
* Indicates protocol version 1.0
|
||||||
|
*/
|
||||||
|
static V1_0: string;
|
||||||
|
/**
|
||||||
|
* Indicates protocol version 1.1
|
||||||
|
*/
|
||||||
|
static V1_1: string;
|
||||||
|
/**
|
||||||
|
* Indicates protocol version 1.2
|
||||||
|
*/
|
||||||
|
static V1_2: string;
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
static default: Versions;
|
||||||
|
/**
|
||||||
|
* Takes an array of string of versions, typical elements '1.0', '1.1', or '1.2'
|
||||||
|
*
|
||||||
|
* You will an instance if this class if you want to override supported versions to be declared during
|
||||||
|
* STOMP handshake.
|
||||||
|
*/
|
||||||
|
constructor(versions: string[]);
|
||||||
|
/**
|
||||||
|
* Used as part of CONNECT STOMP Frame
|
||||||
|
*/
|
||||||
|
supportedVersions(): string;
|
||||||
|
/**
|
||||||
|
* Used while creating a WebSocket
|
||||||
|
*/
|
||||||
|
protocolVersions(): string[];
|
||||||
|
}
|
||||||
49
node_modules/@stomp/stompjs/esm6/versions.js
generated
vendored
Normal file
49
node_modules/@stomp/stompjs/esm6/versions.js
generated
vendored
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/**
|
||||||
|
* Supported STOMP versions
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class Versions {
|
||||||
|
/**
|
||||||
|
* Takes an array of string of versions, typical elements '1.0', '1.1', or '1.2'
|
||||||
|
*
|
||||||
|
* You will an instance if this class if you want to override supported versions to be declared during
|
||||||
|
* STOMP handshake.
|
||||||
|
*/
|
||||||
|
constructor(versions) {
|
||||||
|
this.versions = versions;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Used as part of CONNECT STOMP Frame
|
||||||
|
*/
|
||||||
|
supportedVersions() {
|
||||||
|
return this.versions.join(',');
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Used while creating a WebSocket
|
||||||
|
*/
|
||||||
|
protocolVersions() {
|
||||||
|
return this.versions.map(x => `v${x.replace('.', '')}.stomp`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Indicates protocol version 1.0
|
||||||
|
*/
|
||||||
|
Versions.V1_0 = '1.0';
|
||||||
|
/**
|
||||||
|
* Indicates protocol version 1.1
|
||||||
|
*/
|
||||||
|
Versions.V1_1 = '1.1';
|
||||||
|
/**
|
||||||
|
* Indicates protocol version 1.2
|
||||||
|
*/
|
||||||
|
Versions.V1_2 = '1.2';
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
Versions.default = new Versions([
|
||||||
|
Versions.V1_0,
|
||||||
|
Versions.V1_1,
|
||||||
|
Versions.V1_2,
|
||||||
|
]);
|
||||||
|
//# sourceMappingURL=versions.js.map
|
||||||
1
node_modules/@stomp/stompjs/esm6/versions.js.map
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/esm6/versions.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IAuBnB;;;;;OAKG;IACH,YAAmB,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEzC;;OAEG;IACI,iBAAiB;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,gBAAgB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;;AA1CD;;GAEG;AACW,aAAI,GAAG,KAAK,CAAC;AAC3B;;GAEG;AACW,aAAI,GAAG,KAAK,CAAC;AAC3B;;GAEG;AACW,aAAI,GAAG,KAAK,CAAC;AAE3B;;GAEG;AACW,gBAAO,GAAG,IAAI,QAAQ,CAAC;IACnC,QAAQ,CAAC,IAAI;IACb,QAAQ,CAAC,IAAI;IACb,QAAQ,CAAC,IAAI;CACd,CAAC,CAAC"}
|
||||||
1
node_modules/@stomp/stompjs/index.d.ts
generated
vendored
Normal file
1
node_modules/@stomp/stompjs/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export * from './esm6/';
|
||||||
58
node_modules/@stomp/stompjs/package.json
generated
vendored
Normal file
58
node_modules/@stomp/stompjs/package.json
generated
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"name": "@stomp/stompjs",
|
||||||
|
"version": "6.1.2",
|
||||||
|
"description": "STOMP client for Javascript and Typescript",
|
||||||
|
"scripts": {
|
||||||
|
"clean": "rm -rf bundles esm6",
|
||||||
|
"build-webpack": "webpack && webpack --mode=production --output-filename=stomp.umd.min.js",
|
||||||
|
"build": "npm run clean && npx tsc && npm run build-webpack",
|
||||||
|
"test": "jasmine",
|
||||||
|
"karma": "karma start --single-run",
|
||||||
|
"lint": "tslint 'src/**/*.ts'",
|
||||||
|
"prettier": "prettier --write .",
|
||||||
|
"prepublishOnly": "npm run lint && npm run build && npm run karma && npm run test"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/stomp-js/stompjs.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"STOMP",
|
||||||
|
"RabbitMQ",
|
||||||
|
"ActiveMQ",
|
||||||
|
"Websocket",
|
||||||
|
"messaging",
|
||||||
|
"queue",
|
||||||
|
"SockJS"
|
||||||
|
],
|
||||||
|
"author": "deepak@kreatio.com",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/stomp-js/stompjs/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/stomp-js/stompjs#readme",
|
||||||
|
"devDependencies": {
|
||||||
|
"@chiragrupani/karma-chromium-edge-launcher": "^2.0.0",
|
||||||
|
"awesome-typescript-loader": "^5.2.0",
|
||||||
|
"jasmine": "^3.1.0",
|
||||||
|
"karma": "^5.0.3",
|
||||||
|
"karma-chrome-launcher": "^3.0.0",
|
||||||
|
"karma-firefox-launcher": "^2.0.0",
|
||||||
|
"karma-jasmine": "^4.0.0",
|
||||||
|
"karma-safari-launcher": "git://github.com/RLovelett/karma-safari-launcher.git#safari-webdriver",
|
||||||
|
"karma-summary-reporter": "^2.0.2",
|
||||||
|
"prettier": "^2.1.2",
|
||||||
|
"text-encoding": "^0.7.0",
|
||||||
|
"tslint": "^6.0.0",
|
||||||
|
"tslint-config-prettier": "^1.18.0",
|
||||||
|
"typescript": "=3.6.4",
|
||||||
|
"webpack": "^4.33.0",
|
||||||
|
"webpack-cli": "^3.3.2",
|
||||||
|
"ws": "^8.2.0"
|
||||||
|
},
|
||||||
|
"module": "./esm6/index.js",
|
||||||
|
"main": "bundles/stomp.umd.js",
|
||||||
|
"typings": "index.d.ts",
|
||||||
|
"sideEffects": false,
|
||||||
|
"dependencies": {}
|
||||||
|
}
|
||||||
38
node_modules/@stomp/stompjs/src/augment-websocket.ts
generated
vendored
Normal file
38
node_modules/@stomp/stompjs/src/augment-websocket.ts
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import { IStompSocket } from './types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export function augmentWebsocket(
|
||||||
|
webSocket: IStompSocket,
|
||||||
|
debug: (msg: string) => void
|
||||||
|
) {
|
||||||
|
webSocket.terminate = function () {
|
||||||
|
const noOp = () => {};
|
||||||
|
|
||||||
|
// set all callbacks to no op
|
||||||
|
this.onerror = noOp;
|
||||||
|
this.onmessage = noOp;
|
||||||
|
this.onopen = noOp;
|
||||||
|
|
||||||
|
const ts = new Date();
|
||||||
|
|
||||||
|
const origOnClose = this.onclose;
|
||||||
|
|
||||||
|
// Track delay in actual closure of the socket
|
||||||
|
this.onclose = closeEvent => {
|
||||||
|
const delay = new Date().getTime() - ts.getTime();
|
||||||
|
debug(
|
||||||
|
`Discarded socket closed after ${delay}ms, with code/reason: ${closeEvent.code}/${closeEvent.reason}`
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.close();
|
||||||
|
|
||||||
|
origOnClose.call(this, {
|
||||||
|
code: 4001,
|
||||||
|
reason: 'Heartbeat failure, discarding the socket',
|
||||||
|
wasClean: false,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
13
node_modules/@stomp/stompjs/src/byte.ts
generated
vendored
Normal file
13
node_modules/@stomp/stompjs/src/byte.ts
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Some byte values, used as per STOMP specifications.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export const BYTE = {
|
||||||
|
// LINEFEED byte (octet 10)
|
||||||
|
LF: '\x0A',
|
||||||
|
// NULL byte (octet 0)
|
||||||
|
NULL: '\x00',
|
||||||
|
};
|
||||||
812
node_modules/@stomp/stompjs/src/client.ts
generated
vendored
Normal file
812
node_modules/@stomp/stompjs/src/client.ts
generated
vendored
Normal file
@@ -0,0 +1,812 @@
|
|||||||
|
import { ITransaction } from './i-transaction';
|
||||||
|
import { StompConfig } from './stomp-config';
|
||||||
|
import { StompHandler } from './stomp-handler';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
import { StompSubscription } from './stomp-subscription';
|
||||||
|
import {
|
||||||
|
ActivationState,
|
||||||
|
closeEventCallbackType,
|
||||||
|
debugFnType,
|
||||||
|
frameCallbackType,
|
||||||
|
IPublishParams,
|
||||||
|
IStompSocket,
|
||||||
|
messageCallbackType,
|
||||||
|
StompSocketState,
|
||||||
|
wsErrorCallbackType,
|
||||||
|
} from './types';
|
||||||
|
import { Versions } from './versions';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
declare const WebSocket: {
|
||||||
|
prototype: IStompSocket;
|
||||||
|
new (url: string, protocols?: string | string[]): IStompSocket;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* STOMP Client Class.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class Client {
|
||||||
|
/**
|
||||||
|
* The URL for the STOMP broker to connect to.
|
||||||
|
* Typically like `"ws://broker.329broker.com:15674/ws"` or `"wss://broker.329broker.com:15674/ws"`.
|
||||||
|
*
|
||||||
|
* Only one of this or [Client#webSocketFactory]{@link Client#webSocketFactory} need to be set.
|
||||||
|
* If both are set, [Client#webSocketFactory]{@link Client#webSocketFactory} will be used.
|
||||||
|
*
|
||||||
|
* If your environment does not support WebSockets natively, please refer to
|
||||||
|
* [Polyfills]{@link https://stomp-js.github.io/guide/stompjs/rx-stomp/ng2-stompjs/pollyfils-for-stompjs-v5.html}.
|
||||||
|
*/
|
||||||
|
public brokerURL: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* STOMP versions to attempt during STOMP handshake. By default versions `1.0`, `1.1`, and `1.2` are attempted.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```javascript
|
||||||
|
* // Try only versions 1.0 and 1.1
|
||||||
|
* client.stompVersions = new Versions(['1.0', '1.1'])
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public stompVersions = Versions.default;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function should return a WebSocket or a similar (e.g. SockJS) object.
|
||||||
|
* If your environment does not support WebSockets natively, please refer to
|
||||||
|
* [Polyfills]{@link https://stomp-js.github.io/guide/stompjs/rx-stomp/ng2-stompjs/pollyfils-for-stompjs-v5.html}.
|
||||||
|
* If your STOMP Broker supports WebSockets, prefer setting [Client#brokerURL]{@link Client#brokerURL}.
|
||||||
|
*
|
||||||
|
* If both this and [Client#brokerURL]{@link Client#brokerURL} are set, this will be used.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```javascript
|
||||||
|
* // use a WebSocket
|
||||||
|
* client.webSocketFactory= function () {
|
||||||
|
* return new WebSocket("wss://broker.329broker.com:15674/ws");
|
||||||
|
* };
|
||||||
|
*
|
||||||
|
* // Typical usage with SockJS
|
||||||
|
* client.webSocketFactory= function () {
|
||||||
|
* return new SockJS("http://broker.329broker.com/stomp");
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public webSocketFactory: () => IStompSocket;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will retry if Stomp connection is not established in specified milliseconds.
|
||||||
|
* Default 0, which implies wait for ever.
|
||||||
|
*/
|
||||||
|
public connectionTimeout: number = 0;
|
||||||
|
|
||||||
|
private _connectionWatcher: number; // Timer
|
||||||
|
|
||||||
|
/**
|
||||||
|
* automatically reconnect with delay in milliseconds, set to 0 to disable.
|
||||||
|
*/
|
||||||
|
public reconnectDelay: number = 5000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Incoming heartbeat interval in milliseconds. Set to 0 to disable.
|
||||||
|
*/
|
||||||
|
public heartbeatIncoming: number = 10000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outgoing heartbeat interval in milliseconds. Set to 0 to disable.
|
||||||
|
*/
|
||||||
|
public heartbeatOutgoing: number = 10000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This switches on a non standard behavior while sending WebSocket packets.
|
||||||
|
* It splits larger (text) packets into chunks of [maxWebSocketChunkSize]{@link Client#maxWebSocketChunkSize}.
|
||||||
|
* Only Java Spring brokers seems to use this mode.
|
||||||
|
*
|
||||||
|
* WebSockets, by itself, split large (text) packets,
|
||||||
|
* so it is not needed with a truly compliant STOMP/WebSocket broker.
|
||||||
|
* Actually setting it for such broker will cause large messages to fail.
|
||||||
|
*
|
||||||
|
* `false` by default.
|
||||||
|
*
|
||||||
|
* Binary frames are never split.
|
||||||
|
*/
|
||||||
|
public splitLargeFrames: boolean = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [splitLargeFrames]{@link Client#splitLargeFrames}.
|
||||||
|
* This has no effect if [splitLargeFrames]{@link Client#splitLargeFrames} is `false`.
|
||||||
|
*/
|
||||||
|
public maxWebSocketChunkSize: number = 8 * 1024;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Usually the
|
||||||
|
* [type of WebSocket frame]{@link https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send#Parameters}
|
||||||
|
* is automatically decided by type of the payload.
|
||||||
|
* Default is `false`, which should work with all compliant brokers.
|
||||||
|
*
|
||||||
|
* Set this flag to force binary frames.
|
||||||
|
*/
|
||||||
|
public forceBinaryWSFrames: boolean = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A bug in ReactNative chops a string on occurrence of a NULL.
|
||||||
|
* See issue [https://github.com/stomp-js/stompjs/issues/89]{@link https://github.com/stomp-js/stompjs/issues/89}.
|
||||||
|
* This makes incoming WebSocket messages invalid STOMP packets.
|
||||||
|
* Setting this flag attempts to reverse the damage by appending a NULL.
|
||||||
|
* If the broker splits a large message into multiple WebSocket messages,
|
||||||
|
* this flag will cause data loss and abnormal termination of connection.
|
||||||
|
*
|
||||||
|
* This is not an ideal solution, but a stop gap until the underlying issue is fixed at ReactNative library.
|
||||||
|
*/
|
||||||
|
public appendMissingNULLonIncoming: boolean = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Underlying WebSocket instance, READONLY.
|
||||||
|
*/
|
||||||
|
get webSocket(): IStompSocket {
|
||||||
|
return this._stompHandler ? this._stompHandler._webSocket : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connection headers, important keys - `login`, `passcode`, `host`.
|
||||||
|
* Though STOMP 1.2 standard marks these keys to be present, check your broker documentation for
|
||||||
|
* details specific to your broker.
|
||||||
|
*/
|
||||||
|
public connectHeaders: StompHeaders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnection headers.
|
||||||
|
*/
|
||||||
|
get disconnectHeaders(): StompHeaders {
|
||||||
|
return this._disconnectHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
set disconnectHeaders(value: StompHeaders) {
|
||||||
|
this._disconnectHeaders = value;
|
||||||
|
if (this._stompHandler) {
|
||||||
|
this._stompHandler.disconnectHeaders = this._disconnectHeaders;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private _disconnectHeaders: StompHeaders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function will be called for any unhandled messages.
|
||||||
|
* It is useful for receiving messages sent to RabbitMQ temporary queues.
|
||||||
|
*
|
||||||
|
* It can also get invoked with stray messages while the server is processing
|
||||||
|
* a request to [Client#unsubscribe]{@link Client#unsubscribe}
|
||||||
|
* from an endpoint.
|
||||||
|
*
|
||||||
|
* The actual {@link IMessage} will be passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
public onUnhandledMessage: messageCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* STOMP brokers can be requested to notify when an operation is actually completed.
|
||||||
|
* Prefer using [Client#watchForReceipt]{@link Client#watchForReceipt}. See
|
||||||
|
* [Client#watchForReceipt]{@link Client#watchForReceipt} for examples.
|
||||||
|
*
|
||||||
|
* The actual {@link FrameImpl} will be passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
public onUnhandledReceipt: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will be invoked if {@link FrameImpl} of unknown type is received from the STOMP broker.
|
||||||
|
*
|
||||||
|
* The actual {@link IFrame} will be passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
public onUnhandledFrame: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `true` if there is a active connection with STOMP Broker
|
||||||
|
*/
|
||||||
|
get connected(): boolean {
|
||||||
|
return !!this._stompHandler && this._stompHandler.connected;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback, invoked on before a connection connection to the STOMP broker.
|
||||||
|
*
|
||||||
|
* You can change options on the client, which will impact the immediate connect.
|
||||||
|
* It is valid to call [Client#decativate]{@link Client#deactivate} in this callback.
|
||||||
|
*
|
||||||
|
* As of version 5.1, this callback can be
|
||||||
|
* [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)
|
||||||
|
* (i.e., it can return a
|
||||||
|
* [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)).
|
||||||
|
* In that case connect will be called only after the Promise is resolved.
|
||||||
|
* This can be used to reliably fetch credentials, access token etc. from some other service
|
||||||
|
* in an asynchronous way.
|
||||||
|
*/
|
||||||
|
public beforeConnect: () => void | Promise<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback, invoked on every successful connection to the STOMP broker.
|
||||||
|
*
|
||||||
|
* The actual {@link FrameImpl} will be passed as parameter to the callback.
|
||||||
|
* Sometimes clients will like to use headers from this frame.
|
||||||
|
*/
|
||||||
|
public onConnect: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback, invoked on every successful disconnection from the STOMP broker. It will not be invoked if
|
||||||
|
* the STOMP broker disconnected due to an error.
|
||||||
|
*
|
||||||
|
* The actual Receipt {@link FrameImpl} acknowledging the DISCONNECT will be passed as parameter to the callback.
|
||||||
|
*
|
||||||
|
* The way STOMP protocol is designed, the connection may close/terminate without the client
|
||||||
|
* receiving the Receipt {@link FrameImpl} acknowledging the DISCONNECT.
|
||||||
|
* You might find [Client#onWebSocketClose]{@link Client#onWebSocketClose} more appropriate to watch
|
||||||
|
* STOMP broker disconnects.
|
||||||
|
*/
|
||||||
|
public onDisconnect: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback, invoked on an ERROR frame received from the STOMP Broker.
|
||||||
|
* A compliant STOMP Broker will close the connection after this type of frame.
|
||||||
|
* Please check broker specific documentation for exact behavior.
|
||||||
|
*
|
||||||
|
* The actual {@link IFrame} will be passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
public onStompError: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback, invoked when underlying WebSocket is closed.
|
||||||
|
*
|
||||||
|
* Actual [CloseEvent]{@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}
|
||||||
|
* is passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
public onWebSocketClose: closeEventCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback, invoked when underlying WebSocket raises an error.
|
||||||
|
*
|
||||||
|
* Actual [Event]{@link https://developer.mozilla.org/en-US/docs/Web/API/Event}
|
||||||
|
* is passed as parameter to the callback.
|
||||||
|
*/
|
||||||
|
public onWebSocketError: wsErrorCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set it to log the actual raw communication with the broker.
|
||||||
|
* When unset, it logs headers of the parsed frames.
|
||||||
|
*
|
||||||
|
* Change in this effects from next broker reconnect.
|
||||||
|
*
|
||||||
|
* **Caution: this assumes that frames only have valid UTF8 strings.**
|
||||||
|
*/
|
||||||
|
public logRawCommunication: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default, debug messages are discarded. To log to `console` following can be used:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* client.debug = function(str) {
|
||||||
|
* console.log(str);
|
||||||
|
* };
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Currently this method does not support levels of log. Be aware that the output can be quite verbose
|
||||||
|
* and may contain sensitive information (like passwords, tokens etc.).
|
||||||
|
*/
|
||||||
|
public debug: debugFnType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Browsers do not immediately close WebSockets when `.close` is issued.
|
||||||
|
* This may cause reconnection to take a longer on certain type of failures.
|
||||||
|
* In case of incoming heartbeat failure, this experimental flag instructs the library
|
||||||
|
* to discard the socket immediately (even before it is actually closed).
|
||||||
|
*/
|
||||||
|
public discardWebsocketOnCommFailure: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* version of STOMP protocol negotiated with the server, READONLY
|
||||||
|
*/
|
||||||
|
get connectedVersion(): string {
|
||||||
|
return this._stompHandler ? this._stompHandler.connectedVersion : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _stompHandler: StompHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* if the client is active (connected or going to reconnect)
|
||||||
|
*/
|
||||||
|
get active(): boolean {
|
||||||
|
return this.state === ActivationState.ACTIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It will be called on state change.
|
||||||
|
*
|
||||||
|
* When deactivating it may go from ACTIVE to INACTIVE without entering DEACTIVATING.
|
||||||
|
*/
|
||||||
|
public onChangeState: (state: ActivationState) => void;
|
||||||
|
|
||||||
|
private _changeState(state: ActivationState) {
|
||||||
|
this.state = state;
|
||||||
|
this.onChangeState(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This will mark deactivate to complete, to be called after Websocket is closed
|
||||||
|
private _resolveSocketClose: (value?: PromiseLike<void> | void) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activation state.
|
||||||
|
*
|
||||||
|
* It will usually be ACTIVE or INACTIVE.
|
||||||
|
* When deactivating it may go from ACTIVE to INACTIVE without entering DEACTIVATING.
|
||||||
|
*/
|
||||||
|
public state: ActivationState = ActivationState.INACTIVE;
|
||||||
|
|
||||||
|
private _reconnector: any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an instance.
|
||||||
|
*/
|
||||||
|
constructor(conf: StompConfig = {}) {
|
||||||
|
// Dummy callbacks
|
||||||
|
const noOp = () => {};
|
||||||
|
this.debug = noOp;
|
||||||
|
this.beforeConnect = noOp;
|
||||||
|
this.onConnect = noOp;
|
||||||
|
this.onDisconnect = noOp;
|
||||||
|
this.onUnhandledMessage = noOp;
|
||||||
|
this.onUnhandledReceipt = noOp;
|
||||||
|
this.onUnhandledFrame = noOp;
|
||||||
|
this.onStompError = noOp;
|
||||||
|
this.onWebSocketClose = noOp;
|
||||||
|
this.onWebSocketError = noOp;
|
||||||
|
this.logRawCommunication = false;
|
||||||
|
this.onChangeState = noOp;
|
||||||
|
|
||||||
|
// These parameters would typically get proper values before connect is called
|
||||||
|
this.connectHeaders = {};
|
||||||
|
this._disconnectHeaders = {};
|
||||||
|
|
||||||
|
// Apply configuration
|
||||||
|
this.configure(conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update configuration.
|
||||||
|
*/
|
||||||
|
public configure(conf: StompConfig): void {
|
||||||
|
// bulk assign all properties to this
|
||||||
|
(Object as any).assign(this, conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiate the connection with the broker.
|
||||||
|
* If the connection breaks, as per [Client#reconnectDelay]{@link Client#reconnectDelay},
|
||||||
|
* it will keep trying to reconnect.
|
||||||
|
*
|
||||||
|
* Call [Client#deactivate]{@link Client#deactivate} to disconnect and stop reconnection attempts.
|
||||||
|
*/
|
||||||
|
public activate(): void {
|
||||||
|
if (this.state === ActivationState.DEACTIVATING) {
|
||||||
|
this.debug(
|
||||||
|
'Still DEACTIVATING, please await call to deactivate before trying to re-activate'
|
||||||
|
);
|
||||||
|
throw new Error('Still DEACTIVATING, can not activate now');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.active) {
|
||||||
|
this.debug('Already ACTIVE, ignoring request to activate');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._changeState(ActivationState.ACTIVE);
|
||||||
|
|
||||||
|
this._connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async _connect(): Promise<void> {
|
||||||
|
if (this.connected) {
|
||||||
|
this.debug('STOMP: already connected, nothing to do');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.beforeConnect();
|
||||||
|
|
||||||
|
if (!this.active) {
|
||||||
|
this.debug(
|
||||||
|
'Client has been marked inactive, will not attempt to connect'
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// setup connection watcher
|
||||||
|
if (this.connectionTimeout > 0) {
|
||||||
|
// clear first
|
||||||
|
if (this._connectionWatcher) {
|
||||||
|
clearTimeout(this._connectionWatcher);
|
||||||
|
}
|
||||||
|
this._connectionWatcher = setTimeout(() => {
|
||||||
|
if (this.connected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Connection not established, close the underlying socket
|
||||||
|
// a reconnection will be attempted
|
||||||
|
this.debug(
|
||||||
|
`Connection not established in ${this.connectionTimeout}ms, closing socket`
|
||||||
|
);
|
||||||
|
this.forceDisconnect();
|
||||||
|
}, this.connectionTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.debug('Opening Web Socket...');
|
||||||
|
|
||||||
|
// Get the actual WebSocket (or a similar object)
|
||||||
|
const webSocket = this._createWebSocket();
|
||||||
|
|
||||||
|
this._stompHandler = new StompHandler(this, webSocket, {
|
||||||
|
debug: this.debug,
|
||||||
|
stompVersions: this.stompVersions,
|
||||||
|
connectHeaders: this.connectHeaders,
|
||||||
|
disconnectHeaders: this._disconnectHeaders,
|
||||||
|
heartbeatIncoming: this.heartbeatIncoming,
|
||||||
|
heartbeatOutgoing: this.heartbeatOutgoing,
|
||||||
|
splitLargeFrames: this.splitLargeFrames,
|
||||||
|
maxWebSocketChunkSize: this.maxWebSocketChunkSize,
|
||||||
|
forceBinaryWSFrames: this.forceBinaryWSFrames,
|
||||||
|
logRawCommunication: this.logRawCommunication,
|
||||||
|
appendMissingNULLonIncoming: this.appendMissingNULLonIncoming,
|
||||||
|
discardWebsocketOnCommFailure: this.discardWebsocketOnCommFailure,
|
||||||
|
|
||||||
|
onConnect: frame => {
|
||||||
|
// Successfully connected, stop the connection watcher
|
||||||
|
if (this._connectionWatcher) {
|
||||||
|
clearTimeout(this._connectionWatcher);
|
||||||
|
this._connectionWatcher = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.active) {
|
||||||
|
this.debug(
|
||||||
|
'STOMP got connected while deactivate was issued, will disconnect now'
|
||||||
|
);
|
||||||
|
this._disposeStompHandler();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.onConnect(frame);
|
||||||
|
},
|
||||||
|
onDisconnect: frame => {
|
||||||
|
this.onDisconnect(frame);
|
||||||
|
},
|
||||||
|
onStompError: frame => {
|
||||||
|
this.onStompError(frame);
|
||||||
|
},
|
||||||
|
onWebSocketClose: evt => {
|
||||||
|
this._stompHandler = undefined; // a new one will be created in case of a reconnect
|
||||||
|
|
||||||
|
if (this.state === ActivationState.DEACTIVATING) {
|
||||||
|
// Mark deactivation complete
|
||||||
|
this._resolveSocketClose();
|
||||||
|
this._resolveSocketClose = undefined;
|
||||||
|
this._changeState(ActivationState.INACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.onWebSocketClose(evt);
|
||||||
|
// The callback is called before attempting to reconnect, this would allow the client
|
||||||
|
// to be `deactivated` in the callback.
|
||||||
|
if (this.active) {
|
||||||
|
this._schedule_reconnect();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onWebSocketError: evt => {
|
||||||
|
this.onWebSocketError(evt);
|
||||||
|
},
|
||||||
|
onUnhandledMessage: message => {
|
||||||
|
this.onUnhandledMessage(message);
|
||||||
|
},
|
||||||
|
onUnhandledReceipt: frame => {
|
||||||
|
this.onUnhandledReceipt(frame);
|
||||||
|
},
|
||||||
|
onUnhandledFrame: frame => {
|
||||||
|
this.onUnhandledFrame(frame);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
this._stompHandler.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _createWebSocket(): IStompSocket {
|
||||||
|
let webSocket: IStompSocket;
|
||||||
|
|
||||||
|
if (this.webSocketFactory) {
|
||||||
|
webSocket = this.webSocketFactory();
|
||||||
|
} else {
|
||||||
|
webSocket = new WebSocket(
|
||||||
|
this.brokerURL,
|
||||||
|
this.stompVersions.protocolVersions()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
webSocket.binaryType = 'arraybuffer';
|
||||||
|
return webSocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _schedule_reconnect(): void {
|
||||||
|
if (this.reconnectDelay > 0) {
|
||||||
|
this.debug(`STOMP: scheduling reconnection in ${this.reconnectDelay}ms`);
|
||||||
|
|
||||||
|
this._reconnector = setTimeout(() => {
|
||||||
|
this._connect();
|
||||||
|
}, this.reconnectDelay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnect if connected and stop auto reconnect loop.
|
||||||
|
* Appropriate callbacks will be invoked if underlying STOMP connection was connected.
|
||||||
|
*
|
||||||
|
* This call is async, it will resolve immediately if there is no underlying active websocket,
|
||||||
|
* otherwise, it will resolve after underlying websocket is properly disposed.
|
||||||
|
*
|
||||||
|
* To reactivate you can call [Client#activate]{@link Client#activate}.
|
||||||
|
*/
|
||||||
|
public async deactivate(): Promise<void> {
|
||||||
|
let retPromise: Promise<void>;
|
||||||
|
|
||||||
|
if (this.state !== ActivationState.ACTIVE) {
|
||||||
|
this.debug(
|
||||||
|
`Already ${ActivationState[this.state]}, ignoring call to deactivate`
|
||||||
|
);
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
this._changeState(ActivationState.DEACTIVATING);
|
||||||
|
|
||||||
|
// Clear if a reconnection was scheduled
|
||||||
|
if (this._reconnector) {
|
||||||
|
clearTimeout(this._reconnector);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
this._stompHandler &&
|
||||||
|
this.webSocket.readyState !== StompSocketState.CLOSED
|
||||||
|
) {
|
||||||
|
// we need to wait for underlying websocket to close
|
||||||
|
retPromise = new Promise<void>((resolve, reject) => {
|
||||||
|
this._resolveSocketClose = resolve;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// indicate that auto reconnect loop should terminate
|
||||||
|
this._changeState(ActivationState.INACTIVE);
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
this._disposeStompHandler();
|
||||||
|
|
||||||
|
return retPromise;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force disconnect if there is an active connection by directly closing the underlying WebSocket.
|
||||||
|
* This is different than a normal disconnect where a DISCONNECT sequence is carried out with the broker.
|
||||||
|
* After forcing disconnect, automatic reconnect will be attempted.
|
||||||
|
* To stop further reconnects call [Client#deactivate]{@link Client#deactivate} as well.
|
||||||
|
*/
|
||||||
|
public forceDisconnect() {
|
||||||
|
if (this._stompHandler) {
|
||||||
|
this._stompHandler.forceDisconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private _disposeStompHandler() {
|
||||||
|
// Dispose STOMP Handler
|
||||||
|
if (this._stompHandler) {
|
||||||
|
this._stompHandler.dispose();
|
||||||
|
this._stompHandler = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to a named destination. Refer to your STOMP broker documentation for types
|
||||||
|
* and naming of destinations.
|
||||||
|
*
|
||||||
|
* STOMP protocol specifies and suggests some headers and also allows broker specific headers.
|
||||||
|
*
|
||||||
|
* `body` must be String.
|
||||||
|
* You will need to covert the payload to string in case it is not string (e.g. JSON).
|
||||||
|
*
|
||||||
|
* To send a binary message body use binaryBody parameter. It should be a
|
||||||
|
* [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array).
|
||||||
|
* Sometimes brokers may not support binary frames out of the box.
|
||||||
|
* Please check your broker documentation.
|
||||||
|
*
|
||||||
|
* `content-length` header is automatically added to the STOMP Frame sent to the broker.
|
||||||
|
* Set `skipContentLengthHeader` to indicate that `content-length` header should not be added.
|
||||||
|
* For binary messages `content-length` header is always added.
|
||||||
|
*
|
||||||
|
* Caution: The broker will, most likely, report an error and disconnect if message body has NULL octet(s)
|
||||||
|
* and `content-length` header is missing.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* client.publish({destination: "/queue/test", headers: {priority: 9}, body: "Hello, STOMP"});
|
||||||
|
*
|
||||||
|
* // Only destination is mandatory parameter
|
||||||
|
* client.publish({destination: "/queue/test", body: "Hello, STOMP"});
|
||||||
|
*
|
||||||
|
* // Skip content-length header in the frame to the broker
|
||||||
|
* client.publish({"/queue/test", body: "Hello, STOMP", skipContentLengthHeader: true});
|
||||||
|
*
|
||||||
|
* var binaryData = generateBinaryData(); // This need to be of type Uint8Array
|
||||||
|
* // setting content-type header is not mandatory, however a good practice
|
||||||
|
* client.publish({destination: '/topic/special', binaryBody: binaryData,
|
||||||
|
* headers: {'content-type': 'application/octet-stream'}});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public publish(params: IPublishParams) {
|
||||||
|
this._stompHandler.publish(params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* STOMP brokers may carry out operation asynchronously and allow requesting for acknowledgement.
|
||||||
|
* To request an acknowledgement, a `receipt` header needs to be sent with the actual request.
|
||||||
|
* The value (say receipt-id) for this header needs to be unique for each use. Typically a sequence, a UUID, a
|
||||||
|
* random number or a combination may be used.
|
||||||
|
*
|
||||||
|
* A complaint broker will send a RECEIPT frame when an operation has actually been completed.
|
||||||
|
* The operation needs to be matched based in the value of the receipt-id.
|
||||||
|
*
|
||||||
|
* This method allow watching for a receipt and invoke the callback
|
||||||
|
* when corresponding receipt has been received.
|
||||||
|
*
|
||||||
|
* The actual {@link FrameImpl} will be passed as parameter to the callback.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```javascript
|
||||||
|
* // Subscribing with acknowledgement
|
||||||
|
* let receiptId = randomText();
|
||||||
|
*
|
||||||
|
* client.watchForReceipt(receiptId, function() {
|
||||||
|
* // Will be called after server acknowledges
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* client.subscribe(TEST.destination, onMessage, {receipt: receiptId});
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* // Publishing with acknowledgement
|
||||||
|
* receiptId = randomText();
|
||||||
|
*
|
||||||
|
* client.watchForReceipt(receiptId, function() {
|
||||||
|
* // Will be called after server acknowledges
|
||||||
|
* });
|
||||||
|
* client.publish({destination: TEST.destination, headers: {receipt: receiptId}, body: msg});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public watchForReceipt(receiptId: string, callback: frameCallbackType): void {
|
||||||
|
this._stompHandler.watchForReceipt(receiptId, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subscribe to a STOMP Broker location. The callback will be invoked for each received message with
|
||||||
|
* the {@link IMessage} as argument.
|
||||||
|
*
|
||||||
|
* Note: The library will generate an unique ID if there is none provided in the headers.
|
||||||
|
* To use your own ID, pass it using the headers argument.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* callback = function(message) {
|
||||||
|
* // called when the client receives a STOMP message from the server
|
||||||
|
* if (message.body) {
|
||||||
|
* alert("got message with body " + message.body)
|
||||||
|
* } else {
|
||||||
|
* alert("got empty message");
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* var subscription = client.subscribe("/queue/test", callback);
|
||||||
|
*
|
||||||
|
* // Explicit subscription id
|
||||||
|
* var mySubId = 'my-subscription-id-001';
|
||||||
|
* var subscription = client.subscribe(destination, callback, { id: mySubId });
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public subscribe(
|
||||||
|
destination: string,
|
||||||
|
callback: messageCallbackType,
|
||||||
|
headers: StompHeaders = {}
|
||||||
|
): StompSubscription {
|
||||||
|
return this._stompHandler.subscribe(destination, callback, headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It is preferable to unsubscribe from a subscription by calling
|
||||||
|
* `unsubscribe()` directly on {@link StompSubscription} returned by `client.subscribe()`:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var subscription = client.subscribe(destination, onmessage);
|
||||||
|
* // ...
|
||||||
|
* subscription.unsubscribe();
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* See: http://stomp.github.com/stomp-specification-1.2.html#UNSUBSCRIBE UNSUBSCRIBE Frame
|
||||||
|
*/
|
||||||
|
public unsubscribe(id: string, headers: StompHeaders = {}): void {
|
||||||
|
this._stompHandler.unsubscribe(id, headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start a transaction, the returned {@link ITransaction} has methods - [commit]{@link ITransaction#commit}
|
||||||
|
* and [abort]{@link ITransaction#abort}.
|
||||||
|
*
|
||||||
|
* `transactionId` is optional, if not passed the library will generate it internally.
|
||||||
|
*/
|
||||||
|
public begin(transactionId?: string): ITransaction {
|
||||||
|
return this._stompHandler.begin(transactionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commit a transaction.
|
||||||
|
*
|
||||||
|
* It is preferable to commit a transaction by calling [commit]{@link ITransaction#commit} directly on
|
||||||
|
* {@link ITransaction} returned by [client.begin]{@link Client#begin}.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var tx = client.begin(txId);
|
||||||
|
* //...
|
||||||
|
* tx.commit();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public commit(transactionId: string): void {
|
||||||
|
this._stompHandler.commit(transactionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abort a transaction.
|
||||||
|
* It is preferable to abort a transaction by calling [abort]{@link ITransaction#abort} directly on
|
||||||
|
* {@link ITransaction} returned by [client.begin]{@link Client#begin}.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var tx = client.begin(txId);
|
||||||
|
* //...
|
||||||
|
* tx.abort();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public abort(transactionId: string): void {
|
||||||
|
this._stompHandler.abort(transactionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ACK a message. It is preferable to acknowledge a message by calling [ack]{@link IMessage#ack} directly
|
||||||
|
* on the {@link IMessage} handled by a subscription callback:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var callback = function (message) {
|
||||||
|
* // process the message
|
||||||
|
* // acknowledge it
|
||||||
|
* message.ack();
|
||||||
|
* };
|
||||||
|
* client.subscribe(destination, callback, {'ack': 'client'});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public ack(
|
||||||
|
messageId: string,
|
||||||
|
subscriptionId: string,
|
||||||
|
headers: StompHeaders = {}
|
||||||
|
): void {
|
||||||
|
this._stompHandler.ack(messageId, subscriptionId, headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NACK a message. It is preferable to acknowledge a message by calling [nack]{@link IMessage#nack} directly
|
||||||
|
* on the {@link IMessage} handled by a subscription callback:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var callback = function (message) {
|
||||||
|
* // process the message
|
||||||
|
* // an error occurs, nack it
|
||||||
|
* message.nack();
|
||||||
|
* };
|
||||||
|
* client.subscribe(destination, callback, {'ack': 'client'});
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
public nack(
|
||||||
|
messageId: string,
|
||||||
|
subscriptionId: string,
|
||||||
|
headers: StompHeaders = {}
|
||||||
|
): void {
|
||||||
|
this._stompHandler.nack(messageId, subscriptionId, headers);
|
||||||
|
}
|
||||||
|
}
|
||||||
269
node_modules/@stomp/stompjs/src/compatibility/compat-client.ts
generated
vendored
Normal file
269
node_modules/@stomp/stompjs/src/compatibility/compat-client.ts
generated
vendored
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
import { Client } from '../client';
|
||||||
|
import { StompHeaders } from '../stomp-headers';
|
||||||
|
import { frameCallbackType, messageCallbackType } from '../types';
|
||||||
|
import { HeartbeatInfo } from './heartbeat-info';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using {@link Client}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
export class CompatClient extends Client {
|
||||||
|
/**
|
||||||
|
* It is no op now. No longer needed. Large packets work out of the box.
|
||||||
|
*/
|
||||||
|
public maxWebSocketFrameSize: number = 16 * 1024;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using {@link Client}
|
||||||
|
* and [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
constructor(webSocketFactory: () => any) {
|
||||||
|
super();
|
||||||
|
this.reconnect_delay = 0;
|
||||||
|
this.webSocketFactory = webSocketFactory;
|
||||||
|
// Default from previous version
|
||||||
|
this.debug = (...message: any[]) => {
|
||||||
|
console.log(...message);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private _parseConnect(...args: any[]): any {
|
||||||
|
let closeEventCallback;
|
||||||
|
let connectCallback;
|
||||||
|
let errorCallback;
|
||||||
|
let headers: StompHeaders = {};
|
||||||
|
if (args.length < 2) {
|
||||||
|
throw new Error('Connect requires at least 2 arguments');
|
||||||
|
}
|
||||||
|
if (typeof args[1] === 'function') {
|
||||||
|
[headers, connectCallback, errorCallback, closeEventCallback] = args;
|
||||||
|
} else {
|
||||||
|
switch (args.length) {
|
||||||
|
case 6:
|
||||||
|
[
|
||||||
|
headers.login,
|
||||||
|
headers.passcode,
|
||||||
|
connectCallback,
|
||||||
|
errorCallback,
|
||||||
|
closeEventCallback,
|
||||||
|
headers.host,
|
||||||
|
] = args;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
[
|
||||||
|
headers.login,
|
||||||
|
headers.passcode,
|
||||||
|
connectCallback,
|
||||||
|
errorCallback,
|
||||||
|
closeEventCallback,
|
||||||
|
] = args;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [headers, connectCallback, errorCallback, closeEventCallback];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using [Client#activate]{@link Client#activate}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* The `connect` method accepts different number of arguments and types. See the Overloads list. Use the
|
||||||
|
* version with headers to pass your broker specific options.
|
||||||
|
*
|
||||||
|
* overloads:
|
||||||
|
* - connect(headers, connectCallback)
|
||||||
|
* - connect(headers, connectCallback, errorCallback)
|
||||||
|
* - connect(login, passcode, connectCallback)
|
||||||
|
* - connect(login, passcode, connectCallback, errorCallback)
|
||||||
|
* - connect(login, passcode, connectCallback, errorCallback, closeEventCallback)
|
||||||
|
* - connect(login, passcode, connectCallback, errorCallback, closeEventCallback, host)
|
||||||
|
*
|
||||||
|
* params:
|
||||||
|
* - headers, see [Client#connectHeaders]{@link Client#connectHeaders}
|
||||||
|
* - connectCallback, see [Client#onConnect]{@link Client#onConnect}
|
||||||
|
* - errorCallback, see [Client#onStompError]{@link Client#onStompError}
|
||||||
|
* - closeEventCallback, see [Client#onWebSocketClose]{@link Client#onWebSocketClose}
|
||||||
|
* - login [String], see [Client#connectHeaders](../classes/Client.html#connectHeaders)
|
||||||
|
* - passcode [String], [Client#connectHeaders](../classes/Client.html#connectHeaders)
|
||||||
|
* - host [String], see [Client#connectHeaders](../classes/Client.html#connectHeaders)
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
public connect(...args: any[]): void {
|
||||||
|
const out = this._parseConnect(...args);
|
||||||
|
|
||||||
|
if (out[0]) {
|
||||||
|
this.connectHeaders = out[0];
|
||||||
|
}
|
||||||
|
if (out[1]) {
|
||||||
|
this.onConnect = out[1];
|
||||||
|
}
|
||||||
|
if (out[2]) {
|
||||||
|
this.onStompError = out[2];
|
||||||
|
}
|
||||||
|
if (out[3]) {
|
||||||
|
this.onWebSocketClose = out[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
super.activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, please shift to using [Client#deactivate]{@link Client#deactivate}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* See:
|
||||||
|
* [Client#onDisconnect]{@link Client#onDisconnect}, and
|
||||||
|
* [Client#disconnectHeaders]{@link Client#disconnectHeaders}
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
public disconnect(
|
||||||
|
disconnectCallback?: any,
|
||||||
|
headers: StompHeaders = {}
|
||||||
|
): void {
|
||||||
|
if (disconnectCallback) {
|
||||||
|
this.onDisconnect = disconnectCallback;
|
||||||
|
}
|
||||||
|
this.disconnectHeaders = headers;
|
||||||
|
|
||||||
|
super.deactivate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, use [Client#publish]{@link Client#publish}.
|
||||||
|
*
|
||||||
|
* Send a message to a named destination. Refer to your STOMP broker documentation for types
|
||||||
|
* and naming of destinations. The headers will, typically, be available to the subscriber.
|
||||||
|
* However, there may be special purpose headers corresponding to your STOMP broker.
|
||||||
|
*
|
||||||
|
* **Deprecated**, use [Client#publish]{@link Client#publish}
|
||||||
|
*
|
||||||
|
* Note: Body must be String. You will need to covert the payload to string in case it is not string (e.g. JSON)
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* client.send("/queue/test", {priority: 9}, "Hello, STOMP");
|
||||||
|
*
|
||||||
|
* // If you want to send a message with a body, you must also pass the headers argument.
|
||||||
|
* client.send("/queue/test", {}, "Hello, STOMP");
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To upgrade, please follow the [Upgrade Guide](../additional-documentation/upgrading.html)
|
||||||
|
*/
|
||||||
|
public send(
|
||||||
|
destination: string,
|
||||||
|
headers: { [key: string]: any } = {},
|
||||||
|
body: string = ''
|
||||||
|
): void {
|
||||||
|
headers = (Object as any).assign({}, headers);
|
||||||
|
|
||||||
|
const skipContentLengthHeader = headers['content-length'] === false;
|
||||||
|
if (skipContentLengthHeader) {
|
||||||
|
delete headers['content-length'];
|
||||||
|
}
|
||||||
|
this.publish({
|
||||||
|
destination,
|
||||||
|
headers: headers as StompHeaders,
|
||||||
|
body,
|
||||||
|
skipContentLengthHeader,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#reconnectDelay]{@link Client#reconnectDelay}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
set reconnect_delay(value: number) {
|
||||||
|
this.reconnectDelay = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#webSocket]{@link Client#webSocket}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get ws(): any {
|
||||||
|
return this.webSocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#connectedVersion]{@link Client#connectedVersion}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get version() {
|
||||||
|
return this.connectedVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get onreceive(): messageCallbackType {
|
||||||
|
return this.onUnhandledMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
set onreceive(value: messageCallbackType) {
|
||||||
|
this.onUnhandledMessage = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledReceipt]{@link Client#onUnhandledReceipt}.
|
||||||
|
* Prefer using [Client#watchForReceipt]{@link Client#watchForReceipt}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get onreceipt(): frameCallbackType {
|
||||||
|
return this.onUnhandledReceipt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#onUnhandledReceipt]{@link Client#onUnhandledReceipt}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
set onreceipt(value: frameCallbackType) {
|
||||||
|
this.onUnhandledReceipt = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _heartbeatInfo: HeartbeatInfo = new HeartbeatInfo(this);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#heartbeatIncoming]{@link Client#heartbeatIncoming}
|
||||||
|
* [Client#heartbeatOutgoing]{@link Client#heartbeatOutgoing}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
get heartbeat() {
|
||||||
|
return this._heartbeatInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available for backward compatibility, renamed to [Client#heartbeatIncoming]{@link Client#heartbeatIncoming}
|
||||||
|
* [Client#heartbeatOutgoing]{@link Client#heartbeatOutgoing}.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*/
|
||||||
|
set heartbeat(value: { incoming: number; outgoing: number }) {
|
||||||
|
this.heartbeatIncoming = value.incoming;
|
||||||
|
this.heartbeatOutgoing = value.outgoing;
|
||||||
|
}
|
||||||
|
}
|
||||||
26
node_modules/@stomp/stompjs/src/compatibility/heartbeat-info.ts
generated
vendored
Normal file
26
node_modules/@stomp/stompjs/src/compatibility/heartbeat-info.ts
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { CompatClient } from './compat-client';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export class HeartbeatInfo {
|
||||||
|
constructor(private client: CompatClient) {}
|
||||||
|
|
||||||
|
get outgoing(): number {
|
||||||
|
return this.client.heartbeatOutgoing;
|
||||||
|
}
|
||||||
|
|
||||||
|
set outgoing(value: number) {
|
||||||
|
this.client.heartbeatOutgoing = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
get incoming(): number {
|
||||||
|
return this.client.heartbeatIncoming;
|
||||||
|
}
|
||||||
|
|
||||||
|
set incoming(value: number) {
|
||||||
|
this.client.heartbeatIncoming = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
118
node_modules/@stomp/stompjs/src/compatibility/stomp.ts
generated
vendored
Normal file
118
node_modules/@stomp/stompjs/src/compatibility/stomp.ts
generated
vendored
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
import { Versions } from '../versions';
|
||||||
|
import { CompatClient } from './compat-client';
|
||||||
|
import { IStompSocket } from '../types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
declare const WebSocket: {
|
||||||
|
prototype: IStompSocket;
|
||||||
|
new (url: string, protocols?: string | string[]): IStompSocket;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* STOMP Class, acts like a factory to create {@link Client}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}.
|
||||||
|
*/
|
||||||
|
export class Stomp {
|
||||||
|
/**
|
||||||
|
* In case you need to use a non standard class for WebSocket.
|
||||||
|
*
|
||||||
|
* For example when using within NodeJS environment:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* StompJs = require('../../esm5/');
|
||||||
|
* Stomp = StompJs.Stomp;
|
||||||
|
* Stomp.WebSocketClass = require('websocket').w3cwebsocket;
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}
|
||||||
|
* using [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*/
|
||||||
|
// tslint:disable-next-line:variable-name
|
||||||
|
public static WebSocketClass: any = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method creates a WebSocket client that is connected to
|
||||||
|
* the STOMP server located at the url.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var url = "ws://localhost:61614/stomp";
|
||||||
|
* var client = Stomp.client(url);
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}
|
||||||
|
* using [Client#brokerURL]{@link Client#brokerURL}.
|
||||||
|
*/
|
||||||
|
public static client(url: string, protocols?: string[]): CompatClient {
|
||||||
|
// This is a hack to allow another implementation than the standard
|
||||||
|
// HTML5 WebSocket class.
|
||||||
|
//
|
||||||
|
// It is possible to use another class by calling
|
||||||
|
//
|
||||||
|
// Stomp.WebSocketClass = MozWebSocket
|
||||||
|
//
|
||||||
|
// *prior* to call `Stomp.client()`.
|
||||||
|
//
|
||||||
|
// This hack is deprecated and `Stomp.over()` method should be used
|
||||||
|
// instead.
|
||||||
|
|
||||||
|
// See remarks on the function Stomp.over
|
||||||
|
if (protocols == null) {
|
||||||
|
protocols = Versions.default.protocolVersions();
|
||||||
|
}
|
||||||
|
const wsFn = () => {
|
||||||
|
const klass = Stomp.WebSocketClass || WebSocket;
|
||||||
|
return new klass(url, protocols);
|
||||||
|
};
|
||||||
|
|
||||||
|
return new CompatClient(wsFn);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is an alternative to [Stomp#client]{@link Stomp#client} to let the user
|
||||||
|
* specify the WebSocket to use (either a standard HTML5 WebSocket or
|
||||||
|
* a similar object).
|
||||||
|
*
|
||||||
|
* In order to support reconnection, the function Client._connect should be callable more than once.
|
||||||
|
* While reconnecting
|
||||||
|
* a new instance of underlying transport (TCP Socket, WebSocket or SockJS) will be needed. So, this function
|
||||||
|
* alternatively allows passing a function that should return a new instance of the underlying socket.
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* var client = Stomp.over(function(){
|
||||||
|
* return new WebSocket('ws://localhost:15674/ws')
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Deprecated**
|
||||||
|
*
|
||||||
|
* It will be removed in next major version. Please switch to {@link Client}
|
||||||
|
* using [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*/
|
||||||
|
public static over(ws: any): CompatClient {
|
||||||
|
let wsFn: () => any;
|
||||||
|
|
||||||
|
if (typeof ws === 'function') {
|
||||||
|
wsFn = ws;
|
||||||
|
} else {
|
||||||
|
console.warn(
|
||||||
|
'Stomp.over did not receive a factory, auto reconnect will not work. ' +
|
||||||
|
'Please see https://stomp-js.github.io/api-docs/latest/classes/Stomp.html#over'
|
||||||
|
);
|
||||||
|
wsFn = () => ws;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new CompatClient(wsFn);
|
||||||
|
}
|
||||||
|
}
|
||||||
250
node_modules/@stomp/stompjs/src/frame-impl.ts
generated
vendored
Normal file
250
node_modules/@stomp/stompjs/src/frame-impl.ts
generated
vendored
Normal file
@@ -0,0 +1,250 @@
|
|||||||
|
import { BYTE } from './byte';
|
||||||
|
import { IFrame } from './i-frame';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
import { IRawFrameType } from './types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Frame class represents a STOMP frame.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export class FrameImpl implements IFrame {
|
||||||
|
/**
|
||||||
|
* STOMP Command
|
||||||
|
*/
|
||||||
|
public command: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Headers, key value pairs.
|
||||||
|
*/
|
||||||
|
public headers: StompHeaders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this frame binary (based on whether body/binaryBody was passed when creating this frame).
|
||||||
|
*/
|
||||||
|
public isBinaryBody: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* body of the frame
|
||||||
|
*/
|
||||||
|
get body(): string {
|
||||||
|
if (!this._body && this.isBinaryBody) {
|
||||||
|
this._body = new TextDecoder().decode(this._binaryBody);
|
||||||
|
}
|
||||||
|
return this._body;
|
||||||
|
}
|
||||||
|
private _body: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* body as Uint8Array
|
||||||
|
*/
|
||||||
|
get binaryBody(): Uint8Array {
|
||||||
|
if (!this._binaryBody && !this.isBinaryBody) {
|
||||||
|
this._binaryBody = new TextEncoder().encode(this._body);
|
||||||
|
}
|
||||||
|
return this._binaryBody;
|
||||||
|
}
|
||||||
|
private _binaryBody: Uint8Array;
|
||||||
|
|
||||||
|
private escapeHeaderValues: boolean;
|
||||||
|
private skipContentLengthHeader: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Frame constructor. `command`, `headers` and `body` are available as properties.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
constructor(params: {
|
||||||
|
command: string;
|
||||||
|
headers?: StompHeaders;
|
||||||
|
body?: string;
|
||||||
|
binaryBody?: Uint8Array;
|
||||||
|
escapeHeaderValues?: boolean;
|
||||||
|
skipContentLengthHeader?: boolean;
|
||||||
|
}) {
|
||||||
|
const {
|
||||||
|
command,
|
||||||
|
headers,
|
||||||
|
body,
|
||||||
|
binaryBody,
|
||||||
|
escapeHeaderValues,
|
||||||
|
skipContentLengthHeader,
|
||||||
|
} = params;
|
||||||
|
this.command = command;
|
||||||
|
this.headers = (Object as any).assign({}, headers || {});
|
||||||
|
|
||||||
|
if (binaryBody) {
|
||||||
|
this._binaryBody = binaryBody;
|
||||||
|
this.isBinaryBody = true;
|
||||||
|
} else {
|
||||||
|
this._body = body || '';
|
||||||
|
this.isBinaryBody = false;
|
||||||
|
}
|
||||||
|
this.escapeHeaderValues = escapeHeaderValues || false;
|
||||||
|
this.skipContentLengthHeader = skipContentLengthHeader || false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* deserialize a STOMP Frame from raw data.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public static fromRawFrame(
|
||||||
|
rawFrame: IRawFrameType,
|
||||||
|
escapeHeaderValues: boolean
|
||||||
|
): FrameImpl {
|
||||||
|
const headers: StompHeaders = {};
|
||||||
|
const trim = (str: string): string => str.replace(/^\s+|\s+$/g, '');
|
||||||
|
|
||||||
|
// In case of repeated headers, as per standards, first value need to be used
|
||||||
|
for (const header of rawFrame.headers.reverse()) {
|
||||||
|
const idx = header.indexOf(':');
|
||||||
|
|
||||||
|
const key = trim(header[0]);
|
||||||
|
let value = trim(header[1]);
|
||||||
|
|
||||||
|
if (
|
||||||
|
escapeHeaderValues &&
|
||||||
|
rawFrame.command !== 'CONNECT' &&
|
||||||
|
rawFrame.command !== 'CONNECTED'
|
||||||
|
) {
|
||||||
|
value = FrameImpl.hdrValueUnEscape(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
headers[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FrameImpl({
|
||||||
|
command: rawFrame.command,
|
||||||
|
headers,
|
||||||
|
binaryBody: rawFrame.binaryBody,
|
||||||
|
escapeHeaderValues,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public toString(): string {
|
||||||
|
return this.serializeCmdAndHeaders();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* serialize this Frame in a format suitable to be passed to WebSocket.
|
||||||
|
* If the body is string the output will be string.
|
||||||
|
* If the body is binary (i.e. of type Unit8Array) it will be serialized to ArrayBuffer.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public serialize(): string | ArrayBuffer {
|
||||||
|
const cmdAndHeaders = this.serializeCmdAndHeaders();
|
||||||
|
|
||||||
|
if (this.isBinaryBody) {
|
||||||
|
return FrameImpl.toUnit8Array(cmdAndHeaders, this._binaryBody).buffer;
|
||||||
|
} else {
|
||||||
|
return cmdAndHeaders + this._body + BYTE.NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private serializeCmdAndHeaders(): string {
|
||||||
|
const lines = [this.command];
|
||||||
|
if (this.skipContentLengthHeader) {
|
||||||
|
delete this.headers['content-length'];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const name of Object.keys(this.headers || {})) {
|
||||||
|
const value = this.headers[name];
|
||||||
|
if (
|
||||||
|
this.escapeHeaderValues &&
|
||||||
|
this.command !== 'CONNECT' &&
|
||||||
|
this.command !== 'CONNECTED'
|
||||||
|
) {
|
||||||
|
lines.push(`${name}:${FrameImpl.hdrValueEscape(`${value}`)}`);
|
||||||
|
} else {
|
||||||
|
lines.push(`${name}:${value}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
this.isBinaryBody ||
|
||||||
|
(!this.isBodyEmpty() && !this.skipContentLengthHeader)
|
||||||
|
) {
|
||||||
|
lines.push(`content-length:${this.bodyLength()}`);
|
||||||
|
}
|
||||||
|
return lines.join(BYTE.LF) + BYTE.LF + BYTE.LF;
|
||||||
|
}
|
||||||
|
|
||||||
|
private isBodyEmpty(): boolean {
|
||||||
|
return this.bodyLength() === 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bodyLength(): number {
|
||||||
|
const binaryBody = this.binaryBody;
|
||||||
|
return binaryBody ? binaryBody.length : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compute the size of a UTF-8 string by counting its number of bytes
|
||||||
|
* (and not the number of characters composing the string)
|
||||||
|
*/
|
||||||
|
private static sizeOfUTF8(s: string): number {
|
||||||
|
return s ? new TextEncoder().encode(s).length : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static toUnit8Array(
|
||||||
|
cmdAndHeaders: string,
|
||||||
|
binaryBody: Uint8Array
|
||||||
|
): Uint8Array {
|
||||||
|
const uint8CmdAndHeaders = new TextEncoder().encode(cmdAndHeaders);
|
||||||
|
const nullTerminator = new Uint8Array([0]);
|
||||||
|
const uint8Frame = new Uint8Array(
|
||||||
|
uint8CmdAndHeaders.length + binaryBody.length + nullTerminator.length
|
||||||
|
);
|
||||||
|
|
||||||
|
uint8Frame.set(uint8CmdAndHeaders);
|
||||||
|
uint8Frame.set(binaryBody, uint8CmdAndHeaders.length);
|
||||||
|
uint8Frame.set(
|
||||||
|
nullTerminator,
|
||||||
|
uint8CmdAndHeaders.length + binaryBody.length
|
||||||
|
);
|
||||||
|
|
||||||
|
return uint8Frame;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Serialize a STOMP frame as per STOMP standards, suitable to be sent to the STOMP broker.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public static marshall(params: {
|
||||||
|
command: string;
|
||||||
|
headers?: StompHeaders;
|
||||||
|
body?: string;
|
||||||
|
binaryBody?: Uint8Array;
|
||||||
|
escapeHeaderValues?: boolean;
|
||||||
|
skipContentLengthHeader?: boolean;
|
||||||
|
}) {
|
||||||
|
const frame = new FrameImpl(params);
|
||||||
|
return frame.serialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Escape header values
|
||||||
|
*/
|
||||||
|
private static hdrValueEscape(str: string): string {
|
||||||
|
return str
|
||||||
|
.replace(/\\/g, '\\\\')
|
||||||
|
.replace(/\r/g, '\\r')
|
||||||
|
.replace(/\n/g, '\\n')
|
||||||
|
.replace(/:/g, '\\c');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UnEscape header values
|
||||||
|
*/
|
||||||
|
private static hdrValueUnEscape(str: string): string {
|
||||||
|
return str
|
||||||
|
.replace(/\\r/g, '\r')
|
||||||
|
.replace(/\\n/g, '\n')
|
||||||
|
.replace(/\\c/g, ':')
|
||||||
|
.replace(/\\\\/g, '\\');
|
||||||
|
}
|
||||||
|
}
|
||||||
41
node_modules/@stomp/stompjs/src/i-frame.ts
generated
vendored
Normal file
41
node_modules/@stomp/stompjs/src/i-frame.ts
generated
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It represents a STOMP frame. Many of the callbacks pass an IFrame received from
|
||||||
|
* the STOMP broker. For advanced usage you might need to access [headers]{@link IFrame#headers}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* {@link IMessage} is an extended IFrame.
|
||||||
|
*/
|
||||||
|
export interface IFrame {
|
||||||
|
/**
|
||||||
|
* STOMP Command
|
||||||
|
*/
|
||||||
|
command: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Headers, key value pairs.
|
||||||
|
*/
|
||||||
|
headers: StompHeaders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this frame binary (based on whether body/binaryBody was passed when creating this frame).
|
||||||
|
*/
|
||||||
|
isBinaryBody: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* body of the frame as string
|
||||||
|
*/
|
||||||
|
readonly body: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* body as Uint8Array
|
||||||
|
*/
|
||||||
|
readonly binaryBody: Uint8Array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Alias for {@link IFrame}
|
||||||
|
*/
|
||||||
|
export type Frame = IFrame;
|
||||||
35
node_modules/@stomp/stompjs/src/i-message.ts
generated
vendored
Normal file
35
node_modules/@stomp/stompjs/src/i-message.ts
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import { IFrame } from './i-frame';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instance of Message will be passed to [subscription callback]{@link Client#subscribe}
|
||||||
|
* and [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
* Since it is an extended {@link FrameImpl}, you can access [headers]{@link FrameImpl#headers}
|
||||||
|
* and [body]{@link FrameImpl#body} as properties.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* See [Client#subscribe]{@link Client#subscribe} for example.
|
||||||
|
*/
|
||||||
|
export interface IMessage extends IFrame {
|
||||||
|
/**
|
||||||
|
* When subscribing with manual acknowledgement, call this method on the message to ACK the message.
|
||||||
|
*
|
||||||
|
* See [Client#ack]{@link Client#ack} for an example.
|
||||||
|
*/
|
||||||
|
ack: (headers?: StompHeaders) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When subscribing with manual acknowledgement, call this method on the message to NACK the message.
|
||||||
|
*
|
||||||
|
* See [Client#nack]{@link Client#nack} for an example.
|
||||||
|
*/
|
||||||
|
nack: (headers?: StompHeaders) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Aliased to {@link IMessage}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export type Message = IMessage;
|
||||||
23
node_modules/@stomp/stompjs/src/i-transaction.ts
generated
vendored
Normal file
23
node_modules/@stomp/stompjs/src/i-transaction.ts
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* A Transaction is created by calling [Client#begin]{@link Client#begin}
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* TODO: Example and caveat
|
||||||
|
*/
|
||||||
|
export interface ITransaction {
|
||||||
|
/**
|
||||||
|
* You will need to access this to send, ack, or nack within this transaction.
|
||||||
|
*/
|
||||||
|
id: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commit this transaction. See [Client#commit]{@link Client#commit} for an example.
|
||||||
|
*/
|
||||||
|
commit: () => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abort this transaction. See [Client#abort]{@link Client#abort} for an example.
|
||||||
|
*/
|
||||||
|
abort: () => void;
|
||||||
|
}
|
||||||
15
node_modules/@stomp/stompjs/src/index.ts
generated
vendored
Normal file
15
node_modules/@stomp/stompjs/src/index.ts
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
export * from './client';
|
||||||
|
export * from './frame-impl';
|
||||||
|
export * from './i-frame';
|
||||||
|
export * from './i-message';
|
||||||
|
export * from './parser';
|
||||||
|
export * from './stomp-config';
|
||||||
|
export * from './stomp-headers';
|
||||||
|
export * from './stomp-subscription';
|
||||||
|
export * from './i-transaction';
|
||||||
|
export * from './types';
|
||||||
|
export * from './versions';
|
||||||
|
|
||||||
|
// Compatibility code
|
||||||
|
export * from './compatibility/compat-client';
|
||||||
|
export * from './compatibility/stomp';
|
||||||
255
node_modules/@stomp/stompjs/src/parser.ts
generated
vendored
Normal file
255
node_modules/@stomp/stompjs/src/parser.ts
generated
vendored
Normal file
@@ -0,0 +1,255 @@
|
|||||||
|
import { IRawFrameType } from './types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
const NULL = 0;
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
const LF = 10;
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
const CR = 13;
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
const COLON = 58;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is an evented, rec descent parser.
|
||||||
|
* A stream of Octets can be passed and whenever it recognizes
|
||||||
|
* a complete Frame or an incoming ping it will invoke the registered callbacks.
|
||||||
|
*
|
||||||
|
* All incoming Octets are fed into _onByte function.
|
||||||
|
* Depending on current state the _onByte function keeps changing.
|
||||||
|
* Depending on the state it keeps accumulating into _token and _results.
|
||||||
|
* State is indicated by current value of _onByte, all states are named as _collect.
|
||||||
|
*
|
||||||
|
* STOMP standards https://stomp.github.io/stomp-specification-1.2.html
|
||||||
|
* imply that all lengths are considered in bytes (instead of string lengths).
|
||||||
|
* So, before actual parsing, if the incoming data is String it is converted to Octets.
|
||||||
|
* This allows faithful implementation of the protocol and allows NULL Octets to be present in the body.
|
||||||
|
*
|
||||||
|
* There is no peek function on the incoming data.
|
||||||
|
* When a state change occurs based on an Octet without consuming the Octet,
|
||||||
|
* the Octet, after state change, is fed again (_reinjectByte).
|
||||||
|
* This became possible as the state change can be determined by inspecting just one Octet.
|
||||||
|
*
|
||||||
|
* There are two modes to collect the body, if content-length header is there then it by counting Octets
|
||||||
|
* otherwise it is determined by NULL terminator.
|
||||||
|
*
|
||||||
|
* Following the standards, the command and headers are converted to Strings
|
||||||
|
* and the body is returned as Octets.
|
||||||
|
* Headers are returned as an array and not as Hash - to allow multiple occurrence of an header.
|
||||||
|
*
|
||||||
|
* This parser does not use Regular Expressions as that can only operate on Strings.
|
||||||
|
*
|
||||||
|
* It handles if multiple STOMP frames are given as one chunk, a frame is split into multiple chunks, or
|
||||||
|
* any combination there of. The parser remembers its state (any partial frame) and continues when a new chunk
|
||||||
|
* is pushed.
|
||||||
|
*
|
||||||
|
* Typically the higher level function will convert headers to Hash, handle unescaping of header values
|
||||||
|
* (which is protocol version specific), and convert body to text.
|
||||||
|
*
|
||||||
|
* Check the parser.spec.js to understand cases that this parser is supposed to handle.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export class Parser {
|
||||||
|
private readonly _encoder = new TextEncoder();
|
||||||
|
private readonly _decoder = new TextDecoder();
|
||||||
|
|
||||||
|
private _results: IRawFrameType;
|
||||||
|
|
||||||
|
private _token: number[] = [];
|
||||||
|
private _headerKey: string;
|
||||||
|
private _bodyBytesRemaining: number;
|
||||||
|
|
||||||
|
private _onByte: (byte: number) => void;
|
||||||
|
|
||||||
|
public constructor(
|
||||||
|
public onFrame: (rawFrame: IRawFrameType) => void,
|
||||||
|
public onIncomingPing: () => void
|
||||||
|
) {
|
||||||
|
this._initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
public parseChunk(
|
||||||
|
segment: string | ArrayBuffer,
|
||||||
|
appendMissingNULLonIncoming: boolean = false
|
||||||
|
) {
|
||||||
|
let chunk: Uint8Array;
|
||||||
|
|
||||||
|
if (segment instanceof ArrayBuffer) {
|
||||||
|
chunk = new Uint8Array(segment);
|
||||||
|
} else {
|
||||||
|
chunk = this._encoder.encode(segment);
|
||||||
|
}
|
||||||
|
|
||||||
|
// See https://github.com/stomp-js/stompjs/issues/89
|
||||||
|
// Remove when underlying issue is fixed.
|
||||||
|
//
|
||||||
|
// Send a NULL byte, if the last byte of a Text frame was not NULL.F
|
||||||
|
if (appendMissingNULLonIncoming && chunk[chunk.length - 1] !== 0) {
|
||||||
|
const chunkWithNull = new Uint8Array(chunk.length + 1);
|
||||||
|
chunkWithNull.set(chunk, 0);
|
||||||
|
chunkWithNull[chunk.length] = 0;
|
||||||
|
chunk = chunkWithNull;
|
||||||
|
}
|
||||||
|
|
||||||
|
// tslint:disable-next-line:prefer-for-of
|
||||||
|
for (let i = 0; i < chunk.length; i++) {
|
||||||
|
const byte = chunk[i];
|
||||||
|
this._onByte(byte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The following implements a simple Rec Descent Parser.
|
||||||
|
// The grammar is simple and just one byte tells what should be the next state
|
||||||
|
|
||||||
|
private _collectFrame(byte: number): void {
|
||||||
|
if (byte === NULL) {
|
||||||
|
// Ignore
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === CR) {
|
||||||
|
// Ignore CR
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === LF) {
|
||||||
|
// Incoming Ping
|
||||||
|
this.onIncomingPing();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._onByte = this._collectCommand;
|
||||||
|
this._reinjectByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _collectCommand(byte: number): void {
|
||||||
|
if (byte === CR) {
|
||||||
|
// Ignore CR
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === LF) {
|
||||||
|
this._results.command = this._consumeTokenAsUTF8();
|
||||||
|
this._onByte = this._collectHeaders;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _collectHeaders(byte: number): void {
|
||||||
|
if (byte === CR) {
|
||||||
|
// Ignore CR
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === LF) {
|
||||||
|
this._setupCollectBody();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._onByte = this._collectHeaderKey;
|
||||||
|
this._reinjectByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _reinjectByte(byte: number) {
|
||||||
|
this._onByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _collectHeaderKey(byte: number): void {
|
||||||
|
if (byte === COLON) {
|
||||||
|
this._headerKey = this._consumeTokenAsUTF8();
|
||||||
|
this._onByte = this._collectHeaderValue;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _collectHeaderValue(byte: number): void {
|
||||||
|
if (byte === CR) {
|
||||||
|
// Ignore CR
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (byte === LF) {
|
||||||
|
this._results.headers.push([this._headerKey, this._consumeTokenAsUTF8()]);
|
||||||
|
this._headerKey = undefined;
|
||||||
|
this._onByte = this._collectHeaders;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _setupCollectBody() {
|
||||||
|
const contentLengthHeader = this._results.headers.filter(
|
||||||
|
(header: [string, string]) => {
|
||||||
|
return header[0] === 'content-length';
|
||||||
|
}
|
||||||
|
)[0];
|
||||||
|
|
||||||
|
if (contentLengthHeader) {
|
||||||
|
this._bodyBytesRemaining = parseInt(contentLengthHeader[1], 10);
|
||||||
|
this._onByte = this._collectBodyFixedSize;
|
||||||
|
} else {
|
||||||
|
this._onByte = this._collectBodyNullTerminated;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private _collectBodyNullTerminated(byte: number): void {
|
||||||
|
if (byte === NULL) {
|
||||||
|
this._retrievedBody();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _collectBodyFixedSize(byte: number): void {
|
||||||
|
// It is post decrement, so that we discard the trailing NULL octet
|
||||||
|
if (this._bodyBytesRemaining-- === 0) {
|
||||||
|
this._retrievedBody();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._consumeByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _retrievedBody() {
|
||||||
|
this._results.binaryBody = this._consumeTokenAsRaw();
|
||||||
|
|
||||||
|
this.onFrame(this._results);
|
||||||
|
|
||||||
|
this._initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rec Descent Parser helpers
|
||||||
|
|
||||||
|
private _consumeByte(byte: number) {
|
||||||
|
this._token.push(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _consumeTokenAsUTF8() {
|
||||||
|
return this._decoder.decode(this._consumeTokenAsRaw());
|
||||||
|
}
|
||||||
|
|
||||||
|
private _consumeTokenAsRaw() {
|
||||||
|
const rawResult = new Uint8Array(this._token);
|
||||||
|
this._token = [];
|
||||||
|
return rawResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _initState() {
|
||||||
|
this._results = {
|
||||||
|
command: undefined,
|
||||||
|
headers: [],
|
||||||
|
binaryBody: undefined,
|
||||||
|
};
|
||||||
|
|
||||||
|
this._token = [];
|
||||||
|
this._headerKey = undefined;
|
||||||
|
|
||||||
|
this._onByte = this._collectFrame;
|
||||||
|
}
|
||||||
|
}
|
||||||
152
node_modules/@stomp/stompjs/src/stomp-config.ts
generated
vendored
Normal file
152
node_modules/@stomp/stompjs/src/stomp-config.ts
generated
vendored
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
import {
|
||||||
|
ActivationState,
|
||||||
|
closeEventCallbackType,
|
||||||
|
debugFnType,
|
||||||
|
frameCallbackType,
|
||||||
|
messageCallbackType,
|
||||||
|
wsErrorCallbackType,
|
||||||
|
} from './types';
|
||||||
|
import { Versions } from './versions';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration options for STOMP Client, each key corresponds to
|
||||||
|
* field by the same name in {@link Client}. This can be passed to
|
||||||
|
* the constructor of {@link Client} or to [Client#configure]{@link Client#configure}.
|
||||||
|
*
|
||||||
|
* There used to be a class with the same name in `@stomp/ng2-stompjs`, which has been replaced by
|
||||||
|
* {@link RxStompConfig} and {@link InjectableRxStompConfig}.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class StompConfig {
|
||||||
|
/**
|
||||||
|
* See [Client#brokerURL]{@link Client#brokerURL}.
|
||||||
|
*/
|
||||||
|
public brokerURL?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See See [Client#stompVersions]{@link Client#stompVersions}.
|
||||||
|
*/
|
||||||
|
public stompVersions?: Versions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#webSocketFactory]{@link Client#webSocketFactory}.
|
||||||
|
*/
|
||||||
|
public webSocketFactory?: () => any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#connectionTimeout]{@link Client#connectionTimeout}.
|
||||||
|
*/
|
||||||
|
public connectionTimeout?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#reconnectDelay]{@link Client#reconnectDelay}.
|
||||||
|
*/
|
||||||
|
public reconnectDelay?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#heartbeatIncoming]{@link Client#heartbeatIncoming}.
|
||||||
|
*/
|
||||||
|
public heartbeatIncoming?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#heartbeatOutgoing]{@link Client#heartbeatOutgoing}.
|
||||||
|
*/
|
||||||
|
public heartbeatOutgoing?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#splitLargeFrames]{@link Client#splitLargeFrames}.
|
||||||
|
*/
|
||||||
|
public splitLargeFrames?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#forceBinaryWSFrames]{@link Client#forceBinaryWSFrames}.
|
||||||
|
*/
|
||||||
|
public forceBinaryWSFrames?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#appendMissingNULLonIncoming]{@link Client#appendMissingNULLonIncoming}.
|
||||||
|
*/
|
||||||
|
public appendMissingNULLonIncoming?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#maxWebSocketChunkSize]{@link Client#maxWebSocketChunkSize}.
|
||||||
|
*/
|
||||||
|
public maxWebSocketChunkSize?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#connectHeaders]{@link Client#connectHeaders}.
|
||||||
|
*/
|
||||||
|
public connectHeaders?: StompHeaders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#disconnectHeaders]{@link Client#disconnectHeaders}.
|
||||||
|
*/
|
||||||
|
public disconnectHeaders?: StompHeaders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#onUnhandledMessage]{@link Client#onUnhandledMessage}.
|
||||||
|
*/
|
||||||
|
public onUnhandledMessage?: messageCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#onUnhandledReceipt]{@link Client#onUnhandledReceipt}.
|
||||||
|
*/
|
||||||
|
public onUnhandledReceipt?: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#onUnhandledFrame]{@link Client#onUnhandledFrame}.
|
||||||
|
*/
|
||||||
|
public onUnhandledFrame?: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#beforeConnect]{@link Client#beforeConnect}.
|
||||||
|
*/
|
||||||
|
public beforeConnect?: () => void | Promise<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#onConnect]{@link Client#onConnect}.
|
||||||
|
*/
|
||||||
|
public onConnect?: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#onDisconnect]{@link Client#onDisconnect}.
|
||||||
|
*/
|
||||||
|
public onDisconnect?: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#onStompError]{@link Client#onStompError}.
|
||||||
|
*/
|
||||||
|
public onStompError?: frameCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#onWebSocketClose]{@link Client#onWebSocketClose}.
|
||||||
|
*/
|
||||||
|
public onWebSocketClose?: closeEventCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#onWebSocketError]{@link Client#onWebSocketError}.
|
||||||
|
*/
|
||||||
|
public onWebSocketError?: wsErrorCallbackType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#logRawCommunication]{@link Client#logRawCommunication}.
|
||||||
|
*/
|
||||||
|
public logRawCommunication?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#debug]{@link Client#debug}.
|
||||||
|
*/
|
||||||
|
public debug?: debugFnType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#discardWebsocketOnCommFailure]{@link Client#discardWebsocketOnCommFailure}.
|
||||||
|
*/
|
||||||
|
public discardWebsocketOnCommFailure?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See [Client#onChangeState]{@link Client#onChangeState}.
|
||||||
|
*/
|
||||||
|
public onChangeState?: (state: ActivationState) => void;
|
||||||
|
}
|
||||||
539
node_modules/@stomp/stompjs/src/stomp-handler.ts
generated
vendored
Normal file
539
node_modules/@stomp/stompjs/src/stomp-handler.ts
generated
vendored
Normal file
@@ -0,0 +1,539 @@
|
|||||||
|
import { BYTE } from './byte';
|
||||||
|
import { Client } from './client';
|
||||||
|
import { FrameImpl } from './frame-impl';
|
||||||
|
import { IMessage } from './i-message';
|
||||||
|
import { ITransaction } from './i-transaction';
|
||||||
|
import { Parser } from './parser';
|
||||||
|
import { StompConfig } from './stomp-config';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
import { StompSubscription } from './stomp-subscription';
|
||||||
|
import {
|
||||||
|
closeEventCallbackType,
|
||||||
|
debugFnType,
|
||||||
|
frameCallbackType,
|
||||||
|
IPublishParams,
|
||||||
|
IStompSocket,
|
||||||
|
IStompSocketMessageEvent,
|
||||||
|
messageCallbackType,
|
||||||
|
StompSocketState,
|
||||||
|
wsErrorCallbackType,
|
||||||
|
} from './types';
|
||||||
|
import { Versions } from './versions';
|
||||||
|
import { augmentWebsocket } from './augment-websocket';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The STOMP protocol handler
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export class StompHandler {
|
||||||
|
public debug: debugFnType;
|
||||||
|
|
||||||
|
public stompVersions: Versions;
|
||||||
|
|
||||||
|
public connectHeaders: StompHeaders;
|
||||||
|
|
||||||
|
public disconnectHeaders: StompHeaders;
|
||||||
|
|
||||||
|
public heartbeatIncoming: number;
|
||||||
|
|
||||||
|
public heartbeatOutgoing: number;
|
||||||
|
|
||||||
|
public onUnhandledMessage: messageCallbackType;
|
||||||
|
|
||||||
|
public onUnhandledReceipt: frameCallbackType;
|
||||||
|
|
||||||
|
public onUnhandledFrame: frameCallbackType;
|
||||||
|
|
||||||
|
public onConnect: frameCallbackType;
|
||||||
|
|
||||||
|
public onDisconnect: frameCallbackType;
|
||||||
|
|
||||||
|
public onStompError: frameCallbackType;
|
||||||
|
|
||||||
|
public onWebSocketClose: closeEventCallbackType;
|
||||||
|
|
||||||
|
public onWebSocketError: wsErrorCallbackType;
|
||||||
|
|
||||||
|
public logRawCommunication: boolean;
|
||||||
|
|
||||||
|
public splitLargeFrames: boolean;
|
||||||
|
|
||||||
|
public maxWebSocketChunkSize: number;
|
||||||
|
|
||||||
|
public forceBinaryWSFrames: boolean;
|
||||||
|
|
||||||
|
public appendMissingNULLonIncoming: boolean;
|
||||||
|
|
||||||
|
public discardWebsocketOnCommFailure: boolean;
|
||||||
|
|
||||||
|
get connectedVersion(): string {
|
||||||
|
return this._connectedVersion;
|
||||||
|
}
|
||||||
|
private _connectedVersion: string;
|
||||||
|
|
||||||
|
get connected(): boolean {
|
||||||
|
return this._connected;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _connected: boolean;
|
||||||
|
|
||||||
|
private readonly _subscriptions: { [key: string]: messageCallbackType };
|
||||||
|
private readonly _receiptWatchers: { [key: string]: frameCallbackType };
|
||||||
|
private _partialData: string;
|
||||||
|
private _escapeHeaderValues: boolean;
|
||||||
|
private _counter: number;
|
||||||
|
private _pinger: any;
|
||||||
|
private _ponger: any;
|
||||||
|
private _lastServerActivityTS: number;
|
||||||
|
|
||||||
|
private _onclose: (closeEvent: any) => void;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private _client: Client,
|
||||||
|
public _webSocket: IStompSocket,
|
||||||
|
config: StompConfig = {}
|
||||||
|
) {
|
||||||
|
// used to index subscribers
|
||||||
|
this._counter = 0;
|
||||||
|
|
||||||
|
// subscription callbacks indexed by subscriber's ID
|
||||||
|
this._subscriptions = {};
|
||||||
|
|
||||||
|
// receipt-watchers indexed by receipts-ids
|
||||||
|
this._receiptWatchers = {};
|
||||||
|
|
||||||
|
this._partialData = '';
|
||||||
|
|
||||||
|
this._escapeHeaderValues = false;
|
||||||
|
|
||||||
|
this._lastServerActivityTS = Date.now();
|
||||||
|
|
||||||
|
this.configure(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
public configure(conf: StompConfig): void {
|
||||||
|
// bulk assign all properties to this
|
||||||
|
(Object as any).assign(this, conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
public start(): void {
|
||||||
|
const parser = new Parser(
|
||||||
|
// On Frame
|
||||||
|
rawFrame => {
|
||||||
|
const frame = FrameImpl.fromRawFrame(
|
||||||
|
rawFrame,
|
||||||
|
this._escapeHeaderValues
|
||||||
|
);
|
||||||
|
|
||||||
|
// if this.logRawCommunication is set, the rawChunk is logged at this._webSocket.onmessage
|
||||||
|
if (!this.logRawCommunication) {
|
||||||
|
this.debug(`<<< ${frame}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const serverFrameHandler =
|
||||||
|
this._serverFrameHandlers[frame.command] || this.onUnhandledFrame;
|
||||||
|
serverFrameHandler(frame);
|
||||||
|
},
|
||||||
|
// On Incoming Ping
|
||||||
|
() => {
|
||||||
|
this.debug('<<< PONG');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
this._webSocket.onmessage = (evt: IStompSocketMessageEvent) => {
|
||||||
|
this.debug('Received data');
|
||||||
|
this._lastServerActivityTS = Date.now();
|
||||||
|
|
||||||
|
if (this.logRawCommunication) {
|
||||||
|
const rawChunkAsString =
|
||||||
|
evt.data instanceof ArrayBuffer
|
||||||
|
? new TextDecoder().decode(evt.data)
|
||||||
|
: evt.data;
|
||||||
|
this.debug(`<<< ${rawChunkAsString}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
parser.parseChunk(evt.data, this.appendMissingNULLonIncoming);
|
||||||
|
};
|
||||||
|
|
||||||
|
this._onclose = (closeEvent): void => {
|
||||||
|
this.debug(`Connection closed to ${this._client.brokerURL}`);
|
||||||
|
this._cleanUp();
|
||||||
|
this.onWebSocketClose(closeEvent);
|
||||||
|
};
|
||||||
|
|
||||||
|
this._webSocket.onclose = this._onclose;
|
||||||
|
|
||||||
|
this._webSocket.onerror = (errorEvent): void => {
|
||||||
|
this.onWebSocketError(errorEvent);
|
||||||
|
};
|
||||||
|
|
||||||
|
this._webSocket.onopen = () => {
|
||||||
|
// Clone before updating
|
||||||
|
const connectHeaders = (Object as any).assign({}, this.connectHeaders);
|
||||||
|
|
||||||
|
this.debug('Web Socket Opened...');
|
||||||
|
connectHeaders['accept-version'] = this.stompVersions.supportedVersions();
|
||||||
|
connectHeaders['heart-beat'] = [
|
||||||
|
this.heartbeatOutgoing,
|
||||||
|
this.heartbeatIncoming,
|
||||||
|
].join(',');
|
||||||
|
this._transmit({ command: 'CONNECT', headers: connectHeaders });
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly _serverFrameHandlers: {
|
||||||
|
[key: string]: frameCallbackType;
|
||||||
|
} = {
|
||||||
|
// [CONNECTED Frame](http://stomp.github.com/stomp-specification-1.2.html#CONNECTED_Frame)
|
||||||
|
CONNECTED: frame => {
|
||||||
|
this.debug(`connected to server ${frame.headers.server}`);
|
||||||
|
this._connected = true;
|
||||||
|
this._connectedVersion = frame.headers.version;
|
||||||
|
// STOMP version 1.2 needs header values to be escaped
|
||||||
|
if (this._connectedVersion === Versions.V1_2) {
|
||||||
|
this._escapeHeaderValues = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._setupHeartbeat(frame.headers);
|
||||||
|
this.onConnect(frame);
|
||||||
|
},
|
||||||
|
|
||||||
|
// [MESSAGE Frame](http://stomp.github.com/stomp-specification-1.2.html#MESSAGE)
|
||||||
|
MESSAGE: frame => {
|
||||||
|
// the callback is registered when the client calls
|
||||||
|
// `subscribe()`.
|
||||||
|
// If there is no registered subscription for the received message,
|
||||||
|
// the default `onUnhandledMessage` callback is used that the client can set.
|
||||||
|
// This is useful for subscriptions that are automatically created
|
||||||
|
// on the browser side (e.g. [RabbitMQ's temporary
|
||||||
|
// queues](http://www.rabbitmq.com/stomp.html)).
|
||||||
|
const subscription = frame.headers.subscription;
|
||||||
|
const onReceive =
|
||||||
|
this._subscriptions[subscription] || this.onUnhandledMessage;
|
||||||
|
|
||||||
|
// bless the frame to be a Message
|
||||||
|
const message = frame as IMessage;
|
||||||
|
|
||||||
|
const client = this;
|
||||||
|
const messageId =
|
||||||
|
this._connectedVersion === Versions.V1_2
|
||||||
|
? message.headers.ack
|
||||||
|
: message.headers['message-id'];
|
||||||
|
|
||||||
|
// add `ack()` and `nack()` methods directly to the returned frame
|
||||||
|
// so that a simple call to `message.ack()` can acknowledge the message.
|
||||||
|
message.ack = (headers: StompHeaders = {}): void => {
|
||||||
|
return client.ack(messageId, subscription, headers);
|
||||||
|
};
|
||||||
|
message.nack = (headers: StompHeaders = {}): void => {
|
||||||
|
return client.nack(messageId, subscription, headers);
|
||||||
|
};
|
||||||
|
onReceive(message);
|
||||||
|
},
|
||||||
|
|
||||||
|
// [RECEIPT Frame](http://stomp.github.com/stomp-specification-1.2.html#RECEIPT)
|
||||||
|
RECEIPT: frame => {
|
||||||
|
const callback = this._receiptWatchers[frame.headers['receipt-id']];
|
||||||
|
if (callback) {
|
||||||
|
callback(frame);
|
||||||
|
// Server will acknowledge only once, remove the callback
|
||||||
|
delete this._receiptWatchers[frame.headers['receipt-id']];
|
||||||
|
} else {
|
||||||
|
this.onUnhandledReceipt(frame);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// [ERROR Frame](http://stomp.github.com/stomp-specification-1.2.html#ERROR)
|
||||||
|
ERROR: frame => {
|
||||||
|
this.onStompError(frame);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
private _setupHeartbeat(headers: StompHeaders): void {
|
||||||
|
if (
|
||||||
|
headers.version !== Versions.V1_1 &&
|
||||||
|
headers.version !== Versions.V1_2
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// It is valid for the server to not send this header
|
||||||
|
// https://stomp.github.io/stomp-specification-1.2.html#Heart-beating
|
||||||
|
if (!headers['heart-beat']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// heart-beat header received from the server looks like:
|
||||||
|
//
|
||||||
|
// heart-beat: sx, sy
|
||||||
|
const [serverOutgoing, serverIncoming] = headers['heart-beat']
|
||||||
|
.split(',')
|
||||||
|
.map((v: string) => parseInt(v, 10));
|
||||||
|
|
||||||
|
if (this.heartbeatOutgoing !== 0 && serverIncoming !== 0) {
|
||||||
|
const ttl: number = Math.max(this.heartbeatOutgoing, serverIncoming);
|
||||||
|
this.debug(`send PING every ${ttl}ms`);
|
||||||
|
this._pinger = setInterval(() => {
|
||||||
|
if (this._webSocket.readyState === StompSocketState.OPEN) {
|
||||||
|
this._webSocket.send(BYTE.LF);
|
||||||
|
this.debug('>>> PING');
|
||||||
|
}
|
||||||
|
}, ttl);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.heartbeatIncoming !== 0 && serverOutgoing !== 0) {
|
||||||
|
const ttl: number = Math.max(this.heartbeatIncoming, serverOutgoing);
|
||||||
|
this.debug(`check PONG every ${ttl}ms`);
|
||||||
|
this._ponger = setInterval(() => {
|
||||||
|
const delta = Date.now() - this._lastServerActivityTS;
|
||||||
|
// We wait twice the TTL to be flexible on window's setInterval calls
|
||||||
|
if (delta > ttl * 2) {
|
||||||
|
this.debug(`did not receive server activity for the last ${delta}ms`);
|
||||||
|
this._closeOrDiscardWebsocket();
|
||||||
|
}
|
||||||
|
}, ttl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private _closeOrDiscardWebsocket() {
|
||||||
|
if (this.discardWebsocketOnCommFailure) {
|
||||||
|
this.debug(
|
||||||
|
'Discarding websocket, the underlying socket may linger for a while'
|
||||||
|
);
|
||||||
|
this._discardWebsocket();
|
||||||
|
} else {
|
||||||
|
this.debug('Issuing close on the websocket');
|
||||||
|
this._closeWebsocket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public forceDisconnect() {
|
||||||
|
if (this._webSocket) {
|
||||||
|
if (
|
||||||
|
this._webSocket.readyState === StompSocketState.CONNECTING ||
|
||||||
|
this._webSocket.readyState === StompSocketState.OPEN
|
||||||
|
) {
|
||||||
|
this._closeOrDiscardWebsocket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public _closeWebsocket() {
|
||||||
|
this._webSocket.onmessage = () => {}; // ignore messages
|
||||||
|
this._webSocket.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _discardWebsocket() {
|
||||||
|
if (!this._webSocket.terminate) {
|
||||||
|
augmentWebsocket(this._webSocket, (msg: string) => this.debug(msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
this._webSocket.terminate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _transmit(params: {
|
||||||
|
command: string;
|
||||||
|
headers?: StompHeaders;
|
||||||
|
body?: string;
|
||||||
|
binaryBody?: Uint8Array;
|
||||||
|
skipContentLengthHeader?: boolean;
|
||||||
|
}): void {
|
||||||
|
const { command, headers, body, binaryBody, skipContentLengthHeader } =
|
||||||
|
params;
|
||||||
|
const frame = new FrameImpl({
|
||||||
|
command,
|
||||||
|
headers,
|
||||||
|
body,
|
||||||
|
binaryBody,
|
||||||
|
escapeHeaderValues: this._escapeHeaderValues,
|
||||||
|
skipContentLengthHeader,
|
||||||
|
});
|
||||||
|
|
||||||
|
let rawChunk = frame.serialize();
|
||||||
|
|
||||||
|
if (this.logRawCommunication) {
|
||||||
|
this.debug(`>>> ${rawChunk}`);
|
||||||
|
} else {
|
||||||
|
this.debug(`>>> ${frame}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.forceBinaryWSFrames && typeof rawChunk === 'string') {
|
||||||
|
rawChunk = new TextEncoder().encode(rawChunk);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof rawChunk !== 'string' || !this.splitLargeFrames) {
|
||||||
|
this._webSocket.send(rawChunk);
|
||||||
|
} else {
|
||||||
|
let out = rawChunk as string;
|
||||||
|
while (out.length > 0) {
|
||||||
|
const chunk = out.substring(0, this.maxWebSocketChunkSize);
|
||||||
|
out = out.substring(this.maxWebSocketChunkSize);
|
||||||
|
this._webSocket.send(chunk);
|
||||||
|
this.debug(`chunk sent = ${chunk.length}, remaining = ${out.length}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public dispose(): void {
|
||||||
|
if (this.connected) {
|
||||||
|
try {
|
||||||
|
// clone before updating
|
||||||
|
const disconnectHeaders = (Object as any).assign(
|
||||||
|
{},
|
||||||
|
this.disconnectHeaders
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!disconnectHeaders.receipt) {
|
||||||
|
disconnectHeaders.receipt = `close-${this._counter++}`;
|
||||||
|
}
|
||||||
|
this.watchForReceipt(disconnectHeaders.receipt, frame => {
|
||||||
|
this._closeWebsocket();
|
||||||
|
this._cleanUp();
|
||||||
|
this.onDisconnect(frame);
|
||||||
|
});
|
||||||
|
this._transmit({ command: 'DISCONNECT', headers: disconnectHeaders });
|
||||||
|
} catch (error) {
|
||||||
|
this.debug(`Ignoring error during disconnect ${error}`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (
|
||||||
|
this._webSocket.readyState === StompSocketState.CONNECTING ||
|
||||||
|
this._webSocket.readyState === StompSocketState.OPEN
|
||||||
|
) {
|
||||||
|
this._closeWebsocket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private _cleanUp() {
|
||||||
|
this._connected = false;
|
||||||
|
|
||||||
|
if (this._pinger) {
|
||||||
|
clearInterval(this._pinger);
|
||||||
|
}
|
||||||
|
if (this._ponger) {
|
||||||
|
clearInterval(this._ponger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public publish(params: IPublishParams): void {
|
||||||
|
const { destination, headers, body, binaryBody, skipContentLengthHeader } =
|
||||||
|
params;
|
||||||
|
const hdrs: StompHeaders = (Object as any).assign({ destination }, headers);
|
||||||
|
this._transmit({
|
||||||
|
command: 'SEND',
|
||||||
|
headers: hdrs,
|
||||||
|
body,
|
||||||
|
binaryBody,
|
||||||
|
skipContentLengthHeader,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public watchForReceipt(receiptId: string, callback: frameCallbackType): void {
|
||||||
|
this._receiptWatchers[receiptId] = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
public subscribe(
|
||||||
|
destination: string,
|
||||||
|
callback: messageCallbackType,
|
||||||
|
headers: StompHeaders = {}
|
||||||
|
): StompSubscription {
|
||||||
|
headers = (Object as any).assign({}, headers);
|
||||||
|
|
||||||
|
if (!headers.id) {
|
||||||
|
headers.id = `sub-${this._counter++}`;
|
||||||
|
}
|
||||||
|
headers.destination = destination;
|
||||||
|
this._subscriptions[headers.id] = callback;
|
||||||
|
this._transmit({ command: 'SUBSCRIBE', headers });
|
||||||
|
const client = this;
|
||||||
|
return {
|
||||||
|
id: headers.id,
|
||||||
|
|
||||||
|
unsubscribe(hdrs) {
|
||||||
|
return client.unsubscribe(headers.id, hdrs);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public unsubscribe(id: string, headers: StompHeaders = {}): void {
|
||||||
|
headers = (Object as any).assign({}, headers);
|
||||||
|
|
||||||
|
delete this._subscriptions[id];
|
||||||
|
headers.id = id;
|
||||||
|
this._transmit({ command: 'UNSUBSCRIBE', headers });
|
||||||
|
}
|
||||||
|
|
||||||
|
public begin(transactionId: string): ITransaction {
|
||||||
|
const txId = transactionId || `tx-${this._counter++}`;
|
||||||
|
this._transmit({
|
||||||
|
command: 'BEGIN',
|
||||||
|
headers: {
|
||||||
|
transaction: txId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const client = this;
|
||||||
|
return {
|
||||||
|
id: txId,
|
||||||
|
commit(): void {
|
||||||
|
client.commit(txId);
|
||||||
|
},
|
||||||
|
abort(): void {
|
||||||
|
client.abort(txId);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public commit(transactionId: string): void {
|
||||||
|
this._transmit({
|
||||||
|
command: 'COMMIT',
|
||||||
|
headers: {
|
||||||
|
transaction: transactionId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public abort(transactionId: string): void {
|
||||||
|
this._transmit({
|
||||||
|
command: 'ABORT',
|
||||||
|
headers: {
|
||||||
|
transaction: transactionId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public ack(
|
||||||
|
messageId: string,
|
||||||
|
subscriptionId: string,
|
||||||
|
headers: StompHeaders = {}
|
||||||
|
): void {
|
||||||
|
headers = (Object as any).assign({}, headers);
|
||||||
|
|
||||||
|
if (this._connectedVersion === Versions.V1_2) {
|
||||||
|
headers.id = messageId;
|
||||||
|
} else {
|
||||||
|
headers['message-id'] = messageId;
|
||||||
|
}
|
||||||
|
headers.subscription = subscriptionId;
|
||||||
|
this._transmit({ command: 'ACK', headers });
|
||||||
|
}
|
||||||
|
|
||||||
|
public nack(
|
||||||
|
messageId: string,
|
||||||
|
subscriptionId: string,
|
||||||
|
headers: StompHeaders = {}
|
||||||
|
): void {
|
||||||
|
headers = (Object as any).assign({}, headers);
|
||||||
|
|
||||||
|
if (this._connectedVersion === Versions.V1_2) {
|
||||||
|
headers.id = messageId;
|
||||||
|
} else {
|
||||||
|
headers['message-id'] = messageId;
|
||||||
|
}
|
||||||
|
headers.subscription = subscriptionId;
|
||||||
|
return this._transmit({ command: 'NACK', headers });
|
||||||
|
}
|
||||||
|
}
|
||||||
12
node_modules/@stomp/stompjs/src/stomp-headers.ts
generated
vendored
Normal file
12
node_modules/@stomp/stompjs/src/stomp-headers.ts
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* STOMP headers. Many functions calls will accept headers as parameters.
|
||||||
|
* The headers sent by Broker will be available as [IFrame#headers]{@link IFrame#headers}.
|
||||||
|
*
|
||||||
|
* `key` and `value` must be valid strings.
|
||||||
|
* In addition, `key` must not contain `CR`, `LF`, or `:`.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class StompHeaders {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
18
node_modules/@stomp/stompjs/src/stomp-subscription.ts
generated
vendored
Normal file
18
node_modules/@stomp/stompjs/src/stomp-subscription.ts
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call [Client#subscribe]{@link Client#subscribe} to create a StompSubscription.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class StompSubscription {
|
||||||
|
/**
|
||||||
|
* Id associated with this subscription.
|
||||||
|
*/
|
||||||
|
public id: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unsubscribe. See [Client#unsubscribe]{@link Client#unsubscribe} for an example.
|
||||||
|
*/
|
||||||
|
public unsubscribe: (headers?: StompHeaders) => void;
|
||||||
|
}
|
||||||
156
node_modules/@stomp/stompjs/src/types.ts
generated
vendored
Normal file
156
node_modules/@stomp/stompjs/src/types.ts
generated
vendored
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
import { IFrame } from './i-frame';
|
||||||
|
import { IMessage } from './i-message';
|
||||||
|
import { StompHeaders } from './stomp-headers';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This callback will receive a `string` as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export type debugFnType = (msg: string) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This callback will receive a {@link IMessage} as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export type messageCallbackType = (message: IMessage) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This callback will receive a {@link IFrame} as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export type frameCallbackType = (receipt: IFrame) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This callback will receive a [CloseEvent]{@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}
|
||||||
|
* as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export type closeEventCallbackType<T = any> = (evt: T) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This callback will receive an [Event]{@link https://developer.mozilla.org/en-US/docs/Web/API/Event}
|
||||||
|
* as parameter.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export type wsErrorCallbackType<T = any> = (evt: T) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parameters for [Client#publish]{@link Client#publish}.
|
||||||
|
* Aliased as publishParams as well.
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export interface IPublishParams {
|
||||||
|
/**
|
||||||
|
* destination end point
|
||||||
|
*/
|
||||||
|
destination: string;
|
||||||
|
/**
|
||||||
|
* headers (optional)
|
||||||
|
*/
|
||||||
|
headers?: StompHeaders;
|
||||||
|
/**
|
||||||
|
* body (optional)
|
||||||
|
*/
|
||||||
|
body?: string;
|
||||||
|
/**
|
||||||
|
* binary body (optional)
|
||||||
|
*/
|
||||||
|
binaryBody?: Uint8Array;
|
||||||
|
/**
|
||||||
|
* By default a `content-length` header will be added in the Frame to the broker.
|
||||||
|
* Set it to `true` for the header to be skipped.
|
||||||
|
*/
|
||||||
|
skipContentLengthHeader?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backward compatibility, switch to {@link IPublishParams}.
|
||||||
|
*/
|
||||||
|
export type publishParams = IPublishParams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used in {@link IRawFrameType}
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export type RawHeaderType = [string, string];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The parser yield frames in this structure
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export interface IRawFrameType {
|
||||||
|
command: string;
|
||||||
|
headers: RawHeaderType[];
|
||||||
|
binaryBody: Uint8Array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export interface IStompSocketMessageEvent {
|
||||||
|
data?: string | ArrayBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copied from Websocket interface to avoid dom typelib dependency.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export interface IStompSocket {
|
||||||
|
onclose: ((this: IStompSocket, ev?: any) => any) | null;
|
||||||
|
onerror: ((this: IStompSocket, ev: any) => any) | null;
|
||||||
|
onmessage: ((this: IStompSocket, ev: IStompSocketMessageEvent) => any) | null;
|
||||||
|
onopen: ((this: IStompSocket, ev?: any) => any) | null;
|
||||||
|
terminate?: ((this: IStompSocket) => any) | null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a string that indicates how binary data from the socket is exposed to scripts:
|
||||||
|
* We support only 'arraybuffer'.
|
||||||
|
*/
|
||||||
|
binaryType: 'arraybuffer';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the state of the socket connection. It can have the values of StompSocketState.
|
||||||
|
*/
|
||||||
|
readonly readyState: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the connection.
|
||||||
|
*/
|
||||||
|
close(): void;
|
||||||
|
/**
|
||||||
|
* Transmits data using the connection. data can be a string or an ArrayBuffer.
|
||||||
|
*/
|
||||||
|
send(data: string | ArrayBuffer): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Possible states for the IStompSocket
|
||||||
|
*/
|
||||||
|
export enum StompSocketState {
|
||||||
|
CONNECTING,
|
||||||
|
OPEN,
|
||||||
|
CLOSING,
|
||||||
|
CLOSED,
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Possible activation state
|
||||||
|
*/
|
||||||
|
export enum ActivationState {
|
||||||
|
ACTIVE,
|
||||||
|
DEACTIVATING,
|
||||||
|
INACTIVE,
|
||||||
|
}
|
||||||
50
node_modules/@stomp/stompjs/src/versions.ts
generated
vendored
Normal file
50
node_modules/@stomp/stompjs/src/versions.ts
generated
vendored
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* Supported STOMP versions
|
||||||
|
*
|
||||||
|
* Part of `@stomp/stompjs`.
|
||||||
|
*/
|
||||||
|
export class Versions {
|
||||||
|
/**
|
||||||
|
* Indicates protocol version 1.0
|
||||||
|
*/
|
||||||
|
public static V1_0 = '1.0';
|
||||||
|
/**
|
||||||
|
* Indicates protocol version 1.1
|
||||||
|
*/
|
||||||
|
public static V1_1 = '1.1';
|
||||||
|
/**
|
||||||
|
* Indicates protocol version 1.2
|
||||||
|
*/
|
||||||
|
public static V1_2 = '1.2';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public static default = new Versions([
|
||||||
|
Versions.V1_0,
|
||||||
|
Versions.V1_1,
|
||||||
|
Versions.V1_2,
|
||||||
|
]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes an array of string of versions, typical elements '1.0', '1.1', or '1.2'
|
||||||
|
*
|
||||||
|
* You will an instance if this class if you want to override supported versions to be declared during
|
||||||
|
* STOMP handshake.
|
||||||
|
*/
|
||||||
|
constructor(public versions: string[]) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used as part of CONNECT STOMP Frame
|
||||||
|
*/
|
||||||
|
public supportedVersions() {
|
||||||
|
return this.versions.join(',');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used while creating a WebSocket
|
||||||
|
*/
|
||||||
|
public protocolVersions() {
|
||||||
|
return this.versions.map(x => `v${x.replace('.', '')}.stomp`);
|
||||||
|
}
|
||||||
|
}
|
||||||
21
node_modules/@types/node/LICENSE
generated
vendored
Normal file
21
node_modules/@types/node/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE
|
||||||
15
node_modules/@types/node/README.md
generated
vendored
Normal file
15
node_modules/@types/node/README.md
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Installation
|
||||||
|
> `npm install --save @types/node`
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
This package contains type definitions for node (https://nodejs.org/).
|
||||||
|
|
||||||
|
# Details
|
||||||
|
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
|
||||||
|
|
||||||
|
### Additional Details
|
||||||
|
* Last updated: Thu, 19 Feb 2026 00:56:10 GMT
|
||||||
|
* Dependencies: [undici-types](https://npmjs.com/package/undici-types)
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [Alberto Schiabel](https://github.com/jkomyno), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [David Junger](https://github.com/touffy), [Mohsen Azimi](https://github.com/mohsen1), [Nikita Galkin](https://github.com/galkin), [Sebastian Silbermann](https://github.com/eps1lon), [Wilco Bakker](https://github.com/WilcoBakker), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), [Matteo Collina](https://github.com/mcollina), [Dmitry Semigradsky](https://github.com/Semigradsky), [René](https://github.com/Renegade334), and [Yagiz Nizipli](https://github.com/anonrig).
|
||||||
955
node_modules/@types/node/assert.d.ts
generated
vendored
Normal file
955
node_modules/@types/node/assert.d.ts
generated
vendored
Normal file
@@ -0,0 +1,955 @@
|
|||||||
|
/**
|
||||||
|
* The `node:assert` module provides a set of assertion functions for verifying
|
||||||
|
* invariants.
|
||||||
|
* @see [source](https://github.com/nodejs/node/blob/v25.x/lib/assert.js)
|
||||||
|
*/
|
||||||
|
declare module "node:assert" {
|
||||||
|
import strict = require("node:assert/strict");
|
||||||
|
/**
|
||||||
|
* An alias of {@link assert.ok}.
|
||||||
|
* @since v0.5.9
|
||||||
|
* @param value The input that is checked for being truthy.
|
||||||
|
*/
|
||||||
|
function assert(value: unknown, message?: string | Error): asserts value;
|
||||||
|
const kOptions: unique symbol;
|
||||||
|
namespace assert {
|
||||||
|
type AssertMethodNames =
|
||||||
|
| "deepEqual"
|
||||||
|
| "deepStrictEqual"
|
||||||
|
| "doesNotMatch"
|
||||||
|
| "doesNotReject"
|
||||||
|
| "doesNotThrow"
|
||||||
|
| "equal"
|
||||||
|
| "fail"
|
||||||
|
| "ifError"
|
||||||
|
| "match"
|
||||||
|
| "notDeepEqual"
|
||||||
|
| "notDeepStrictEqual"
|
||||||
|
| "notEqual"
|
||||||
|
| "notStrictEqual"
|
||||||
|
| "ok"
|
||||||
|
| "partialDeepStrictEqual"
|
||||||
|
| "rejects"
|
||||||
|
| "strictEqual"
|
||||||
|
| "throws";
|
||||||
|
interface AssertOptions {
|
||||||
|
/**
|
||||||
|
* If set to `'full'`, shows the full diff in assertion errors.
|
||||||
|
* @default 'simple'
|
||||||
|
*/
|
||||||
|
diff?: "simple" | "full" | undefined;
|
||||||
|
/**
|
||||||
|
* If set to `true`, non-strict methods behave like their
|
||||||
|
* corresponding strict methods.
|
||||||
|
* @default true
|
||||||
|
*/
|
||||||
|
strict?: boolean | undefined;
|
||||||
|
/**
|
||||||
|
* If set to `true`, skips prototype and constructor
|
||||||
|
* comparison in deep equality checks.
|
||||||
|
* @since v24.9.0
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
skipPrototype?: boolean | undefined;
|
||||||
|
}
|
||||||
|
interface Assert extends Pick<typeof assert, AssertMethodNames> {
|
||||||
|
readonly [kOptions]: AssertOptions & { strict: false };
|
||||||
|
}
|
||||||
|
interface AssertStrict extends Pick<typeof strict, AssertMethodNames> {
|
||||||
|
readonly [kOptions]: AssertOptions & { strict: true };
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The `Assert` class allows creating independent assertion instances with custom options.
|
||||||
|
* @since v24.6.0
|
||||||
|
*/
|
||||||
|
var Assert: {
|
||||||
|
/**
|
||||||
|
* Creates a new assertion instance. The `diff` option controls the verbosity of diffs in assertion error messages.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const { Assert } = require('node:assert');
|
||||||
|
* const assertInstance = new Assert({ diff: 'full' });
|
||||||
|
* assertInstance.deepStrictEqual({ a: 1 }, { a: 2 });
|
||||||
|
* // Shows a full diff in the error message.
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* **Important**: When destructuring assertion methods from an `Assert` instance,
|
||||||
|
* the methods lose their connection to the instance's configuration options (such
|
||||||
|
* as `diff`, `strict`, and `skipPrototype` settings).
|
||||||
|
* The destructured methods will fall back to default behavior instead.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const myAssert = new Assert({ diff: 'full' });
|
||||||
|
*
|
||||||
|
* // This works as expected - uses 'full' diff
|
||||||
|
* myAssert.strictEqual({ a: 1 }, { b: { c: 1 } });
|
||||||
|
*
|
||||||
|
* // This loses the 'full' diff setting - falls back to default 'simple' diff
|
||||||
|
* const { strictEqual } = myAssert;
|
||||||
|
* strictEqual({ a: 1 }, { b: { c: 1 } });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* The `skipPrototype` option affects all deep equality methods:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* class Foo {
|
||||||
|
* constructor(a) {
|
||||||
|
* this.a = a;
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* class Bar {
|
||||||
|
* constructor(a) {
|
||||||
|
* this.a = a;
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* const foo = new Foo(1);
|
||||||
|
* const bar = new Bar(1);
|
||||||
|
*
|
||||||
|
* // Default behavior - fails due to different constructors
|
||||||
|
* const assert1 = new Assert();
|
||||||
|
* assert1.deepStrictEqual(foo, bar); // AssertionError
|
||||||
|
*
|
||||||
|
* // Skip prototype comparison - passes if properties are equal
|
||||||
|
* const assert2 = new Assert({ skipPrototype: true });
|
||||||
|
* assert2.deepStrictEqual(foo, bar); // OK
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* When destructured, methods lose access to the instance's `this` context and revert to default assertion behavior
|
||||||
|
* (diff: 'simple', non-strict mode).
|
||||||
|
* To maintain custom options when using destructured methods, avoid
|
||||||
|
* destructuring and call methods directly on the instance.
|
||||||
|
* @since v24.6.0
|
||||||
|
*/
|
||||||
|
new(
|
||||||
|
options?: AssertOptions & { strict?: true | undefined },
|
||||||
|
): AssertStrict;
|
||||||
|
new(
|
||||||
|
options: AssertOptions,
|
||||||
|
): Assert;
|
||||||
|
};
|
||||||
|
interface AssertionErrorOptions {
|
||||||
|
/**
|
||||||
|
* If provided, the error message is set to this value.
|
||||||
|
*/
|
||||||
|
message?: string | undefined;
|
||||||
|
/**
|
||||||
|
* The `actual` property on the error instance.
|
||||||
|
*/
|
||||||
|
actual?: unknown;
|
||||||
|
/**
|
||||||
|
* The `expected` property on the error instance.
|
||||||
|
*/
|
||||||
|
expected?: unknown;
|
||||||
|
/**
|
||||||
|
* The `operator` property on the error instance.
|
||||||
|
*/
|
||||||
|
operator?: string | undefined;
|
||||||
|
/**
|
||||||
|
* If provided, the generated stack trace omits frames before this function.
|
||||||
|
*/
|
||||||
|
stackStartFn?: Function | undefined;
|
||||||
|
/**
|
||||||
|
* If set to `'full'`, shows the full diff in assertion errors.
|
||||||
|
* @default 'simple'
|
||||||
|
*/
|
||||||
|
diff?: "simple" | "full" | undefined;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Indicates the failure of an assertion. All errors thrown by the `node:assert` module will be instances of the `AssertionError` class.
|
||||||
|
*/
|
||||||
|
class AssertionError extends Error {
|
||||||
|
constructor(options: AssertionErrorOptions);
|
||||||
|
/**
|
||||||
|
* Set to the `actual` argument for methods such as {@link assert.strictEqual()}.
|
||||||
|
*/
|
||||||
|
actual: unknown;
|
||||||
|
/**
|
||||||
|
* Set to the `expected` argument for methods such as {@link assert.strictEqual()}.
|
||||||
|
*/
|
||||||
|
expected: unknown;
|
||||||
|
/**
|
||||||
|
* Indicates if the message was auto-generated (`true`) or not.
|
||||||
|
*/
|
||||||
|
generatedMessage: boolean;
|
||||||
|
/**
|
||||||
|
* Value is always `ERR_ASSERTION` to show that the error is an assertion error.
|
||||||
|
*/
|
||||||
|
code: "ERR_ASSERTION";
|
||||||
|
/**
|
||||||
|
* Set to the passed in operator value.
|
||||||
|
*/
|
||||||
|
operator: string;
|
||||||
|
}
|
||||||
|
type AssertPredicate = RegExp | (new() => object) | ((thrown: unknown) => boolean) | object | Error;
|
||||||
|
/**
|
||||||
|
* Throws an `AssertionError` with the provided error message or a default
|
||||||
|
* error message. If the `message` parameter is an instance of an `Error` then
|
||||||
|
* it will be thrown instead of the `AssertionError`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.fail();
|
||||||
|
* // AssertionError [ERR_ASSERTION]: Failed
|
||||||
|
*
|
||||||
|
* assert.fail('boom');
|
||||||
|
* // AssertionError [ERR_ASSERTION]: boom
|
||||||
|
*
|
||||||
|
* assert.fail(new TypeError('need array'));
|
||||||
|
* // TypeError: need array
|
||||||
|
* ```
|
||||||
|
* @since v0.1.21
|
||||||
|
* @param [message='Failed']
|
||||||
|
*/
|
||||||
|
function fail(message?: string | Error): never;
|
||||||
|
/**
|
||||||
|
* Tests if `value` is truthy. It is equivalent to `assert.equal(!!value, true, message)`.
|
||||||
|
*
|
||||||
|
* If `value` is not truthy, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is `undefined`, a default
|
||||||
|
* error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
|
||||||
|
* If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``.
|
||||||
|
*
|
||||||
|
* Be aware that in the `repl` the error message will be different to the one
|
||||||
|
* thrown in a file! See below for further details.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.ok(true);
|
||||||
|
* // OK
|
||||||
|
* assert.ok(1);
|
||||||
|
* // OK
|
||||||
|
*
|
||||||
|
* assert.ok();
|
||||||
|
* // AssertionError: No value argument passed to `assert.ok()`
|
||||||
|
*
|
||||||
|
* assert.ok(false, 'it\'s false');
|
||||||
|
* // AssertionError: it's false
|
||||||
|
*
|
||||||
|
* // In the repl:
|
||||||
|
* assert.ok(typeof 123 === 'string');
|
||||||
|
* // AssertionError: false == true
|
||||||
|
*
|
||||||
|
* // In a file (e.g. test.js):
|
||||||
|
* assert.ok(typeof 123 === 'string');
|
||||||
|
* // AssertionError: The expression evaluated to a falsy value:
|
||||||
|
* //
|
||||||
|
* // assert.ok(typeof 123 === 'string')
|
||||||
|
*
|
||||||
|
* assert.ok(false);
|
||||||
|
* // AssertionError: The expression evaluated to a falsy value:
|
||||||
|
* //
|
||||||
|
* // assert.ok(false)
|
||||||
|
*
|
||||||
|
* assert.ok(0);
|
||||||
|
* // AssertionError: The expression evaluated to a falsy value:
|
||||||
|
* //
|
||||||
|
* // assert.ok(0)
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* // Using `assert()` works the same:
|
||||||
|
* assert(0);
|
||||||
|
* // AssertionError: The expression evaluated to a falsy value:
|
||||||
|
* //
|
||||||
|
* // assert(0)
|
||||||
|
* ```
|
||||||
|
* @since v0.1.21
|
||||||
|
*/
|
||||||
|
function ok(value: unknown, message?: string | Error): asserts value;
|
||||||
|
/**
|
||||||
|
* **Strict assertion mode**
|
||||||
|
*
|
||||||
|
* An alias of {@link strictEqual}.
|
||||||
|
*
|
||||||
|
* **Legacy assertion mode**
|
||||||
|
*
|
||||||
|
* > Stability: 3 - Legacy: Use {@link strictEqual} instead.
|
||||||
|
*
|
||||||
|
* Tests shallow, coercive equality between the `actual` and `expected` parameters
|
||||||
|
* using the [`==` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality). `NaN` is specially handled
|
||||||
|
* and treated as being identical if both sides are `NaN`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert';
|
||||||
|
*
|
||||||
|
* assert.equal(1, 1);
|
||||||
|
* // OK, 1 == 1
|
||||||
|
* assert.equal(1, '1');
|
||||||
|
* // OK, 1 == '1'
|
||||||
|
* assert.equal(NaN, NaN);
|
||||||
|
* // OK
|
||||||
|
*
|
||||||
|
* assert.equal(1, 2);
|
||||||
|
* // AssertionError: 1 == 2
|
||||||
|
* assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
|
||||||
|
* // AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If the values are not equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
|
||||||
|
* error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
|
||||||
|
* @since v0.1.21
|
||||||
|
*/
|
||||||
|
function equal(actual: unknown, expected: unknown, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* **Strict assertion mode**
|
||||||
|
*
|
||||||
|
* An alias of {@link notStrictEqual}.
|
||||||
|
*
|
||||||
|
* **Legacy assertion mode**
|
||||||
|
*
|
||||||
|
* > Stability: 3 - Legacy: Use {@link notStrictEqual} instead.
|
||||||
|
*
|
||||||
|
* Tests shallow, coercive inequality with the [`!=` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality). `NaN` is
|
||||||
|
* specially handled and treated as being identical if both sides are `NaN`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert';
|
||||||
|
*
|
||||||
|
* assert.notEqual(1, 2);
|
||||||
|
* // OK
|
||||||
|
*
|
||||||
|
* assert.notEqual(1, 1);
|
||||||
|
* // AssertionError: 1 != 1
|
||||||
|
*
|
||||||
|
* assert.notEqual(1, '1');
|
||||||
|
* // AssertionError: 1 != '1'
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If the values are equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default error
|
||||||
|
* message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
|
||||||
|
* @since v0.1.21
|
||||||
|
*/
|
||||||
|
function notEqual(actual: unknown, expected: unknown, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* **Strict assertion mode**
|
||||||
|
*
|
||||||
|
* An alias of {@link deepStrictEqual}.
|
||||||
|
*
|
||||||
|
* **Legacy assertion mode**
|
||||||
|
*
|
||||||
|
* > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead.
|
||||||
|
*
|
||||||
|
* Tests for deep equality between the `actual` and `expected` parameters. Consider
|
||||||
|
* using {@link deepStrictEqual} instead. {@link deepEqual} can have
|
||||||
|
* surprising results.
|
||||||
|
*
|
||||||
|
* _Deep equality_ means that the enumerable "own" properties of child objects
|
||||||
|
* are also recursively evaluated by the following rules.
|
||||||
|
* @since v0.1.21
|
||||||
|
*/
|
||||||
|
function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* **Strict assertion mode**
|
||||||
|
*
|
||||||
|
* An alias of {@link notDeepStrictEqual}.
|
||||||
|
*
|
||||||
|
* **Legacy assertion mode**
|
||||||
|
*
|
||||||
|
* > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead.
|
||||||
|
*
|
||||||
|
* Tests for any deep inequality. Opposite of {@link deepEqual}.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert';
|
||||||
|
*
|
||||||
|
* const obj1 = {
|
||||||
|
* a: {
|
||||||
|
* b: 1,
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* const obj2 = {
|
||||||
|
* a: {
|
||||||
|
* b: 2,
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* const obj3 = {
|
||||||
|
* a: {
|
||||||
|
* b: 1,
|
||||||
|
* },
|
||||||
|
* };
|
||||||
|
* const obj4 = { __proto__: obj1 };
|
||||||
|
*
|
||||||
|
* assert.notDeepEqual(obj1, obj1);
|
||||||
|
* // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
|
||||||
|
*
|
||||||
|
* assert.notDeepEqual(obj1, obj2);
|
||||||
|
* // OK
|
||||||
|
*
|
||||||
|
* assert.notDeepEqual(obj1, obj3);
|
||||||
|
* // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
|
||||||
|
*
|
||||||
|
* assert.notDeepEqual(obj1, obj4);
|
||||||
|
* // OK
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If the values are deeply equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
|
||||||
|
* error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
|
||||||
|
* instead of the `AssertionError`.
|
||||||
|
* @since v0.1.21
|
||||||
|
*/
|
||||||
|
function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Tests strict equality between the `actual` and `expected` parameters as
|
||||||
|
* determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.strictEqual(1, 2);
|
||||||
|
* // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
|
||||||
|
* //
|
||||||
|
* // 1 !== 2
|
||||||
|
*
|
||||||
|
* assert.strictEqual(1, 1);
|
||||||
|
* // OK
|
||||||
|
*
|
||||||
|
* assert.strictEqual('Hello foobar', 'Hello World!');
|
||||||
|
* // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
|
||||||
|
* // + actual - expected
|
||||||
|
* //
|
||||||
|
* // + 'Hello foobar'
|
||||||
|
* // - 'Hello World!'
|
||||||
|
* // ^
|
||||||
|
*
|
||||||
|
* const apples = 1;
|
||||||
|
* const oranges = 2;
|
||||||
|
* assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`);
|
||||||
|
* // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2
|
||||||
|
*
|
||||||
|
* assert.strictEqual(1, '1', new TypeError('Inputs are not identical'));
|
||||||
|
* // TypeError: Inputs are not identical
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If the values are not strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
|
||||||
|
* default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
|
||||||
|
* instead of the `AssertionError`.
|
||||||
|
* @since v0.1.21
|
||||||
|
*/
|
||||||
|
function strictEqual<T>(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
|
||||||
|
/**
|
||||||
|
* Tests strict inequality between the `actual` and `expected` parameters as
|
||||||
|
* determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.notStrictEqual(1, 2);
|
||||||
|
* // OK
|
||||||
|
*
|
||||||
|
* assert.notStrictEqual(1, 1);
|
||||||
|
* // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to:
|
||||||
|
* //
|
||||||
|
* // 1
|
||||||
|
*
|
||||||
|
* assert.notStrictEqual(1, '1');
|
||||||
|
* // OK
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If the values are strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
|
||||||
|
* default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
|
||||||
|
* instead of the `AssertionError`.
|
||||||
|
* @since v0.1.21
|
||||||
|
*/
|
||||||
|
function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Tests for deep equality between the `actual` and `expected` parameters.
|
||||||
|
* "Deep" equality means that the enumerable "own" properties of child objects
|
||||||
|
* are recursively evaluated also by the following rules.
|
||||||
|
* @since v1.2.0
|
||||||
|
*/
|
||||||
|
function deepStrictEqual<T>(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
|
||||||
|
/**
|
||||||
|
* Tests for deep strict inequality. Opposite of {@link deepStrictEqual}.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.notDeepStrictEqual({ a: 1 }, { a: '1' });
|
||||||
|
* // OK
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If the values are deeply and strictly equal, an `AssertionError` is thrown
|
||||||
|
* with a `message` property set equal to the value of the `message` parameter. If
|
||||||
|
* the `message` parameter is undefined, a default error message is assigned. If
|
||||||
|
* the `message` parameter is an instance of an `Error` then it will be thrown
|
||||||
|
* instead of the `AssertionError`.
|
||||||
|
* @since v1.2.0
|
||||||
|
*/
|
||||||
|
function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Expects the function `fn` to throw an error.
|
||||||
|
*
|
||||||
|
* If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
|
||||||
|
* [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
|
||||||
|
* a validation object where each property will be tested for strict deep equality,
|
||||||
|
* or an instance of error where each property will be tested for strict deep
|
||||||
|
* equality including the non-enumerable `message` and `name` properties. When
|
||||||
|
* using an object, it is also possible to use a regular expression, when
|
||||||
|
* validating against a string property. See below for examples.
|
||||||
|
*
|
||||||
|
* If specified, `message` will be appended to the message provided by the `AssertionError` if the `fn` call fails to throw or in case the error validation
|
||||||
|
* fails.
|
||||||
|
*
|
||||||
|
* Custom validation object/error instance:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* const err = new TypeError('Wrong value');
|
||||||
|
* err.code = 404;
|
||||||
|
* err.foo = 'bar';
|
||||||
|
* err.info = {
|
||||||
|
* nested: true,
|
||||||
|
* baz: 'text',
|
||||||
|
* };
|
||||||
|
* err.reg = /abc/i;
|
||||||
|
*
|
||||||
|
* assert.throws(
|
||||||
|
* () => {
|
||||||
|
* throw err;
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* name: 'TypeError',
|
||||||
|
* message: 'Wrong value',
|
||||||
|
* info: {
|
||||||
|
* nested: true,
|
||||||
|
* baz: 'text',
|
||||||
|
* },
|
||||||
|
* // Only properties on the validation object will be tested for.
|
||||||
|
* // Using nested objects requires all properties to be present. Otherwise
|
||||||
|
* // the validation is going to fail.
|
||||||
|
* },
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* // Using regular expressions to validate error properties:
|
||||||
|
* assert.throws(
|
||||||
|
* () => {
|
||||||
|
* throw err;
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* // The `name` and `message` properties are strings and using regular
|
||||||
|
* // expressions on those will match against the string. If they fail, an
|
||||||
|
* // error is thrown.
|
||||||
|
* name: /^TypeError$/,
|
||||||
|
* message: /Wrong/,
|
||||||
|
* foo: 'bar',
|
||||||
|
* info: {
|
||||||
|
* nested: true,
|
||||||
|
* // It is not possible to use regular expressions for nested properties!
|
||||||
|
* baz: 'text',
|
||||||
|
* },
|
||||||
|
* // The `reg` property contains a regular expression and only if the
|
||||||
|
* // validation object contains an identical regular expression, it is going
|
||||||
|
* // to pass.
|
||||||
|
* reg: /abc/i,
|
||||||
|
* },
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* // Fails due to the different `message` and `name` properties:
|
||||||
|
* assert.throws(
|
||||||
|
* () => {
|
||||||
|
* const otherErr = new Error('Not found');
|
||||||
|
* // Copy all enumerable properties from `err` to `otherErr`.
|
||||||
|
* for (const [key, value] of Object.entries(err)) {
|
||||||
|
* otherErr[key] = value;
|
||||||
|
* }
|
||||||
|
* throw otherErr;
|
||||||
|
* },
|
||||||
|
* // The error's `message` and `name` properties will also be checked when using
|
||||||
|
* // an error as validation object.
|
||||||
|
* err,
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Validate instanceof using constructor:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.throws(
|
||||||
|
* () => {
|
||||||
|
* throw new Error('Wrong value');
|
||||||
|
* },
|
||||||
|
* Error,
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions):
|
||||||
|
*
|
||||||
|
* Using a regular expression runs `.toString` on the error object, and will
|
||||||
|
* therefore also include the error name.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.throws(
|
||||||
|
* () => {
|
||||||
|
* throw new Error('Wrong value');
|
||||||
|
* },
|
||||||
|
* /^Error: Wrong value$/,
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Custom error validation:
|
||||||
|
*
|
||||||
|
* The function must return `true` to indicate all internal validations passed.
|
||||||
|
* It will otherwise fail with an `AssertionError`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.throws(
|
||||||
|
* () => {
|
||||||
|
* throw new Error('Wrong value');
|
||||||
|
* },
|
||||||
|
* (err) => {
|
||||||
|
* assert(err instanceof Error);
|
||||||
|
* assert(/value/.test(err));
|
||||||
|
* // Avoid returning anything from validation functions besides `true`.
|
||||||
|
* // Otherwise, it's not clear what part of the validation failed. Instead,
|
||||||
|
* // throw an error about the specific validation that failed (as done in this
|
||||||
|
* // example) and add as much helpful debugging information to that error as
|
||||||
|
* // possible.
|
||||||
|
* return true;
|
||||||
|
* },
|
||||||
|
* 'unexpected error',
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* `error` cannot be a string. If a string is provided as the second
|
||||||
|
* argument, then `error` is assumed to be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Using the same
|
||||||
|
* message as the thrown error message is going to result in an `ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using
|
||||||
|
* a string as the second argument gets considered:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* function throwingFirst() {
|
||||||
|
* throw new Error('First');
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* function throwingSecond() {
|
||||||
|
* throw new Error('Second');
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* function notThrowing() {}
|
||||||
|
*
|
||||||
|
* // The second argument is a string and the input function threw an Error.
|
||||||
|
* // The first case will not throw as it does not match for the error message
|
||||||
|
* // thrown by the input function!
|
||||||
|
* assert.throws(throwingFirst, 'Second');
|
||||||
|
* // In the next example the message has no benefit over the message from the
|
||||||
|
* // error and since it is not clear if the user intended to actually match
|
||||||
|
* // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error.
|
||||||
|
* assert.throws(throwingSecond, 'Second');
|
||||||
|
* // TypeError [ERR_AMBIGUOUS_ARGUMENT]
|
||||||
|
*
|
||||||
|
* // The string is only used (as message) in case the function does not throw:
|
||||||
|
* assert.throws(notThrowing, 'Second');
|
||||||
|
* // AssertionError [ERR_ASSERTION]: Missing expected exception: Second
|
||||||
|
*
|
||||||
|
* // If it was intended to match for the error message do this instead:
|
||||||
|
* // It does not throw because the error messages match.
|
||||||
|
* assert.throws(throwingSecond, /Second$/);
|
||||||
|
*
|
||||||
|
* // If the error message does not match, an AssertionError is thrown.
|
||||||
|
* assert.throws(throwingFirst, /Second$/);
|
||||||
|
* // AssertionError [ERR_ASSERTION]
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Due to the confusing error-prone notation, avoid a string as the second
|
||||||
|
* argument.
|
||||||
|
* @since v0.1.21
|
||||||
|
*/
|
||||||
|
function throws(block: () => unknown, message?: string | Error): void;
|
||||||
|
function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Asserts that the function `fn` does not throw an error.
|
||||||
|
*
|
||||||
|
* Using `assert.doesNotThrow()` is actually not useful because there
|
||||||
|
* is no benefit in catching an error and then rethrowing it. Instead, consider
|
||||||
|
* adding a comment next to the specific code path that should not throw and keep
|
||||||
|
* error messages as expressive as possible.
|
||||||
|
*
|
||||||
|
* When `assert.doesNotThrow()` is called, it will immediately call the `fn` function.
|
||||||
|
*
|
||||||
|
* If an error is thrown and it is the same type as that specified by the `error` parameter, then an `AssertionError` is thrown. If the error is of a
|
||||||
|
* different type, or if the `error` parameter is undefined, the error is
|
||||||
|
* propagated back to the caller.
|
||||||
|
*
|
||||||
|
* If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
|
||||||
|
* [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
|
||||||
|
* function. See {@link throws} for more details.
|
||||||
|
*
|
||||||
|
* The following, for instance, will throw the `TypeError` because there is no
|
||||||
|
* matching error type in the assertion:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.doesNotThrow(
|
||||||
|
* () => {
|
||||||
|
* throw new TypeError('Wrong value');
|
||||||
|
* },
|
||||||
|
* SyntaxError,
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* However, the following will result in an `AssertionError` with the message
|
||||||
|
* 'Got unwanted exception...':
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.doesNotThrow(
|
||||||
|
* () => {
|
||||||
|
* throw new TypeError('Wrong value');
|
||||||
|
* },
|
||||||
|
* TypeError,
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If an `AssertionError` is thrown and a value is provided for the `message` parameter, the value of `message` will be appended to the `AssertionError` message:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.doesNotThrow(
|
||||||
|
* () => {
|
||||||
|
* throw new TypeError('Wrong value');
|
||||||
|
* },
|
||||||
|
* /Wrong value/,
|
||||||
|
* 'Whoops',
|
||||||
|
* );
|
||||||
|
* // Throws: AssertionError: Got unwanted exception: Whoops
|
||||||
|
* ```
|
||||||
|
* @since v0.1.21
|
||||||
|
*/
|
||||||
|
function doesNotThrow(block: () => unknown, message?: string | Error): void;
|
||||||
|
function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Throws `value` if `value` is not `undefined` or `null`. This is useful when
|
||||||
|
* testing the `error` argument in callbacks. The stack trace contains all frames
|
||||||
|
* from the error passed to `ifError()` including the potential new frames for `ifError()` itself.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.ifError(null);
|
||||||
|
* // OK
|
||||||
|
* assert.ifError(0);
|
||||||
|
* // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0
|
||||||
|
* assert.ifError('error');
|
||||||
|
* // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error'
|
||||||
|
* assert.ifError(new Error());
|
||||||
|
* // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error
|
||||||
|
*
|
||||||
|
* // Create some random error frames.
|
||||||
|
* let err;
|
||||||
|
* (function errorFrame() {
|
||||||
|
* err = new Error('test error');
|
||||||
|
* })();
|
||||||
|
*
|
||||||
|
* (function ifErrorFrame() {
|
||||||
|
* assert.ifError(err);
|
||||||
|
* })();
|
||||||
|
* // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error
|
||||||
|
* // at ifErrorFrame
|
||||||
|
* // at errorFrame
|
||||||
|
* ```
|
||||||
|
* @since v0.1.97
|
||||||
|
*/
|
||||||
|
function ifError(value: unknown): asserts value is null | undefined;
|
||||||
|
/**
|
||||||
|
* Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
|
||||||
|
* calls the function and awaits the returned promise to complete. It will then
|
||||||
|
* check that the promise is rejected.
|
||||||
|
*
|
||||||
|
* If `asyncFn` is a function and it throws an error synchronously, `assert.rejects()` will return a rejected `Promise` with that error. If the
|
||||||
|
* function does not return a promise, `assert.rejects()` will return a rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v25.x/api/errors.html#err_invalid_return_value)
|
||||||
|
* error. In both cases the error handler is skipped.
|
||||||
|
*
|
||||||
|
* Besides the async nature to await the completion behaves identically to {@link throws}.
|
||||||
|
*
|
||||||
|
* If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
|
||||||
|
* [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
|
||||||
|
* an object where each property will be tested for, or an instance of error where
|
||||||
|
* each property will be tested for including the non-enumerable `message` and `name` properties.
|
||||||
|
*
|
||||||
|
* If specified, `message` will be the message provided by the `{@link AssertionError}` if the `asyncFn` fails to reject.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* await assert.rejects(
|
||||||
|
* async () => {
|
||||||
|
* throw new TypeError('Wrong value');
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* name: 'TypeError',
|
||||||
|
* message: 'Wrong value',
|
||||||
|
* },
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* await assert.rejects(
|
||||||
|
* async () => {
|
||||||
|
* throw new TypeError('Wrong value');
|
||||||
|
* },
|
||||||
|
* (err) => {
|
||||||
|
* assert.strictEqual(err.name, 'TypeError');
|
||||||
|
* assert.strictEqual(err.message, 'Wrong value');
|
||||||
|
* return true;
|
||||||
|
* },
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.rejects(
|
||||||
|
* Promise.reject(new Error('Wrong value')),
|
||||||
|
* Error,
|
||||||
|
* ).then(() => {
|
||||||
|
* // ...
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* `error` cannot be a string. If a string is provided as the second argument, then `error` is assumed to
|
||||||
|
* be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Please read the
|
||||||
|
* example in {@link throws} carefully if using a string as the second argument gets considered.
|
||||||
|
* @since v10.0.0
|
||||||
|
*/
|
||||||
|
function rejects(block: (() => Promise<unknown>) | Promise<unknown>, message?: string | Error): Promise<void>;
|
||||||
|
function rejects(
|
||||||
|
block: (() => Promise<unknown>) | Promise<unknown>,
|
||||||
|
error: AssertPredicate,
|
||||||
|
message?: string | Error,
|
||||||
|
): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
|
||||||
|
* calls the function and awaits the returned promise to complete. It will then
|
||||||
|
* check that the promise is not rejected.
|
||||||
|
*
|
||||||
|
* If `asyncFn` is a function and it throws an error synchronously, `assert.doesNotReject()` will return a rejected `Promise` with that error. If
|
||||||
|
* the function does not return a promise, `assert.doesNotReject()` will return a
|
||||||
|
* rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v25.x/api/errors.html#err_invalid_return_value) error. In both cases
|
||||||
|
* the error handler is skipped.
|
||||||
|
*
|
||||||
|
* Using `assert.doesNotReject()` is actually not useful because there is little
|
||||||
|
* benefit in catching a rejection and then rejecting it again. Instead, consider
|
||||||
|
* adding a comment next to the specific code path that should not reject and keep
|
||||||
|
* error messages as expressive as possible.
|
||||||
|
*
|
||||||
|
* If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
|
||||||
|
* [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
|
||||||
|
* function. See {@link throws} for more details.
|
||||||
|
*
|
||||||
|
* Besides the async nature to await the completion behaves identically to {@link doesNotThrow}.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* await assert.doesNotReject(
|
||||||
|
* async () => {
|
||||||
|
* throw new TypeError('Wrong value');
|
||||||
|
* },
|
||||||
|
* SyntaxError,
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.doesNotReject(Promise.reject(new TypeError('Wrong value')))
|
||||||
|
* .then(() => {
|
||||||
|
* // ...
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
* @since v10.0.0
|
||||||
|
*/
|
||||||
|
function doesNotReject(
|
||||||
|
block: (() => Promise<unknown>) | Promise<unknown>,
|
||||||
|
message?: string | Error,
|
||||||
|
): Promise<void>;
|
||||||
|
function doesNotReject(
|
||||||
|
block: (() => Promise<unknown>) | Promise<unknown>,
|
||||||
|
error: AssertPredicate,
|
||||||
|
message?: string | Error,
|
||||||
|
): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Expects the `string` input to match the regular expression.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.match('I will fail', /pass/);
|
||||||
|
* // AssertionError [ERR_ASSERTION]: The input did not match the regular ...
|
||||||
|
*
|
||||||
|
* assert.match(123, /pass/);
|
||||||
|
* // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
|
||||||
|
*
|
||||||
|
* assert.match('I will pass', /pass/);
|
||||||
|
* // OK
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If the values do not match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal
|
||||||
|
* to the value of the `message` parameter. If the `message` parameter is
|
||||||
|
* undefined, a default error message is assigned. If the `message` parameter is an
|
||||||
|
* instance of an [Error](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`.
|
||||||
|
* @since v13.6.0, v12.16.0
|
||||||
|
*/
|
||||||
|
function match(value: string, regExp: RegExp, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Expects the `string` input not to match the regular expression.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
*
|
||||||
|
* assert.doesNotMatch('I will fail', /fail/);
|
||||||
|
* // AssertionError [ERR_ASSERTION]: The input was expected to not match the ...
|
||||||
|
*
|
||||||
|
* assert.doesNotMatch(123, /pass/);
|
||||||
|
* // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
|
||||||
|
*
|
||||||
|
* assert.doesNotMatch('I will pass', /different/);
|
||||||
|
* // OK
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If the values do match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal
|
||||||
|
* to the value of the `message` parameter. If the `message` parameter is
|
||||||
|
* undefined, a default error message is assigned. If the `message` parameter is an
|
||||||
|
* instance of an [Error](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`.
|
||||||
|
* @since v13.6.0, v12.16.0
|
||||||
|
*/
|
||||||
|
function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void;
|
||||||
|
/**
|
||||||
|
* Tests for partial deep equality between the `actual` and `expected` parameters.
|
||||||
|
* "Deep" equality means that the enumerable "own" properties of child objects
|
||||||
|
* are recursively evaluated also by the following rules. "Partial" equality means
|
||||||
|
* that only properties that exist on the `expected` parameter are going to be
|
||||||
|
* compared.
|
||||||
|
*
|
||||||
|
* This method always passes the same test cases as `assert.deepStrictEqual()`,
|
||||||
|
* behaving as a super set of it.
|
||||||
|
* @since v22.13.0
|
||||||
|
*/
|
||||||
|
function partialDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
|
||||||
|
}
|
||||||
|
namespace assert {
|
||||||
|
export { strict };
|
||||||
|
}
|
||||||
|
export = assert;
|
||||||
|
}
|
||||||
|
declare module "assert" {
|
||||||
|
import assert = require("node:assert");
|
||||||
|
export = assert;
|
||||||
|
}
|
||||||
105
node_modules/@types/node/assert/strict.d.ts
generated
vendored
Normal file
105
node_modules/@types/node/assert/strict.d.ts
generated
vendored
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
/**
|
||||||
|
* In strict assertion mode, non-strict methods behave like their corresponding
|
||||||
|
* strict methods. For example, `assert.deepEqual()` will behave like
|
||||||
|
* `assert.deepStrictEqual()`.
|
||||||
|
*
|
||||||
|
* In strict assertion mode, error messages for objects display a diff. In legacy
|
||||||
|
* assertion mode, error messages for objects display the objects, often truncated.
|
||||||
|
*
|
||||||
|
* To use strict assertion mode:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { strict as assert } from 'node:assert';
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import assert from 'node:assert/strict';
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Example error diff:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { strict as assert } from 'node:assert';
|
||||||
|
*
|
||||||
|
* assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]);
|
||||||
|
* // AssertionError: Expected inputs to be strictly deep-equal:
|
||||||
|
* // + actual - expected ... Lines skipped
|
||||||
|
* //
|
||||||
|
* // [
|
||||||
|
* // [
|
||||||
|
* // ...
|
||||||
|
* // 2,
|
||||||
|
* // + 3
|
||||||
|
* // - '3'
|
||||||
|
* // ],
|
||||||
|
* // ...
|
||||||
|
* // 5
|
||||||
|
* // ]
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To deactivate the colors, use the `NO_COLOR` or `NODE_DISABLE_COLORS`
|
||||||
|
* environment variables. This will also deactivate the colors in the REPL. For
|
||||||
|
* more on color support in terminal environments, read the tty
|
||||||
|
* [`getColorDepth()`](https://nodejs.org/docs/latest-v25.x/api/tty.html#writestreamgetcolordepthenv) documentation.
|
||||||
|
* @since v15.0.0
|
||||||
|
* @see [source](https://github.com/nodejs/node/blob/v25.x/lib/assert/strict.js)
|
||||||
|
*/
|
||||||
|
declare module "node:assert/strict" {
|
||||||
|
import {
|
||||||
|
Assert,
|
||||||
|
AssertionError,
|
||||||
|
AssertionErrorOptions,
|
||||||
|
AssertOptions,
|
||||||
|
AssertPredicate,
|
||||||
|
AssertStrict,
|
||||||
|
deepStrictEqual,
|
||||||
|
doesNotMatch,
|
||||||
|
doesNotReject,
|
||||||
|
doesNotThrow,
|
||||||
|
fail,
|
||||||
|
ifError,
|
||||||
|
match,
|
||||||
|
notDeepStrictEqual,
|
||||||
|
notStrictEqual,
|
||||||
|
ok,
|
||||||
|
partialDeepStrictEqual,
|
||||||
|
rejects,
|
||||||
|
strictEqual,
|
||||||
|
throws,
|
||||||
|
} from "node:assert";
|
||||||
|
function strict(value: unknown, message?: string | Error): asserts value;
|
||||||
|
namespace strict {
|
||||||
|
export {
|
||||||
|
Assert,
|
||||||
|
AssertionError,
|
||||||
|
AssertionErrorOptions,
|
||||||
|
AssertOptions,
|
||||||
|
AssertPredicate,
|
||||||
|
AssertStrict,
|
||||||
|
deepStrictEqual,
|
||||||
|
deepStrictEqual as deepEqual,
|
||||||
|
doesNotMatch,
|
||||||
|
doesNotReject,
|
||||||
|
doesNotThrow,
|
||||||
|
fail,
|
||||||
|
ifError,
|
||||||
|
match,
|
||||||
|
notDeepStrictEqual,
|
||||||
|
notDeepStrictEqual as notDeepEqual,
|
||||||
|
notStrictEqual,
|
||||||
|
notStrictEqual as notEqual,
|
||||||
|
ok,
|
||||||
|
partialDeepStrictEqual,
|
||||||
|
rejects,
|
||||||
|
strict,
|
||||||
|
strictEqual,
|
||||||
|
strictEqual as equal,
|
||||||
|
throws,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export = strict;
|
||||||
|
}
|
||||||
|
declare module "assert/strict" {
|
||||||
|
import strict = require("node:assert/strict");
|
||||||
|
export = strict;
|
||||||
|
}
|
||||||
623
node_modules/@types/node/async_hooks.d.ts
generated
vendored
Normal file
623
node_modules/@types/node/async_hooks.d.ts
generated
vendored
Normal file
@@ -0,0 +1,623 @@
|
|||||||
|
/**
|
||||||
|
* We strongly discourage the use of the `async_hooks` API.
|
||||||
|
* Other APIs that can cover most of its use cases include:
|
||||||
|
*
|
||||||
|
* * [`AsyncLocalStorage`](https://nodejs.org/docs/latest-v25.x/api/async_context.html#class-asynclocalstorage) tracks async context
|
||||||
|
* * [`process.getActiveResourcesInfo()`](https://nodejs.org/docs/latest-v25.x/api/process.html#processgetactiveresourcesinfo) tracks active resources
|
||||||
|
*
|
||||||
|
* The `node:async_hooks` module provides an API to track asynchronous resources.
|
||||||
|
* It can be accessed using:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import async_hooks from 'node:async_hooks';
|
||||||
|
* ```
|
||||||
|
* @experimental
|
||||||
|
* @see [source](https://github.com/nodejs/node/blob/v25.x/lib/async_hooks.js)
|
||||||
|
*/
|
||||||
|
declare module "node:async_hooks" {
|
||||||
|
/**
|
||||||
|
* ```js
|
||||||
|
* import { executionAsyncId } from 'node:async_hooks';
|
||||||
|
* import fs from 'node:fs';
|
||||||
|
*
|
||||||
|
* console.log(executionAsyncId()); // 1 - bootstrap
|
||||||
|
* const path = '.';
|
||||||
|
* fs.open(path, 'r', (err, fd) => {
|
||||||
|
* console.log(executionAsyncId()); // 6 - open()
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* The ID returned from `executionAsyncId()` is related to execution timing, not
|
||||||
|
* causality (which is covered by `triggerAsyncId()`):
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const server = net.createServer((conn) => {
|
||||||
|
* // Returns the ID of the server, not of the new connection, because the
|
||||||
|
* // callback runs in the execution scope of the server's MakeCallback().
|
||||||
|
* async_hooks.executionAsyncId();
|
||||||
|
*
|
||||||
|
* }).listen(port, () => {
|
||||||
|
* // Returns the ID of a TickObject (process.nextTick()) because all
|
||||||
|
* // callbacks passed to .listen() are wrapped in a nextTick().
|
||||||
|
* async_hooks.executionAsyncId();
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Promise contexts may not get precise `executionAsyncIds` by default.
|
||||||
|
* See the section on [promise execution tracking](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#promise-execution-tracking).
|
||||||
|
* @since v8.1.0
|
||||||
|
* @return The `asyncId` of the current execution context. Useful to track when something calls.
|
||||||
|
*/
|
||||||
|
function executionAsyncId(): number;
|
||||||
|
/**
|
||||||
|
* Resource objects returned by `executionAsyncResource()` are most often internal
|
||||||
|
* Node.js handle objects with undocumented APIs. Using any functions or properties
|
||||||
|
* on the object is likely to crash your application and should be avoided.
|
||||||
|
*
|
||||||
|
* Using `executionAsyncResource()` in the top-level execution context will
|
||||||
|
* return an empty object as there is no handle or request object to use,
|
||||||
|
* but having an object representing the top-level can be helpful.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { open } from 'node:fs';
|
||||||
|
* import { executionAsyncId, executionAsyncResource } from 'node:async_hooks';
|
||||||
|
*
|
||||||
|
* console.log(executionAsyncId(), executionAsyncResource()); // 1 {}
|
||||||
|
* open(new URL(import.meta.url), 'r', (err, fd) => {
|
||||||
|
* console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* This can be used to implement continuation local storage without the
|
||||||
|
* use of a tracking `Map` to store the metadata:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { createServer } from 'node:http';
|
||||||
|
* import {
|
||||||
|
* executionAsyncId,
|
||||||
|
* executionAsyncResource,
|
||||||
|
* createHook,
|
||||||
|
* } from 'node:async_hooks';
|
||||||
|
* const sym = Symbol('state'); // Private symbol to avoid pollution
|
||||||
|
*
|
||||||
|
* createHook({
|
||||||
|
* init(asyncId, type, triggerAsyncId, resource) {
|
||||||
|
* const cr = executionAsyncResource();
|
||||||
|
* if (cr) {
|
||||||
|
* resource[sym] = cr[sym];
|
||||||
|
* }
|
||||||
|
* },
|
||||||
|
* }).enable();
|
||||||
|
*
|
||||||
|
* const server = createServer((req, res) => {
|
||||||
|
* executionAsyncResource()[sym] = { state: req.url };
|
||||||
|
* setTimeout(function() {
|
||||||
|
* res.end(JSON.stringify(executionAsyncResource()[sym]));
|
||||||
|
* }, 100);
|
||||||
|
* }).listen(3000);
|
||||||
|
* ```
|
||||||
|
* @since v13.9.0, v12.17.0
|
||||||
|
* @return The resource representing the current execution. Useful to store data within the resource.
|
||||||
|
*/
|
||||||
|
function executionAsyncResource(): object;
|
||||||
|
/**
|
||||||
|
* ```js
|
||||||
|
* const server = net.createServer((conn) => {
|
||||||
|
* // The resource that caused (or triggered) this callback to be called
|
||||||
|
* // was that of the new connection. Thus the return value of triggerAsyncId()
|
||||||
|
* // is the asyncId of "conn".
|
||||||
|
* async_hooks.triggerAsyncId();
|
||||||
|
*
|
||||||
|
* }).listen(port, () => {
|
||||||
|
* // Even though all callbacks passed to .listen() are wrapped in a nextTick()
|
||||||
|
* // the callback itself exists because the call to the server's .listen()
|
||||||
|
* // was made. So the return value would be the ID of the server.
|
||||||
|
* async_hooks.triggerAsyncId();
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Promise contexts may not get valid `triggerAsyncId`s by default. See
|
||||||
|
* the section on [promise execution tracking](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#promise-execution-tracking).
|
||||||
|
* @return The ID of the resource responsible for calling the callback that is currently being executed.
|
||||||
|
*/
|
||||||
|
function triggerAsyncId(): number;
|
||||||
|
interface HookCallbacks {
|
||||||
|
/**
|
||||||
|
* Called when a class is constructed that has the possibility to emit an asynchronous event.
|
||||||
|
* @param asyncId A unique ID for the async resource
|
||||||
|
* @param type The type of the async resource
|
||||||
|
* @param triggerAsyncId The unique ID of the async resource in whose execution context this async resource was created
|
||||||
|
* @param resource Reference to the resource representing the async operation, needs to be released during destroy
|
||||||
|
*/
|
||||||
|
init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
|
||||||
|
/**
|
||||||
|
* When an asynchronous operation is initiated or completes a callback is called to notify the user.
|
||||||
|
* The before callback is called just before said callback is executed.
|
||||||
|
* @param asyncId the unique identifier assigned to the resource about to execute the callback.
|
||||||
|
*/
|
||||||
|
before?(asyncId: number): void;
|
||||||
|
/**
|
||||||
|
* Called immediately after the callback specified in `before` is completed.
|
||||||
|
*
|
||||||
|
* If an uncaught exception occurs during execution of the callback, then `after` will run after the `'uncaughtException'` event is emitted or a `domain`'s handler runs.
|
||||||
|
* @param asyncId the unique identifier assigned to the resource which has executed the callback.
|
||||||
|
*/
|
||||||
|
after?(asyncId: number): void;
|
||||||
|
/**
|
||||||
|
* Called when a promise has resolve() called. This may not be in the same execution id
|
||||||
|
* as the promise itself.
|
||||||
|
* @param asyncId the unique id for the promise that was resolve()d.
|
||||||
|
*/
|
||||||
|
promiseResolve?(asyncId: number): void;
|
||||||
|
/**
|
||||||
|
* Called after the resource corresponding to asyncId is destroyed
|
||||||
|
* @param asyncId a unique ID for the async resource
|
||||||
|
*/
|
||||||
|
destroy?(asyncId: number): void;
|
||||||
|
}
|
||||||
|
interface AsyncHook {
|
||||||
|
/**
|
||||||
|
* Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
|
||||||
|
*/
|
||||||
|
enable(): this;
|
||||||
|
/**
|
||||||
|
* Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
|
||||||
|
*/
|
||||||
|
disable(): this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Registers functions to be called for different lifetime events of each async
|
||||||
|
* operation.
|
||||||
|
*
|
||||||
|
* The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the
|
||||||
|
* respective asynchronous event during a resource's lifetime.
|
||||||
|
*
|
||||||
|
* All callbacks are optional. For example, if only resource cleanup needs to
|
||||||
|
* be tracked, then only the `destroy` callback needs to be passed. The
|
||||||
|
* specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { createHook } from 'node:async_hooks';
|
||||||
|
*
|
||||||
|
* const asyncHook = createHook({
|
||||||
|
* init(asyncId, type, triggerAsyncId, resource) { },
|
||||||
|
* destroy(asyncId) { },
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* The callbacks will be inherited via the prototype chain:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* class MyAsyncCallbacks {
|
||||||
|
* init(asyncId, type, triggerAsyncId, resource) { }
|
||||||
|
* destroy(asyncId) {}
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* class MyAddedCallbacks extends MyAsyncCallbacks {
|
||||||
|
* before(asyncId) { }
|
||||||
|
* after(asyncId) { }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* const asyncHook = async_hooks.createHook(new MyAddedCallbacks());
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Because promises are asynchronous resources whose lifecycle is tracked
|
||||||
|
* via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises.
|
||||||
|
* @since v8.1.0
|
||||||
|
* @param callbacks The `Hook Callbacks` to register
|
||||||
|
* @return Instance used for disabling and enabling hooks
|
||||||
|
*/
|
||||||
|
function createHook(callbacks: HookCallbacks): AsyncHook;
|
||||||
|
interface AsyncResourceOptions {
|
||||||
|
/**
|
||||||
|
* The ID of the execution context that created this async event.
|
||||||
|
* @default executionAsyncId()
|
||||||
|
*/
|
||||||
|
triggerAsyncId?: number | undefined;
|
||||||
|
/**
|
||||||
|
* Disables automatic `emitDestroy` when the object is garbage collected.
|
||||||
|
* This usually does not need to be set (even if `emitDestroy` is called
|
||||||
|
* manually), unless the resource's `asyncId` is retrieved and the
|
||||||
|
* sensitive API's `emitDestroy` is called with it.
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
requireManualDestroy?: boolean | undefined;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The class `AsyncResource` is designed to be extended by the embedder's async
|
||||||
|
* resources. Using this, users can easily trigger the lifetime events of their
|
||||||
|
* own resources.
|
||||||
|
*
|
||||||
|
* The `init` hook will trigger when an `AsyncResource` is instantiated.
|
||||||
|
*
|
||||||
|
* The following is an overview of the `AsyncResource` API.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { AsyncResource, executionAsyncId } from 'node:async_hooks';
|
||||||
|
*
|
||||||
|
* // AsyncResource() is meant to be extended. Instantiating a
|
||||||
|
* // new AsyncResource() also triggers init. If triggerAsyncId is omitted then
|
||||||
|
* // async_hook.executionAsyncId() is used.
|
||||||
|
* const asyncResource = new AsyncResource(
|
||||||
|
* type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false },
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* // Run a function in the execution context of the resource. This will
|
||||||
|
* // * establish the context of the resource
|
||||||
|
* // * trigger the AsyncHooks before callbacks
|
||||||
|
* // * call the provided function `fn` with the supplied arguments
|
||||||
|
* // * trigger the AsyncHooks after callbacks
|
||||||
|
* // * restore the original execution context
|
||||||
|
* asyncResource.runInAsyncScope(fn, thisArg, ...args);
|
||||||
|
*
|
||||||
|
* // Call AsyncHooks destroy callbacks.
|
||||||
|
* asyncResource.emitDestroy();
|
||||||
|
*
|
||||||
|
* // Return the unique ID assigned to the AsyncResource instance.
|
||||||
|
* asyncResource.asyncId();
|
||||||
|
*
|
||||||
|
* // Return the trigger ID for the AsyncResource instance.
|
||||||
|
* asyncResource.triggerAsyncId();
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
class AsyncResource {
|
||||||
|
/**
|
||||||
|
* AsyncResource() is meant to be extended. Instantiating a
|
||||||
|
* new AsyncResource() also triggers init. If triggerAsyncId is omitted then
|
||||||
|
* async_hook.executionAsyncId() is used.
|
||||||
|
* @param type The type of async event.
|
||||||
|
* @param triggerAsyncId The ID of the execution context that created
|
||||||
|
* this async event (default: `executionAsyncId()`), or an
|
||||||
|
* AsyncResourceOptions object (since v9.3.0)
|
||||||
|
*/
|
||||||
|
constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions);
|
||||||
|
/**
|
||||||
|
* Binds the given function to the current execution context.
|
||||||
|
* @since v14.8.0, v12.19.0
|
||||||
|
* @param fn The function to bind to the current execution context.
|
||||||
|
* @param type An optional name to associate with the underlying `AsyncResource`.
|
||||||
|
*/
|
||||||
|
static bind<Func extends (this: ThisArg, ...args: any[]) => any, ThisArg>(
|
||||||
|
fn: Func,
|
||||||
|
type?: string,
|
||||||
|
thisArg?: ThisArg,
|
||||||
|
): Func;
|
||||||
|
/**
|
||||||
|
* Binds the given function to execute to this `AsyncResource`'s scope.
|
||||||
|
* @since v14.8.0, v12.19.0
|
||||||
|
* @param fn The function to bind to the current `AsyncResource`.
|
||||||
|
*/
|
||||||
|
bind<Func extends (...args: any[]) => any>(fn: Func): Func;
|
||||||
|
/**
|
||||||
|
* Call the provided function with the provided arguments in the execution context
|
||||||
|
* of the async resource. This will establish the context, trigger the AsyncHooks
|
||||||
|
* before callbacks, call the function, trigger the AsyncHooks after callbacks, and
|
||||||
|
* then restore the original execution context.
|
||||||
|
* @since v9.6.0
|
||||||
|
* @param fn The function to call in the execution context of this async resource.
|
||||||
|
* @param thisArg The receiver to be used for the function call.
|
||||||
|
* @param args Optional arguments to pass to the function.
|
||||||
|
*/
|
||||||
|
runInAsyncScope<This, Result>(
|
||||||
|
fn: (this: This, ...args: any[]) => Result,
|
||||||
|
thisArg?: This,
|
||||||
|
...args: any[]
|
||||||
|
): Result;
|
||||||
|
/**
|
||||||
|
* Call all `destroy` hooks. This should only ever be called once. An error will
|
||||||
|
* be thrown if it is called more than once. This **must** be manually called. If
|
||||||
|
* the resource is left to be collected by the GC then the `destroy` hooks will
|
||||||
|
* never be called.
|
||||||
|
* @return A reference to `asyncResource`.
|
||||||
|
*/
|
||||||
|
emitDestroy(): this;
|
||||||
|
/**
|
||||||
|
* @return The unique `asyncId` assigned to the resource.
|
||||||
|
*/
|
||||||
|
asyncId(): number;
|
||||||
|
/**
|
||||||
|
* @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor.
|
||||||
|
*/
|
||||||
|
triggerAsyncId(): number;
|
||||||
|
}
|
||||||
|
interface AsyncLocalStorageOptions {
|
||||||
|
/**
|
||||||
|
* The default value to be used when no store is provided.
|
||||||
|
*/
|
||||||
|
defaultValue?: any;
|
||||||
|
/**
|
||||||
|
* A name for the `AsyncLocalStorage` value.
|
||||||
|
*/
|
||||||
|
name?: string | undefined;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* This class creates stores that stay coherent through asynchronous operations.
|
||||||
|
*
|
||||||
|
* While you can create your own implementation on top of the `node:async_hooks` module, `AsyncLocalStorage` should be preferred as it is a performant and memory
|
||||||
|
* safe implementation that involves significant optimizations that are non-obvious
|
||||||
|
* to implement.
|
||||||
|
*
|
||||||
|
* The following example uses `AsyncLocalStorage` to build a simple logger
|
||||||
|
* that assigns IDs to incoming HTTP requests and includes them in messages
|
||||||
|
* logged within each request.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import http from 'node:http';
|
||||||
|
* import { AsyncLocalStorage } from 'node:async_hooks';
|
||||||
|
*
|
||||||
|
* const asyncLocalStorage = new AsyncLocalStorage();
|
||||||
|
*
|
||||||
|
* function logWithId(msg) {
|
||||||
|
* const id = asyncLocalStorage.getStore();
|
||||||
|
* console.log(`${id !== undefined ? id : '-'}:`, msg);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* let idSeq = 0;
|
||||||
|
* http.createServer((req, res) => {
|
||||||
|
* asyncLocalStorage.run(idSeq++, () => {
|
||||||
|
* logWithId('start');
|
||||||
|
* // Imagine any chain of async operations here
|
||||||
|
* setImmediate(() => {
|
||||||
|
* logWithId('finish');
|
||||||
|
* res.end();
|
||||||
|
* });
|
||||||
|
* });
|
||||||
|
* }).listen(8080);
|
||||||
|
*
|
||||||
|
* http.get('http://localhost:8080');
|
||||||
|
* http.get('http://localhost:8080');
|
||||||
|
* // Prints:
|
||||||
|
* // 0: start
|
||||||
|
* // 0: finish
|
||||||
|
* // 1: start
|
||||||
|
* // 1: finish
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Each instance of `AsyncLocalStorage` maintains an independent storage context.
|
||||||
|
* Multiple instances can safely exist simultaneously without risk of interfering
|
||||||
|
* with each other's data.
|
||||||
|
* @since v13.10.0, v12.17.0
|
||||||
|
*/
|
||||||
|
class AsyncLocalStorage<T> {
|
||||||
|
/**
|
||||||
|
* Creates a new instance of `AsyncLocalStorage`. Store is only provided within a
|
||||||
|
* `run()` call or after an `enterWith()` call.
|
||||||
|
*/
|
||||||
|
constructor(options?: AsyncLocalStorageOptions);
|
||||||
|
/**
|
||||||
|
* Binds the given function to the current execution context.
|
||||||
|
* @since v19.8.0
|
||||||
|
* @param fn The function to bind to the current execution context.
|
||||||
|
* @return A new function that calls `fn` within the captured execution context.
|
||||||
|
*/
|
||||||
|
static bind<Func extends (...args: any[]) => any>(fn: Func): Func;
|
||||||
|
/**
|
||||||
|
* Captures the current execution context and returns a function that accepts a
|
||||||
|
* function as an argument. Whenever the returned function is called, it
|
||||||
|
* calls the function passed to it within the captured context.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const asyncLocalStorage = new AsyncLocalStorage();
|
||||||
|
* const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot());
|
||||||
|
* const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore()));
|
||||||
|
* console.log(result); // returns 123
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple
|
||||||
|
* async context tracking purposes, for example:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* class Foo {
|
||||||
|
* #runInAsyncScope = AsyncLocalStorage.snapshot();
|
||||||
|
*
|
||||||
|
* get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* const foo = asyncLocalStorage.run(123, () => new Foo());
|
||||||
|
* console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123
|
||||||
|
* ```
|
||||||
|
* @since v19.8.0
|
||||||
|
* @return A new function with the signature `(fn: (...args) : R, ...args) : R`.
|
||||||
|
*/
|
||||||
|
static snapshot(): <R, TArgs extends any[]>(fn: (...args: TArgs) => R, ...args: TArgs) => R;
|
||||||
|
/**
|
||||||
|
* Disables the instance of `AsyncLocalStorage`. All subsequent calls
|
||||||
|
* to `asyncLocalStorage.getStore()` will return `undefined` until `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again.
|
||||||
|
*
|
||||||
|
* When calling `asyncLocalStorage.disable()`, all current contexts linked to the
|
||||||
|
* instance will be exited.
|
||||||
|
*
|
||||||
|
* Calling `asyncLocalStorage.disable()` is required before the `asyncLocalStorage` can be garbage collected. This does not apply to stores
|
||||||
|
* provided by the `asyncLocalStorage`, as those objects are garbage collected
|
||||||
|
* along with the corresponding async resources.
|
||||||
|
*
|
||||||
|
* Use this method when the `asyncLocalStorage` is not in use anymore
|
||||||
|
* in the current process.
|
||||||
|
* @since v13.10.0, v12.17.0
|
||||||
|
* @experimental
|
||||||
|
*/
|
||||||
|
disable(): void;
|
||||||
|
/**
|
||||||
|
* Returns the current store.
|
||||||
|
* If called outside of an asynchronous context initialized by
|
||||||
|
* calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it
|
||||||
|
* returns `undefined`.
|
||||||
|
* @since v13.10.0, v12.17.0
|
||||||
|
*/
|
||||||
|
getStore(): T | undefined;
|
||||||
|
/**
|
||||||
|
* The name of the `AsyncLocalStorage` instance if provided.
|
||||||
|
* @since v24.0.0
|
||||||
|
*/
|
||||||
|
readonly name: string;
|
||||||
|
/**
|
||||||
|
* Runs a function synchronously within a context and returns its
|
||||||
|
* return value. The store is not accessible outside of the callback function.
|
||||||
|
* The store is accessible to any asynchronous operations created within the
|
||||||
|
* callback.
|
||||||
|
*
|
||||||
|
* The optional `args` are passed to the callback function.
|
||||||
|
*
|
||||||
|
* If the callback function throws an error, the error is thrown by `run()` too.
|
||||||
|
* The stacktrace is not impacted by this call and the context is exited.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const store = { id: 2 };
|
||||||
|
* try {
|
||||||
|
* asyncLocalStorage.run(store, () => {
|
||||||
|
* asyncLocalStorage.getStore(); // Returns the store object
|
||||||
|
* setTimeout(() => {
|
||||||
|
* asyncLocalStorage.getStore(); // Returns the store object
|
||||||
|
* }, 200);
|
||||||
|
* throw new Error();
|
||||||
|
* });
|
||||||
|
* } catch (e) {
|
||||||
|
* asyncLocalStorage.getStore(); // Returns undefined
|
||||||
|
* // The error will be caught here
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
* @since v13.10.0, v12.17.0
|
||||||
|
*/
|
||||||
|
run<R>(store: T, callback: () => R): R;
|
||||||
|
run<R, TArgs extends any[]>(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R;
|
||||||
|
/**
|
||||||
|
* Runs a function synchronously outside of a context and returns its
|
||||||
|
* return value. The store is not accessible within the callback function or
|
||||||
|
* the asynchronous operations created within the callback. Any `getStore()` call done within the callback function will always return `undefined`.
|
||||||
|
*
|
||||||
|
* The optional `args` are passed to the callback function.
|
||||||
|
*
|
||||||
|
* If the callback function throws an error, the error is thrown by `exit()` too.
|
||||||
|
* The stacktrace is not impacted by this call and the context is re-entered.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* // Within a call to run
|
||||||
|
* try {
|
||||||
|
* asyncLocalStorage.getStore(); // Returns the store object or value
|
||||||
|
* asyncLocalStorage.exit(() => {
|
||||||
|
* asyncLocalStorage.getStore(); // Returns undefined
|
||||||
|
* throw new Error();
|
||||||
|
* });
|
||||||
|
* } catch (e) {
|
||||||
|
* asyncLocalStorage.getStore(); // Returns the same object or value
|
||||||
|
* // The error will be caught here
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
* @since v13.10.0, v12.17.0
|
||||||
|
* @experimental
|
||||||
|
*/
|
||||||
|
exit<R, TArgs extends any[]>(callback: (...args: TArgs) => R, ...args: TArgs): R;
|
||||||
|
/**
|
||||||
|
* Transitions into the context for the remainder of the current
|
||||||
|
* synchronous execution and then persists the store through any following
|
||||||
|
* asynchronous calls.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const store = { id: 1 };
|
||||||
|
* // Replaces previous store with the given store object
|
||||||
|
* asyncLocalStorage.enterWith(store);
|
||||||
|
* asyncLocalStorage.getStore(); // Returns the store object
|
||||||
|
* someAsyncOperation(() => {
|
||||||
|
* asyncLocalStorage.getStore(); // Returns the same object
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* This transition will continue for the _entire_ synchronous execution.
|
||||||
|
* This means that if, for example, the context is entered within an event
|
||||||
|
* handler subsequent event handlers will also run within that context unless
|
||||||
|
* specifically bound to another context with an `AsyncResource`. That is why `run()` should be preferred over `enterWith()` unless there are strong reasons
|
||||||
|
* to use the latter method.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const store = { id: 1 };
|
||||||
|
*
|
||||||
|
* emitter.on('my-event', () => {
|
||||||
|
* asyncLocalStorage.enterWith(store);
|
||||||
|
* });
|
||||||
|
* emitter.on('my-event', () => {
|
||||||
|
* asyncLocalStorage.getStore(); // Returns the same object
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* asyncLocalStorage.getStore(); // Returns undefined
|
||||||
|
* emitter.emit('my-event');
|
||||||
|
* asyncLocalStorage.getStore(); // Returns the same object
|
||||||
|
* ```
|
||||||
|
* @since v13.11.0, v12.17.0
|
||||||
|
* @experimental
|
||||||
|
*/
|
||||||
|
enterWith(store: T): void;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @since v17.2.0, v16.14.0
|
||||||
|
* @return A map of provider types to the corresponding numeric id.
|
||||||
|
* This map contains all the event types that might be emitted by the `async_hooks.init()` event.
|
||||||
|
*/
|
||||||
|
namespace asyncWrapProviders {
|
||||||
|
const NONE: number;
|
||||||
|
const DIRHANDLE: number;
|
||||||
|
const DNSCHANNEL: number;
|
||||||
|
const ELDHISTOGRAM: number;
|
||||||
|
const FILEHANDLE: number;
|
||||||
|
const FILEHANDLECLOSEREQ: number;
|
||||||
|
const FIXEDSIZEBLOBCOPY: number;
|
||||||
|
const FSEVENTWRAP: number;
|
||||||
|
const FSREQCALLBACK: number;
|
||||||
|
const FSREQPROMISE: number;
|
||||||
|
const GETADDRINFOREQWRAP: number;
|
||||||
|
const GETNAMEINFOREQWRAP: number;
|
||||||
|
const HEAPSNAPSHOT: number;
|
||||||
|
const HTTP2SESSION: number;
|
||||||
|
const HTTP2STREAM: number;
|
||||||
|
const HTTP2PING: number;
|
||||||
|
const HTTP2SETTINGS: number;
|
||||||
|
const HTTPINCOMINGMESSAGE: number;
|
||||||
|
const HTTPCLIENTREQUEST: number;
|
||||||
|
const JSSTREAM: number;
|
||||||
|
const JSUDPWRAP: number;
|
||||||
|
const MESSAGEPORT: number;
|
||||||
|
const PIPECONNECTWRAP: number;
|
||||||
|
const PIPESERVERWRAP: number;
|
||||||
|
const PIPEWRAP: number;
|
||||||
|
const PROCESSWRAP: number;
|
||||||
|
const PROMISE: number;
|
||||||
|
const QUERYWRAP: number;
|
||||||
|
const SHUTDOWNWRAP: number;
|
||||||
|
const SIGNALWRAP: number;
|
||||||
|
const STATWATCHER: number;
|
||||||
|
const STREAMPIPE: number;
|
||||||
|
const TCPCONNECTWRAP: number;
|
||||||
|
const TCPSERVERWRAP: number;
|
||||||
|
const TCPWRAP: number;
|
||||||
|
const TTYWRAP: number;
|
||||||
|
const UDPSENDWRAP: number;
|
||||||
|
const UDPWRAP: number;
|
||||||
|
const SIGINTWATCHDOG: number;
|
||||||
|
const WORKER: number;
|
||||||
|
const WORKERHEAPSNAPSHOT: number;
|
||||||
|
const WRITEWRAP: number;
|
||||||
|
const ZLIB: number;
|
||||||
|
const CHECKPRIMEREQUEST: number;
|
||||||
|
const PBKDF2REQUEST: number;
|
||||||
|
const KEYPAIRGENREQUEST: number;
|
||||||
|
const KEYGENREQUEST: number;
|
||||||
|
const KEYEXPORTREQUEST: number;
|
||||||
|
const CIPHERREQUEST: number;
|
||||||
|
const DERIVEBITSREQUEST: number;
|
||||||
|
const HASHREQUEST: number;
|
||||||
|
const RANDOMBYTESREQUEST: number;
|
||||||
|
const RANDOMPRIMEREQUEST: number;
|
||||||
|
const SCRYPTREQUEST: number;
|
||||||
|
const SIGNREQUEST: number;
|
||||||
|
const TLSWRAP: number;
|
||||||
|
const VERIFYREQUEST: number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
declare module "async_hooks" {
|
||||||
|
export * from "node:async_hooks";
|
||||||
|
}
|
||||||
466
node_modules/@types/node/buffer.buffer.d.ts
generated
vendored
Normal file
466
node_modules/@types/node/buffer.buffer.d.ts
generated
vendored
Normal file
@@ -0,0 +1,466 @@
|
|||||||
|
declare module "node:buffer" {
|
||||||
|
type ImplicitArrayBuffer<T extends WithImplicitCoercion<ArrayBufferLike>> = T extends
|
||||||
|
{ valueOf(): infer V extends ArrayBufferLike } ? V : T;
|
||||||
|
global {
|
||||||
|
interface BufferConstructor {
|
||||||
|
// see buffer.d.ts for implementation shared with all TypeScript versions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates a new buffer containing the given {str}.
|
||||||
|
*
|
||||||
|
* @param str String to store in buffer.
|
||||||
|
* @param encoding encoding to use, optional. Default is 'utf8'
|
||||||
|
* @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead.
|
||||||
|
*/
|
||||||
|
new(str: string, encoding?: BufferEncoding): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Allocates a new buffer of {size} octets.
|
||||||
|
*
|
||||||
|
* @param size count of octets to allocate.
|
||||||
|
* @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`).
|
||||||
|
*/
|
||||||
|
new(size: number): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Allocates a new buffer containing the given {array} of octets.
|
||||||
|
*
|
||||||
|
* @param array The octets to store.
|
||||||
|
* @deprecated since v10.0.0 - Use `Buffer.from(array)` instead.
|
||||||
|
*/
|
||||||
|
new(array: ArrayLike<number>): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Produces a Buffer backed by the same allocated memory as
|
||||||
|
* the given {ArrayBuffer}/{SharedArrayBuffer}.
|
||||||
|
*
|
||||||
|
* @param arrayBuffer The ArrayBuffer with which to share memory.
|
||||||
|
* @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead.
|
||||||
|
*/
|
||||||
|
new<TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(arrayBuffer: TArrayBuffer): Buffer<TArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`.
|
||||||
|
* Array entries outside that range will be truncated to fit into it.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
|
||||||
|
* const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If `array` is an `Array`-like object (that is, one with a `length` property of
|
||||||
|
* type `number`), it is treated as if it is an array, unless it is a `Buffer` or
|
||||||
|
* a `Uint8Array`. This means all other `TypedArray` variants get treated as an
|
||||||
|
* `Array`. To create a `Buffer` from the bytes backing a `TypedArray`, use
|
||||||
|
* `Buffer.copyBytesFrom()`.
|
||||||
|
*
|
||||||
|
* A `TypeError` will be thrown if `array` is not an `Array` or another type
|
||||||
|
* appropriate for `Buffer.from()` variants.
|
||||||
|
*
|
||||||
|
* `Buffer.from(array)` and `Buffer.from(string)` may also use the internal
|
||||||
|
* `Buffer` pool like `Buffer.allocUnsafe()` does.
|
||||||
|
* @since v5.10.0
|
||||||
|
*/
|
||||||
|
from(array: WithImplicitCoercion<ArrayLike<number>>): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* This creates a view of the `ArrayBuffer` without copying the underlying
|
||||||
|
* memory. For example, when passed a reference to the `.buffer` property of a
|
||||||
|
* `TypedArray` instance, the newly created `Buffer` will share the same
|
||||||
|
* allocated memory as the `TypedArray`'s underlying `ArrayBuffer`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const arr = new Uint16Array(2);
|
||||||
|
*
|
||||||
|
* arr[0] = 5000;
|
||||||
|
* arr[1] = 4000;
|
||||||
|
*
|
||||||
|
* // Shares memory with `arr`.
|
||||||
|
* const buf = Buffer.from(arr.buffer);
|
||||||
|
*
|
||||||
|
* console.log(buf);
|
||||||
|
* // Prints: <Buffer 88 13 a0 0f>
|
||||||
|
*
|
||||||
|
* // Changing the original Uint16Array changes the Buffer also.
|
||||||
|
* arr[1] = 6000;
|
||||||
|
*
|
||||||
|
* console.log(buf);
|
||||||
|
* // Prints: <Buffer 88 13 70 17>
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* The optional `byteOffset` and `length` arguments specify a memory range within
|
||||||
|
* the `arrayBuffer` that will be shared by the `Buffer`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const ab = new ArrayBuffer(10);
|
||||||
|
* const buf = Buffer.from(ab, 0, 2);
|
||||||
|
*
|
||||||
|
* console.log(buf.length);
|
||||||
|
* // Prints: 2
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer` or a
|
||||||
|
* `SharedArrayBuffer` or another type appropriate for `Buffer.from()`
|
||||||
|
* variants.
|
||||||
|
*
|
||||||
|
* It is important to remember that a backing `ArrayBuffer` can cover a range
|
||||||
|
* of memory that extends beyond the bounds of a `TypedArray` view. A new
|
||||||
|
* `Buffer` created using the `buffer` property of a `TypedArray` may extend
|
||||||
|
* beyond the range of the `TypedArray`:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements
|
||||||
|
* const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements
|
||||||
|
* console.log(arrA.buffer === arrB.buffer); // true
|
||||||
|
*
|
||||||
|
* const buf = Buffer.from(arrB.buffer);
|
||||||
|
* console.log(buf);
|
||||||
|
* // Prints: <Buffer 63 64 65 66>
|
||||||
|
* ```
|
||||||
|
* @since v5.10.0
|
||||||
|
* @param arrayBuffer An `ArrayBuffer`, `SharedArrayBuffer`, for example the
|
||||||
|
* `.buffer` property of a `TypedArray`.
|
||||||
|
* @param byteOffset Index of first byte to expose. **Default:** `0`.
|
||||||
|
* @param length Number of bytes to expose. **Default:**
|
||||||
|
* `arrayBuffer.byteLength - byteOffset`.
|
||||||
|
*/
|
||||||
|
from<TArrayBuffer extends WithImplicitCoercion<ArrayBufferLike>>(
|
||||||
|
arrayBuffer: TArrayBuffer,
|
||||||
|
byteOffset?: number,
|
||||||
|
length?: number,
|
||||||
|
): Buffer<ImplicitArrayBuffer<TArrayBuffer>>;
|
||||||
|
/**
|
||||||
|
* Creates a new `Buffer` containing `string`. The `encoding` parameter identifies
|
||||||
|
* the character encoding to be used when converting `string` into bytes.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const buf1 = Buffer.from('this is a tést');
|
||||||
|
* const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
|
||||||
|
*
|
||||||
|
* console.log(buf1.toString());
|
||||||
|
* // Prints: this is a tést
|
||||||
|
* console.log(buf2.toString());
|
||||||
|
* // Prints: this is a tést
|
||||||
|
* console.log(buf1.toString('latin1'));
|
||||||
|
* // Prints: this is a tést
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* A `TypeError` will be thrown if `string` is not a string or another type
|
||||||
|
* appropriate for `Buffer.from()` variants.
|
||||||
|
*
|
||||||
|
* `Buffer.from(string)` may also use the internal `Buffer` pool like
|
||||||
|
* `Buffer.allocUnsafe()` does.
|
||||||
|
* @since v5.10.0
|
||||||
|
* @param string A string to encode.
|
||||||
|
* @param encoding The encoding of `string`. **Default:** `'utf8'`.
|
||||||
|
*/
|
||||||
|
from(string: WithImplicitCoercion<string>, encoding?: BufferEncoding): Buffer<ArrayBuffer>;
|
||||||
|
from(arrayOrString: WithImplicitCoercion<ArrayLike<number> | string>): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Creates a new Buffer using the passed {data}
|
||||||
|
* @param values to create a new Buffer
|
||||||
|
*/
|
||||||
|
of(...items: number[]): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Returns a new `Buffer` which is the result of concatenating all the `Buffer` instances in the `list` together.
|
||||||
|
*
|
||||||
|
* If the list has no items, or if the `totalLength` is 0, then a new zero-length `Buffer` is returned.
|
||||||
|
*
|
||||||
|
* If `totalLength` is not provided, it is calculated from the `Buffer` instances
|
||||||
|
* in `list` by adding their lengths.
|
||||||
|
*
|
||||||
|
* If `totalLength` is provided, it is coerced to an unsigned integer. If the
|
||||||
|
* combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is
|
||||||
|
* truncated to `totalLength`. If the combined length of the `Buffer`s in `list` is
|
||||||
|
* less than `totalLength`, the remaining space is filled with zeros.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* // Create a single `Buffer` from a list of three `Buffer` instances.
|
||||||
|
*
|
||||||
|
* const buf1 = Buffer.alloc(10);
|
||||||
|
* const buf2 = Buffer.alloc(14);
|
||||||
|
* const buf3 = Buffer.alloc(18);
|
||||||
|
* const totalLength = buf1.length + buf2.length + buf3.length;
|
||||||
|
*
|
||||||
|
* console.log(totalLength);
|
||||||
|
* // Prints: 42
|
||||||
|
*
|
||||||
|
* const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
|
||||||
|
*
|
||||||
|
* console.log(bufA);
|
||||||
|
* // Prints: <Buffer 00 00 00 00 ...>
|
||||||
|
* console.log(bufA.length);
|
||||||
|
* // Prints: 42
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does.
|
||||||
|
* @since v0.7.11
|
||||||
|
* @param list List of `Buffer` or {@link Uint8Array} instances to concatenate.
|
||||||
|
* @param totalLength Total length of the `Buffer` instances in `list` when concatenated.
|
||||||
|
*/
|
||||||
|
concat(list: readonly Uint8Array[], totalLength?: number): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Copies the underlying memory of `view` into a new `Buffer`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* const u16 = new Uint16Array([0, 0xffff]);
|
||||||
|
* const buf = Buffer.copyBytesFrom(u16, 1, 1);
|
||||||
|
* u16[1] = 0;
|
||||||
|
* console.log(buf.length); // 2
|
||||||
|
* console.log(buf[0]); // 255
|
||||||
|
* console.log(buf[1]); // 255
|
||||||
|
* ```
|
||||||
|
* @since v19.8.0
|
||||||
|
* @param view The {TypedArray} to copy.
|
||||||
|
* @param [offset=0] The starting offset within `view`.
|
||||||
|
* @param [length=view.length - offset] The number of elements from `view` to copy.
|
||||||
|
*/
|
||||||
|
copyBytesFrom(view: NodeJS.TypedArray, offset?: number, length?: number): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const buf = Buffer.alloc(5);
|
||||||
|
*
|
||||||
|
* console.log(buf);
|
||||||
|
* // Prints: <Buffer 00 00 00 00 00>
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown.
|
||||||
|
*
|
||||||
|
* If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const buf = Buffer.alloc(5, 'a');
|
||||||
|
*
|
||||||
|
* console.log(buf);
|
||||||
|
* // Prints: <Buffer 61 61 61 61 61>
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If both `fill` and `encoding` are specified, the allocated `Buffer` will be
|
||||||
|
* initialized by calling `buf.fill(fill, encoding)`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
|
||||||
|
*
|
||||||
|
* console.log(buf);
|
||||||
|
* // Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance
|
||||||
|
* contents will never contain sensitive data from previous allocations, including
|
||||||
|
* data that might not have been allocated for `Buffer`s.
|
||||||
|
*
|
||||||
|
* A `TypeError` will be thrown if `size` is not a number.
|
||||||
|
* @since v5.10.0
|
||||||
|
* @param size The desired length of the new `Buffer`.
|
||||||
|
* @param [fill=0] A value to pre-fill the new `Buffer` with.
|
||||||
|
* @param [encoding='utf8'] If `fill` is a string, this is its encoding.
|
||||||
|
*/
|
||||||
|
alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown.
|
||||||
|
*
|
||||||
|
* The underlying memory for `Buffer` instances created in this way is _not_
|
||||||
|
* _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const buf = Buffer.allocUnsafe(10);
|
||||||
|
*
|
||||||
|
* console.log(buf);
|
||||||
|
* // Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>
|
||||||
|
*
|
||||||
|
* buf.fill(0);
|
||||||
|
*
|
||||||
|
* console.log(buf);
|
||||||
|
* // Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* A `TypeError` will be thrown if `size` is not a number.
|
||||||
|
*
|
||||||
|
* The `Buffer` module pre-allocates an internal `Buffer` instance of
|
||||||
|
* size `Buffer.poolSize` that is used as a pool for the fast allocation of new `Buffer` instances created using `Buffer.allocUnsafe()`, `Buffer.from(array)`,
|
||||||
|
* and `Buffer.concat()` only when `size` is less than `Buffer.poolSize >>> 1` (floor of `Buffer.poolSize` divided by two).
|
||||||
|
*
|
||||||
|
* Use of this pre-allocated internal memory pool is a key difference between
|
||||||
|
* calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`.
|
||||||
|
* Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less
|
||||||
|
* than or equal to half `Buffer.poolSize`. The
|
||||||
|
* difference is subtle but can be important when an application requires the
|
||||||
|
* additional performance that `Buffer.allocUnsafe()` provides.
|
||||||
|
* @since v5.10.0
|
||||||
|
* @param size The desired length of the new `Buffer`.
|
||||||
|
*/
|
||||||
|
allocUnsafe(size: number): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. A zero-length `Buffer` is created if
|
||||||
|
* `size` is 0.
|
||||||
|
*
|
||||||
|
* The underlying memory for `Buffer` instances created in this way is _not_
|
||||||
|
* _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `buf.fill(0)` to initialize
|
||||||
|
* such `Buffer` instances with zeroes.
|
||||||
|
*
|
||||||
|
* When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances,
|
||||||
|
* allocations under 4 KiB are sliced from a single pre-allocated `Buffer`. This
|
||||||
|
* allows applications to avoid the garbage collection overhead of creating many
|
||||||
|
* individually allocated `Buffer` instances. This approach improves both
|
||||||
|
* performance and memory usage by eliminating the need to track and clean up as
|
||||||
|
* many individual `ArrayBuffer` objects.
|
||||||
|
*
|
||||||
|
* However, in the case where a developer may need to retain a small chunk of
|
||||||
|
* memory from a pool for an indeterminate amount of time, it may be appropriate
|
||||||
|
* to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and
|
||||||
|
* then copying out the relevant bits.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* // Need to keep around a few small chunks of memory.
|
||||||
|
* const store = [];
|
||||||
|
*
|
||||||
|
* socket.on('readable', () => {
|
||||||
|
* let data;
|
||||||
|
* while (null !== (data = readable.read())) {
|
||||||
|
* // Allocate for retained data.
|
||||||
|
* const sb = Buffer.allocUnsafeSlow(10);
|
||||||
|
*
|
||||||
|
* // Copy the data into the new allocation.
|
||||||
|
* data.copy(sb, 0, 0, 10);
|
||||||
|
*
|
||||||
|
* store.push(sb);
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* A `TypeError` will be thrown if `size` is not a number.
|
||||||
|
* @since v5.12.0
|
||||||
|
* @param size The desired length of the new `Buffer`.
|
||||||
|
*/
|
||||||
|
allocUnsafeSlow(size: number): Buffer<ArrayBuffer>;
|
||||||
|
}
|
||||||
|
interface Buffer<TArrayBuffer extends ArrayBufferLike = ArrayBufferLike> extends Uint8Array<TArrayBuffer> {
|
||||||
|
// see buffer.d.ts for implementation shared with all TypeScript versions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new `Buffer` that references the same memory as the original, but
|
||||||
|
* offset and cropped by the `start` and `end` indices.
|
||||||
|
*
|
||||||
|
* This method is not compatible with the `Uint8Array.prototype.slice()`,
|
||||||
|
* which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const buf = Buffer.from('buffer');
|
||||||
|
*
|
||||||
|
* const copiedBuf = Uint8Array.prototype.slice.call(buf);
|
||||||
|
* copiedBuf[0]++;
|
||||||
|
* console.log(copiedBuf.toString());
|
||||||
|
* // Prints: cuffer
|
||||||
|
*
|
||||||
|
* console.log(buf.toString());
|
||||||
|
* // Prints: buffer
|
||||||
|
*
|
||||||
|
* // With buf.slice(), the original buffer is modified.
|
||||||
|
* const notReallyCopiedBuf = buf.slice();
|
||||||
|
* notReallyCopiedBuf[0]++;
|
||||||
|
* console.log(notReallyCopiedBuf.toString());
|
||||||
|
* // Prints: cuffer
|
||||||
|
* console.log(buf.toString());
|
||||||
|
* // Also prints: cuffer (!)
|
||||||
|
* ```
|
||||||
|
* @since v0.3.0
|
||||||
|
* @deprecated Use `subarray` instead.
|
||||||
|
* @param [start=0] Where the new `Buffer` will start.
|
||||||
|
* @param [end=buf.length] Where the new `Buffer` will end (not inclusive).
|
||||||
|
*/
|
||||||
|
slice(start?: number, end?: number): Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* Returns a new `Buffer` that references the same memory as the original, but
|
||||||
|
* offset and cropped by the `start` and `end` indices.
|
||||||
|
*
|
||||||
|
* Specifying `end` greater than `buf.length` will return the same result as
|
||||||
|
* that of `end` equal to `buf.length`.
|
||||||
|
*
|
||||||
|
* This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray).
|
||||||
|
*
|
||||||
|
* Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
|
||||||
|
* // from the original `Buffer`.
|
||||||
|
*
|
||||||
|
* const buf1 = Buffer.allocUnsafe(26);
|
||||||
|
*
|
||||||
|
* for (let i = 0; i < 26; i++) {
|
||||||
|
* // 97 is the decimal ASCII value for 'a'.
|
||||||
|
* buf1[i] = i + 97;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* const buf2 = buf1.subarray(0, 3);
|
||||||
|
*
|
||||||
|
* console.log(buf2.toString('ascii', 0, buf2.length));
|
||||||
|
* // Prints: abc
|
||||||
|
*
|
||||||
|
* buf1[0] = 33;
|
||||||
|
*
|
||||||
|
* console.log(buf2.toString('ascii', 0, buf2.length));
|
||||||
|
* // Prints: !bc
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Specifying negative indexes causes the slice to be generated relative to the
|
||||||
|
* end of `buf` rather than the beginning.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import { Buffer } from 'node:buffer';
|
||||||
|
*
|
||||||
|
* const buf = Buffer.from('buffer');
|
||||||
|
*
|
||||||
|
* console.log(buf.subarray(-6, -1).toString());
|
||||||
|
* // Prints: buffe
|
||||||
|
* // (Equivalent to buf.subarray(0, 5).)
|
||||||
|
*
|
||||||
|
* console.log(buf.subarray(-6, -2).toString());
|
||||||
|
* // Prints: buff
|
||||||
|
* // (Equivalent to buf.subarray(0, 4).)
|
||||||
|
*
|
||||||
|
* console.log(buf.subarray(-5, -2).toString());
|
||||||
|
* // Prints: uff
|
||||||
|
* // (Equivalent to buf.subarray(1, 4).)
|
||||||
|
* ```
|
||||||
|
* @since v3.0.0
|
||||||
|
* @param [start=0] Where the new `Buffer` will start.
|
||||||
|
* @param [end=buf.length] Where the new `Buffer` will end (not inclusive).
|
||||||
|
*/
|
||||||
|
subarray(start?: number, end?: number): Buffer<TArrayBuffer>;
|
||||||
|
}
|
||||||
|
// TODO: remove globals in future version
|
||||||
|
/**
|
||||||
|
* @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports
|
||||||
|
* TypeScript versions earlier than 5.7.
|
||||||
|
*/
|
||||||
|
type NonSharedBuffer = Buffer<ArrayBuffer>;
|
||||||
|
/**
|
||||||
|
* @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports
|
||||||
|
* TypeScript versions earlier than 5.7.
|
||||||
|
*/
|
||||||
|
type AllowSharedBuffer = Buffer<ArrayBufferLike>;
|
||||||
|
}
|
||||||
|
}
|
||||||
1810
node_modules/@types/node/buffer.d.ts
generated
vendored
Normal file
1810
node_modules/@types/node/buffer.d.ts
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1428
node_modules/@types/node/child_process.d.ts
generated
vendored
Normal file
1428
node_modules/@types/node/child_process.d.ts
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
486
node_modules/@types/node/cluster.d.ts
generated
vendored
Normal file
486
node_modules/@types/node/cluster.d.ts
generated
vendored
Normal file
@@ -0,0 +1,486 @@
|
|||||||
|
/**
|
||||||
|
* Clusters of Node.js processes can be used to run multiple instances of Node.js
|
||||||
|
* that can distribute workloads among their application threads. When process isolation
|
||||||
|
* is not needed, use the [`worker_threads`](https://nodejs.org/docs/latest-v25.x/api/worker_threads.html)
|
||||||
|
* module instead, which allows running multiple application threads within a single Node.js instance.
|
||||||
|
*
|
||||||
|
* The cluster module allows easy creation of child processes that all share
|
||||||
|
* server ports.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import cluster from 'node:cluster';
|
||||||
|
* import http from 'node:http';
|
||||||
|
* import { availableParallelism } from 'node:os';
|
||||||
|
* import process from 'node:process';
|
||||||
|
*
|
||||||
|
* const numCPUs = availableParallelism();
|
||||||
|
*
|
||||||
|
* if (cluster.isPrimary) {
|
||||||
|
* console.log(`Primary ${process.pid} is running`);
|
||||||
|
*
|
||||||
|
* // Fork workers.
|
||||||
|
* for (let i = 0; i < numCPUs; i++) {
|
||||||
|
* cluster.fork();
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* cluster.on('exit', (worker, code, signal) => {
|
||||||
|
* console.log(`worker ${worker.process.pid} died`);
|
||||||
|
* });
|
||||||
|
* } else {
|
||||||
|
* // Workers can share any TCP connection
|
||||||
|
* // In this case it is an HTTP server
|
||||||
|
* http.createServer((req, res) => {
|
||||||
|
* res.writeHead(200);
|
||||||
|
* res.end('hello world\n');
|
||||||
|
* }).listen(8000);
|
||||||
|
*
|
||||||
|
* console.log(`Worker ${process.pid} started`);
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Running Node.js will now share port 8000 between the workers:
|
||||||
|
*
|
||||||
|
* ```console
|
||||||
|
* $ node server.js
|
||||||
|
* Primary 3596 is running
|
||||||
|
* Worker 4324 started
|
||||||
|
* Worker 4520 started
|
||||||
|
* Worker 6056 started
|
||||||
|
* Worker 5644 started
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* On Windows, it is not yet possible to set up a named pipe server in a worker.
|
||||||
|
* @see [source](https://github.com/nodejs/node/blob/v25.x/lib/cluster.js)
|
||||||
|
*/
|
||||||
|
declare module "node:cluster" {
|
||||||
|
import * as child_process from "node:child_process";
|
||||||
|
import { EventEmitter, InternalEventEmitter } from "node:events";
|
||||||
|
class Worker implements EventEmitter {
|
||||||
|
constructor(options?: cluster.WorkerOptions);
|
||||||
|
/**
|
||||||
|
* Each new worker is given its own unique id, this id is stored in the `id`.
|
||||||
|
*
|
||||||
|
* While a worker is alive, this is the key that indexes it in `cluster.workers`.
|
||||||
|
* @since v0.8.0
|
||||||
|
*/
|
||||||
|
id: number;
|
||||||
|
/**
|
||||||
|
* All workers are created using [`child_process.fork()`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#child_processforkmodulepath-args-options), the returned object
|
||||||
|
* from this function is stored as `.process`. In a worker, the global `process` is stored.
|
||||||
|
*
|
||||||
|
* See: [Child Process module](https://nodejs.org/docs/latest-v25.x/api/child_process.html#child_processforkmodulepath-args-options).
|
||||||
|
*
|
||||||
|
* Workers will call `process.exit(0)` if the `'disconnect'` event occurs
|
||||||
|
* on `process` and `.exitedAfterDisconnect` is not `true`. This protects against
|
||||||
|
* accidental disconnection.
|
||||||
|
* @since v0.7.0
|
||||||
|
*/
|
||||||
|
process: child_process.ChildProcess;
|
||||||
|
/**
|
||||||
|
* Send a message to a worker or primary, optionally with a handle.
|
||||||
|
*
|
||||||
|
* In the primary, this sends a message to a specific worker. It is identical to [`ChildProcess.send()`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#subprocesssendmessage-sendhandle-options-callback).
|
||||||
|
*
|
||||||
|
* In a worker, this sends a message to the primary. It is identical to `process.send()`.
|
||||||
|
*
|
||||||
|
* This example will echo back all messages from the primary:
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* if (cluster.isPrimary) {
|
||||||
|
* const worker = cluster.fork();
|
||||||
|
* worker.send('hi there');
|
||||||
|
*
|
||||||
|
* } else if (cluster.isWorker) {
|
||||||
|
* process.on('message', (msg) => {
|
||||||
|
* process.send(msg);
|
||||||
|
* });
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
* @since v0.7.0
|
||||||
|
* @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles.
|
||||||
|
*/
|
||||||
|
send(message: child_process.Serializable, callback?: (error: Error | null) => void): boolean;
|
||||||
|
send(
|
||||||
|
message: child_process.Serializable,
|
||||||
|
sendHandle: child_process.SendHandle,
|
||||||
|
callback?: (error: Error | null) => void,
|
||||||
|
): boolean;
|
||||||
|
send(
|
||||||
|
message: child_process.Serializable,
|
||||||
|
sendHandle: child_process.SendHandle,
|
||||||
|
options?: child_process.MessageOptions,
|
||||||
|
callback?: (error: Error | null) => void,
|
||||||
|
): boolean;
|
||||||
|
/**
|
||||||
|
* This function will kill the worker. In the primary worker, it does this by
|
||||||
|
* disconnecting the `worker.process`, and once disconnected, killing with `signal`. In the worker, it does it by killing the process with `signal`.
|
||||||
|
*
|
||||||
|
* The `kill()` function kills the worker process without waiting for a graceful
|
||||||
|
* disconnect, it has the same behavior as `worker.process.kill()`.
|
||||||
|
*
|
||||||
|
* This method is aliased as `worker.destroy()` for backwards compatibility.
|
||||||
|
*
|
||||||
|
* In a worker, `process.kill()` exists, but it is not this function;
|
||||||
|
* it is [`kill()`](https://nodejs.org/docs/latest-v25.x/api/process.html#processkillpid-signal).
|
||||||
|
* @since v0.9.12
|
||||||
|
* @param [signal='SIGTERM'] Name of the kill signal to send to the worker process.
|
||||||
|
*/
|
||||||
|
kill(signal?: string): void;
|
||||||
|
destroy(signal?: string): void;
|
||||||
|
/**
|
||||||
|
* In a worker, this function will close all servers, wait for the `'close'` event
|
||||||
|
* on those servers, and then disconnect the IPC channel.
|
||||||
|
*
|
||||||
|
* In the primary, an internal message is sent to the worker causing it to call `.disconnect()` on itself.
|
||||||
|
*
|
||||||
|
* Causes `.exitedAfterDisconnect` to be set.
|
||||||
|
*
|
||||||
|
* After a server is closed, it will no longer accept new connections,
|
||||||
|
* but connections may be accepted by any other listening worker. Existing
|
||||||
|
* connections will be allowed to close as usual. When no more connections exist,
|
||||||
|
* see `server.close()`, the IPC channel to the worker will close allowing it
|
||||||
|
* to die gracefully.
|
||||||
|
*
|
||||||
|
* The above applies _only_ to server connections, client connections are not
|
||||||
|
* automatically closed by workers, and disconnect does not wait for them to close
|
||||||
|
* before exiting.
|
||||||
|
*
|
||||||
|
* In a worker, `process.disconnect` exists, but it is not this function;
|
||||||
|
* it is `disconnect()`.
|
||||||
|
*
|
||||||
|
* Because long living server connections may block workers from disconnecting, it
|
||||||
|
* may be useful to send a message, so application specific actions may be taken to
|
||||||
|
* close them. It also may be useful to implement a timeout, killing a worker if
|
||||||
|
* the `'disconnect'` event has not been emitted after some time.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import net from 'node:net';
|
||||||
|
*
|
||||||
|
* if (cluster.isPrimary) {
|
||||||
|
* const worker = cluster.fork();
|
||||||
|
* let timeout;
|
||||||
|
*
|
||||||
|
* worker.on('listening', (address) => {
|
||||||
|
* worker.send('shutdown');
|
||||||
|
* worker.disconnect();
|
||||||
|
* timeout = setTimeout(() => {
|
||||||
|
* worker.kill();
|
||||||
|
* }, 2000);
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* worker.on('disconnect', () => {
|
||||||
|
* clearTimeout(timeout);
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* } else if (cluster.isWorker) {
|
||||||
|
* const server = net.createServer((socket) => {
|
||||||
|
* // Connections never end
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* server.listen(8000);
|
||||||
|
*
|
||||||
|
* process.on('message', (msg) => {
|
||||||
|
* if (msg === 'shutdown') {
|
||||||
|
* // Initiate graceful close of any connections to server
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
* @since v0.7.7
|
||||||
|
* @return A reference to `worker`.
|
||||||
|
*/
|
||||||
|
disconnect(): this;
|
||||||
|
/**
|
||||||
|
* This function returns `true` if the worker is connected to its primary via its
|
||||||
|
* IPC channel, `false` otherwise. A worker is connected to its primary after it
|
||||||
|
* has been created. It is disconnected after the `'disconnect'` event is emitted.
|
||||||
|
* @since v0.11.14
|
||||||
|
*/
|
||||||
|
isConnected(): boolean;
|
||||||
|
/**
|
||||||
|
* This function returns `true` if the worker's process has terminated (either
|
||||||
|
* because of exiting or being signaled). Otherwise, it returns `false`.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import cluster from 'node:cluster';
|
||||||
|
* import http from 'node:http';
|
||||||
|
* import { availableParallelism } from 'node:os';
|
||||||
|
* import process from 'node:process';
|
||||||
|
*
|
||||||
|
* const numCPUs = availableParallelism();
|
||||||
|
*
|
||||||
|
* if (cluster.isPrimary) {
|
||||||
|
* console.log(`Primary ${process.pid} is running`);
|
||||||
|
*
|
||||||
|
* // Fork workers.
|
||||||
|
* for (let i = 0; i < numCPUs; i++) {
|
||||||
|
* cluster.fork();
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* cluster.on('fork', (worker) => {
|
||||||
|
* console.log('worker is dead:', worker.isDead());
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* cluster.on('exit', (worker, code, signal) => {
|
||||||
|
* console.log('worker is dead:', worker.isDead());
|
||||||
|
* });
|
||||||
|
* } else {
|
||||||
|
* // Workers can share any TCP connection. In this case, it is an HTTP server.
|
||||||
|
* http.createServer((req, res) => {
|
||||||
|
* res.writeHead(200);
|
||||||
|
* res.end(`Current process\n ${process.pid}`);
|
||||||
|
* process.kill(process.pid);
|
||||||
|
* }).listen(8000);
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
* @since v0.11.14
|
||||||
|
*/
|
||||||
|
isDead(): boolean;
|
||||||
|
/**
|
||||||
|
* This property is `true` if the worker exited due to `.disconnect()`.
|
||||||
|
* If the worker exited any other way, it is `false`. If the
|
||||||
|
* worker has not exited, it is `undefined`.
|
||||||
|
*
|
||||||
|
* The boolean `worker.exitedAfterDisconnect` allows distinguishing between
|
||||||
|
* voluntary and accidental exit, the primary may choose not to respawn a worker
|
||||||
|
* based on this value.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* cluster.on('exit', (worker, code, signal) => {
|
||||||
|
* if (worker.exitedAfterDisconnect === true) {
|
||||||
|
* console.log('Oh, it was just voluntary – no need to worry');
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* // kill worker
|
||||||
|
* worker.kill();
|
||||||
|
* ```
|
||||||
|
* @since v6.0.0
|
||||||
|
*/
|
||||||
|
exitedAfterDisconnect: boolean;
|
||||||
|
}
|
||||||
|
interface Worker extends InternalEventEmitter<cluster.WorkerEventMap> {}
|
||||||
|
type _Worker = Worker;
|
||||||
|
namespace cluster {
|
||||||
|
interface Worker extends _Worker {}
|
||||||
|
interface WorkerOptions {
|
||||||
|
id?: number | undefined;
|
||||||
|
process?: child_process.ChildProcess | undefined;
|
||||||
|
state?: string | undefined;
|
||||||
|
}
|
||||||
|
interface WorkerEventMap {
|
||||||
|
"disconnect": [];
|
||||||
|
"error": [error: Error];
|
||||||
|
"exit": [code: number, signal: string];
|
||||||
|
"listening": [address: Address];
|
||||||
|
"message": [message: any, handle: child_process.SendHandle];
|
||||||
|
"online": [];
|
||||||
|
}
|
||||||
|
interface ClusterSettings {
|
||||||
|
/**
|
||||||
|
* List of string arguments passed to the Node.js executable.
|
||||||
|
* @default process.execArgv
|
||||||
|
*/
|
||||||
|
execArgv?: string[] | undefined;
|
||||||
|
/**
|
||||||
|
* File path to worker file.
|
||||||
|
* @default process.argv[1]
|
||||||
|
*/
|
||||||
|
exec?: string | undefined;
|
||||||
|
/**
|
||||||
|
* String arguments passed to worker.
|
||||||
|
* @default process.argv.slice(2)
|
||||||
|
*/
|
||||||
|
args?: readonly string[] | undefined;
|
||||||
|
/**
|
||||||
|
* Whether or not to send output to parent's stdio.
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
silent?: boolean | undefined;
|
||||||
|
/**
|
||||||
|
* Configures the stdio of forked processes. Because the cluster module relies on IPC to function, this configuration must
|
||||||
|
* contain an `'ipc'` entry. When this option is provided, it overrides `silent`. See [`child_prcess.spawn()`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#child_processspawncommand-args-options)'s
|
||||||
|
* [`stdio`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#optionsstdio).
|
||||||
|
*/
|
||||||
|
stdio?: any[] | undefined;
|
||||||
|
/**
|
||||||
|
* Sets the user identity of the process. (See [`setuid(2)`](https://man7.org/linux/man-pages/man2/setuid.2.html).)
|
||||||
|
*/
|
||||||
|
uid?: number | undefined;
|
||||||
|
/**
|
||||||
|
* Sets the group identity of the process. (See [`setgid(2)`](https://man7.org/linux/man-pages/man2/setgid.2.html).)
|
||||||
|
*/
|
||||||
|
gid?: number | undefined;
|
||||||
|
/**
|
||||||
|
* Sets inspector port of worker. This can be a number, or a function that takes no arguments and returns a number.
|
||||||
|
* By default each worker gets its own port, incremented from the primary's `process.debugPort`.
|
||||||
|
*/
|
||||||
|
inspectPort?: number | (() => number) | undefined;
|
||||||
|
/**
|
||||||
|
* Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`.
|
||||||
|
* See [Advanced serialization for `child_process`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#advanced-serialization) for more details.
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
serialization?: "json" | "advanced" | undefined;
|
||||||
|
/**
|
||||||
|
* Current working directory of the worker process.
|
||||||
|
* @default undefined (inherits from parent process)
|
||||||
|
*/
|
||||||
|
cwd?: string | undefined;
|
||||||
|
/**
|
||||||
|
* Hide the forked processes console window that would normally be created on Windows systems.
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
windowsHide?: boolean | undefined;
|
||||||
|
}
|
||||||
|
interface Address {
|
||||||
|
address: string;
|
||||||
|
port: number;
|
||||||
|
/**
|
||||||
|
* The `addressType` is one of:
|
||||||
|
*
|
||||||
|
* * `4` (TCPv4)
|
||||||
|
* * `6` (TCPv6)
|
||||||
|
* * `-1` (Unix domain socket)
|
||||||
|
* * `'udp4'` or `'udp6'` (UDPv4 or UDPv6)
|
||||||
|
*/
|
||||||
|
addressType: 4 | 6 | -1 | "udp4" | "udp6";
|
||||||
|
}
|
||||||
|
interface ClusterEventMap {
|
||||||
|
"disconnect": [worker: Worker];
|
||||||
|
"exit": [worker: Worker, code: number, signal: string];
|
||||||
|
"fork": [worker: Worker];
|
||||||
|
"listening": [worker: Worker, address: Address];
|
||||||
|
"message": [worker: Worker, message: any, handle: child_process.SendHandle];
|
||||||
|
"online": [worker: Worker];
|
||||||
|
"setup": [settings: ClusterSettings];
|
||||||
|
}
|
||||||
|
interface Cluster extends InternalEventEmitter<ClusterEventMap> {
|
||||||
|
/**
|
||||||
|
* A `Worker` object contains all public information and method about a worker.
|
||||||
|
* In the primary it can be obtained using `cluster.workers`. In a worker
|
||||||
|
* it can be obtained using `cluster.worker`.
|
||||||
|
* @since v0.7.0
|
||||||
|
*/
|
||||||
|
Worker: typeof Worker;
|
||||||
|
disconnect(callback?: () => void): void;
|
||||||
|
/**
|
||||||
|
* Spawn a new worker process.
|
||||||
|
*
|
||||||
|
* This can only be called from the primary process.
|
||||||
|
* @param env Key/value pairs to add to worker process environment.
|
||||||
|
* @since v0.6.0
|
||||||
|
*/
|
||||||
|
fork(env?: any): Worker;
|
||||||
|
/** @deprecated since v16.0.0 - use isPrimary. */
|
||||||
|
readonly isMaster: boolean;
|
||||||
|
/**
|
||||||
|
* True if the process is a primary. This is determined by the `process.env.NODE_UNIQUE_ID`. If `process.env.NODE_UNIQUE_ID`
|
||||||
|
* is undefined, then `isPrimary` is `true`.
|
||||||
|
* @since v16.0.0
|
||||||
|
*/
|
||||||
|
readonly isPrimary: boolean;
|
||||||
|
/**
|
||||||
|
* True if the process is not a primary (it is the negation of `cluster.isPrimary`).
|
||||||
|
* @since v0.6.0
|
||||||
|
*/
|
||||||
|
readonly isWorker: boolean;
|
||||||
|
/**
|
||||||
|
* The scheduling policy, either `cluster.SCHED_RR` for round-robin or `cluster.SCHED_NONE` to leave it to the operating system. This is a
|
||||||
|
* global setting and effectively frozen once either the first worker is spawned, or [`.setupPrimary()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clustersetupprimarysettings)
|
||||||
|
* is called, whichever comes first.
|
||||||
|
*
|
||||||
|
* `SCHED_RR` is the default on all operating systems except Windows. Windows will change to `SCHED_RR` once libuv is able to effectively distribute
|
||||||
|
* IOCP handles without incurring a large performance hit.
|
||||||
|
*
|
||||||
|
* `cluster.schedulingPolicy` can also be set through the `NODE_CLUSTER_SCHED_POLICY` environment variable. Valid values are `'rr'` and `'none'`.
|
||||||
|
* @since v0.11.2
|
||||||
|
*/
|
||||||
|
schedulingPolicy: number;
|
||||||
|
/**
|
||||||
|
* After calling [`.setupPrimary()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clustersetupprimarysettings)
|
||||||
|
* (or [`.fork()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clusterforkenv)) this settings object will contain
|
||||||
|
* the settings, including the default values.
|
||||||
|
*
|
||||||
|
* This object is not intended to be changed or set manually.
|
||||||
|
* @since v0.7.1
|
||||||
|
*/
|
||||||
|
readonly settings: ClusterSettings;
|
||||||
|
/** @deprecated since v16.0.0 - use [`.setupPrimary()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clustersetupprimarysettings) instead. */
|
||||||
|
setupMaster(settings?: ClusterSettings): void;
|
||||||
|
/**
|
||||||
|
* `setupPrimary` is used to change the default 'fork' behavior. Once called, the settings will be present in `cluster.settings`.
|
||||||
|
*
|
||||||
|
* Any settings changes only affect future calls to [`.fork()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clusterforkenv)
|
||||||
|
* and have no effect on workers that are already running.
|
||||||
|
*
|
||||||
|
* The only attribute of a worker that cannot be set via `.setupPrimary()` is the `env` passed to
|
||||||
|
* [`.fork()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clusterforkenv).
|
||||||
|
*
|
||||||
|
* The defaults above apply to the first call only; the defaults for later calls are the current values at the time of
|
||||||
|
* `cluster.setupPrimary()` is called.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import cluster from 'node:cluster';
|
||||||
|
*
|
||||||
|
* cluster.setupPrimary({
|
||||||
|
* exec: 'worker.js',
|
||||||
|
* args: ['--use', 'https'],
|
||||||
|
* silent: true,
|
||||||
|
* });
|
||||||
|
* cluster.fork(); // https worker
|
||||||
|
* cluster.setupPrimary({
|
||||||
|
* exec: 'worker.js',
|
||||||
|
* args: ['--use', 'http'],
|
||||||
|
* });
|
||||||
|
* cluster.fork(); // http worker
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* This can only be called from the primary process.
|
||||||
|
* @since v16.0.0
|
||||||
|
*/
|
||||||
|
setupPrimary(settings?: ClusterSettings): void;
|
||||||
|
/**
|
||||||
|
* A reference to the current worker object. Not available in the primary process.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import cluster from 'node:cluster';
|
||||||
|
*
|
||||||
|
* if (cluster.isPrimary) {
|
||||||
|
* console.log('I am primary');
|
||||||
|
* cluster.fork();
|
||||||
|
* cluster.fork();
|
||||||
|
* } else if (cluster.isWorker) {
|
||||||
|
* console.log(`I am worker #${cluster.worker.id}`);
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
* @since v0.7.0
|
||||||
|
*/
|
||||||
|
readonly worker?: Worker;
|
||||||
|
/**
|
||||||
|
* A hash that stores the active worker objects, keyed by `id` field. This makes it easy to loop through all the workers. It is only available in the primary process.
|
||||||
|
*
|
||||||
|
* A worker is removed from `cluster.workers` after the worker has disconnected _and_ exited. The order between these two events cannot be determined in advance. However, it
|
||||||
|
* is guaranteed that the removal from the `cluster.workers` list happens before the last `'disconnect'` or `'exit'` event is emitted.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* import cluster from 'node:cluster';
|
||||||
|
*
|
||||||
|
* for (const worker of Object.values(cluster.workers)) {
|
||||||
|
* worker.send('big announcement to all workers');
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
* @since v0.7.0
|
||||||
|
*/
|
||||||
|
readonly workers?: NodeJS.Dict<Worker>;
|
||||||
|
readonly SCHED_NONE: number;
|
||||||
|
readonly SCHED_RR: number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var cluster: cluster.Cluster;
|
||||||
|
export = cluster;
|
||||||
|
}
|
||||||
|
declare module "cluster" {
|
||||||
|
import cluster = require("node:cluster");
|
||||||
|
export = cluster;
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user