@altimateai/extension-components 0.0.10-beta.1 → 0.0.10-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +34 -33
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,20 +1,21 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("vscode"),h=require("@extension"),se=require("python-bridge"),le=require("fs"),X=require("@jupyterlab/services");class ce{_disposables=[];dispose(){this._disposables.forEach(e=>e.dispose())}provideCellStatusBarItems(e){if(e.document.languageId!=="jinja-sql")return;const t=new l.NotebookCellStatusBarItem("$(globe) Profile your query",l.NotebookCellStatusBarAlignment.Left);return t.command="dbtPowerUser.datapilotProfileYourQuery",t.tooltip="Profile your query",[]}}const de=["python","sql","jinja-sql"],ue="jinja-sql",re=".notebook",ie="datapilot",O="datapilot-notebook";var pe=Object.defineProperty,he=Object.getOwnPropertyDescriptor,me=(n,e,t,o)=>{for(var s=o>1?void 0:o?he(e,t):e,r=n.length-1,i;r>=0;r--)(i=n[r])&&(s=(o?i(e,t,s):i(s))||s);return o&&s&&pe(e,t,s),s};exports.NotebookService=class{constructor(e){this.notebookKernel=e,this.disposables.push(this.notebookKernel.onNotebookCellChangeEvent(t=>{this.onNotebookCellChanged(t)}))}disposables=[];cellByNotebookAutocompleteMap=new Map;dispose(){for(;this.disposables.length;){const e=this.disposables.pop();e&&e.dispose()}}getCellByNotebookAutocompleteMap(){return this.cellByNotebookAutocompleteMap}onNotebookCellChanged(e){if(!e.fragment)return;const t={cellId:e.cellId,fragment:e.fragment,languageId:e.languageId},o=this.cellByNotebookAutocompleteMap.get(e.notebook)||[];switch(e.event){case"add":case"update":this.cellByNotebookAutocompleteMap.set(e.notebook,[...o.filter(s=>s.cellId!==e.cellId),t]);break;case"delete":this.cellByNotebookAutocompleteMap.set(e.notebook,o.filter(s=>s.cellId!==e.cellId));break}}};exports.NotebookService=me([h.provideSingleton(exports.NotebookService)],exports.NotebookService);var W=(n=>(n.error="application/vnd.code.notebook.error",n.stderr="application/vnd.code.notebook.stderr",n.stdout="application/vnd.code.notebook.stdout",n))(W||{});const ge=["text/plain","text/markdown","application/vnd.code.notebook.stderr","application/vnd.code.notebook.stdout"],Z=["application/vnd.*","application/vdom.*","application/geo+json","application/x-nteract-model-debug+json","text/html","application/javascript","image/gif","text/latex","text/markdown","image/png","image/svg+xml","image/jpeg","application/json","text/plain"],M=new Map;M.set("display_data",z);M.set("error",Ce);M.set("execute_result",z);M.set("stream",Ne);M.set("update_display_data",z);function G(n){const e=M.get(n.output_type);let t;return e?t=e(n):(console.warn(`Unable to translate cell from ${n.output_type} to NotebookCellData for VS Code.`),t=z(n)),t}function Q(n){const e={outputType:n.output_type};switch(n.transient&&(e.transient=n.transient),n.output_type){case"display_data":case"execute_result":case"update_display_data":{e.executionCount=n.execution_count,e.metadata=n.metadata?JSON.parse(JSON.stringify(n.metadata)):{};break}}return e}function z(n){const e=Q(n);("image/svg+xml"in n.data||"image/png"in n.data)&&(e.__displayOpenPlotIcon=!0);const t=[];if(n.data)for(const o in n.data)t.push(be(o,n.data[o]));return new l.NotebookCellOutput(fe(t),e)}function fe(n){return n.sort((e,t)=>{const o=(i,a)=>(i.endsWith(".*")&&(i=i.substr(0,i.indexOf(".*"))),a.startsWith(i));let s=Z.findIndex(i=>o(i,e.mime)),r=Z.findIndex(i=>o(i,t.mime));return ee(e)&&(s=-1),ee(t)&&(r=-1),s=s===-1?100:s,r=r===-1?100:r,s-r})}function ee(n){if(n.mime.startsWith("application/vnd."))try{return new TextDecoder().decode(n.data).length===0}catch{console.error(`Failed to decode ${n.mime}`,n.data)}return!1}function be(n,e){if(!e)return l.NotebookCellOutputItem.text("",n);try{if((n.startsWith("text/")||ge.includes(n))&&(Array.isArray(e)||typeof e=="string")){const t=Array.isArray(e)?B(e):e;return l.NotebookCellOutputItem.text(t,n)}else return n.startsWith("image/")&&typeof e=="string"&&n!=="image/svg+xml"?new l.NotebookCellOutputItem(ye(e),n):typeof e=="object"&&e!==null&&!Array.isArray(e)?l.NotebookCellOutputItem.text(JSON.stringify(e),n):(e=Array.isArray(e)?B(e):e,l.NotebookCellOutputItem.text(e,n))}catch(t){return console.error(`Failed to convert ${n} output to a buffer ${typeof e}, ${e}`,t),l.NotebookCellOutputItem.text("")}}function ye(n){return typeof Buffer<"u"&&typeof Buffer.from=="function"?Buffer.from(n,"base64"):Uint8Array.from(atob(n),e=>e.charCodeAt(0))}function B(n){if(Array.isArray(n)){let e="";for(let t=0;t<n.length;t+=1){const o=n[t];t<n.length-1&&!o.endsWith(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("vscode"),p=require("@extension"),le=require("python-bridge"),pe=require("fs"),ne=require("@jupyterlab/services");function P(n,e,t,o){var r=arguments.length,s=r<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,o);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(s=(r<3?i(s):r>3?i(e,t,s):i(e,t))||s);return r>3&&s&&Object.defineProperty(e,t,s),s}function me(n,e,t){return Object.defineProperty(n,"name",{configurable:!0,value:e})}function D(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}const he=n=>"getCells"in n?n.getCells():n.cells,be=n=>n instanceof u.NotebookCellData?n.value:n.document.getText(),ge=n=>n instanceof u.NotebookCellData?n.languageId:n.document.languageId,ee=(n,e,t)=>{var r;const o=[];for(const s of he(n))o.push({cell_type:s.kind,source:be(s).split(/\r?\n/g),languageId:ge(s),metadata:s.metadata,outputs:t?s.outputs:void 0});return{cells:o,metadata:{...n.metadata,name:e,createdAt:((r=n.metadata)==null?void 0:r.createdAt)||new Date().toISOString(),updatedAt:new Date().toISOString()}}},j=()=>Math.random().toString(36).substr(2,9);function fe(){const n=new Date,e=n.toLocaleDateString("en-GB").replace(/\//g,"-"),t=n.toLocaleTimeString("en-GB",{hour12:!1}).replace(/:/g,"-");return`${e}-${t}`}let V=class{dispose(){throw new Error("Method not implemented.")}async deserializeNotebook(e,t){const o=new TextDecoder().decode(e);let r;try{r=JSON.parse(o)}catch{r={cells:[]}}const s=r.cells.map(a=>{var c;const l=new u.NotebookCellData(a.cell_type,(c=a.source)==null?void 0:c.join(`
2
+ `),a.languageId);return l.metadata=a.metadata,l.outputs=a.outputs,l}),i=new u.NotebookData(s);return i.metadata=r.metadata,i}async serializeNotebook(e,t){const o=ee(e);return new TextEncoder().encode(JSON.stringify(o))}};V=P([p.provideSingleton(V)],V);var I;(function(n){n.error="application/vnd.code.notebook.error",n.stderr="application/vnd.code.notebook.stderr",n.stdout="application/vnd.code.notebook.stdout"})(I||(I={}));const ye=["text/plain","text/markdown",I.stderr,I.stdout],re=["application/vnd.*","application/vdom.*","application/geo+json","application/x-nteract-model-debug+json","text/html","application/javascript","image/gif","text/latex","text/markdown","image/png","image/svg+xml","image/jpeg","application/json","text/plain"],x=new Map;x.set("display_data",J);x.set("error",Ce);x.set("execute_result",J);x.set("stream",Se);x.set("update_display_data",J);function Q(n){const e=x.get(n.output_type);let t;return e?t=e(n):(console.warn(`Unable to translate cell from ${n.output_type} to NotebookCellData for VS Code.`),t=J(n)),t}function oe(n){const e={outputType:n.output_type};switch(n.transient&&(e.transient=n.transient),n.output_type){case"display_data":case"execute_result":case"update_display_data":{e.executionCount=n.execution_count,e.metadata=n.metadata?JSON.parse(JSON.stringify(n.metadata)):{};break}}return e}function J(n){const e=oe(n);("image/svg+xml"in n.data||"image/png"in n.data)&&(e.__displayOpenPlotIcon=!0);const t=[];if(n.data)for(const o in n.data)t.push(ke(o,n.data[o]));return new u.NotebookCellOutput(we(t),e)}function we(n){return n.sort((e,t)=>{const o=(i,a)=>(i.endsWith(".*")&&(i=i.substr(0,i.indexOf(".*"))),a.startsWith(i));let r=re.findIndex(i=>o(i,e.mime)),s=re.findIndex(i=>o(i,t.mime));return se(e)&&(r=-1),se(t)&&(s=-1),r=r===-1?100:r,s=s===-1?100:s,r-s})}function se(n){if(n.mime.startsWith("application/vnd."))try{return new TextDecoder().decode(n.data).length===0}catch{console.error(`Failed to decode ${n.mime}`,n.data)}return!1}function ke(n,e){if(!e)return u.NotebookCellOutputItem.text("",n);try{if((n.startsWith("text/")||ye.includes(n))&&(Array.isArray(e)||typeof e=="string")){const t=Array.isArray(e)?H(e):e;return u.NotebookCellOutputItem.text(t,n)}else return n.startsWith("image/")&&typeof e=="string"&&n!=="image/svg+xml"?new u.NotebookCellOutputItem(Te(e),n):typeof e=="object"&&e!==null&&!Array.isArray(e)?u.NotebookCellOutputItem.text(JSON.stringify(e),n):(e=Array.isArray(e)?H(e):e,u.NotebookCellOutputItem.text(e,n))}catch(t){return console.error(`Failed to convert ${n} output to a buffer ${typeof e}, ${e}`,t),u.NotebookCellOutputItem.text("")}}function Te(n){return typeof Buffer<"u"&&typeof Buffer.from=="function"?Buffer.from(n,"base64"):Uint8Array.from(atob(n),e=>e.charCodeAt(0))}function H(n){if(Array.isArray(n)){let e="";for(let t=0;t<n.length;t+=1){const o=n[t];t<n.length-1&&!o.endsWith(`
2
3
  `)?e=e.concat(`${o}
3
- `):e=e.concat(o)}return e}return n.toString()}function we(n){let e=n;do n=e,e=n.replace(/[^\n]\x08/gm,"");while(e.length<n.length);return n}function ke(n){for(n=n.replace(/\r+\n/gm,`
4
- `);n.search(/\r[^$]/g)>-1;){const e=n.match(/^(.*)\r+/m)[1];let t=n.match(/\r+(.*)$/m)[1];t=t+e.slice(t.length,e.length),n=n.replace(/\r+.*$/m,"\r").replace(/^.*\r/m,t)}return n}function _e(n){return ke(we(n))}function j(n){if(n.parent_header&&"msg_id"in n.parent_header)return n.parent_header.msg_id}function Te(n){if(Object.prototype.hasOwnProperty.call(n,"text/html")){const e=n["text/html"];typeof e=="string"&&e.includes('<iframe id="tensorboard-frame-')&&(n["text/html"]=e.replace(/new URL\((.*), window.location\)/,'new URL("http://localhost")'))}return n}const Ee="e976ee50-99ed-4aba-9b6b-9dcd5634d07d:IPyWidgets:";function H(n){let e=typeof n=="string"?n:"";return typeof n!="string"&&"content"in n&&"code"in n.content&&typeof n.content.code=="string"&&(e=n.content.code),!e.includes(Ee)}function Ne(n){const e=B(n.text),t=n.name==="stderr"?l.NotebookCellOutputItem.stderr:l.NotebookCellOutputItem.stdout;return new l.NotebookCellOutput([t(e)],Q(n))}function Ce(n){return n=n||{output_type:"error",ename:"",evalue:"",traceback:[]},new l.NotebookCellOutput([l.NotebookCellOutputItem.error({name:(n==null?void 0:n.ename)||"",message:(n==null?void 0:n.evalue)||"",stack:((n==null?void 0:n.traceback)||[]).join(`
5
- `)})],{...Q(n),originalError:n})}var J;(n=>{n.GeneratedThemeName="ipython-theme",n.MatplotLibDefaultParams="_VSCode_defaultMatplotlib_Params",n.MatplotLibFigureFormats="_VSCode_matplotLib_FigureFormats",n.DefaultCodeCellMarker="# %%",n.DefaultCommTarget="jupyter.widget",n.ALL_VARIABLES="ALL_VARIABLES",n.KERNEL_VARIABLES="KERNEL_VARIABLES",n.DEBUGGER_VARIABLES="DEBUGGER_VARIABLES",n.PYTHON_VARIABLES_REQUESTER="PYTHON_VARIABLES_REQUESTER",n.MULTIPLEXING_DEBUGSERVICE="MULTIPLEXING_DEBUGSERVICE",n.RUN_BY_LINE_DEBUGSERVICE="RUN_BY_LINE_DEBUGSERVICE",n.REMOTE_URI="https://remote/",n.REMOTE_URI_ID_PARAM="id",n.REMOTE_URI_HANDLE_PARAM="uriHandle",n.REMOTE_URI_EXTENSION_ID_PARAM="extensionId"})(J||(J={}));const U="application/vnd.jupyter.widget-view+json";class Se{constructor(e=null){this.scope=e,this._promise=new Promise((t,o)=>{this._resolve=t,this._reject=o})}_resolve;_reject;_resolved=!1;_rejected=!1;_promise;_value;get value(){return this._value}resolve(e){this._value=e,this._resolve.apply(this.scope?this.scope:this,arguments),this._resolved=!0}reject(e){this._reject.apply(this.scope?this.scope:this,arguments),this._rejected=!0}get promise(){return this._promise}get resolved(){return this._resolved}get rejected(){return this._rejected}get completed(){return this._rejected||this._resolved}}function Ie(n=null){return new Se(n)}var A={};Object.defineProperty(A,"__esModule",{value:!0});A.serialize=K=A.deserialize=void 0;function ve(n){let e;return typeof n=="string"?e=JSON.parse(n):e=De(n),e}var K=A.deserialize=ve;function Me(n){var e;let t;return!((e=n.buffers)===null||e===void 0)&&e.length?t=Oe(n):t=JSON.stringify(n),t}A.serialize=Me;function De(n){const e=new DataView(n),t=e.getUint32(0),o=[];if(t<2)throw new Error("Invalid incoming Kernel Message");for(let i=1;i<=t;i++)o.push(e.getUint32(i*4));const s=new Uint8Array(n.slice(o[0],o[1])),r=JSON.parse(new TextDecoder("utf8").decode(s));r.buffers=[];for(let i=1;i<t;i++){const a=o[i],c=o[i+1]||n.byteLength;r.buffers.push(new DataView(n.slice(a,c)))}return r}function Oe(n){const e=[],t=[],o=new TextEncoder;let s=[];n.buffers!==void 0&&(s=n.buffers,delete n.buffers);const r=o.encode(JSON.stringify(n));t.push(r.buffer);for(let d=0;d<s.length;d++){const p=s[d];t.push(ArrayBuffer.isView(p)?p.buffer:p)}const i=t.length;e.push(4*(i+1));for(let d=0;d+1<t.length;d++)e.push(e[e.length-1]+t[d].byteLength);const a=new Uint8Array(e[e.length-1]+t[t.length-1].byteLength),c=new DataView(a.buffer);c.setUint32(0,i);for(let d=0;d<e.length;d++)c.setUint32(4*(d+1),e[d]);for(let d=0;d<t.length;d++)a.set(new Uint8Array(t[d]),e[d]);return a.buffer}function xe(n){if(!n||!Array.isArray(n)||n.length===0)return;const e=[];for(let t=0;t<n.length;t+=1){const o=n[t];if("buffer"in o&&"byteOffset"in o){const s=o,r=[...new Uint8Array(s.buffer)];e.push({byteLength:s.byteLength,byteOffset:s.byteOffset,buffer:r})}else e.push([...new Uint8Array(o)])}return e}const Ae=n=>"getCells"in n?n.getCells():n.cells,Pe=n=>n instanceof l.NotebookCellData?n.value:n.document.getText(),Re=n=>n instanceof l.NotebookCellData?n.languageId:n.document.languageId,te=(n,e,t)=>{var s;const o=[];for(const r of Ae(n))o.push({cell_type:r.kind,source:Pe(r).split(/\r?\n/g),languageId:Re(r),metadata:r.metadata,outputs:t?r.outputs:void 0});return{cells:o,metadata:{...n.metadata,name:e,createdAt:((s=n.metadata)==null?void 0:s.createdAt)||new Date().toISOString(),updatedAt:new Date().toISOString()}}},x=()=>Math.random().toString(36).substr(2,9);function Le(){const n=new Date,e=n.toLocaleDateString("en-GB").replace(/\//g,"-"),t=n.toLocaleTimeString("en-GB",{hour12:!1}).replace(/:/g,"-");return`${e}-${t}`}const $e=require("path");function F(){}$e.join(__dirname,".");function qe(){console.log("Trying to load zmq");const n=require("zeromq");return n.context.blocky=!1,console.info("ZMQ loaded."),n}function je(n,e){const t=n.transport==="tcp"?":":"-",o=n[`${e}_port`];if(!o)throw new Error(`Port not found for channel "${e}"`);return`${n.transport}://${n.ip}${t}${o}`}const Fe=["username","version","session","msg_id","msg_type"],oe={stream:{name:"string",text:"string"},display_data:{data:"object",metadata:"object"},execute_input:{code:"string",execution_count:"number"},execute_result:{execution_count:"number",data:"object",metadata:"object"},error:{ename:"string",evalue:"string",traceback:"object"},status:{execution_state:["string",["starting","idle","busy","restarting","dead"]]},clear_output:{wait:"boolean"},comm_open:{comm_id:"string",target_name:"string",data:"object"},comm_msg:{comm_id:"string",data:"object"},comm_close:{comm_id:"string"},shutdown_reply:{restart:"boolean"}};function We(n){if(n.channel!=="iopub")return;const e=n.header.msg_type;if(e in oe){const t=oe[e];if(t===void 0)return;const o=Object.keys(t),s=n.content;for(let r=0;r<o.length;r++){const i=t[o[r]],a=Array.isArray(i)?i:[i,[]],c=o[r];if(!(c in s)||typeof s[c]!==a[0])switch(a[0]){case"string":s[c]="";break;case"boolean":s[c]=!1;break;case"object":s[c]={};break;case"number":s[c]=0;break}}}}function Ue(n,e){const t=n.header;Fe.forEach(o=>{typeof t[o]!="string"&&(t[o]="")}),typeof n.channel!="string"&&(n.channel=e),n.content||(n.content={}),n.metadata||(n.metadata={}),n.channel==="iopub"&&We(n)}console.log(Ue);class Be{constructor(e,t){this.connection=e,this.serialize=t,this.channels=this.generateChannels(this.connection)}onopen=F;onerror=F;onclose=F;onmessage=F;receiveHooks=[];sendHooks=[];msgChain=Promise.resolve();sendChain=Promise.resolve();channels;closed=!1;dispose(){this.closed||this.close()}close(){this.closed=!0;const e=t=>{try{t.close()}catch(o){console.error("Error during socket shutdown",o)}};e(this.channels.control),e(this.channels.iopub),e(this.channels.shell),e(this.channels.stdin)}emit(e,...t){switch(e){case"message":this.onmessage({data:t[0],type:"message",target:this});break;case"close":this.onclose({wasClean:!0,code:0,reason:"",target:this});break;case"error":this.onerror({error:new Error,message:"to do",type:"error",target:this});break;case"open":this.onopen({target:this});break}return!0}send(e,t){this.sendMessage(e,!1)}addReceiveHook(e){this.receiveHooks.push(e)}removeReceiveHook(e){this.receiveHooks=this.receiveHooks.filter(t=>t!==e)}addSendHook(e){this.sendHooks.push(e)}removeSendHook(e){this.sendHooks=this.sendHooks.filter(t=>t!==e)}generateChannel(e,t,o){const s=o();return s.connect(je(e,t)),this.processSocketMessages(t,s).catch(r=>console.error(`Failed to read messages from channel ${t}`,r)),s}async processSocketMessages(e,t){for await(const o of t){if(this.closed)break;this.onIncomingMessage(e,o)}}generateChannels(e){const t=qe(),o=x();return{iopub:this.generateChannel(e,"iopub",()=>new t.Subscriber({maxMessageSize:-1,receiveHighWaterMark:0})),shell:this.generateChannel(e,"shell",()=>new t.Dealer({routingId:o,maxMessageSize:-1})),control:this.generateChannel(e,"control",()=>new t.Dealer({routingId:o,maxMessageSize:-1})),stdin:this.generateChannel(e,"stdin",()=>new t.Dealer({routingId:o,maxMessageSize:-1}))}}onIncomingMessage(e,t){this.msgChain=this.msgChain.then(()=>this.handleIncomingMessage(e,t)).catch(o=>{console.error("Failed to handle incoming message",o)})}async handleIncomingMessage(e,t){for(const o of this.receiveHooks)await o(t);this.emit("message",t)}sendMessage(e,t){this.sendChain=this.sendChain.then(()=>this.handleOutgoingMessage(e,t)).catch(o=>{console.error("Failed to handle outgoing message",o)})}async handleOutgoingMessage(e,t){if(!t)for(const r of this.sendHooks)await r(e);let o,s;try{if(typeof e=="string")o=K(e),s=o.channel;else throw new Error("Not supported")}catch{s="shell",o=e}this.postToSocket(s,o)}postToSocket(e,t){const o=this.channels[e];o&&o.send(this.serialize(t))}}let Y;class Ke{outputWidgetIds=new Set;waitingMessageIds=new Map;kernel;get postMessage(){return this._postMessageEmitter.event}_postMessageEmitter=new l.EventEmitter;constructor(e,t,o,s){this.kernel=this.initializeKernel(e,t,o,s)}get rawKernel(){return this.kernel}initializeKernel(e,t,o,s){const r=require("@jupyterlab/services"),i=require("@jupyterlab/services/lib/kernel/serialize");let a;const c=class extends Be{static CONNECTING=0;static OPEN=1;static CLOSING=2;static CLOSED=3;constructor(){super(e.connection,i.serialize),a=this}},d=r.ServerConnection.makeSettings({WebSocket:c,wsUrl:"RAW"});Y||(Y=require("@jupyterlab/services/lib/kernel/nonSerializingKernel"));const p=new Y.KernelConnection({serverSettings:d,clientId:t,handleComms:!1,username:o,model:s});return a&&(a.emit("open"),a.addReceiveHook(this.onKernelSocketMessage.bind(this)),a.addSendHook(this.mirrorSend.bind(this))),{realKernel:p,socket:a,kernelProcess:e}}async mirrorSend(e,t){if(typeof e=="string"&&e.includes("shell")&&e.includes("execute_request")){const o=K(e);if(o.channel==="shell"&&o.header.msg_type==="execute_request"&&"content"in o&&typeof o.content=="object"&&o.content!==null&&"code"in o.content){const s=o;if(!H(s))return;this.mirrorExecuteRequest(s)}}}raisePostMessage(e,t){this._postMessageEmitter.fire({payload:t,type:e})}mirrorExecuteRequest(e){this.raisePostMessage("IPyWidgets_mirror_execute",{id:e.header.msg_id,msg:e})}async onKernelSocketMessage(e){var r;const t=x(),o=Ie();if(this.waitingMessageIds.set(t,{startTime:Date.now(),resultPromise:o}),typeof e=="string"?H(e)&&this.raisePostMessage("IPyWidgets_msg",{id:t,data:e}):(e instanceof ArrayBuffer||ArrayBuffer.isView(e))&&this.raisePostMessage("IPyWidgets_binary_msg",{id:t,data:xe([e])}),(typeof e!="string"||e.includes(U)||e.includes(J.DefaultCommTarget)||e.includes("comm_open")||e.includes("comm_close")||e.includes("comm_msg"))&&typeof e=="string"){const i=K(e);if(!H(i))return;if(X.KernelMessage.isCommOpenMsg(i)){const a=i.content,c=(r=a.data)==null?void 0:r.state;c&&typeof c=="object"&&"_model_module"in c&&"_model_name"in c&&c._model_module==="@jupyter-widgets/output"&&c._model_name==="OutputModel"&&this.outputWidgetIds.add(a.comm_id)}else if(X.KernelMessage.isCommCloseMsg(i)){const a=i.content;this.outputWidgetIds.has(a.comm_id)&&this.outputWidgetIds.delete(a.comm_id)}}}onKernelSocketResponse(e){const t=this.waitingMessageIds.get(e.id);t&&(this.waitingMessageIds.delete(e.id),t.resultPromise.resolve())}}const Ve=require("path");class V{constructor(e,t,o,s){this.executionInfrastructure=t,this.notebookDependencies=o,this.dbtTerminal=s,this.dbtTerminal.debug("NotebookKernelClient","creating python bridge for notebook:",e),this.python=this.executionInfrastructure.createPythonBridge(Ve.dirname(e)),this.initializeNotebookKernel(e),console.log("NotebookKernelClient",this.commIdsMappedToParentWidgetModel,this.ownedRequestMsgIds,this.ownedCommIds)}get postMessage(){return this._postMessageEmitter.event}_postMessageEmitter=new l.EventEmitter;disposables=[];lastUsedStreamOutput;static modelIdsOwnedByCells=new WeakMap;python;kernel;isInitializing=!0;ownedCommIds=new Set;commIdsMappedToWidgetOutputModels=new Set;ownedRequestMsgIds=new Set;commIdsMappedToParentWidgetModel=new Map;streamsReAttachedToExecutingCell=!1;registerdCommTargets=new Set;outputsAreSpecificToAWidget=[];versions;async isInitialized(){return new Promise(e=>{const t=setInterval(()=>{var o,s;this.dbtTerminal.debug("Notebookclient","isInitialized",!!((o=this.kernel)!=null&&o.rawKernel)),(s=this.kernel)!=null&&s.rawKernel&&(e(!0),clearInterval(t))},500)})}async dispose(){this.disposables.forEach(e=>e.dispose());try{await this.python.ex`
4
+ `):e=e.concat(o)}return e}return n.toString()}function _e(n){let e=n;do n=e,e=n.replace(/[^\n]\x08/gm,"");while(e.length<n.length);return n}function Ee(n){for(n=n.replace(/\r+\n/gm,`
5
+ `);n.search(/\r[^$]/g)>-1;){const e=n.match(/^(.*)\r+/m)[1];let t=n.match(/\r+(.*)$/m)[1];t=t+e.slice(t.length,e.length),n=n.replace(/\r+.*$/m,"\r").replace(/^.*\r/m,t)}return n}function ve(n){return Ee(_e(n))}function U(n){if(n.parent_header&&"msg_id"in n.parent_header)return n.parent_header.msg_id}function Ne(n){if(Object.prototype.hasOwnProperty.call(n,"text/html")){const e=n["text/html"];typeof e=="string"&&e.includes('<iframe id="tensorboard-frame-')&&(n["text/html"]=e.replace(/new URL\((.*), window.location\)/,'new URL("http://localhost")'))}return n}const Oe="e976ee50-99ed-4aba-9b6b-9dcd5634d07d:IPyWidgets:";function X(n){let e=typeof n=="string"?n:"";return typeof n!="string"&&"content"in n&&"code"in n.content&&typeof n.content.code=="string"&&(e=n.content.code),!e.includes(Oe)}function Se(n){const e=H(n.text),t=n.name==="stderr"?u.NotebookCellOutputItem.stderr:u.NotebookCellOutputItem.stdout;return new u.NotebookCellOutput([t(e)],oe(n))}function Ce(n){return n=n||{output_type:"error",ename:"",evalue:"",traceback:[]},new u.NotebookCellOutput([u.NotebookCellOutputItem.error({name:(n==null?void 0:n.ename)||"",message:(n==null?void 0:n.evalue)||"",stack:((n==null?void 0:n.traceback)||[]).join(`
6
+ `)})],{...oe(n),originalError:n})}var te;(function(n){n.GeneratedThemeName="ipython-theme",n.MatplotLibDefaultParams="_VSCode_defaultMatplotlib_Params",n.MatplotLibFigureFormats="_VSCode_matplotLib_FigureFormats",n.DefaultCodeCellMarker="# %%",n.DefaultCommTarget="jupyter.widget",n.ALL_VARIABLES="ALL_VARIABLES",n.KERNEL_VARIABLES="KERNEL_VARIABLES",n.DEBUGGER_VARIABLES="DEBUGGER_VARIABLES",n.PYTHON_VARIABLES_REQUESTER="PYTHON_VARIABLES_REQUESTER",n.MULTIPLEXING_DEBUGSERVICE="MULTIPLEXING_DEBUGSERVICE",n.RUN_BY_LINE_DEBUGSERVICE="RUN_BY_LINE_DEBUGSERVICE",n.REMOTE_URI="https://remote/",n.REMOTE_URI_ID_PARAM="id",n.REMOTE_URI_HANDLE_PARAM="uriHandle",n.REMOTE_URI_EXTENSION_ID_PARAM="extensionId"})(te||(te={}));const z="application/vnd.jupyter.widget-view+json";class Ie{get value(){return this._value}constructor(e=null){Object.defineProperty(this,"scope",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"_resolve",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_reject",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_resolved",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_rejected",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_promise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_value",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._promise=new Promise((t,o)=>{this._resolve=t,this._reject=o})}resolve(e){this._value=e,this._resolve.apply(this.scope?this.scope:this,arguments),this._resolved=!0}reject(e){this._reject.apply(this.scope?this.scope:this,arguments),this._rejected=!0}get promise(){return this._promise}get resolved(){return this._resolved}get rejected(){return this._rejected}get completed(){return this._rejected||this._resolved}}function Pe(n=null){return new Ie(n)}var L={};Object.defineProperty(L,"__esModule",{value:!0});L.serialize=Y=L.deserialize=void 0;function Me(n){let e;return typeof n=="string"?e=JSON.parse(n):e=xe(n),e}var Y=L.deserialize=Me;function De(n){var e;let t;return!((e=n.buffers)===null||e===void 0)&&e.length?t=Ae(n):t=JSON.stringify(n),t}L.serialize=De;function xe(n){const e=new DataView(n),t=e.getUint32(0),o=[];if(t<2)throw new Error("Invalid incoming Kernel Message");for(let i=1;i<=t;i++)o.push(e.getUint32(i*4));const r=new Uint8Array(n.slice(o[0],o[1])),s=JSON.parse(new TextDecoder("utf8").decode(r));s.buffers=[];for(let i=1;i<t;i++){const a=o[i],l=o[i+1]||n.byteLength;s.buffers.push(new DataView(n.slice(a,l)))}return s}function Ae(n){const e=[],t=[],o=new TextEncoder;let r=[];n.buffers!==void 0&&(r=n.buffers,delete n.buffers);const s=o.encode(JSON.stringify(n));t.push(s.buffer);for(let c=0;c<r.length;c++){const m=r[c];t.push(ArrayBuffer.isView(m)?m.buffer:m)}const i=t.length;e.push(4*(i+1));for(let c=0;c+1<t.length;c++)e.push(e[e.length-1]+t[c].byteLength);const a=new Uint8Array(e[e.length-1]+t[t.length-1].byteLength),l=new DataView(a.buffer);l.setUint32(0,i);for(let c=0;c<e.length;c++)l.setUint32(4*(c+1),e[c]);for(let c=0;c<t.length;c++)a.set(new Uint8Array(t[c]),e[c]);return a.buffer}function je(n){if(!n||!Array.isArray(n)||n.length===0)return;const e=[];for(let t=0;t<n.length;t+=1){const o=n[t];if("buffer"in o&&"byteOffset"in o){const r=o,s=[...new Uint8Array(r.buffer)];e.push({byteLength:r.byteLength,byteOffset:r.byteOffset,buffer:s})}else e.push([...new Uint8Array(o)])}return e}const Re=require("path");function K(){}Re.join(__dirname,".");function Le(){console.log("Trying to load zmq");const n=require("zeromq");return n.context.blocky=!1,console.info("ZMQ loaded."),n}function $e(n,e){const t=n.transport==="tcp"?":":"-",o=n[`${e}_port`];if(!o)throw new Error(`Port not found for channel "${e}"`);return`${n.transport}://${n.ip}${t}${o}`}const qe=["username","version","session","msg_id","msg_type"],ie={stream:{name:"string",text:"string"},display_data:{data:"object",metadata:"object"},execute_input:{code:"string",execution_count:"number"},execute_result:{execution_count:"number",data:"object",metadata:"object"},error:{ename:"string",evalue:"string",traceback:"object"},status:{execution_state:["string",["starting","idle","busy","restarting","dead"]]},clear_output:{wait:"boolean"},comm_open:{comm_id:"string",target_name:"string",data:"object"},comm_msg:{comm_id:"string",data:"object"},comm_close:{comm_id:"string"},shutdown_reply:{restart:"boolean"}};function Fe(n){if(n.channel!=="iopub")return;const e=n.header.msg_type;if(e in ie){const t=ie[e];if(t===void 0)return;const o=Object.keys(t),r=n.content;for(let s=0;s<o.length;s++){const i=t[o[s]],a=Array.isArray(i)?i:[i,[]],l=o[s];if(!(l in r)||typeof r[l]!==a[0])switch(a[0]){case"string":r[l]="";break;case"boolean":r[l]=!1;break;case"object":r[l]={};break;case"number":r[l]=0;break}}}}function We(n,e){const t=n.header;qe.forEach(o=>{typeof t[o]!="string"&&(t[o]="")}),typeof n.channel!="string"&&(n.channel=e),n.content||(n.content={}),n.metadata||(n.metadata={}),n.channel==="iopub"&&Fe(n)}console.log(We);class Be{constructor(e,t){Object.defineProperty(this,"connection",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"serialize",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"onopen",{enumerable:!0,configurable:!0,writable:!0,value:K}),Object.defineProperty(this,"onerror",{enumerable:!0,configurable:!0,writable:!0,value:K}),Object.defineProperty(this,"onclose",{enumerable:!0,configurable:!0,writable:!0,value:K}),Object.defineProperty(this,"onmessage",{enumerable:!0,configurable:!0,writable:!0,value:K}),Object.defineProperty(this,"receiveHooks",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"sendHooks",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"msgChain",{enumerable:!0,configurable:!0,writable:!0,value:Promise.resolve()}),Object.defineProperty(this,"sendChain",{enumerable:!0,configurable:!0,writable:!0,value:Promise.resolve()}),Object.defineProperty(this,"channels",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"closed",{enumerable:!0,configurable:!0,writable:!0,value:!1}),this.channels=this.generateChannels(this.connection)}dispose(){this.closed||this.close()}close(){this.closed=!0;const e=t=>{try{t.close()}catch(o){console.error("Error during socket shutdown",o)}};e(this.channels.control),e(this.channels.iopub),e(this.channels.shell),e(this.channels.stdin)}emit(e,...t){switch(e){case"message":this.onmessage({data:t[0],type:"message",target:this});break;case"close":this.onclose({wasClean:!0,code:0,reason:"",target:this});break;case"error":this.onerror({error:new Error,message:"to do",type:"error",target:this});break;case"open":this.onopen({target:this});break}return!0}send(e,t){this.sendMessage(e,!1)}addReceiveHook(e){this.receiveHooks.push(e)}removeReceiveHook(e){this.receiveHooks=this.receiveHooks.filter(t=>t!==e)}addSendHook(e){this.sendHooks.push(e)}removeSendHook(e){this.sendHooks=this.sendHooks.filter(t=>t!==e)}generateChannel(e,t,o){const r=o();return r.connect($e(e,t)),this.processSocketMessages(t,r).catch(s=>console.error(`Failed to read messages from channel ${t}`,s)),r}async processSocketMessages(e,t){for await(const o of t){if(this.closed)break;this.onIncomingMessage(e,o)}}generateChannels(e){const t=Le(),o=j();return{iopub:this.generateChannel(e,"iopub",()=>new t.Subscriber({maxMessageSize:-1,receiveHighWaterMark:0})),shell:this.generateChannel(e,"shell",()=>new t.Dealer({routingId:o,maxMessageSize:-1})),control:this.generateChannel(e,"control",()=>new t.Dealer({routingId:o,maxMessageSize:-1})),stdin:this.generateChannel(e,"stdin",()=>new t.Dealer({routingId:o,maxMessageSize:-1}))}}onIncomingMessage(e,t){this.msgChain=this.msgChain.then(()=>this.handleIncomingMessage(e,t)).catch(o=>{console.error("Failed to handle incoming message",o)})}async handleIncomingMessage(e,t){for(const o of this.receiveHooks)await o(t);this.emit("message",t)}sendMessage(e,t){this.sendChain=this.sendChain.then(()=>this.handleOutgoingMessage(e,t)).catch(o=>{console.error("Failed to handle outgoing message",o)})}async handleOutgoingMessage(e,t){if(!t)for(const s of this.sendHooks)await s(e);let o,r;try{if(typeof e=="string")o=Y(e),r=o.channel;else throw new Error("Not supported")}catch{r="shell",o=e}this.postToSocket(r,o)}postToSocket(e,t){const o=this.channels[e];o&&o.send(this.serialize(t))}}let Z;class Ue{get postMessage(){return this._postMessageEmitter.event}constructor(e,t,o,r){Object.defineProperty(this,"outputWidgetIds",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"waitingMessageIds",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"kernel",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_postMessageEmitter",{enumerable:!0,configurable:!0,writable:!0,value:new u.EventEmitter}),this.kernel=this.initializeKernel(e,t,o,r)}get rawKernel(){return this.kernel}initializeKernel(e,t,o,r){var s;const i=require("@jupyterlab/services"),a=require("@jupyterlab/services/lib/kernel/serialize");let l;const c=(s=class extends Be{constructor(){super(e.connection,a.serialize),l=this}},me(s,"RawSocketWrapper"),Object.defineProperty(s,"CONNECTING",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(s,"OPEN",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(s,"CLOSING",{enumerable:!0,configurable:!0,writable:!0,value:2}),Object.defineProperty(s,"CLOSED",{enumerable:!0,configurable:!0,writable:!0,value:3}),s),m=i.ServerConnection.makeSettings({WebSocket:c,wsUrl:"RAW"});Z||(Z=require("@jupyterlab/services/lib/kernel/nonSerializingKernel"));const h=new Z.KernelConnection({serverSettings:m,clientId:t,handleComms:!1,username:o,model:r});return l&&(l.emit("open"),l.addReceiveHook(this.onKernelSocketMessage.bind(this)),l.addSendHook(this.mirrorSend.bind(this))),{realKernel:h,socket:l,kernelProcess:e}}async mirrorSend(e,t){if(typeof e=="string"&&e.includes("shell")&&e.includes("execute_request")){const o=Y(e);if(o.channel==="shell"&&o.header.msg_type==="execute_request"&&"content"in o&&typeof o.content=="object"&&o.content!==null&&"code"in o.content){const r=o;if(!X(r))return;this.mirrorExecuteRequest(r)}}}raisePostMessage(e,t){this._postMessageEmitter.fire({payload:t,type:e})}mirrorExecuteRequest(e){this.raisePostMessage("IPyWidgets_mirror_execute",{id:e.header.msg_id,msg:e})}async onKernelSocketMessage(e){var s;const t=j(),o=Pe();if(this.waitingMessageIds.set(t,{startTime:Date.now(),resultPromise:o}),typeof e=="string"?X(e)&&this.raisePostMessage("IPyWidgets_msg",{id:t,data:e}):(e instanceof ArrayBuffer||ArrayBuffer.isView(e))&&this.raisePostMessage("IPyWidgets_binary_msg",{id:t,data:je([e])}),(typeof e!="string"||e.includes(z)||e.includes(te.DefaultCommTarget)||e.includes("comm_open")||e.includes("comm_close")||e.includes("comm_msg"))&&typeof e=="string"){const i=Y(e);if(!X(i))return;if(ne.KernelMessage.isCommOpenMsg(i)){const a=i.content,l=(s=a.data)==null?void 0:s.state;l&&typeof l=="object"&&"_model_module"in l&&"_model_name"in l&&l._model_module==="@jupyter-widgets/output"&&l._model_name==="OutputModel"&&this.outputWidgetIds.add(a.comm_id)}else if(ne.KernelMessage.isCommCloseMsg(i)){const a=i.content;this.outputWidgetIds.has(a.comm_id)&&this.outputWidgetIds.delete(a.comm_id)}}}onKernelSocketResponse(e){const t=this.waitingMessageIds.get(e.id);t&&(this.waitingMessageIds.delete(e.id),t.resultPromise.resolve())}}const Ke=require("path");class M{get postMessage(){return this._postMessageEmitter.event}constructor(e,t,o,r){Object.defineProperty(this,"executionInfrastructure",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"notebookDependencies",{enumerable:!0,configurable:!0,writable:!0,value:o}),Object.defineProperty(this,"dbtTerminal",{enumerable:!0,configurable:!0,writable:!0,value:r}),Object.defineProperty(this,"_postMessageEmitter",{enumerable:!0,configurable:!0,writable:!0,value:new u.EventEmitter}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"lastUsedStreamOutput",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"python",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"kernel",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isInitializing",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"ownedCommIds",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"commIdsMappedToWidgetOutputModels",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"ownedRequestMsgIds",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"commIdsMappedToParentWidgetModel",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"streamsReAttachedToExecutingCell",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"registerdCommTargets",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"outputsAreSpecificToAWidget",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"versions",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.dbtTerminal.debug("NotebookKernelClient","creating python bridge for notebook:",e),this.python=this.executionInfrastructure.createPythonBridge(Ke.dirname(e)),this.initializeNotebookKernel(e),console.log("NotebookKernelClient",this.commIdsMappedToParentWidgetModel,this.ownedRequestMsgIds,this.ownedCommIds)}async isInitialized(){return new Promise(e=>{const t=setInterval(()=>{var o,r;this.dbtTerminal.debug("Notebookclient","isInitialized",!!((o=this.kernel)!=null&&o.rawKernel)),(r=this.kernel)!=null&&r.rawKernel&&(e(!0),clearInterval(t))},500)})}async dispose(){this.disposables.forEach(e=>e.dispose());try{await this.python.ex`
6
7
  notebook_kernel.close_notebook()
7
- `}catch(e){this.dbtTerminal.error(h.TelemetryEvents["Notebook/KernelCloseError"],e.exception.message,e)}}get jupyterPackagesVersions(){return this.versions}async getDependenciesVersion(){this.versions=await this.notebookDependencies.getDependenciesVersion()}async getKernel(){return new Promise(e=>{const t=setInterval(()=>{var o;this.isInitializing||(e((o=this.kernel)==null?void 0:o.rawKernel),clearInterval(t))},500)})}async initializeNotebookKernel(e){try{if(!await this.notebookDependencies.validateAndInstallNotebookDependencies())return;await this.python.ex`
8
+ `}catch(e){this.dbtTerminal.error(p.TelemetryEvents["Notebook/KernelCloseError"],e.exception.message,e)}}get jupyterPackagesVersions(){return this.versions}async getDependenciesVersion(){this.versions=await this.notebookDependencies.getDependenciesVersion()}async getKernel(){return new Promise(e=>{const t=setInterval(()=>{var o;this.isInitializing||(e((o=this.kernel)==null?void 0:o.rawKernel),clearInterval(t))},500)})}async initializeNotebookKernel(e){try{if(!await this.notebookDependencies.validateAndInstallNotebookDependencies())return;await this.python.ex`
8
9
  from altimate_notebook_kernel import AltimateNotebookKernel
9
10
  notebook_kernel = AltimateNotebookKernel(${e})
10
- `;const t=await this.python.lock(a=>a`notebook_kernel.get_connection_file()`),o=JSON.parse(le.readFileSync(t,{encoding:"utf-8"})),s=await this.python.lock(a=>a`notebook_kernel.get_session_id()`),r={connection:o,pid:s},i=new Ke(r,x(),x(),{name:o.kernel_name,id:x(),language:"python",argv:[],display_name:o.kernel_name,resources:{}});this.kernel=i,this.disposables.push(i.postMessage(a=>this._postMessageEmitter.fire(a))),this.dbtTerminal.log(`Notebook Kernel started with PID: ${s} connection: ${JSON.stringify(o)}`),this.getDependenciesVersion()}catch(t){let o=t.message;t instanceof se.PythonException&&(o=t.exception.message),this.dbtTerminal.error(h.TelemetryEvents["Notebook/KernelInitializationError"],o,t),l.window.showErrorMessage(o)}this.isInitializing=!1}onKernelSocketResponse(e){var t;(t=this.kernel)==null||t.onKernelSocketResponse(e)}async storeContext(e){this.dbtTerminal.log(`storeContext: ${e}`),await this.python.lock(t=>t`notebook_kernel.store_context(${e})`)}async storeDataInKernel(e,t){try{return this.dbtTerminal.log(`storeDataInKernel: ${e}`),await this.python.lock(o=>o`notebook_kernel.store_sql_result(${e}, ${JSON.stringify(t)})`),!0}catch(o){throw this.dbtTerminal.error(h.TelemetryEvents["Notebook/StoreDataInKernelError"],o.exception.message,o),o}}async registerCommTarget(e){if(this.registerdCommTargets.has(e)){this.dbtTerminal.log(`registerCommTarget already registered: ${e}`);return}this.registerdCommTargets.add(e),this.dbtTerminal.log(`registerCommTarget registering: ${e}`);const t=await this.getKernel();if(!t)throw this.registerdCommTargets.delete(e),new Error("Kernel not found for registering comm target");return t.realKernel.registerCommTarget(e,(o,s)=>{this.dbtTerminal.log(`registerCommTarget registered: ${e}`,o,s)})}async getPythonCodeByType(e,t){return this.dbtTerminal.debug("getPythonCodeByType",e,t),await this.python.lock(o=>o`notebook_kernel.get_python_code_by_type(${e}, ${t})`)}async executePython(e,t,o){return new Promise((s,r)=>{var a,c;if(!((c=(a=this.kernel)==null?void 0:a.rawKernel)!=null&&c.realKernel)){r(new Error("Kernel not found"));return}(async()=>{try{const d=t.metadata.cellId;this.dbtTerminal.log(`Executing python code in cell: ${d}`,e);const p=require("@jupyterlab/services");this.dbtTerminal.log("kernel status",this.kernel.rawKernel.realKernel.status);const m=await this.kernel.rawKernel.realKernel.requestExecute({code:e,silent:!1,stop_on_error:!1,allow_stdin:!0,store_history:!0},!1,{cellId:t.document.uri.toString()});if(!m){r(new Error("Unknown request error"));return}m.onReply=u=>{if(t.document.isClosed){m.dispose();return}const y=u.content;y.payload&&y.payload.forEach(k=>{if(k.data&&Object.prototype.hasOwnProperty.call(k.data,"text/plain")){const N=this.addToCellData({output_type:"stream",text:k.data["text/plain"].toString(),name:"stdout",metadata:{},execution_count:y.execution_count},u,t);N&&o(N)}})};const g=[];m.done.finally(()=>{m.dispose(),s(g.filter(u=>!!u))}),m.onStdin=u=>{this.dbtTerminal.log("onStdin",u)},m.onIOPub=u=>{if(p.KernelMessage.isCommOpenMsg(u))this.handleCommOpen(u);else if(p.KernelMessage.isExecuteResultMsg(u))g.push(this.handleExecuteResult(u,t));else if(p.KernelMessage.isExecuteInputMsg(u))this.handleExecuteInput(u);else if(p.KernelMessage.isStatusMsg(u)){const y=u;this.handleStatusMessage(y)}else if(p.KernelMessage.isStreamMsg(u)){const y=this.handleStreamMessage(u,t);y==null||y.forEach(k=>{g.push(k)})}else p.KernelMessage.isDisplayDataMsg(u)?g.push(this.handleDisplayData(u,t)):p.KernelMessage.isUpdateDisplayDataMsg(u)?this.handleUpdateDisplayDataMessage(u):p.KernelMessage.isClearOutputMsg(u)?this.handleClearOutput(u):p.KernelMessage.isErrorMsg(u)?g.push(this.handleError(u,t)):p.KernelMessage.isCommMsgMsg(u)?this.handleCommMsg(u):p.KernelMessage.isCommCloseMsg(u)||this.dbtTerminal.warn("NotebookUnknownIOPubMessage",`Unknown message ${u.header.msg_type} : hasData=${"data"in u.content}`)}}catch(d){r(d)}})().catch(r)})}handleUpdateDisplayDataMessage(e){if(this.dbtTerminal.log("handleUpdateDisplayDataMessage",e),!e.content.transient.display_id){this.dbtTerminal.warn("NotebookUpdateDisplayDataMessageReceivedButNoDisplayId","Update display data message received, but no display id",!1,e.content);return}}handleCommOpen(e){var r;const t=e.content,o=(r=t.data)==null?void 0:r.state;o&&o._model_module==="@jupyter-widgets/output"&&o._model_name==="OutputModel"&&this.commIdsMappedToWidgetOutputModels.add(t.comm_id)}handleCommMsg(e){const t=e.content,o=t.data,s=o.method,r=o.state;if(s==="update"&&(r!=null&&r.msg_id)){const i=r.msg_id,a=t.comm_id,c=this.outputsAreSpecificToAWidget.find(d=>d.handlingCommId===a);c?(c.msgIdsToSwallow=i,c.clearOutputOnNextUpdateToOutput=!0):this.outputsAreSpecificToAWidget.push({handlingCommId:a,msgIdsToSwallow:i,clearOutputOnNextUpdateToOutput:!0})}}handleExecuteResult(e,t){return this.addToCellData({output_type:"execute_result",data:e.content.data,metadata:e.content.metadata,transient:e.content.transient,execution_count:e.content.execution_count},e,t)}addToCellData(e,t,o){if(e.data&&typeof e.data=="object"&&U in e.data){const i=e.data[U];if(i&&"model_id"in i){const a=V.modelIdsOwnedByCells.get(o)||new Set;a.add(i.model_id),V.modelIdsOwnedByCells.set(o,a)}}const s=G(e);if(o.document.isClosed)return;this.dbtTerminal.log(o.document.uri.fsPath,`Update output with mimes ${s.items.map(i=>i.mime).toString()}`);const r=j(t);return this.outputsAreSpecificToAWidget.length&&this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].msgIdsToSwallow===r&&s.items.every(i=>this.canMimeTypeBeRenderedByWidgetManager(i))||this.outputsAreSpecificToAWidget.length&&this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].msgIdsToSwallow===r&&this.dbtTerminal.warn("NotebookAddToCellData","unknown operation"),s}canMimeTypeBeRenderedByWidgetManager(e){const t=e.mime;if(t===W.stderr||t===W.stdout||t===W.error)return!0;if(t===U){const o=JSON.parse(new TextDecoder().decode(e.data));return!(typeof o.model_id=="string"&&this.commIdsMappedToWidgetOutputModels.has(o.model_id))}return!t.startsWith("application/vnd")}handleExecuteInput(e){}handleStatusMessage(e){}handleStreamMessage(e,t){var s;if(j(e)&&this.outputsAreSpecificToAWidget.length&&this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].msgIdsToSwallow===j(e))return;const o=e.content.name==="stdout"?l.NotebookCellOutputItem.stdout("").mime:l.NotebookCellOutputItem.stderr("").mime;if(!this.streamsReAttachedToExecutingCell&&!this.lastUsedStreamOutput&&t.outputs.length&&t.outputs[t.outputs.length-1].items.length>=1&&t.outputs[t.outputs.length-1].items.every(r=>r.mime===o)&&(this.lastUsedStreamOutput={output:t.outputs[0],stream:e.content.name}),this.streamsReAttachedToExecutingCell=!0,((s=this.lastUsedStreamOutput)==null?void 0:s.stream)===e.content.name)return[G({output_type:"stream",name:e.content.name,text:e.content.text}),this.lastUsedStreamOutput.output];{const r=_e(B(e.content.text));return[G({output_type:"stream",name:e.content.name,text:r})]}}handleDisplayData(e,t){const o={output_type:"display_data",data:Te(e.content.data),metadata:e.content.metadata,transient:e.content.transient};return this.addToCellData(o,e,t)}handleClearOutput(e){if(this.outputsAreSpecificToAWidget.length&&this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].msgIdsToSwallow===j(e)){e.content.wait&&this.outputsAreSpecificToAWidget.length&&(this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].clearOutputOnNextUpdateToOutput=!0);return}}handleError(e,t){const o=e.content.traceback;this.dbtTerminal.log(`Traceback for error ${o}`);const s={output_type:"error",ename:e.content.ename,evalue:e.content.evalue,traceback:o};return this.addToCellData(s,e,t)}}var ze=Object.defineProperty,Ge=Object.getOwnPropertyDescriptor,He=(n,e,t,o)=>{for(var s=o>1?void 0:o?Ge(e,t):e,r=n.length-1,i;r>=0;r--)(i=n[r])&&(s=(o?i(e,t,s):i(s))||s);return o&&s&&ze(e,t,s),s};exports.NotebookDependencies=class{constructor(e,t,o,s){this.dbtTerminal=e,this.telemetry=t,this.commandProcessExecutionFactory=o,this.pythonEnvironment=s}async checkPythonDependencies(e){const t=[];for(const o of e){const s=["-m","pip","show",o],{stderr:r}=await this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:s,cwd:h.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}).completeWithTerminalOutput();r&&t.push(o)}return t}checkDbtDependencies(e,t){return e.map(o=>{try{return t.findPackageVersion(o),null}catch{return o}}).filter(Boolean)}async installMissingPythonPackages(e,t){const o=await this.checkPythonDependencies(e);if(!o.length)return;if(this.dbtTerminal.debug("Notebook","asking user to install missing python dependencies for notebook",o),await l.window.showInformationMessage(`You need the following python packages to use this notebook: ${o.join(", ")}`,"Install","Cancel")!=="Install")throw this.telemetry.sendTelemetryEvent(h.TelemetryEvents["Notebook/DependenciesInstallCancelled"]),new Error("User cancelled python package installation");return this.dbtTerminal.debug("Notebook","installing required dependencies",o),await l.window.withProgress({title:"Installing python packages...",location:l.ProgressLocation.Notification,cancellable:!1},async()=>{try{const r=["-m","pip","install",...o],{stdout:i,stderr:a}=await this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:r,cwd:h.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}).completeWithTerminalOutput();if(!i.includes("Successfully installed")&&!i.includes("Requirement already satisfied")&&a)throw new Error(a);return this.dbtTerminal.log("Notebook dependencies have been installed successfully."),this.telemetry.sendTelemetryEvent(h.TelemetryEvents["Notebook/DependenciesInstalled"]),await t.initialize(),!0}catch(r){this.telemetry.sendTelemetryError(h.TelemetryEvents["Notebook/DependenciesInstallError"],r),l.window.showErrorMessage(h.extendErrorWithSupportLinks(r.message))}})}async installMissingDbtPackages(e,t){const o=this.checkDbtDependencies(e.map(i=>`${i.name}`),t);if(!o.length)return;const s=e.filter(i=>i.name?o.includes(i.name):!1);if(this.dbtTerminal.debug("Notebook","asking user to install missing dbt dependencies for notebook",s),await l.window.showInformationMessage(`You need following dbt packages to use this notebook: ${s.map(i=>`${i.package}`).join(", ")}`,"Install","Cancel")!=="Install")throw this.telemetry.sendTelemetryEvent(h.TelemetryEvents["Notebook/DependenciesInstallCancelled"]),new Error("User cancelled dbt package installation");return await l.window.withProgress({title:"Installing dbt packages...",location:l.ProgressLocation.Notification,cancellable:!1},async()=>{try{const i=s.map(c=>`${c.package}@${c.version}`);this.dbtTerminal.debug("Notebook","installing dbt packages",i),await t.installDbtPackages(i),await t.initialize();const a=this.checkDbtDependencies(e.map(c=>`${c.name}`),t);if(a.length)throw new Error(`Failed to install dbt packages ${a.join(", ")}`);return this.dbtTerminal.log("Notebook dependencies have been installed successfully."),this.telemetry.sendTelemetryEvent(h.TelemetryEvents["Notebook/DependenciesInstalled"]),!0}catch(i){this.telemetry.sendTelemetryError(h.TelemetryEvents["Notebook/DependenciesInstallError"],i),l.window.showErrorMessage(h.extendErrorWithSupportLinks(i.message))}})}async verifyAndInstallDependenciesIfNeeded(e,t){this.dbtTerminal.debug("NotebookDependencies","verifying required dependencies",e),await Promise.all([this.validateAndInstallNotebookDependencies(),this.installMissingPythonPackages(e.filter(o=>o.type==="python").map(o=>o.package),t),this.installMissingDbtPackages(e.filter(o=>o.type==="dbt"),t)])}async getDependenciesVersion(){const e=["-m","jupyter","--version"],{stdout:t,stderr:o}=await this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:e,cwd:h.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}).completeWithTerminalOutput();if(!t.includes("Successfully installed")&&!t.includes("Requirement already satisfied")&&o)throw new Error(o);const s=t.split(`
11
- `),r={};return s.forEach(i=>{const[a,c]=i.split(":").map(d=>d.trim());a&&c&&(r[a]=c)}),r}async validateAndInstallNotebookDependencies(){try{if(await this.notebookDependenciesAreInstalled())return this.dbtTerminal.log("Notebook dependencies are already installed."),!0;if(await l.window.showInformationMessage("You need [ipykernel](https://pypi.org/project/ipykernel/) and [jupyter_client](https://github.com/jupyter/jupyter_client) to use the notebook","Install","Cancel")!=="Install")return this.telemetry.sendTelemetryEvent(h.TelemetryEvents["Notebook/DependenciesInstallCancelled"]),!1;await l.window.withProgress({title:"Installing required dependencies...",location:l.ProgressLocation.Notification,cancellable:!1},async()=>{try{const o=["-m","pip","install","ipykernel","jupyter_client","jupyter_contrib_nbextensions","ipywidgets"],{stdout:s,stderr:r}=await this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:o,cwd:h.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}).completeWithTerminalOutput();if(!s.includes("Successfully installed")&&!s.includes("Requirement already satisfied")&&r)throw new Error(r);return this.dbtTerminal.log("Notebook dependencies have been installed successfully."),this.telemetry.sendTelemetryEvent(h.TelemetryEvents["Notebook/DependenciesInstalled"]),!0}catch(o){return this.telemetry.sendTelemetryError(h.TelemetryEvents["Notebook/DependenciesInstallError"],o),l.window.showErrorMessage(h.extendErrorWithSupportLinks(o.message)),!1}})&&await l.window.showInformationMessage("Notebook dependencies installed. Please reload the window to use the notebook.","Reload Window")==="Reload Window"&&l.commands.executeCommand("workbench.action.reloadWindow")}catch(e){throw this.dbtTerminal.error(h.TelemetryEvents["Notebook/DependenciesInstallError"],e.message,e),e}}async notebookDependenciesAreInstalled(){try{const e=this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:["-c","import jupyter_client"],cwd:h.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}),{stderr:t}=await e.complete();if(t)throw new Error(t);return!0}catch{return!1}}};exports.NotebookDependencies=He([h.provideSingleton(exports.NotebookDependencies)],exports.NotebookDependencies);var Ye=Object.defineProperty,Je=Object.getOwnPropertyDescriptor,Qe=(n,e,t,o)=>{for(var s=o>1?void 0:o?Je(e,t):e,r=n.length-1,i;r>=0;r--)(i=n[r])&&(s=(o?i(e,t,s):i(s))||s);return o&&s&&Ye(e,t,s),s};const Xe=require("path");exports.DatapilotNotebookController=class{constructor(e,t,o,s,r,i){this.clientMapper=e,this.queryManifestService=t,this.telemetry=o,this.dbtTerminal=s,this.notebookDependencies=r,this.altimate=i,this.controller=l.notebooks.createNotebookController(this.id,O,this.label),this.controller.supportedLanguages=de,this.controller.supportsExecutionOrder=!0,this.controller.executeHandler=this._executeAll.bind(this),this.disposables.push(l.workspace.onDidChangeNotebookDocument(a=>{a.contentChanges.forEach(async c=>{c.addedCells&&await this.updateCellId(a.notebook.getCells(),a.notebook),c.removedCells&&c.removedCells.forEach(d=>{this._onNotebookCellEvent.fire({cellId:d.metadata.cellId,notebook:a.notebook.uri.fsPath,result:void 0,event:"delete",fragment:d.document.uri.fragment,languageId:d.document.languageId})})})})),this.disposables.push(this.controller),this.controller.onDidChangeSelectedNotebooks(this.onDidChangeSelectedNotebooks,this,this.disposables),this.disposables.push(l.workspace.onDidOpenNotebookDocument(async a=>{await this.onNotebookOpen(a)})),this.disposables.push(l.workspace.onDidCloseNotebookDocument(async a=>{await this.onNotebookClose(a)}))}id="DatapilotNotebookController";label="Datapilot";_onNotebookCellEvent=new l.EventEmitter;onNotebookCellChangeEvent=this._onNotebookCellEvent.event;disposables=[this._onNotebookCellEvent];associatedNotebooks=new Set;executionOrder=0;controller;async getNotebookByTemplate(e){var o;return this.dbtTerminal.debug("Notebook","getting notebook by template",e),e?(o=(await this.altimate.getPreConfiguredNotebooks()).find(s=>s.name===e))==null?void 0:o.data:(this.dbtTerminal.debug("Notebook","sending blank notebook"),{cells:[{cell_type:l.NotebookCellKind.Markup,source:["### Welcome to your new dbt Power User Notebook!","> Note: Remember, you can delete any or all of these example cells to start fresh with your own work. Enjoy exploring and analyzing your data!","#### Documentation and Feedback","For more detailed information on how to use this notebook and the dbt Power User extension, please refer to our documentation:","[dbt Power User Documentation](https://docs.myaltimate.com/govern/notebooks/)"," ","We value your feedback! If you have any suggestions, encounter issues, or want to share your experience, please let us know:","[Share Feedback](https://docs.google.com/forms/d/e/1FAIpQLScwN3wRTAniQzvcO6Hn3jC0WtBoFE2NP4X_6qGQ09IZKZ3Ojw/viewform?usp=sf_link)"," ","Happy analyzing with your new dbt Power User Notebook!"," ","This notebook allows you to combine Jinja SQL queries, Python code, and Markdown text. Let's explore each of these features.","##### 1. Jinja SQL Queries","You can write and execute Jinja SQL queries directly in this notebook. Here's an example:"],languageId:"markdown",metadata:{}},{cell_type:l.NotebookCellKind.Code,source:["select * from {{ ref('your_model_name') }}","{# Replace 'your_model_name' with the name of your dbt model. #}"],languageId:ue,metadata:{cellId:"jinja_sql_0"}},{cell_type:l.NotebookCellKind.Markup,source:["##### 2. Python Code","You can also write and execute Python code on top of the results of previous `jinja-sql` cell in this notebook. Here's a simple example:"],languageId:"markdown",metadata:{}},{cell_type:l.NotebookCellKind.Code,source:["import pandas as pd","from IPython.display import display, HTML","from ydata_profiling import ProfileReport","from io import StringIO","","# Extract the data field","# NOTE: we use the cell id from previous cell to extract the data","data = cell_jinja_sql_0['data']","","# Create a DataFrame","df = pd.DataFrame(data)","","# Display the DataFrame","# display(HTML(df.to_html()))","",'profile = ProfileReport(df, title="Profiling Report")',"profile.to_notebook_iframe()"],languageId:"python",metadata:{}},{cell_type:l.NotebookCellKind.Markup,source:["This Python code creates a profile report of your query results. You can customize the code to suit your needs.","##### 3. Markdown Text","As you can see, you can use Markdown to structure your notebook with headings, lists, and more. You can also use it to add explanations and documentation to your queries and code.","##### Tips for Using This Notebook","- Use Jinja cells for your dbt model queries and data exploration","- Use Python cells for data analysis, visualization, and custom transformations. The jinja data can be referenced using the cell id","- Use Markdown cells to explain your process, document your findings, and create a narrative for your analysis"],languageId:"markdown",metadata:{}}]})}async modelTestSuggestions(e){this.dbtTerminal.log("modelTestSuggestions",e)}async generateDbtSourceYaml(e){this.dbtTerminal.log("generateDbtSourceYaml",e)}async generateDbtDbtModelSql(e){this.dbtTerminal.log("generateDbtDbtModelSql",e)}async generateDbtDbtModelYaml(e){this.dbtTerminal.log("generateDbtDbtModelYaml",e)}async generateDbtDbtModelCTE(e){this.dbtTerminal.log("generateDbtDbtModelCTE",e)}async extractExposuresFromMetabase(e){this.dbtTerminal.log("extractExposuresFromMetabase",e)}async extractExposuresFromTableau(e){this.dbtTerminal.log("extractExposuresFromTableau",e)}async getFileName(e,t){if(e)return e;const o=Le();if((await this.altimate.addNotebook({name:o,description:"",data:t?{...t,metadata:{...t.metadata||{},isDraft:!0}}:{},tags_list:[]})).ok&&(await this.altimate.getNotebooks(o)).length>0)return o}async createNotebook(e){var i;const{notebookId:t,template:o,context:s={},notebookSchema:r}=e||{};if(this.dbtTerminal.info(h.TelemetryEvents["Notebook/Launch"],"creating notebook",!0,e),!s.model&&((i=l.window.activeTextEditor)!=null&&i.document.uri.fsPath.endsWith(".sql"))){const a=Xe.basename(l.window.activeTextEditor.document.uri.fsPath,".sql"),c=l.window.activeTextEditor.document.getText();s.model=a,s.query=c}l.window.withProgress({location:l.ProgressLocation.Notification,title:"Launching notebook...",cancellable:!1},async()=>{var a;try{const c=r||(t?null:await this.getNotebookByTemplate(o)),d=await this.queryManifestService.getOrPickProjectFromWorkspace();if(!d){l.window.showErrorMessage("No dbt project selected.");return}if((a=c==null?void 0:c.metadata)!=null&&a.dependencies&&await this.notebookDependencies.verifyAndInstallDependenciesIfNeeded(c.metadata.dependencies,d),s&&c)for(const u in s)Object.prototype.hasOwnProperty.call(s,u)&&typeof s[u]=="string"&&(c.cells[0].source=c.cells[0].source.map(y=>y.replace(`%_${u}_%`,s[u])));const p=await this.getFileName(t,c),m=l.Uri.parse(`${d.projectRoot}/${p}${re}`).with({scheme:ie});this.dbtTerminal.debug("Notebook","opening notebook",m);const g=await l.workspace.openNotebookDocument(m);await l.window.showNotebookDocument(g)}catch(c){const d=c instanceof se.PythonException?c.exception.message:c.message;this.dbtTerminal.error(`${h.TelemetryEvents["Notebook/LaunchError"]}`,d,c),l.window.showErrorMessage(h.extendErrorWithSupportLinks(d))}})}sendMessageToPreloadScript(e){}getRandomString=()=>(Math.random()+1).toString(36).substring(7);genUniqueId(e){return`${e.document.languageId.replace(/-/g,"_")}_${this.getRandomString()}`}async updateCellId(e,t){if(!!!l.window.visibleNotebookEditors.find(r=>r.notebook.uri.fsPath===t.uri.fsPath))return;const s=[];if(e.forEach(r=>{let i=r.metadata.cellId;if(!i){i=this.genUniqueId(r);const a={...r.metadata,cellId:i},c=l.NotebookEdit.updateCellMetadata(r.index,a);s.push(c)}this._onNotebookCellEvent.fire({cellId:i,notebook:t.uri.fsPath,event:"update",fragment:r.document.uri.fragment,languageId:r.document.languageId})}),s.length>0){const r=new l.WorkspaceEdit;r.set(t.uri,s),await l.workspace.applyEdit(r)}}async onNotebookClose(e){if(e.notebookType!==O)return;const t=await this.clientMapper.getNotebookClient(e.uri);t&&t.dispose(),this.dbtTerminal.debug("Notebookcontroller",`notebook closed: ${e.uri.fsPath}`,e.isUntitled),e.isUntitled&&await l.workspace.fs.delete(e.uri)}async onDidChangeSelectedNotebooks({notebook:e,selected:t}){this.dbtTerminal.debug("Notebookcontroller",`notebook controller selected: ${e.uri.fsPath}`,t);const o=e.uri.toString();t?this.associatedNotebooks.add(o):this.associatedNotebooks.delete(o)}async onNotebookOpen(e){var r;if(e.notebookType!==O)return;this.controller.updateNotebookAffinity(e,l.NotebookControllerAffinity.Default),this.dbtTerminal.debug("Notebookcontroller",`notebook open and controller associated: ${e.uri.fsPath}`);const t=await this.clientMapper.initializeNotebookClient(e.uri),o=await t.getKernel();if(!(o!=null&&o.realKernel))throw new Error("Unable to initialize kernel");this.disposables.push(t.postMessage(i=>{this.sendMessageToPreloadScript(i)},this));const s=e.getCells();await this.updateCellId(s,e);try{await this.waitForControllerAssociation(e)}catch{this.dbtTerminal.warn("Notebookcontroller",`Controller association timeout for ${e.uri.fsPath}. Proceeding anyway.`),this.associatedNotebooks.add(e.uri.toString())}(r=e.metadata)!=null&&r.autoRun&&await this._executeAll(e.getCells(),e,this.controller)}async waitForControllerAssociation(e,t=2e3){const o=Date.now();for(;!this.isControllerAssociatedWithNotebook(e);){if(Date.now()-o>t)throw new Error("Timeout waiting for controller association");await new Promise(s=>setTimeout(s,500))}}isControllerAssociatedWithNotebook(e){return this.associatedNotebooks.has(e.uri.toString())}dispose(){this.disposables.forEach(e=>e.dispose())}async _executeAll(e,t,o){var i,a;const s=await this.queryManifestService.getOrPickProjectFromWorkspace();if(!s){l.window.showErrorMessage("No dbt project selected.");return}(i=t.metadata)!=null&&i.dependencies&&await this.notebookDependencies.verifyAndInstallDependenciesIfNeeded(t.metadata.dependencies,s);const r=await this.clientMapper.getNotebookClient(t.uri);await this.updateContextVariablesInKernel(s,r,e[0]);for(const c of e)await this._doExecution(c,t,(a=t.metadata)==null?void 0:a.isUserNotebook,o,s,r)}filterIPyWidgets(e,t=!1){return e.map(o=>{const r=o.items.find(i=>i.mime==="application/vnd.jupyter.widget-view+json")?t?[l.NotebookCellOutputItem.text("IPyWidgets not supported")]:[]:o.items;return new l.NotebookCellOutput(r)})}updateContextVariablesInKernel(e,t,o){return t.executePython(`
11
+ `;const t=await this.python.lock(a=>a`notebook_kernel.get_connection_file()`),o=JSON.parse(pe.readFileSync(t,{encoding:"utf-8"})),r=await this.python.lock(a=>a`notebook_kernel.get_session_id()`),s={connection:o,pid:r},i=new Ue(s,j(),j(),{name:o.kernel_name,id:j(),language:"python",argv:[],display_name:o.kernel_name,resources:{}});this.kernel=i,this.disposables.push(i.postMessage(a=>this._postMessageEmitter.fire(a))),this.dbtTerminal.log(`Notebook Kernel started with PID: ${r} connection: ${JSON.stringify(o)}`),this.getDependenciesVersion()}catch(t){let o=t.message;t instanceof le.PythonException&&(o=t.exception.message),this.dbtTerminal.error(p.TelemetryEvents["Notebook/KernelInitializationError"],o,t),u.window.showErrorMessage(o)}this.isInitializing=!1}onKernelSocketResponse(e){var t;(t=this.kernel)==null||t.onKernelSocketResponse(e)}async storeContext(e){this.dbtTerminal.log(`storeContext: ${e}`),await this.python.lock(t=>t`notebook_kernel.store_context(${e})`)}async storeDataInKernel(e,t){try{return this.dbtTerminal.log(`storeDataInKernel: ${e}`),await this.python.lock(o=>o`notebook_kernel.store_sql_result(${e}, ${JSON.stringify(t)})`),!0}catch(o){throw this.dbtTerminal.error(p.TelemetryEvents["Notebook/StoreDataInKernelError"],o.exception.message,o),o}}async registerCommTarget(e){if(this.registerdCommTargets.has(e)){this.dbtTerminal.log(`registerCommTarget already registered: ${e}`);return}this.registerdCommTargets.add(e),this.dbtTerminal.log(`registerCommTarget registering: ${e}`);const t=await this.getKernel();if(!t)throw this.registerdCommTargets.delete(e),new Error("Kernel not found for registering comm target");return t.realKernel.registerCommTarget(e,(o,r)=>{this.dbtTerminal.log(`registerCommTarget registered: ${e}`,o,r)})}async getPythonCodeByType(e,t){return this.dbtTerminal.debug("getPythonCodeByType",e,t),await this.python.lock(o=>o`notebook_kernel.get_python_code_by_type(${e}, ${t})`)}async executePython(e,t,o){return new Promise((r,s)=>{var a,l;if(!((l=(a=this.kernel)==null?void 0:a.rawKernel)!=null&&l.realKernel)){s(new Error("Kernel not found"));return}(async()=>{try{const c=t.metadata.cellId;this.dbtTerminal.log(`Executing python code in cell: ${c}`,e);const m=require("@jupyterlab/services");this.dbtTerminal.log("kernel status",this.kernel.rawKernel.realKernel.status);const h=await this.kernel.rawKernel.realKernel.requestExecute({code:e,silent:!1,stop_on_error:!1,allow_stdin:!0,store_history:!0},!1,{cellId:t.document.uri.toString()});if(!h){s(new Error("Unknown request error"));return}h.onReply=d=>{if(t.document.isClosed){h.dispose();return}const y=d.content;y.payload&&y.payload.forEach(k=>{if(k.data&&Object.prototype.hasOwnProperty.call(k.data,"text/plain")){const v=this.addToCellData({output_type:"stream",text:k.data["text/plain"].toString(),name:"stdout",metadata:{},execution_count:y.execution_count},d,t);v&&o(v)}})};const b=[];h.done.finally(()=>{h.dispose(),r(b.filter(d=>!!d))}),h.onStdin=d=>{this.dbtTerminal.log("onStdin",d)},h.onIOPub=d=>{if(m.KernelMessage.isCommOpenMsg(d))this.handleCommOpen(d);else if(m.KernelMessage.isExecuteResultMsg(d))b.push(this.handleExecuteResult(d,t));else if(m.KernelMessage.isExecuteInputMsg(d))this.handleExecuteInput(d);else if(m.KernelMessage.isStatusMsg(d)){const y=d;this.handleStatusMessage(y)}else if(m.KernelMessage.isStreamMsg(d)){const y=this.handleStreamMessage(d,t);y==null||y.forEach(k=>{b.push(k)})}else m.KernelMessage.isDisplayDataMsg(d)?b.push(this.handleDisplayData(d,t)):m.KernelMessage.isUpdateDisplayDataMsg(d)?this.handleUpdateDisplayDataMessage(d):m.KernelMessage.isClearOutputMsg(d)?this.handleClearOutput(d):m.KernelMessage.isErrorMsg(d)?b.push(this.handleError(d,t)):m.KernelMessage.isCommMsgMsg(d)?this.handleCommMsg(d):m.KernelMessage.isCommCloseMsg(d)||this.dbtTerminal.warn("NotebookUnknownIOPubMessage",`Unknown message ${d.header.msg_type} : hasData=${"data"in d.content}`)}}catch(c){s(c)}})().catch(s)})}handleUpdateDisplayDataMessage(e){if(this.dbtTerminal.log("handleUpdateDisplayDataMessage",e),!e.content.transient.display_id){this.dbtTerminal.warn("NotebookUpdateDisplayDataMessageReceivedButNoDisplayId","Update display data message received, but no display id",!1,e.content);return}}handleCommOpen(e){var s;const t=e.content,o=(s=t.data)==null?void 0:s.state;o&&o._model_module==="@jupyter-widgets/output"&&o._model_name==="OutputModel"&&this.commIdsMappedToWidgetOutputModels.add(t.comm_id)}handleCommMsg(e){const t=e.content,o=t.data,r=o.method,s=o.state;if(r==="update"&&(s!=null&&s.msg_id)){const i=s.msg_id,a=t.comm_id,l=this.outputsAreSpecificToAWidget.find(c=>c.handlingCommId===a);l?(l.msgIdsToSwallow=i,l.clearOutputOnNextUpdateToOutput=!0):this.outputsAreSpecificToAWidget.push({handlingCommId:a,msgIdsToSwallow:i,clearOutputOnNextUpdateToOutput:!0})}}handleExecuteResult(e,t){return this.addToCellData({output_type:"execute_result",data:e.content.data,metadata:e.content.metadata,transient:e.content.transient,execution_count:e.content.execution_count},e,t)}addToCellData(e,t,o){if(e.data&&typeof e.data=="object"&&z in e.data){const i=e.data[z];if(i&&"model_id"in i){const a=M.modelIdsOwnedByCells.get(o)||new Set;a.add(i.model_id),M.modelIdsOwnedByCells.set(o,a)}}const r=Q(e);if(o.document.isClosed)return;this.dbtTerminal.log(o.document.uri.fsPath,`Update output with mimes ${r.items.map(i=>i.mime).toString()}`);const s=U(t);return this.outputsAreSpecificToAWidget.length&&this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].msgIdsToSwallow===s&&r.items.every(i=>this.canMimeTypeBeRenderedByWidgetManager(i))||this.outputsAreSpecificToAWidget.length&&this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].msgIdsToSwallow===s&&this.dbtTerminal.warn("NotebookAddToCellData","unknown operation"),r}canMimeTypeBeRenderedByWidgetManager(e){const t=e.mime;if(t===I.stderr||t===I.stdout||t===I.error)return!0;if(t===z){const o=JSON.parse(new TextDecoder().decode(e.data));return!(typeof o.model_id=="string"&&this.commIdsMappedToWidgetOutputModels.has(o.model_id))}return!t.startsWith("application/vnd")}handleExecuteInput(e){}handleStatusMessage(e){}handleStreamMessage(e,t){var r;if(U(e)&&this.outputsAreSpecificToAWidget.length&&this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].msgIdsToSwallow===U(e))return;const o=e.content.name==="stdout"?u.NotebookCellOutputItem.stdout("").mime:u.NotebookCellOutputItem.stderr("").mime;if(!this.streamsReAttachedToExecutingCell&&!this.lastUsedStreamOutput&&t.outputs.length&&t.outputs[t.outputs.length-1].items.length>=1&&t.outputs[t.outputs.length-1].items.every(s=>s.mime===o)&&(this.lastUsedStreamOutput={output:t.outputs[0],stream:e.content.name}),this.streamsReAttachedToExecutingCell=!0,((r=this.lastUsedStreamOutput)==null?void 0:r.stream)===e.content.name)return[Q({output_type:"stream",name:e.content.name,text:e.content.text}),this.lastUsedStreamOutput.output];{const s=ve(H(e.content.text));return[Q({output_type:"stream",name:e.content.name,text:s})]}}handleDisplayData(e,t){const o={output_type:"display_data",data:Ne(e.content.data),metadata:e.content.metadata,transient:e.content.transient};return this.addToCellData(o,e,t)}handleClearOutput(e){if(this.outputsAreSpecificToAWidget.length&&this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].msgIdsToSwallow===U(e)){e.content.wait&&this.outputsAreSpecificToAWidget.length&&(this.outputsAreSpecificToAWidget[this.outputsAreSpecificToAWidget.length-1].clearOutputOnNextUpdateToOutput=!0);return}}handleError(e,t){const o=e.content.traceback;this.dbtTerminal.log(`Traceback for error ${o}`);const r={output_type:"error",ename:e.content.ename,evalue:e.content.evalue,traceback:o};return this.addToCellData(r,e,t)}}Object.defineProperty(M,"modelIdsOwnedByCells",{enumerable:!0,configurable:!0,writable:!0,value:new WeakMap});exports.NotebookDependencies=class{constructor(e,t,o,r){Object.defineProperty(this,"dbtTerminal",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"telemetry",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"commandProcessExecutionFactory",{enumerable:!0,configurable:!0,writable:!0,value:o}),Object.defineProperty(this,"pythonEnvironment",{enumerable:!0,configurable:!0,writable:!0,value:r})}async checkPythonDependencies(e){const t=[];for(const o of e){const r=["-m","pip","show",o],{stderr:s}=await this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:r,cwd:p.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}).completeWithTerminalOutput();s&&t.push(o)}return t}checkDbtDependencies(e,t){return e.map(o=>{try{return t.findPackageVersion(o),null}catch{return o}}).filter(Boolean)}async installMissingPythonPackages(e,t){const o=await this.checkPythonDependencies(e);if(!o.length)return;if(this.dbtTerminal.debug("Notebook","asking user to install missing python dependencies for notebook",o),await u.window.showInformationMessage(`You need the following python packages to use this notebook: ${o.join(", ")}`,"Install","Cancel")!=="Install")throw this.telemetry.sendTelemetryEvent(p.TelemetryEvents["Notebook/DependenciesInstallCancelled"]),new Error("User cancelled python package installation");return this.dbtTerminal.debug("Notebook","installing required dependencies",o),await u.window.withProgress({title:"Installing python packages...",location:u.ProgressLocation.Notification,cancellable:!1},async()=>{try{const s=["-m","pip","install",...o],{stdout:i,stderr:a}=await this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:s,cwd:p.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}).completeWithTerminalOutput();if(!i.includes("Successfully installed")&&!i.includes("Requirement already satisfied")&&a)throw new Error(a);return this.dbtTerminal.log("Notebook dependencies have been installed successfully."),this.telemetry.sendTelemetryEvent(p.TelemetryEvents["Notebook/DependenciesInstalled"]),await t.initialize(),!0}catch(s){this.telemetry.sendTelemetryError(p.TelemetryEvents["Notebook/DependenciesInstallError"],s),u.window.showErrorMessage(p.extendErrorWithSupportLinks(s.message))}})}async installMissingDbtPackages(e,t){const o=this.checkDbtDependencies(e.map(i=>`${i.name}`),t);if(!o.length)return;const r=e.filter(i=>i.name?o.includes(i.name):!1);if(this.dbtTerminal.debug("Notebook","asking user to install missing dbt dependencies for notebook",r),await u.window.showInformationMessage(`You need following dbt packages to use this notebook: ${r.map(i=>`${i.package}`).join(", ")}`,"Install","Cancel")!=="Install")throw this.telemetry.sendTelemetryEvent(p.TelemetryEvents["Notebook/DependenciesInstallCancelled"]),new Error("User cancelled dbt package installation");return await u.window.withProgress({title:"Installing dbt packages...",location:u.ProgressLocation.Notification,cancellable:!1},async()=>{try{const i=r.map(l=>`${l.package}@${l.version}`);this.dbtTerminal.debug("Notebook","installing dbt packages",i),await t.installDbtPackages(i),await t.initialize();const a=this.checkDbtDependencies(e.map(l=>`${l.name}`),t);if(a.length)throw new Error(`Failed to install dbt packages ${a.join(", ")}`);return this.dbtTerminal.log("Notebook dependencies have been installed successfully."),this.telemetry.sendTelemetryEvent(p.TelemetryEvents["Notebook/DependenciesInstalled"]),!0}catch(i){this.telemetry.sendTelemetryError(p.TelemetryEvents["Notebook/DependenciesInstallError"],i),u.window.showErrorMessage(p.extendErrorWithSupportLinks(i.message))}})}async verifyAndInstallDependenciesIfNeeded(e,t){this.dbtTerminal.debug("NotebookDependencies","verifying required dependencies",e),await Promise.all([this.validateAndInstallNotebookDependencies(),this.installMissingPythonPackages(e.filter(o=>o.type==="python").map(o=>o.package),t),this.installMissingDbtPackages(e.filter(o=>o.type==="dbt"),t)])}async getDependenciesVersion(){const e=["-m","jupyter","--version"],{stdout:t,stderr:o}=await this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:e,cwd:p.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}).completeWithTerminalOutput();if(!t.includes("Successfully installed")&&!t.includes("Requirement already satisfied")&&o)throw new Error(o);const r=t.split(`
12
+ `),s={};return r.forEach(i=>{const[a,l]=i.split(":").map(c=>c.trim());a&&l&&(s[a]=l)}),s}async validateAndInstallNotebookDependencies(){try{if(await this.notebookDependenciesAreInstalled())return this.dbtTerminal.log("Notebook dependencies are already installed."),!0;if(await u.window.showInformationMessage("You need [ipykernel](https://pypi.org/project/ipykernel/) and [jupyter_client](https://github.com/jupyter/jupyter_client) to use the notebook","Install","Cancel")!=="Install")return this.telemetry.sendTelemetryEvent(p.TelemetryEvents["Notebook/DependenciesInstallCancelled"]),!1;await u.window.withProgress({title:"Installing required dependencies...",location:u.ProgressLocation.Notification,cancellable:!1},async()=>{try{const o=["-m","pip","install","ipykernel","jupyter_client","jupyter_contrib_nbextensions","ipywidgets"],{stdout:r,stderr:s}=await this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:o,cwd:p.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}).completeWithTerminalOutput();if(!r.includes("Successfully installed")&&!r.includes("Requirement already satisfied")&&s)throw new Error(s);return this.dbtTerminal.log("Notebook dependencies have been installed successfully."),this.telemetry.sendTelemetryEvent(p.TelemetryEvents["Notebook/DependenciesInstalled"]),!0}catch(o){return this.telemetry.sendTelemetryError(p.TelemetryEvents["Notebook/DependenciesInstallError"],o),u.window.showErrorMessage(p.extendErrorWithSupportLinks(o.message)),!1}})&&await u.window.showInformationMessage("Notebook dependencies installed. Please reload the window to use the notebook.","Reload Window")==="Reload Window"&&u.commands.executeCommand("workbench.action.reloadWindow")}catch(e){throw this.dbtTerminal.error(p.TelemetryEvents["Notebook/DependenciesInstallError"],e.message,e),e}}async notebookDependenciesAreInstalled(){try{const e=this.commandProcessExecutionFactory.createCommandProcessExecution({command:this.pythonEnvironment.pythonPath,args:["-c","import jupyter_client"],cwd:p.getFirstWorkspacePath(),envVars:this.pythonEnvironment.environmentVariables}),{stderr:t}=await e.complete();if(t)throw new Error(t);return!0}catch{return!1}}};exports.NotebookDependencies=P([p.provideSingleton(exports.NotebookDependencies),D("design:paramtypes",[p.DBTTerminal,p.TelemetryService,p.CommandProcessExecutionFactory,p.PythonEnvironment])],exports.NotebookDependencies);let G=class{constructor(e,t,o){Object.defineProperty(this,"executionInfrastructure",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"notebookDependencies",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"dbtTerminal",{enumerable:!0,configurable:!0,writable:!0,value:o}),Object.defineProperty(this,"clientMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}async initializeNotebookClient(e){if(!this.clientMap.has(e.fsPath)){this.dbtTerminal.debug("ClientMapper","initializing notebook client",e.fsPath);const t=new M(e.fsPath,this.executionInfrastructure,this.notebookDependencies,this.dbtTerminal);this.clientMap.set(e.fsPath,new Promise(o=>{t.getKernel().then(()=>o(t))}))}return this.clientMap.get(e.fsPath)}getNotebookClient(e){if(!this.clientMap.has(e.fsPath))throw new Error("Notebook client not initialized");return this.clientMap.get(e.fsPath)}};G=P([p.provideSingleton(G),D("design:paramtypes",[p.DBTCommandExecutionInfrastructure,exports.NotebookDependencies,p.DBTTerminal])],G);const Ve=["python","sql","jinja-sql"],ze="jinja-sql",ue=".notebook",ce="datapilot",R="datapilot-notebook",Ge=require("path");exports.DatapilotNotebookController=class{constructor(e,t,o,r,s,i){Object.defineProperty(this,"clientMapper",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"queryManifestService",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"telemetry",{enumerable:!0,configurable:!0,writable:!0,value:o}),Object.defineProperty(this,"dbtTerminal",{enumerable:!0,configurable:!0,writable:!0,value:r}),Object.defineProperty(this,"notebookDependencies",{enumerable:!0,configurable:!0,writable:!0,value:s}),Object.defineProperty(this,"altimate",{enumerable:!0,configurable:!0,writable:!0,value:i}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"DatapilotNotebookController"}),Object.defineProperty(this,"label",{enumerable:!0,configurable:!0,writable:!0,value:"Datapilot"}),Object.defineProperty(this,"_onNotebookCellEvent",{enumerable:!0,configurable:!0,writable:!0,value:new u.EventEmitter}),Object.defineProperty(this,"onNotebookCellChangeEvent",{enumerable:!0,configurable:!0,writable:!0,value:this._onNotebookCellEvent.event}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[this._onNotebookCellEvent]}),Object.defineProperty(this,"associatedNotebooks",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"executionOrder",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"controller",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"getRandomString",{enumerable:!0,configurable:!0,writable:!0,value:()=>(Math.random()+1).toString(36).substring(7)}),this.controller=u.notebooks.createNotebookController(this.id,R,this.label),this.controller.supportedLanguages=Ve,this.controller.supportsExecutionOrder=!0,this.controller.executeHandler=this._executeAll.bind(this),this.disposables.push(u.workspace.onDidChangeNotebookDocument(a=>{a.contentChanges.forEach(async l=>{l.addedCells&&await this.updateCellId(a.notebook.getCells(),a.notebook),l.removedCells&&l.removedCells.forEach(c=>{this._onNotebookCellEvent.fire({cellId:c.metadata.cellId,notebook:a.notebook.uri.fsPath,result:void 0,event:"delete",fragment:c.document.uri.fragment,languageId:c.document.languageId})})})})),this.disposables.push(this.controller),this.controller.onDidChangeSelectedNotebooks(this.onDidChangeSelectedNotebooks,this,this.disposables),this.disposables.push(u.workspace.onDidOpenNotebookDocument(async a=>{await this.onNotebookOpen(a)})),this.disposables.push(u.workspace.onDidCloseNotebookDocument(async a=>{await this.onNotebookClose(a)}))}async getNotebookByTemplate(e){var o;return this.dbtTerminal.debug("Notebook","getting notebook by template",e),e?(o=(await this.altimate.getPreConfiguredNotebooks()).find(r=>r.name===e))==null?void 0:o.data:(this.dbtTerminal.debug("Notebook","sending blank notebook"),{cells:[{cell_type:u.NotebookCellKind.Markup,source:["### Welcome to your new dbt Power User Notebook!","> Note: Remember, you can delete any or all of these example cells to start fresh with your own work. Enjoy exploring and analyzing your data!","#### Documentation and Feedback","For more detailed information on how to use this notebook and the dbt Power User extension, please refer to our documentation:","[dbt Power User Documentation](https://docs.myaltimate.com/govern/notebooks/)"," ","We value your feedback! If you have any suggestions, encounter issues, or want to share your experience, please let us know:","[Share Feedback](https://docs.google.com/forms/d/e/1FAIpQLScwN3wRTAniQzvcO6Hn3jC0WtBoFE2NP4X_6qGQ09IZKZ3Ojw/viewform?usp=sf_link)"," ","Happy analyzing with your new dbt Power User Notebook!"," ","This notebook allows you to combine Jinja SQL queries, Python code, and Markdown text. Let's explore each of these features.","##### 1. Jinja SQL Queries","You can write and execute Jinja SQL queries directly in this notebook. Here's an example:"],languageId:"markdown",metadata:{}},{cell_type:u.NotebookCellKind.Code,source:["select * from {{ ref('your_model_name') }}","{# Replace 'your_model_name' with the name of your dbt model. #}"],languageId:ze,metadata:{cellId:"jinja_sql_0"}},{cell_type:u.NotebookCellKind.Markup,source:["##### 2. Python Code","You can also write and execute Python code on top of the results of previous `jinja-sql` cell in this notebook. Here's a simple example:"],languageId:"markdown",metadata:{}},{cell_type:u.NotebookCellKind.Code,source:["import pandas as pd","from IPython.display import display, HTML","from ydata_profiling import ProfileReport","from io import StringIO","","# Extract the data field","# NOTE: we use the cell id from previous cell to extract the data","data = cell_jinja_sql_0['data']","","# Create a DataFrame","df = pd.DataFrame(data)","","# Display the DataFrame","# display(HTML(df.to_html()))","",'profile = ProfileReport(df, title="Profiling Report")',"profile.to_notebook_iframe()"],languageId:"python",metadata:{}},{cell_type:u.NotebookCellKind.Markup,source:["This Python code creates a profile report of your query results. You can customize the code to suit your needs.","##### 3. Markdown Text","As you can see, you can use Markdown to structure your notebook with headings, lists, and more. You can also use it to add explanations and documentation to your queries and code.","##### Tips for Using This Notebook","- Use Jinja cells for your dbt model queries and data exploration","- Use Python cells for data analysis, visualization, and custom transformations. The jinja data can be referenced using the cell id","- Use Markdown cells to explain your process, document your findings, and create a narrative for your analysis"],languageId:"markdown",metadata:{}}]})}async modelTestSuggestions(e){this.dbtTerminal.log("modelTestSuggestions",e)}async generateDbtSourceYaml(e){this.dbtTerminal.log("generateDbtSourceYaml",e)}async generateDbtDbtModelSql(e){this.dbtTerminal.log("generateDbtDbtModelSql",e)}async generateDbtDbtModelYaml(e){this.dbtTerminal.log("generateDbtDbtModelYaml",e)}async generateDbtDbtModelCTE(e){this.dbtTerminal.log("generateDbtDbtModelCTE",e)}async extractExposuresFromMetabase(e){this.dbtTerminal.log("extractExposuresFromMetabase",e)}async extractExposuresFromTableau(e){this.dbtTerminal.log("extractExposuresFromTableau",e)}async getFileName(e,t){if(e)return e;const o=fe();if((await this.altimate.addNotebook({name:o,description:"",data:t?{...t,metadata:{...t.metadata||{},isDraft:!0}}:{},tags_list:[]})).ok&&(await this.altimate.getNotebooks(o)).length>0)return o}async createNotebook(e){var i;const{notebookId:t,template:o,context:r={},notebookSchema:s}=e||{};if(this.dbtTerminal.info(p.TelemetryEvents["Notebook/Launch"],"creating notebook",!0,e),!r.model&&((i=u.window.activeTextEditor)!=null&&i.document.uri.fsPath.endsWith(".sql"))){const a=Ge.basename(u.window.activeTextEditor.document.uri.fsPath,".sql"),l=u.window.activeTextEditor.document.getText();r.model=a,r.query=l}u.window.withProgress({location:u.ProgressLocation.Notification,title:"Launching notebook...",cancellable:!1},async()=>{var a;try{const l=s||(t?null:await this.getNotebookByTemplate(o)),c=await this.queryManifestService.getOrPickProjectFromWorkspace();if(!c){u.window.showErrorMessage("No dbt project selected.");return}if((a=l==null?void 0:l.metadata)!=null&&a.dependencies&&await this.notebookDependencies.verifyAndInstallDependenciesIfNeeded(l.metadata.dependencies,c),r&&l)for(const d in r)Object.prototype.hasOwnProperty.call(r,d)&&typeof r[d]=="string"&&(l.cells[0].source=l.cells[0].source.map(y=>y.replace(`%_${d}_%`,r[d])));const m=await this.getFileName(t,l),h=u.Uri.parse(`${c.projectRoot}/${m}${ue}`).with({scheme:ce});this.dbtTerminal.debug("Notebook","opening notebook",h);const b=await u.workspace.openNotebookDocument(h);await u.window.showNotebookDocument(b)}catch(l){const c=l instanceof le.PythonException?l.exception.message:l.message;this.dbtTerminal.error(`${p.TelemetryEvents["Notebook/LaunchError"]}`,c,l),u.window.showErrorMessage(p.extendErrorWithSupportLinks(c))}})}sendMessageToPreloadScript(e){}genUniqueId(e){return`${e.document.languageId.replace(/-/g,"_")}_${this.getRandomString()}`}async updateCellId(e,t){if(!!!u.window.visibleNotebookEditors.find(s=>s.notebook.uri.fsPath===t.uri.fsPath))return;const r=[];if(e.forEach(s=>{let i=s.metadata.cellId;if(!i){i=this.genUniqueId(s);const a={...s.metadata,cellId:i},l=u.NotebookEdit.updateCellMetadata(s.index,a);r.push(l)}this._onNotebookCellEvent.fire({cellId:i,notebook:t.uri.fsPath,event:"update",fragment:s.document.uri.fragment,languageId:s.document.languageId})}),r.length>0){const s=new u.WorkspaceEdit;s.set(t.uri,r),await u.workspace.applyEdit(s)}}async onNotebookClose(e){if(e.notebookType!==R)return;const t=await this.clientMapper.getNotebookClient(e.uri);t&&t.dispose(),this.dbtTerminal.debug("Notebookcontroller",`notebook closed: ${e.uri.fsPath}`,e.isUntitled),e.isUntitled&&await u.workspace.fs.delete(e.uri)}async onDidChangeSelectedNotebooks({notebook:e,selected:t}){this.dbtTerminal.debug("Notebookcontroller",`notebook controller selected: ${e.uri.fsPath}`,t);const o=e.uri.toString();t?this.associatedNotebooks.add(o):this.associatedNotebooks.delete(o)}async onNotebookOpen(e){var s;if(e.notebookType!==R)return;this.controller.updateNotebookAffinity(e,u.NotebookControllerAffinity.Default),this.dbtTerminal.debug("Notebookcontroller",`notebook open and controller associated: ${e.uri.fsPath}`);const t=await this.clientMapper.initializeNotebookClient(e.uri),o=await t.getKernel();if(!(o!=null&&o.realKernel))throw new Error("Unable to initialize kernel");this.disposables.push(t.postMessage(i=>{this.sendMessageToPreloadScript(i)},this));const r=e.getCells();await this.updateCellId(r,e);try{await this.waitForControllerAssociation(e)}catch{this.dbtTerminal.warn("Notebookcontroller",`Controller association timeout for ${e.uri.fsPath}. Proceeding anyway.`),this.associatedNotebooks.add(e.uri.toString())}(s=e.metadata)!=null&&s.autoRun&&await this._executeAll(e.getCells(),e,this.controller)}async waitForControllerAssociation(e,t=2e3){const o=Date.now();for(;!this.isControllerAssociatedWithNotebook(e);){if(Date.now()-o>t)throw new Error("Timeout waiting for controller association");await new Promise(r=>setTimeout(r,500))}}isControllerAssociatedWithNotebook(e){return this.associatedNotebooks.has(e.uri.toString())}dispose(){this.disposables.forEach(e=>e.dispose())}async _executeAll(e,t,o){var i,a;const r=await this.queryManifestService.getOrPickProjectFromWorkspace();if(!r){u.window.showErrorMessage("No dbt project selected.");return}(i=t.metadata)!=null&&i.dependencies&&await this.notebookDependencies.verifyAndInstallDependenciesIfNeeded(t.metadata.dependencies,r);const s=await this.clientMapper.getNotebookClient(t.uri);await this.updateContextVariablesInKernel(r,s,e[0]);for(const l of e)await this._doExecution(l,t,(a=t.metadata)==null?void 0:a.isUserNotebook,o,r,s)}filterIPyWidgets(e,t=!1){return e.map(o=>{const s=o.items.find(i=>i.mime==="application/vnd.jupyter.widget-view+json")?t?[u.NotebookCellOutputItem.text("IPyWidgets not supported")]:[]:o.items;return new u.NotebookCellOutput(s)})}updateContextVariablesInKernel(e,t,o){return t.executePython(`
12
13
  manifest_path="${e.getManifestPath()}"
13
14
  project_name="${e.getProjectName()}"
14
- `,o,()=>{})}async _doExecution(e,t,o,s,r,i){this.dbtTerminal.debug("Notebook","executing cell",e.index,t.uri.fsPath);let a;try{const c=[];switch(a=s.createNotebookCellExecution(e),a.executionOrder=++this.executionOrder,a.start(Date.now()),a.token.onCancellationRequested(d=>{a==null||a.end(!0,Date.now())}),a.clearOutput(),e.document.languageId){case"markdown":break;case"python":{this.telemetry.startTelemetryEvent(h.TelemetryEvents["Notebook/Execute"],{language:e.document.languageId});const d=await(i==null?void 0:i.executePython(e.document.getText(),e,p=>{a==null||a.appendOutput(this.filterIPyWidgets([p],o))}));d&&a.appendOutput(this.filterIPyWidgets(d,o))}break;case"jinja-sql":case"sql":{this.dbtTerminal.debug("Notebook","executing sql",e.document.getText()),this.telemetry.startTelemetryEvent(h.TelemetryEvents["Notebook/Execute"],{language:e.document.languageId});const{metadata:d}=e;if((d==null?void 0:d.execution_type)==="compile"){const p=await r.unsafeCompileQuery(e.document.getText());a.appendOutput(new l.NotebookCellOutput([l.NotebookCellOutputItem.text(p,d==null?void 0:d.output_mime_type)]))}else{const p=await r.executeSQL(e.document.getText(),"",!0);this._onNotebookCellEvent.fire({cellId:e.metadata.cellId,notebook:t.uri.fsPath,result:p,event:"add",languageId:e.document.languageId}),o||(c.push(l.NotebookCellOutputItem.json(p,"application/perspective-json")),a.appendOutput(new l.NotebookCellOutput(c))),await i.storeDataInKernel(e.metadata.cellId,p)}}break;default:l.window.showErrorMessage(`Language: ${e.document.languageId} not supported`);break}this.telemetry.endTelemetryEvent(h.TelemetryEvents["Notebook/Execute"],{language:e.document.languageId}),a.end(!0,Date.now())}catch(c){this.dbtTerminal.error("Notebook",`Error executing cell: ${c.message}`,c,!1),a==null||a.replaceOutput([new l.NotebookCellOutput([l.NotebookCellOutputItem.error(c)])]),this.telemetry.endTelemetryEvent(h.TelemetryEvents["Notebook/Execute"],c,{language:e.document.languageId}),a==null||a.end(!1,Date.now())}}};exports.DatapilotNotebookController=Qe([h.provideSingleton(exports.DatapilotNotebookController)],exports.DatapilotNotebookController);const Ze={notebooks:[{name:"Profile your query",description:"Notebook to profile your query",created_at:new Date().toISOString(),updated_at:new Date().toISOString(),id:"1",data:{cells:[{cell_type:l.NotebookCellKind.Code,source:["{{context.query}}"],languageId:"jinja-sql",metadata:{cellId:"jinja_sql_cu6pt"}},{cell_type:l.NotebookCellKind.Code,source:["import pandas as pd","from IPython.display import display, HTML","from ydata_profiling import ProfileReport","from io import StringIO","","# Extract the data field","data = cell_jinja_sql_cu6pt['data']","","# Create a DataFrame","df = pd.DataFrame(data)","","# Display the DataFrame","# display(HTML(df.to_html()))","",'profile = ProfileReport(df, title="Profiling Report")',"profile.to_notebook_iframe()"],languageId:"python",metadata:{}}],metadata:{dependencies:["pandas","ydata_profiling"],autoRun:!0}},tags:["profile"]}]};var et=Object.defineProperty,tt=Object.getOwnPropertyDescriptor,ot=(n,e,t,o)=>{for(var s=o>1?void 0:o?tt(e,t):e,r=n.length-1,i;r>=0;r--)(i=n[r])&&(s=(o?i(e,t,s):i(s))||s);return o&&s&&et(e,t,s),s};const ne=require("path");exports.NotebookFileSystemProvider=class{constructor(e,t){this.dbtTerminal=e,this.altimate=t}_emitter=new l.EventEmitter;onDidChangeFile=this._emitter.event;notebookDataMap=new Map;watch(e,t){return new l.Disposable(()=>{})}stat(e){return{type:l.FileType.File,ctime:Date.now(),mtime:Date.now(),size:0}}readDirectory(e){return[]}createDirectory(e){}async getNotebookData(e){if(this.notebookDataMap.has(e))return this.notebookDataMap.get(e);const t=await this.altimate.getNotebooks(e)||[];return t.length?t[0]:null}async readFile(e){const t=this.getFileNameFromUri(e),o=await this.getNotebookData(t),s=(o==null?void 0:o.data)||{};return"cells"in s&&"metadata"in s&&(s.metadata?s.metadata={...s.metadata,id:o==null?void 0:o.id}:s.metadata={id:o==null?void 0:o.id}),o&&this.notebookDataMap.set(t,o),new TextEncoder().encode(JSON.stringify(s))}async writeFile(e,t,o){await this.customSave(e,t)}delete(e,t){const o=e.with({path:ne.posix.dirname(e.path)});this._emitter.fire([{type:l.FileChangeType.Changed,uri:o},{uri:e,type:l.FileChangeType.Deleted}])}rename(e,t,o){this._emitter.fire([{type:l.FileChangeType.Deleted,uri:e},{type:l.FileChangeType.Created,uri:t}])}getFileNameFromUri(e){return ne.basename(e.fsPath,re)}async customSave(e,t){var o;try{console.log("custom save",e,new TextDecoder().decode(t));const s=(o=l.window.activeNotebookEditor)==null?void 0:o.notebook;if(!s)return this.dbtTerminal.warn(h.TelemetryEvents["Notebook/SaveError"],"No active notebook found"),!1;this.dbtTerminal.log("saving notebook",s);const{name:r}=s.metadata;return await this.saveNotebook(s,r),this._emitter.fire([{type:l.FileChangeType.Changed,uri:e}]),!0}catch(s){this.dbtTerminal.error(h.TelemetryEvents["Notebook/SaveError"],s.message,s),l.window.showErrorMessage(h.extendErrorWithSupportLinks(`Failed to save notebook. Error: ${s.message}`))}return!1}async saveNotebook(e,t){try{const o=te(e,t);this.dbtTerminal.log("saving notebook",t,o),await this.altimate.updateNotebook(e.metadata.id,{name:t,description:"",data:o,tags_list:[]}),this.dbtTerminal.log("notebook saved",t,o);const s=this.getFileNameFromUri(e.uri),r=this.notebookDataMap.get(s);return r&&(r.data=te(e,t,!0),this.notebookDataMap.set(s,r)),o}catch(o){this.dbtTerminal.error(h.TelemetryEvents["Notebook/SaveError"],o.message,o),l.window.showErrorMessage(h.extendErrorWithSupportLinks(`Failed to save notebook. Error: ${o.message}`))}}};exports.NotebookFileSystemProvider=ot([h.provideSingleton(exports.NotebookFileSystemProvider)],exports.NotebookFileSystemProvider);var nt=Object.defineProperty,st=Object.getOwnPropertyDescriptor,rt=(n,e,t,o)=>{for(var s=o>1?void 0:o?st(e,t):e,r=n.length-1,i;r>=0;r--)(i=n[r])&&(s=(o?i(e,t,s):i(s))||s);return o&&s&&nt(e,t,s),s};exports.NotebookProviders=class{constructor(e,t,o,s){this.notebookProvider=e,this.notebookController=t,this.notebookFileSystemProvider=o,this.dbtTerminal=s,this.disposables.push(l.workspace.onDidChangeConfiguration(r=>{r.affectsConfiguration("dbt.enableNotebooks")&&this.bindNotebookActions()})),this.bindNotebookActions()}disposables=[];bindNotebookActions(){l.workspace.getConfiguration("dbt").get("enableNotebooks",!1)&&(this.dbtTerminal.log("Notebooks enabled, binding actions"),this.disposables.push(l.notebooks.registerNotebookCellStatusBarItemProvider(O,new ce),l.workspace.registerNotebookSerializer(O,this.notebookProvider,{}),this.notebookController),this.disposables.push(l.workspace.registerFileSystemProvider(ie,this.notebookFileSystemProvider,{isCaseSensitive:!0,isReadonly:!1})))}dispose(){for(;this.disposables.length;){const e=this.disposables.pop();e&&e.dispose()}}};exports.NotebookProviders=rt([h.provideSingleton(exports.NotebookProviders)],exports.NotebookProviders);const R=n=>n==="bigquery"?"RAND":"RANDOM",P=async(n,e)=>{const t=await e(n);return(t==null?void 0:t.table.rows)||[]},L=(n,e,t)=>n.filter(o=>!e.includes(o.column)&&!t.includes(o.dtype)),it=n=>["timestamp","date"].includes(n.dtype.toLowerCase()),at=n=>["char","character","varchar","string","text","nchar","nvarchar","variant","character varying","citext","name","json","jsonb","bstring","bpchar","tinytext","mediumtext","longtext","enum"].includes(n.dtype.toLowerCase()),lt=n=>{const e=["int","integer","bigint","smallint","tinyint","decimal","numeric","float","real","double","number"],t=n.dtype.toLowerCase();return e.some(o=>t.includes(o))},D=n=>Number(n),$=(n={},e)=>{if(!n)return e||{};if(!e)return n;const t={},o=[...new Set([...Object.keys(n),...Object.keys(e)])].filter(s=>["models","sources","seeds"].includes(s));for(const s of o){if(!n[s]){t[s]=e[s];continue}if(!e[s]){t[s]=n[s];continue}const r=n[s]||[],i=e[s]||[],a=new Map(r.map(m=>[m.name,m])),c=new Map(i.map(m=>[m.name,m])),p=[...new Set([...r.map(m=>m.name),...i.map(m=>m.name)])].map(m=>{var b,C,T,_;const g=a.get(m),u=c.get(m),y=[...(g==null?void 0:g.tests)||[],...(u==null?void 0:u.tests)||[]],k=new Map(((b=g==null?void 0:g.columns)==null?void 0:b.map(f=>[f.name,f]))||[]),N=new Map(((C=u==null?void 0:u.columns)==null?void 0:C.map(f=>[f.name,f]))||[]),w=[...new Set([...((T=g==null?void 0:g.columns)==null?void 0:T.map(f=>f.name))||[],...((_=u==null?void 0:u.columns)==null?void 0:_.map(f=>f.name))||[]])].map(f=>{const I=k.get(f),v=N.get(f);return I?v?{...I,...v,name:f,tests:[...I.tests||[],...v.tests||[]]}:I:v}),E={name:m,columns:w};return y.length>0&&(E.tests=y),E});t[s]=p}return t};class q{quote;adapter;queryFn;constructor(e,t){this.quote=(o,s)=>s?`adapter.quote('${o}')`:`{{adapter.quote('${o}')}}`,this.adapter=e,this.queryFn=t}}class ct extends q{async generateRangeTests({tableRelation:e,excludeTypes:t,excludeCols:o,stddevs:s,limit:r,sample:i,columnConfig:a,resourceType:c,dbtConfig:d,columnsInRelation:p}){const g=L(p,o,t).filter(b=>lt(b));if(g.length===0)return d;let u="";r!==null&&(i?u=`ORDER BY ${R(this.adapter)}() LIMIT ${r}`:u=`LIMIT ${r}`);const y=g.map((b,C)=>`SELECT '${b.column}' AS COLNAME, MIN(${this.quote(b.column)}) as COL_MIN, MAX(${this.quote(b.column)}) as COL_MAX, STDDEV(${this.quote(b.column)}) as COL_STDDEV, ${C+1} AS ORDERING FROM base`),k=`
15
+ `,o,()=>{})}async _doExecution(e,t,o,r,s,i){this.dbtTerminal.debug("Notebook","executing cell",e.index,t.uri.fsPath);let a;try{const l=[];switch(a=r.createNotebookCellExecution(e),a.executionOrder=++this.executionOrder,a.start(Date.now()),a.token.onCancellationRequested(c=>{a==null||a.end(!0,Date.now())}),a.clearOutput(),e.document.languageId){case"markdown":break;case"python":{this.telemetry.startTelemetryEvent(p.TelemetryEvents["Notebook/Execute"],{language:e.document.languageId});const c=await(i==null?void 0:i.executePython(e.document.getText(),e,m=>{a==null||a.appendOutput(this.filterIPyWidgets([m],o))}));c&&a.appendOutput(this.filterIPyWidgets(c,o))}break;case"jinja-sql":case"sql":{this.dbtTerminal.debug("Notebook","executing sql",e.document.getText()),this.telemetry.startTelemetryEvent(p.TelemetryEvents["Notebook/Execute"],{language:e.document.languageId});const{metadata:c}=e;if((c==null?void 0:c.execution_type)==="compile"){const m=await s.unsafeCompileQuery(e.document.getText());a.appendOutput(new u.NotebookCellOutput([u.NotebookCellOutputItem.text(m,c==null?void 0:c.output_mime_type)]))}else{const m=await s.executeSQL(e.document.getText(),"",!0);this._onNotebookCellEvent.fire({cellId:e.metadata.cellId,notebook:t.uri.fsPath,result:m,event:"add",languageId:e.document.languageId}),o||(l.push(u.NotebookCellOutputItem.json(m,"application/perspective-json")),a.appendOutput(new u.NotebookCellOutput(l))),await i.storeDataInKernel(e.metadata.cellId,m)}}break;default:u.window.showErrorMessage(`Language: ${e.document.languageId} not supported`);break}this.telemetry.endTelemetryEvent(p.TelemetryEvents["Notebook/Execute"],{language:e.document.languageId}),a.end(!0,Date.now())}catch(l){this.dbtTerminal.error("Notebook",`Error executing cell: ${l.message}`,l,!1),a==null||a.replaceOutput([new u.NotebookCellOutput([u.NotebookCellOutputItem.error(l)])]),this.telemetry.endTelemetryEvent(p.TelemetryEvents["Notebook/Execute"],l,{language:e.document.languageId}),a==null||a.end(!1,Date.now())}}};exports.DatapilotNotebookController=P([p.provideSingleton(exports.DatapilotNotebookController),D("design:paramtypes",[G,p.QueryManifestService,p.TelemetryService,p.DBTTerminal,exports.NotebookDependencies,p.AltimateRequest])],exports.DatapilotNotebookController);class He{constructor(){Object.defineProperty(this,"_disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]})}dispose(){this._disposables.forEach(e=>e.dispose())}provideCellStatusBarItems(e){if(e.document.languageId!=="jinja-sql")return;const t=new u.NotebookCellStatusBarItem("$(globe) Profile your query",u.NotebookCellStatusBarAlignment.Left);return t.command="dbtPowerUser.datapilotProfileYourQuery",t.tooltip="Profile your query",[]}}const ae=require("path");exports.NotebookFileSystemProvider=class{constructor(e,t){Object.defineProperty(this,"dbtTerminal",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"altimate",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"_emitter",{enumerable:!0,configurable:!0,writable:!0,value:new u.EventEmitter}),Object.defineProperty(this,"onDidChangeFile",{enumerable:!0,configurable:!0,writable:!0,value:this._emitter.event}),Object.defineProperty(this,"notebookDataMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}watch(e,t){return new u.Disposable(()=>{})}stat(e){return{type:u.FileType.File,ctime:Date.now(),mtime:Date.now(),size:0}}readDirectory(e){return[]}createDirectory(e){}async getNotebookData(e){if(this.notebookDataMap.has(e))return this.notebookDataMap.get(e);const t=await this.altimate.getNotebooks(e)||[];return t.length?t[0]:null}async readFile(e){const t=this.getFileNameFromUri(e),o=await this.getNotebookData(t),r=(o==null?void 0:o.data)||{};return"cells"in r&&"metadata"in r&&(r.metadata?r.metadata={...r.metadata,id:o==null?void 0:o.id}:r.metadata={id:o==null?void 0:o.id}),o&&this.notebookDataMap.set(t,o),new TextEncoder().encode(JSON.stringify(r))}async writeFile(e,t,o){await this.customSave(e,t)}delete(e,t){const o=e.with({path:ae.posix.dirname(e.path)});this._emitter.fire([{type:u.FileChangeType.Changed,uri:o},{uri:e,type:u.FileChangeType.Deleted}])}rename(e,t,o){this._emitter.fire([{type:u.FileChangeType.Deleted,uri:e},{type:u.FileChangeType.Created,uri:t}])}getFileNameFromUri(e){return ae.basename(e.fsPath,ue)}async customSave(e,t){var o;try{console.log("custom save",e,new TextDecoder().decode(t));const r=(o=u.window.activeNotebookEditor)==null?void 0:o.notebook;if(!r)return this.dbtTerminal.warn(p.TelemetryEvents["Notebook/SaveError"],"No active notebook found"),!1;this.dbtTerminal.log("saving notebook",r);const{name:s}=r.metadata;return await this.saveNotebook(r,s),this._emitter.fire([{type:u.FileChangeType.Changed,uri:e}]),!0}catch(r){this.dbtTerminal.error(p.TelemetryEvents["Notebook/SaveError"],r.message,r),u.window.showErrorMessage(p.extendErrorWithSupportLinks(`Failed to save notebook. Error: ${r.message}`))}return!1}async saveNotebook(e,t){try{const o=ee(e,t);this.dbtTerminal.log("saving notebook",t,o),await this.altimate.updateNotebook(e.metadata.id,{name:t,description:"",data:o,tags_list:[]}),this.dbtTerminal.log("notebook saved",t,o);const r=this.getFileNameFromUri(e.uri),s=this.notebookDataMap.get(r);return s&&(s.data=ee(e,t,!0),this.notebookDataMap.set(r,s)),o}catch(o){this.dbtTerminal.error(p.TelemetryEvents["Notebook/SaveError"],o.message,o),u.window.showErrorMessage(p.extendErrorWithSupportLinks(`Failed to save notebook. Error: ${o.message}`))}}};exports.NotebookFileSystemProvider=P([p.provideSingleton(exports.NotebookFileSystemProvider),D("design:paramtypes",[p.DBTTerminal,p.AltimateRequest])],exports.NotebookFileSystemProvider);exports.NotebookService=class{constructor(e){Object.defineProperty(this,"notebookKernel",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"cellByNotebookAutocompleteMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.disposables.push(this.notebookKernel.onNotebookCellChangeEvent(t=>{this.onNotebookCellChanged(t)}))}dispose(){for(;this.disposables.length;){const e=this.disposables.pop();e&&e.dispose()}}getCellByNotebookAutocompleteMap(){return this.cellByNotebookAutocompleteMap}onNotebookCellChanged(e){if(!e.fragment)return;const t={cellId:e.cellId,fragment:e.fragment,languageId:e.languageId},o=this.cellByNotebookAutocompleteMap.get(e.notebook)||[];switch(e.event){case"add":case"update":this.cellByNotebookAutocompleteMap.set(e.notebook,[...o.filter(r=>r.cellId!==e.cellId),t]);break;case"delete":this.cellByNotebookAutocompleteMap.set(e.notebook,o.filter(r=>r.cellId!==e.cellId));break}}};exports.NotebookService=P([p.provideSingleton(exports.NotebookService),D("design:paramtypes",[exports.DatapilotNotebookController])],exports.NotebookService);const Ye={notebooks:[{name:"Profile your query",description:"Notebook to profile your query",created_at:new Date().toISOString(),updated_at:new Date().toISOString(),id:"1",data:{cells:[{cell_type:u.NotebookCellKind.Code,source:["{{context.query}}"],languageId:"jinja-sql",metadata:{cellId:"jinja_sql_cu6pt"}},{cell_type:u.NotebookCellKind.Code,source:["import pandas as pd","from IPython.display import display, HTML","from ydata_profiling import ProfileReport","from io import StringIO","","# Extract the data field","data = cell_jinja_sql_cu6pt['data']","","# Create a DataFrame","df = pd.DataFrame(data)","","# Display the DataFrame","# display(HTML(df.to_html()))","",'profile = ProfileReport(df, title="Profiling Report")',"profile.to_notebook_iframe()"],languageId:"python",metadata:{}}],metadata:{dependencies:["pandas","ydata_profiling"],autoRun:!0}},tags:["profile"]}]};exports.NotebookProviders=class{constructor(e,t,o,r){Object.defineProperty(this,"notebookProvider",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"notebookController",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"notebookFileSystemProvider",{enumerable:!0,configurable:!0,writable:!0,value:o}),Object.defineProperty(this,"dbtTerminal",{enumerable:!0,configurable:!0,writable:!0,value:r}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.disposables.push(u.workspace.onDidChangeConfiguration(s=>{s.affectsConfiguration("dbt.enableNotebooks")&&this.bindNotebookActions()})),this.bindNotebookActions()}bindNotebookActions(){u.workspace.getConfiguration("dbt").get("enableNotebooks",!1)&&(this.dbtTerminal.log("Notebooks enabled, binding actions"),this.disposables.push(u.notebooks.registerNotebookCellStatusBarItemProvider(R,new He),u.workspace.registerNotebookSerializer(R,this.notebookProvider,{}),this.notebookController),this.disposables.push(u.workspace.registerFileSystemProvider(ce,this.notebookFileSystemProvider,{isCaseSensitive:!0,isReadonly:!1})))}dispose(){for(;this.disposables.length;){const e=this.disposables.pop();e&&e.dispose()}}};exports.NotebookProviders=P([p.provideSingleton(exports.NotebookProviders),D("design:paramtypes",[V,exports.DatapilotNotebookController,exports.NotebookFileSystemProvider,p.DBTTerminal])],exports.NotebookProviders);const q=n=>n==="bigquery"?"RAND":"RANDOM",$=async(n,e)=>{const t=await e(n);return(t==null?void 0:t.table.rows)||[]},F=(n,e,t)=>n.filter(o=>!e.includes(o.column)&&!t.includes(o.dtype)),Je=n=>["timestamp","date"].includes(n.dtype.toLowerCase()),Qe=n=>["char","character","varchar","string","text","nchar","nvarchar","variant","character varying","citext","name","json","jsonb","bstring","bpchar","tinytext","mediumtext","longtext","enum"].includes(n.dtype.toLowerCase()),Xe=n=>{const e=["int","integer","bigint","smallint","tinyint","decimal","numeric","float","real","double","number"],t=n.dtype.toLowerCase();return e.some(o=>t.includes(o))},A=n=>Number(n),W=(n={},e)=>{if(!n)return e||{};if(!e)return n;const t={},o=[...new Set([...Object.keys(n),...Object.keys(e)])].filter(r=>["models","sources","seeds"].includes(r));for(const r of o){if(!n[r]){t[r]=e[r];continue}if(!e[r]){t[r]=n[r];continue}const s=n[r]||[],i=e[r]||[],a=new Map(s.map(h=>[h.name,h])),l=new Map(i.map(h=>[h.name,h])),m=[...new Set([...s.map(h=>h.name),...i.map(h=>h.name)])].map(h=>{var f,N,_,T;const b=a.get(h),d=l.get(h),y=[...(b==null?void 0:b.tests)||[],...(d==null?void 0:d.tests)||[]],k=new Map(((f=b==null?void 0:b.columns)==null?void 0:f.map(g=>[g.name,g]))||[]),v=new Map(((N=d==null?void 0:d.columns)==null?void 0:N.map(g=>[g.name,g]))||[]),w=[...new Set([...((_=b==null?void 0:b.columns)==null?void 0:_.map(g=>g.name))||[],...((T=d==null?void 0:d.columns)==null?void 0:T.map(g=>g.name))||[]])].map(g=>{const S=k.get(g),C=v.get(g);return S?C?{...S,...C,name:g,tests:[...S.tests||[],...C.tests||[]]}:S:C}),E={name:h,columns:w};return y.length>0&&(E.tests=y),E});t[r]=m}return t};class B{constructor(e,t){Object.defineProperty(this,"quote",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"adapter",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"queryFn",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.quote=(o,r)=>r?`adapter.quote('${o}')`:`{{adapter.quote('${o}')}}`,this.adapter=e,this.queryFn=t}}class Ze extends B{async generateRangeTests({tableRelation:e,excludeTypes:t,excludeCols:o,stddevs:r,limit:s,sample:i,columnConfig:a,resourceType:l,dbtConfig:c,columnsInRelation:m}){const b=F(m,o,t).filter(f=>Xe(f));if(b.length===0)return c;let d="";s!==null&&(i?d=`ORDER BY ${q(this.adapter)}() LIMIT ${s}`:d=`LIMIT ${s}`);const y=b.map((f,N)=>`SELECT '${f.column}' AS COLNAME, MIN(${this.quote(f.column)}) as COL_MIN, MAX(${this.quote(f.column)}) as COL_MAX, STDDEV(${this.quote(f.column)}) as COL_STDDEV, ${N+1} AS ORDERING FROM base`),k=`
15
16
  WITH base AS (
16
17
  SELECT * FROM {{ref('${e}')}}
17
- ${u}
18
+ ${d}
18
19
  )
19
20
  SELECT * FROM (
20
21
  ${y.join(`
@@ -22,7 +23,7 @@ UNION ALL
22
23
  `)}
23
24
  ) t1
24
25
  ORDER BY ORDERING ASC
25
- `,S=(await P(k,this.queryFn)).map(b=>{const C=D(b[1]),T=D(b[2]),_=D(b[3]);return{...{name:b[0],tests:[{"dbt_utils.accepted_range":{min_value:D(C-s*_/2),max_value:D(T+s*_/2)}}]},...a}}),w={name:e,columns:S},E={[c]:[w]};return $(d,E)}}class dt extends q{getColumnCombinations(e,t){const o=[];for(let s=0;s<t;s++)o.push(...this.combinations(e,s+1));return o}combinations(e,t){if(t===0)return[[]];if(e.length===0)return[];const[o,...s]=e,r=this.combinations(s,t),i=this.combinations(s,t-1).map(a=>[o,...a]);return[...r,...i]}buildLimitStatement(e,t,o){return t===null?"":o?`ORDER BY ${R(e)}() LIMIT ${t}`:`LIMIT ${t}`}buildCountDistinctQuery(e,t,o){const s=e.map((r,i)=>{const a=r.map(c=>this.quote(c));return`
26
+ `,O=(await $(k,this.queryFn)).map(f=>{const N=A(f[1]),_=A(f[2]),T=A(f[3]);return{...{name:f[0],tests:[{"dbt_utils.accepted_range":{min_value:A(N-r*T/2),max_value:A(_+r*T/2)}}]},...a}}),w={name:e,columns:O},E={[l]:[w]};return W(c,E)}}class et extends B{getColumnCombinations(e,t){const o=[];for(let r=0;r<t;r++)o.push(...this.combinations(e,r+1));return o}combinations(e,t){if(t===0)return[[]];if(e.length===0)return[];const[o,...r]=e,s=this.combinations(r,t),i=this.combinations(r,t-1).map(a=>[o,...a]);return[...s,...i]}buildLimitStatement(e,t,o){return t===null?"":o?`ORDER BY ${q(e)}() LIMIT ${t}`:`LIMIT ${t}`}buildCountDistinctQuery(e,t,o){const r=e.map((s,i)=>{const a=s.map(l=>this.quote(l));return`
26
27
  SELECT ${i+1} AS ORDERING, count(1) AS CARDINALITY
27
28
  from (
28
29
  SELECT 1 FROM base
@@ -33,50 +34,50 @@ UNION ALL
33
34
  SELECT * FROM {{ref('${t}')}}
34
35
  ${o}
35
36
  )
36
- ${s.join(`
37
+ ${r.join(`
37
38
  UNION ALL
38
39
  `)}
39
40
  ORDER BY ordering ASC
40
- `}async generateUniquenessTests({tableRelation:e,excludeTypes:t,excludeCols:o,compositeKeyLength:s,limit:r,sample:i,columnConfig:a,resourceType:c,dbtConfig:d,columnsInRelation:p}){const g=L(p,o,t).map(T=>T.column);if(g.length===0)return d;const u=this.getColumnCombinations(g,s),y=this.buildLimitStatement(this.adapter,r,i),k=this.buildCountDistinctQuery(u,e,y),S=(await P(`
41
+ `}async generateUniquenessTests({tableRelation:e,excludeTypes:t,excludeCols:o,compositeKeyLength:r,limit:s,sample:i,columnConfig:a,resourceType:l,dbtConfig:c,columnsInRelation:m}){const b=F(m,o,t).map(_=>_.column);if(b.length===0)return c;const d=this.getColumnCombinations(b,r),y=this.buildLimitStatement(this.adapter,s,i),k=this.buildCountDistinctQuery(d,e,y),O=(await $(`
41
42
  WITH base AS (
42
43
  SELECT * FROM {{ref('${e}')}}
43
44
  ${y}
44
45
  )
45
46
  SELECT count(1) AS TABLE_COUNT FROM base
46
- `,this.queryFn))[0][0],w=await P(k,this.queryFn),E=u.filter((T,_)=>w[_][1]===S),b={name:e,columns:[],tests:[]};E.forEach(T=>{T.length===1?b.columns.push({name:T[0],tests:["unique","not_null"],...a}):b.tests.push({"dbt_utils.unique_combination_of_columns":{combination_of_columns:T}})});const C={[c]:[b]};return $(d,C)}}class ut extends q{async getAcceptedValuesTestSuggestions({tableRelation:e,excludeTypes:t,excludeCols:o,limit:s,sample:r,columnConfig:i,resourceType:a,dbtConfig:c,columnsInRelation:d,maxCardinality:p=5}){const m=(_,f)=>{switch(_){case"bigquery":return`array_agg(CAST(${this.quote(f)} AS STRING))`;case"redshift":return`split_to_array(listagg(${this.quote(f)}::VARCHAR, '|'), '|') `;case"databricks":return`to_json(array_agg(CAST(${this.quote(f)} AS STRING)))`;default:return`array_agg(${this.quote(f)}::VARCHAR)`}},g=L(d,o,t);if(g.length===0)return c;const u=g.map((_,f)=>`
47
- select ${f+1} AS ORDERING,
48
- '${_.column}' AS COLNAME,
47
+ `,this.queryFn))[0][0],w=await $(k,this.queryFn),E=d.filter((_,T)=>w[T][1]===O),f={name:e,columns:[],tests:[]};E.forEach(_=>{_.length===1?f.columns.push({name:_[0],tests:["unique","not_null"],...a}):f.tests.push({"dbt_utils.unique_combination_of_columns":{combination_of_columns:_}})});const N={[l]:[f]};return W(c,N)}}class tt extends B{async getAcceptedValuesTestSuggestions({tableRelation:e,excludeTypes:t,excludeCols:o,limit:r,sample:s,columnConfig:i,resourceType:a,dbtConfig:l,columnsInRelation:c,maxCardinality:m=5}){const h=(T,g)=>{switch(T){case"bigquery":return`array_agg(CAST(${this.quote(g)} AS STRING))`;case"redshift":return`split_to_array(listagg(${this.quote(g)}::VARCHAR, '|'), '|') `;case"databricks":return`to_json(array_agg(CAST(${this.quote(g)} AS STRING)))`;default:return`array_agg(${this.quote(g)}::VARCHAR)`}},b=F(c,o,t);if(b.length===0)return l;const d=b.map((T,g)=>`
48
+ select ${g+1} AS ORDERING,
49
+ '${T.column}' AS COLNAME,
49
50
  count(1) as CARDINALITY,
50
- ${m(this.adapter,_.column)} AS UNIQUE_VALUES
51
+ ${h(this.adapter,T.column)} AS UNIQUE_VALUES
51
52
  from (
52
- select ${this.quote(_.column)}
53
+ select ${this.quote(T.column)}
53
54
  from base
54
- group by ${this.quote(_.column)}
55
+ group by ${this.quote(T.column)}
55
56
  ) t1
56
- `),y=s?r?`ORDER BY ${R(this.adapter)}() LIMIT ${s}`:`LIMIT ${s}`:"",k=`
57
+ `),y=r?s?`ORDER BY ${q(this.adapter)}() LIMIT ${r}`:`LIMIT ${r}`:"",k=`
57
58
  WITH base AS (
58
59
  SELECT * FROM {{ref('${e}')}}
59
60
  ${y}
60
61
  )
61
62
  SELECT * FROM (
62
- ${u.join(`
63
+ ${d.join(`
63
64
  UNION ALL
64
65
  `)}
65
66
  ) t2
66
- WHERE CARDINALITY <= ${p}
67
+ WHERE CARDINALITY <= ${m}
67
68
  ORDER BY ORDERING ASC
68
- `,N=await this.queryFn(k);if(!N)return c;const{table:{column_names:S,rows:w}}=N,E=S.indexOf("COLNAME"),b=S.indexOf("UNIQUE_VALUES"),C=w.map(_=>{const f=_[b];if(!f)return null;const I=typeof f=="string"?JSON.parse(f):f;return{name:_[E],tests:[{accepted_values:{values:I.sort()}}],...i}}).filter(Boolean),T={[a]:[{name:e,columns:C}]};return $(c,T)}}class pt extends q{async generateStringLengthTests({tableRelation:e,excludeTypes:t,excludeCols:o,stddevs:s,limit:r,sample:i,columnConfig:a,resourceType:c,dbtConfig:d,columnsInRelation:p}){const g=L(p,o,t).filter(b=>at(b));if(g.length===0)return d;const u=r?i?`ORDER BY ${R(this.adapter)}() LIMIT ${r}`:`LIMIT ${r}`:"",y=g.map((b,C)=>`
69
- SELECT '${b.column}' AS COLNAME,
70
- MIN(LENGTH(CAST(${this.quote(b.column)} as varchar))) as COL_MIN,
71
- MAX(LENGTH(CAST(${this.quote(b.column)} as varchar))) as COL_MAX,
72
- STDDEV(LENGTH(CAST(${this.quote(b.column)} as varchar))) as COL_STDDEV,
73
- ${C+1} AS ORDERING
69
+ `,v=await this.queryFn(k);if(!v)return l;const{table:{column_names:O,rows:w}}=v,E=O.indexOf("COLNAME"),f=O.indexOf("UNIQUE_VALUES"),N=w.map(T=>{const g=T[f];if(!g)return null;const S=typeof g=="string"?JSON.parse(g):g;return{name:T[E],tests:[{accepted_values:{values:S.sort()}}],...i}}).filter(Boolean),_={[a]:[{name:e,columns:N}]};return W(l,_)}}class ot extends B{async generateStringLengthTests({tableRelation:e,excludeTypes:t,excludeCols:o,stddevs:r,limit:s,sample:i,columnConfig:a,resourceType:l,dbtConfig:c,columnsInRelation:m}){const b=F(m,o,t).filter(f=>Qe(f));if(b.length===0)return c;const d=s?i?`ORDER BY ${q(this.adapter)}() LIMIT ${s}`:`LIMIT ${s}`:"",y=b.map((f,N)=>`
70
+ SELECT '${f.column}' AS COLNAME,
71
+ MIN(LENGTH(CAST(${this.quote(f.column)} as varchar))) as COL_MIN,
72
+ MAX(LENGTH(CAST(${this.quote(f.column)} as varchar))) as COL_MAX,
73
+ STDDEV(LENGTH(CAST(${this.quote(f.column)} as varchar))) as COL_STDDEV,
74
+ ${N+1} AS ORDERING
74
75
  FROM base
75
- WHERE ${this.quote(b.column)} IS NOT NULL
76
+ WHERE ${this.quote(f.column)} IS NOT NULL
76
77
  `),k=`
77
78
  WITH base AS (
78
79
  SELECT * FROM {{ref('${e}')}}
79
- ${u}
80
+ ${d}
80
81
  )
81
82
  SELECT * FROM (
82
83
  ${y.join(`
@@ -84,12 +85,12 @@ UNION ALL
84
85
  `)}
85
86
  ) t1
86
87
  ORDER BY ORDERING ASC
87
- `,S=(await P(k,this.queryFn)).map(b=>{const[C,T,_,f]=b;let I;if(T===_)I={"dbt_expectations.expect_column_value_lengths_to_equal":{value:T,row_condition:`${this.quote(C)} is not null`}};else{let v=T-s*f;const ae=_+s*f;v<0&&(v=0),I={"dbt_expectations.expect_column_value_lengths_to_be_between":{min_value:Math.floor(v),max_value:Math.ceil(ae),row_condition:`${this.quote(C)} is not null`}}}return{name:C,tests:[I],...a}}),w={name:e,columns:S},E={[c]:[w]};return $(d,E)}}class ht extends q{async generateRecencyTests({tableRelation:e,excludeTypes:t,excludeCols:o,stddevs:s,limit:r,sample:i,resourceType:a,dbtConfig:c,columnsInRelation:d}){const m=L(d,o,t).filter(it);if(m.length===0)return c;const g=r?i?`ORDER BY ${R(this.adapter)}() LIMIT ${r}`:`LIMIT ${r}`:"",u=`
88
+ `,O=(await $(k,this.queryFn)).map(f=>{const[N,_,T,g]=f;let S;if(_===T)S={"dbt_expectations.expect_column_value_lengths_to_equal":{value:_,row_condition:`${this.quote(N)} is not null`}};else{let C=_-r*g;const de=T+r*g;C<0&&(C=0),S={"dbt_expectations.expect_column_value_lengths_to_be_between":{min_value:Math.floor(C),max_value:Math.ceil(de),row_condition:`${this.quote(N)} is not null`}}}return{name:N,tests:[S],...a}}),w={name:e,columns:O},E={[l]:[w]};return W(c,E)}}class nt extends B{async generateRecencyTests({tableRelation:e,excludeTypes:t,excludeCols:o,stddevs:r,limit:s,sample:i,resourceType:a,dbtConfig:l,columnsInRelation:c}){const h=F(c,o,t).filter(Je);if(h.length===0)return l;const b=s?i?`ORDER BY ${q(this.adapter)}() LIMIT ${s}`:`LIMIT ${s}`:"",d=`
88
89
  WITH base AS (
89
90
  SELECT * FROM {{ref('${e}')}}
90
- ${g}
91
+ ${b}
91
92
  )
92
- ${m.map((w,E)=>`
93
+ ${h.map((w,E)=>`
93
94
  SELECT
94
95
  MAX(minutes_diff) AS max_minutes_diff,
95
96
  AVG(minutes_diff) AS avg_minutes_diff,
@@ -105,4 +106,4 @@ UNION ALL
105
106
  UNION ALL
106
107
  `)}
107
108
  ORDER BY ordering ASC
108
- `,y=await P(u,this.queryFn),k=m.map((w,E)=>{const[,b,C]=y[E],T=b+C*s;let _,f;return T>=60*24?(_="day",f=Math.floor(T/(60*24))):T>=60?(_="hour",f=Math.floor(T/60)):(_="minute",f=Math.floor(T)),{"dbt_utils.recency":{field:w.column,datepart:_,interval:f}}}),N={name:e,...k.length>0&&{tests:k}},S={[a]:[N]};return $(c,S)}}const mt=async({tableRelation:n,sample:e=!1,limit:t=1e4,resourceType:o="models",columnConfig:s={},excludeTypes:r=[],excludeCols:i=[],tests:a=["uniqueness","accepted_values","range","string_length","recency"],uniquenessCompositeKeyLength:c=1,acceptedValuesMaxCardinality:d=5,rangeStddevs:p=0,stringLengthStddevs:m=0,recencyStddevs:g=1,dbtConfig:u,returnObject:y=!1,columnsInRelation:k,adapter:N,queryFn:S})=>{console.log("testgen getTestSuggestions args",{tableRelation:n,sample:e,limit:t,resourceType:o,columnConfig:s,excludeTypes:r,excludeCols:i,tests:a,uniquenessCompositeKeyLength:c,acceptedValuesMaxCardinality:d,rangeStddevs:p,stringLengthStddevs:m,recencyStddevs:g,dbtConfig:u,returnObject:y,columnsInRelation:k});let w=u;return a.includes("uniqueness")&&(w=await new dt(N,S).generateUniquenessTests({tableRelation:n,excludeTypes:r,excludeCols:i,limit:t,sample:e,columnConfig:s,resourceType:o,dbtConfig:w,columnsInRelation:k,compositeKeyLength:c})),a.includes("accepted_values")&&(w=await new ut(N,S).getAcceptedValuesTestSuggestions({tableRelation:n,excludeTypes:r,excludeCols:i,limit:t,sample:e,columnConfig:s,resourceType:o,dbtConfig:w,columnsInRelation:k,maxCardinality:d})),a.includes("range")&&(w=await new ct(N,S).generateRangeTests({tableRelation:n,excludeTypes:r,excludeCols:i,limit:t,sample:e,columnConfig:s,resourceType:o,dbtConfig:w,columnsInRelation:k,stddevs:p})),a.includes("string_length")&&(w=await new pt(N,S).generateStringLengthTests({tableRelation:n,excludeTypes:r,excludeCols:i,limit:t,sample:e,columnConfig:s,resourceType:o,dbtConfig:w,columnsInRelation:k,stddevs:m})),a.includes("recency")&&(w=await new ht(N,S).generateRecencyTests({tableRelation:n,excludeTypes:r,excludeCols:i,limit:t,sample:e,resourceType:o,dbtConfig:w,columnsInRelation:k,stddevs:g})),w};exports.CustomNotebooks=Ze;exports.NotebookKernelClient=V;exports.getTestSuggestions=mt;
109
+ `,y=await $(d,this.queryFn),k=h.map((w,E)=>{const[,f,N]=y[E],_=f+N*r;let T,g;return _>=60*24?(T="day",g=Math.floor(_/(60*24))):_>=60?(T="hour",g=Math.floor(_/60)):(T="minute",g=Math.floor(_)),{"dbt_utils.recency":{field:w.column,datepart:T,interval:g}}}),v={name:e,...k.length>0&&{tests:k}},O={[a]:[v]};return W(l,O)}}const rt=async({tableRelation:n,sample:e=!1,limit:t=1e4,resourceType:o="models",columnConfig:r={},excludeTypes:s=[],excludeCols:i=[],tests:a=["uniqueness","accepted_values","range","string_length","recency"],uniquenessCompositeKeyLength:l=1,acceptedValuesMaxCardinality:c=5,rangeStddevs:m=0,stringLengthStddevs:h=0,recencyStddevs:b=1,dbtConfig:d,returnObject:y=!1,columnsInRelation:k,adapter:v,queryFn:O})=>{console.log("testgen getTestSuggestions args",{tableRelation:n,sample:e,limit:t,resourceType:o,columnConfig:r,excludeTypes:s,excludeCols:i,tests:a,uniquenessCompositeKeyLength:l,acceptedValuesMaxCardinality:c,rangeStddevs:m,stringLengthStddevs:h,recencyStddevs:b,dbtConfig:d,returnObject:y,columnsInRelation:k});let w=d;return a.includes("uniqueness")&&(w=await new et(v,O).generateUniquenessTests({tableRelation:n,excludeTypes:s,excludeCols:i,limit:t,sample:e,columnConfig:r,resourceType:o,dbtConfig:w,columnsInRelation:k,compositeKeyLength:l})),a.includes("accepted_values")&&(w=await new tt(v,O).getAcceptedValuesTestSuggestions({tableRelation:n,excludeTypes:s,excludeCols:i,limit:t,sample:e,columnConfig:r,resourceType:o,dbtConfig:w,columnsInRelation:k,maxCardinality:c})),a.includes("range")&&(w=await new Ze(v,O).generateRangeTests({tableRelation:n,excludeTypes:s,excludeCols:i,limit:t,sample:e,columnConfig:r,resourceType:o,dbtConfig:w,columnsInRelation:k,stddevs:m})),a.includes("string_length")&&(w=await new ot(v,O).generateStringLengthTests({tableRelation:n,excludeTypes:s,excludeCols:i,limit:t,sample:e,columnConfig:r,resourceType:o,dbtConfig:w,columnsInRelation:k,stddevs:h})),a.includes("recency")&&(w=await new nt(v,O).generateRecencyTests({tableRelation:n,excludeTypes:s,excludeCols:i,limit:t,sample:e,resourceType:o,dbtConfig:w,columnsInRelation:k,stddevs:b})),w};exports.CustomNotebooks=Ye;exports.NotebookKernelClient=M;exports.getTestSuggestions=rt;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@altimateai/extension-components",
3
- "version": "0.0.10-beta.1",
3
+ "version": "0.0.10-beta.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",