PageSourceSearch

https://sequelize.org/assets/js/538e609e.e78b7ecd.js

js sequelize.org collected 2026-09-24 08:28:10 UTC 22,721 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([[3522],{67398(e,t,n){n.d(t,{Ay:()=>o,RM:()=>i});var s=n(74848),r=n(28453);const i=[];function l(e){const t={a:"a",code:"code",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"Connection Options are used to configure a connection to the database."}),"\n",(0,s.jsxs)(t.p,{children:["The simplest way to use them is at the root of the configuration object. These options can also be\nused in the ",(0,s.jsx)(t.a,{href:"/docs/v7/other-topics/read-replication",children:(0,s.jsx)(t.code,{children:"replication"})})," option to customize the connection for each replica,\nand can be modified by the ",(0,s.jsx)(t.a,{href:"/docs/v7/other-topics/hooks",children:(0,s.jsx)(t.code,{children:"beforeConnect"})})," hook on a connection-by-connection basis."]})]})}function o(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},68081(e,t,n){n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>d,default:()=>f,frontMatter:()=>c,metadata:()=>s,toc:()=>u});const s=JSON.parse('{"id":"databases/mssql","title":"MS SQL Server","description":"See Releases to see which versions of SQL Server are supported.","source":"@site/docs/databases/mssql.mdx","sourceDirName":"databases","slug":"/databases/mssql","permalink":"/docs/v7/databases/mssql","draft":false,"unlisted":false,"editUrl":"https://github.com/sequelize/website/tree/main/docs/databases/mssql.mdx","tags":[],"version":"current","lastUpdatedBy":"renovate[bot]","lastUpdatedAt":1775795365000,"sidebarPosition":1,"frontMatter":{"title":"MS SQL Server","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"MariaDB","permalink":"/docs/v7/databases/mariadb"},"next":{"title":"MySQL","permalink":"/docs/v7/databases/mysql"}}');var r=n(74848),i=n(28453),l=n(4865),o=n(19365),a=n(67398);const c={title:"MS SQL Server",sidebar_position:1},d="Sequelize for Microsoft SQL Server",h={},u=[{value:"Connection Options",id:"connection-options",level:2},...a.RM,{value:"Domain Account",id:"domain-account",level:3}];function x(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"sequelize-for-microsoft-sql-server",children:"Sequelize for Microsoft SQL Server"})}),"\n",(0,r.jsx)(t.admonition,{title:"Version Compatibility",type:"info",children:(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"/releases#microsoft-sql-server-mssql-support-table",children:"Releases"})," to see which versions of SQL Server are supported."]})}),"\n",(0,r.jsxs)(t.p,{children:["To use Sequelize with Microsoft SQL Server, you need to install the ",(0,r.jsx)(t.code,{children:"@sequelize/mssql"})," dialect package:"]}),"\n",(0,r.jsxs)(l.A,{groupId:"npm2yarn",children:[(0,r.jsx)(o.A,{value:"npm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npm i @sequelize/mssql\n"})})}),(0,r.jsx)(o.A,{value:"yarn",label:"Yarn",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"yarn add @sequelize/mssql\n"})})}),(0,r.jsx)(o.A,{value:"pnpm",label:"pnpm",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"pnpm add @sequelize/mssql\n"})})}),(0,r.jsx)(o.A,{value:"bun",label:"Bun",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"bun add @sequelize/mssql\n"})})})]}),"\n",(0,r.jsxs)(t.p,{children:["Then use the ",(0,r.jsx)(t.code,{children:"MsSqlDialect"})," class as the dialect option in your Sequelize instance:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:"import { Sequelize } from '@sequelize/core';\nimport { MsSqlDialect } from '@sequelize/mssql';\n\nconst sequelize = new Sequelize({\n  dialect: MsSqlDialect,\n  server: 'localhost',\n  port: 1433,\n  database: 'database',\n  authentication: {\n    type: 'default',\n    options: {\n      userName: 'username',\n      password: 'password',\n    },\n  },\n});\n"})}),"\n",(0,r.jsx)(t.h2,{id:"connection-options",children:"Connection Options"}),"\n","\n",(0,r.jsx)(a.Ay,{}),"\n",(0,r.jsxs)(t.p,{children:["The following options are passed as-is to the ",(0,r.jsx)(t.code,{children:"tedious"})," package that Sequelize uses to connect to SQL Server.\nPlease refer to the ",(0,r.jsx)(t.a,{href:"https://tediousjs.github.io/tedious/api-connection.html#function_newConnection",children:"Tedious documentation"})," for more information about what each of these options do."]}),"\n",(0,r.jsx)(t.p,{children:"For convenience, here is an edited copy of the documentation that only includes the options that are accepted by Sequelize:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{style:{textAlign:"left"},children:"Option"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"server"})}),(0,r.jsx)(t.td,{children:"Hostname to connect to."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"localAddress"})}),(0,r.jsx)(t.td,{children:"Network interface (ip address) to use when connecting to SQL Server."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"database"})}),(0,r.jsx)(t.td,{children:"Database to connect to."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"port"})}),(0,r.jsxs)(t.td,{children:["Port to connect to (default: 1433).",(0,r.jsx)("br",{}),"Mutually exclusive with ",(0,r.jsx)(t.code,{children:"instanceName"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"instanceName"})}),(0,r.jsxs)(t.td,{children:["The instance name to connect to. The SQL Server Browser service must be running on the database server, and UDP port 1434 on the database server must be reachable.",(0,r.jsx)("br",{}),"Mutually exclusive with ",(0,r.jsx)(t.code,{children:"port"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"authentication"})}),(0,r.jsxs)(t.td,{children:["The authentication options. Please see which sub-options can be used on ",(0,r.jsx)(t.a,{href:"https://tediousjs.github.io/tedious/api-connection.html#function_newConnection",children:"the Tedious documentation"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"abortTransactionOnError"})}),(0,r.jsxs)(t.td,{children:["A boolean determining whether to rollback a transaction automatically if any error is encountered during the given transaction's execution. This sets the value for SET XACT_ABORT during the initial SQL phase of a connection (",(0,r.jsx)(t.a,{href:"https://msdn.microsoft.com/en-us
1/library/ms188792.aspx",children:"documentation"}),")."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"appName"})}),(0,r.jsx)(t.td,{children:"Application name used for identifying a specific application in profiling, logging or tracing tools of SQL Server. (default: Tedious)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"cancelTimeout"})}),(0,r.jsx)(t.td,{children:"The number of milliseconds before the cancel (abort) of a request is considered failed (default: 5000)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"connectionRetryInterval"})}),(0,r.jsx)(t.td,{children:"Number of milliseconds before retrying to establish connection, in case of transient failure. (default: 500)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"connectTimeout"})}),(0,r.jsx)(t.td,{children:"The number of milliseconds before the attempt to connect is considered failed (default: 15000)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"connectionIsolationLevel"})}),(0,r.jsxs)(t.td,{children:["The default isolation level for new connections. All out-of-transaction queries are executed with this setting. The isolation levels are available from the ",(0,r.jsx)(t.code,{children:"TEDIOUS_ISOLATION_LEVEL"})," export. (default: ",(0,r.jsx)(t.code,{children:"READ_COMMITED"}),")."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"cryptoCredentialsDetails"})}),(0,r.jsxs)(t.td,{children:["When ",(0,r.jsx)(t.code,{children:"encrypt"})," is set to true, an object may be supplied that will be used as the secureContext field when creating a ",(0,r.jsx)(t.a,{href:"https://nodejs.org/docs/latest/api/tls.html#class-tlstlssocket",children:(0,r.jsx)(t.code,{children:"TLSSocket"})}),". The available options are listed under ",(0,r.jsx)(t.a,{href:"https://nodejs.org/docs/latest/api/tls.html#tlscreatesecurecontextoptions",children:(0,r.jsx)(t.code,{children:"tls.createSecureContext"})}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"datefirst"})}),(0,r.jsx)(t.td,{children:"An integer representing the first day of the week. (default: 7)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"dateFormat"})}),(0,r.jsxs)(t.td,{children:["A string representing the date format. (default: ",(0,r.jsx)(t.code,{children:"mdy"}),")"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"debug"})}),(0,r.jsxs)(t.td,{children:["See ",(0,r.jsx)(t.code,{children:"options.debug"})," in ",(0,r.jsx)(t.a,{href:"https://tediousjs.github.io/tedious/api-connection.html#function_newConnection",children:"the Tedious documentation"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"enableAnsiNull"})}),(0,r.jsx)(t.td,{children:"Controls the way null values should be used during comparison operation. (default: true)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"enableAnsiPadding"})}),(0,r.jsx)(t.td,{children:"Controls if padding should be applied for values shorter than the size of defined column. (default: true)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"enableAnsiWarnings"})}),(0,r.jsxs)(t.td,{children:["If true, SQL Server will follow ISO standard behavior during various error conditions. For details, see ",(0,r.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/sql/t-sql/statements/set-ansi-warnings-transact-sql",children:"documentation"}),". (default: true)"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"enableArithAbort"})}),(0,r.jsxs)(t.td,{children:["Ends a query when an overflow or divide-by-zero error occurs during query execution. See ",(0,r.jsx)(t.a,{href:"https://docs.microsoft.com/en-us
1/sql/t-sql/statements/set-arithabort-transact-sql?view=sql-server-2017",children:"documentation"})," for more details. (default: true)"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"enableConcatNullYieldsNull"})}),(0,r.jsx)(t.td,{children:"If true, concatenating a null value with a string results in a NULL value. (default: true)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"enableCursorCloseOnCommit"})}),(0,r.jsx)(t.td,{children:"If true, cursors will be closed when a transaction is committed or rolled back. (default: null)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"enableImplicitTransactions"})}),(0,r.jsx)(t.td,{children:"Sets the connection to either implicit or autocommit transaction mode. (default: false)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"enableNumericRoundabort"})}),(0,r.jsx)(t.td,{children:"If false, error is not generated during loss of precession. (default: false)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"encrypt"})}),(0,r.jsxs)(t.td,{children:["A string value set to ",(0,r.jsx)(t.code,{children:"'strict'"})," enables the TDS 8.0 protocol. Otherwise, encrypt can be set to a boolean value which determines whether or not the connection will be encrypted under the TDS 7.x protocol. (default: true)"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"fallbackToDefaultDb"})}),(0,r.jsx)(t.td,{children:"By default, if the database requested by options.database cannot be accessed, the connection will fail with an error. However, if this is set to true, then the user's default database will be used instead (Default: false)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"language"})}),(0,r.jsx)(t.td,{children:"Specifies the language environment for the session. The session language determines the datetime formats and system messages. (default: us_english)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"maxRetriesOnTransientErrors"})}),(0,r.jsx)(t.td,{children:"The maximum number of connection retries for transient errors. (default: 3)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"multiSubnetFailover"})}),(0,r.jsxs)(t.td,{children:["Sets the ",(0,r.jsx)(t.code,{children:"MultiSubnetFailover = True"})," parameter, which can help minimize the client recovery latency when failovers occur. (default: false)."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"packetSize"})}),(0,r.jsx)(t.td,{children:"The size of TDS packets (subject to negotiation with the server). Should be a power of 2. (default: 4096)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"readOnlyIntent"})}),(0,r.jsx)(t.td,{children:"A boolean, determining whether the connection will request read only access from a SQL Server Availability Group. For more information, see here. (default: false)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"requestTimeout"})}),(0,r.jsx)(t.td,{children:"The number of milliseconds before a request is considered failed, or 0 for no timeout (default: 15000)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"tdsVersion"})}),(0,r.jsxs)(t.td,{children:["The version of TDS to use. If server doesn't support specified version, negotiated version is used instead. The versions are available from the ",(0,r.jsx)(t.code,{children:"TDS_VERSION"})," export. (default: 7_4)."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"textsize"})}),(0,r.jsx)(t.td,{children:"Specifies the size of varchar(max), nvarchar(max), varbinary(max), text, ntext, and image data returned by a SELECT statement. (default: 2147483647) (Textsize is set by a numeric value.)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{style:{textAlign:"left"},children:(0,r.jsx)(t.code,{children:"trustServerCertificate"})}),(0,r.jsx)(t.td,{children:'If "true", the SQL Server SSL certificate is automatically trusted when the communication layer is encrypted using SSL. If "false", the SQL Server validates the server SSL certificate. If the server certificate validation fails, the driver raises an error and terminates the connection. Make sure the value passed to serverName exactly matches the C
1ommon Name (CN) or DNS name in the Subject Alternate Name in the server certificate for an SSL connection to succeed. (default: true).'})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"domain-account",children:"Domain Account"}),"\n",(0,r.jsx)(t.p,{children:"In order to connect with a domain account, use the following format."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-ts",children:"const sequelize = new Sequelize({\n  dialect: MsSqlDialect,\n  instanceName: 'SQLEXPRESS',\n  authentication: {\n    type: 'ntlm',\n    options: {\n      domain: 'yourDomain',\n      userName: 'username',\n      password: 'password',\n    },\n  },\n});\n"})})]})}function f(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(x,{...e})}):x(e)}},19365(e,t,n){n.d(t,{A:()=>a});n(96540);var s=n(34164),r=n(47751);const i="tabItem_Ymn6";var l=n(74848);function o({children:e,className:t,hidden:n}){return(0,l.jsx)("div",{role:"tabpanel",className:(0,s.A)(i,t),hidden:n,children:e})}function a({children:e,className:t,value:n}){const{selectedValue:s,lazy:i}=(0,r.uc)(),a=n===s;return!a&&i?null:(0,l.jsx)(o,{className:t,hidden:!a,children:e})}},4865(e,t,n){n.d(t,{A:()=>f});n(96540);var s=n(34164),r=n(17559),i=n(47751),l=n(23104),o=n(92303);const a="tabList__CuJ",c="tabItem_LNqP";var d=n(74848);function h({className:e}){const{selectedValue:t,selectValue:n,tabValues:r,block:o}=(0,i.uc)(),a=[],{blockElementScrollPositionUntilNextRender:h}=(0,l.a_)(),u=e=>{const s=e.currentTarget,i=a.indexOf(s),l=r[i].value;l!==t&&(h(s),n(l))},x=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=a.indexOf(e.currentTarget)+1;t=a[n]??a[0];break}case"ArrowLeft":{const n=a.indexOf(e.currentTarget)-1;t=a[n]??a[a.length-1];break}}t?.focus()};return(0,d.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":o},e),children:r.map(({value:e,label:n,attributes:r})=>(0,d.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{a.push(e)},onKeyDown:x,onClick:u,...r,className:(0,s.A)("tabs__item",c,r?.className,{"tabs__item--active":t===e}),children:n??e},e))})}function u({children:e}){return(0,d.jsx)("div",{className:"margin-top--md",children:e})}function x({className:e,children:t}){return(0,d.jsxs)("div",{className:(0,s.A)(r.G.tabs.container,"tabs-container",a),children:[(0,d.jsx)(h,{className:e}),(0,d.jsx)(u,{children:t})]})}function f(e){const t=(0,o.A)(),n=(0,i.OC)(e);return(0,d.jsx)(i.O_,{value:n,children:(0,d.jsx)(x,{className:e.className,children:(0,i.vT)(e.children)})},String(t))}},47751(e,t,n){n.d(t,{OC:()=>f,O_:()=>p,uc:()=>m,vT:()=>d});var s=n(96540),r=n(56347),i=n(205),l=n(57485),o=n(70679),a=n(31682),c=n(74848);function d(e){return s.Children.toArray(e).filter(e=>"\n"!==e)}function h(e){const{values:t,children:n}=e;return(0,s.useMemo)(()=>{const e=t??function(e){return s.Children.toArray(e).flatMap(e=>{if(!e)return[];if((0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return[e];const t="string"==typeof e.type?e.type:e.type.name;throw new Error(`Docusaurus error: Bad <Tabs> child <${t}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.\nIf you do not want to pass on a "value" prop to the direct children of <Tabs>, you can also pass an explicit <Tabs values={...}> prop.`)}).map(({props:{value:e,label:t,attributes:n,default:s}})=>({value:e,label:t,attributes:n,default:s}))}(n);return function(e){const t=(0,a.XI)(e,(e,t)=>e.value===t.value);if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map(e=>`'${e.value}'`).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e},[t,n])}function u({value:e,tabValues:t}){return t.some(t=>t.value===e)}function x({queryString:e=!1,groupId:t}){const n=(0,r.W6)(),i=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,l.aZ)(i),(0,s.useCallback)(e=>{if(!i)return;const t=new URLSearchParams(n.location.search);t.set(i,e),n.replace({...n.location,search:t.toString()})},[i,n])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:r}
1=e,l=h(e),[a,c]=(0,s.useState)(()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!u({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=t.find(e=>e.default)??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:l})),[d,f]=x({queryString:n,groupId:r}),[j,m]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,o.Dv)(t);return[n,(0,s.useCallback)(e=>{t&&r.set(e)},[t,r])]}({groupId:r}),p=(()=>{const e=d??j;return u({value:e,tabValues:l})?e:null})();(0,i.A)(()=>{p&&c(p)},[p]);return{selectedValue:a,selectValue:(0,s.useCallback)(e=>{if(!u({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);c(e),f(e),m(e)},[f,m,l]),tabValues:l,lazy:e.lazy??!1,block:e.block??!1}}const j=(0,s.createContext)(null);function m(){const e=s.useContext(j);if(!e)throw new Error("useTabsContext() must be used within a Tabs component");return e}function p(e){return(0,c.jsx)(j.Provider,{value:e.value,children:e.children})}},28453(e,t,n){n.d(t,{R:()=>l,x:()=>o});var s=n(96540);const r={},i=s.createContext(r);function l(e){const t=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.