@arcgis/coding-components
Version:
ArcGIS Coding Components
3 lines (2 loc) • 11.7 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
import{a as m,b as i,c as F,g as L}from"./JWPKZHE4.js";import{a as h}from"./ER2MKLVA.js";import{a as T}from"./MP6Z45SA.js";import{b as k}from"./Y3KOWWO5.js";import{Qk as S,Uk as _,Xk as p,al as l}from"./LLPQEURF.js";var V=["<=",">=","==","!=","+","-","*","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","=","+=","-=","*=","**=","/=","%="],R={wordPattern:/(-?\d*\.\d\w*)|([^`~!#%\^&\*\(\)\-=\+\[\{\]\}\\\|;:'",\.<>\/\?\s]+)/gu,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"`",close:"`",notIn:["string","comment"]}],autoCloseBefore:";:.,=}])` \n ",folding:{markers:{start:/^\s*\/\/\s*#?region\b/u,end:/^\s*\/\/\s*#?endregion\b/u}},indentationRules:{decreaseIndentPattern:/^((?!.*?\/\*).*\*\/)?\s*[\}\]\)].*$/u,increaseIndentPattern:/^((?!\/\/).)*(\{[^}"'`]*|\([^)"'`]*|\[[^\]"'`]*)$/u}},K={defaultToken:"invalid",tokenPostfix:".arcgis",ignoreCase:!0,keywords:L,operators:V,constants:["true","false","null"],symbols:/[=><!~?:&|+\-*\/\^%]+/u,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/u,digits:/\d+(_+\d+)*/u,octaldigits:/[0-7]+(_+[0-7]+)*/u,binarydigits:/[0-1]+(_+[0-1]+)*/u,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/u,regexpctl:/[(){}\[\]\$\^|\-*+?\.]/u,regexpesc:/\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/u,tokenizer:{root:[[/[{}]/u,"delimiter.bracket"],{include:"common"}],common:[[/import(?=\s)/u,{token:"keyword",next:"@import"}],[/for(?=\s)/u,{token:"keyword",next:"@forLoopInit"}],[/[a-z_$][\w$]*/u,{cases:{"@constants":"constant","@keywords":"keyword","@default":"identifier"}}],{include:"@whitespace"},[/\/(?=([^\\\/]|\\.)+\/([gimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/u,{token:"regexp",bracket:"@open",next:"@regexp"}],[/[()\[\]]/u,"@brackets"],[/[<>](?!@symbols)/u,"@brackets"],[/@symbols/u,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/u,"number"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/u,"number"],[/0[xX](@hexdigits)/u,"number"],[/0[oO]?(@octaldigits)/u,"number"],[/0[bB](@binarydigits)/u,"number"],[/(@digits)/u,"number"],[/[;,.]/u,"delimiter"],[/"([^"\\]|\\.)*$/u,"string.invalid"],[/'([^'\\]|\\.)*$/u,"string.invalid"],[/"/u,"string","@string_double"],[/'/u,"string","@string_single"],[/`/u,"string","@string_backtick"]],import:[[/import(?=\s)/u,{token:"keyword"}],{include:"@whitespace"},[/[a-z_$][\w$]*/u,"identifier"],{include:"@whitespace"},[/from(?=\s)/u,{token:"keyword",next:"@popall"}]],forLoopInit:[{include:"@whitespace"},[/\(/u,{token:"@brackets",next:"@forLoopVar"}],[/.*/u,"","@pop"]],forLoopVar:[{include:"@whitespace"},[/var(?=\s)/u,"keyword","@forLoopVarName"],[/[a-z_$][\w$]*/u,"identifier","@forLoopCheckInOf"],[/\)/u,{token:"@brackets",next:"@popall"}]],forLoopVarName:[{include:"@whitespace"},[/[a-z_$][\w$]*/u,"identifier","@forLoopCheckInOf"],[/\)/u,{token:"@brackets",next:"@popall"}]],forLoopCheckInOf:[{include:"@whitespace"},[/in(?=\s)/u,"keyword","@popall"],[/of(?=\s)/u,"keyword","@popall"],[/[a-z_$][\w$]*/u,"identifier"],[/\)/u,{token:"@brackets",next:"@popall"}]],whitespace:[[/[ \t\r\n]+/u,""],[/\/\*/u,"comment","@comment"],[/\/\/.*$/u,"comment"]],comment:[[/[^\/*]+/u,"comment"],[/\*\//u,"comment","@pop"],[/[\/*]/u,"comment"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/u,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/u,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/u,["regexp.escape.control","regexp.escape.control"]],[/[()]/u,"regexp.escape.control"],[/@regexpctl/u,"regexp.escape.control"],[/[^\\\/]/u,"regexp"],[/@regexpesc/u,"regexp.escape"],[/\\\./u,"regexp.invalid"],[/(\/)([gimsuy]*)/u,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/u,"regexp.escape.control"],[/\^/u,"regexp.invalid"],[/@regexpesc/u,"regexp.escape"],[/[^\]]/u,"regexp"],[/\]/u,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"]+/u,"string"],[/@escapes/u,"string.escape"],[/\\./u,"string.escape.invalid"],[/"/u,"string","@pop"]],string_single:[[/[^\\']+/u,"string"],[/@escapes/u,"string.escape"],[/\\./u,"string.escape.invalid"],[/'/u,"string","@pop"]],string_backtick:[[/\$\{/u,{token:"delimiter.bracket",next:"@bracketCounting"}],[/[^\\`$]+/u,"string"],[/@escapes/u,"string.escape"],[/\\./u,"string.escape.invalid"],[/`/u,"string","@pop"]],bracketCounting:[[/\{/u,"delimiter.bracket","@bracketCounting"],[/\}/u,"delimiter.bracket","@pop"],{include:"common"}]}},y=class{constructor(e,r,{defaults:o,diagnosticsService:u}){this._languageId=e,this._worker=r,this._disposables=[],this._modelListeners=new Map,this._diagnosticsService=u,this._defaults=o,h().then(a=>{let d=s=>{let n=s.getLanguageId();if(n!==this._languageId)return;let c=T(()=>{this._doValidate(s,n).catch($=>{throw $})}),P=s.onDidChangeContent(c),W=s.onDidChangeAttached(c);this._modelListeners.set(s.uri.toString(),[P,W]),this._doValidate(s,n).catch(k("DiagnosticsAdapter"))},g=s=>{let n=s.uri.toString();a.setModelMarkers(s,this._languageId,[]);let c=this._modelListeners.get(n);if(c){for(;c.length;)c.pop()?.dispose();this._modelListeners.delete(n)}};this._disposables.push(a.onDidCreateModel(d)),this._disposables.push(a.onWillDisposeModel(s=>{g(s)})),this._disposables.push(a.onDidChangeModelLanguage(s=>{g(s.model),d(s.model)})),this._disposables.push(o.onDidChange(()=>{a.getModels().forEach(s=>{s.getLanguageId()===this._languageId&&(g(s),d(s))})})),this._disposables.push(o.onModelContextDidChange(s=>{a.getModels().forEach(n=>{n.getLanguageId()===this._languageId&&n.uri.toString()===s&&this._doValidate(n,this._languageId).catch(k("DiagnosticsAdapter"))})})),this._disposables.push({dispose:()=>{this._modelListeners.forEach(s=>s.forEach(n=>n.dispose())),this._modelListeners.clear()}}),a.getModels().forEach(d)})}dispose(){this._disposables.forEach(e=>e.dispose()),this._disposables=[]}async _doValidate(e,r){if(e.isAttachedToEditor())try{let o=await h(),u=await this._worker(e.uri),a=this._defaults.getApiContextForModel(e.uri),d=await u.doValidation(e.uri.toString(),a),g=d.map(s=>z(e.uri,s));this._diagnosticsService.fireDiagnosticsChange(e.uri,d),o.setModelMarkers(e,r,g)}catch(o){k("DiagnosticsAdapter")(o)}}};function N(t){switch(t){case m.Error:return p.Error;case m.Warning:return p.Warning;case m.Information:return p.Info;case m.Hint:return p.Hint;default:return p.Info}}function z(t,e){return{severity:N(e.severity),startLineNumber:e.range.start.line+1,startColumn:e.range.start.character+1,endLineNumber:e.range.end.line+1,endColumn:e.range.end.character+1,message:e.message}}function H(t){return{character:t.column-1,line:t.lineNumber-1}}function f(t){return new _(t.start.line+1,t.start.character+1,t.end.line+1,t.end.character+1)}function O(t){return{range:f(t.range),text:t.newText}}function U(t){return typeof t.insert<"u"&&typeof t.replace<"u"}function B(t){let e=l.CompletionItemKind;switch(t){case i.Text:return e.Text;case i.Method:return e.Method;case i.Function:return e.Function;case i.Constructor:return e.Constructor;case i.Field:return e.Field;case i.Variable:return e.Variable;case i.Class:return e.Class;case i.Interface:return e.Interface;case i.Module:return e.Module;case i.Property:return e.Property;case i.Unit:return e.Unit;case i.Value:return e.Value;case i.Enum:return e.Enum;case i.Keyword:return e.Keyword;case i.Snippet:return e.Snippet;case i.Color:return e.Color;case i.File:return e.File;case i.Reference:return e.Reference;case i.Folder:return e.Folder;case i.EnumMember:return e.EnumMember;case i.Constant:return e.Constant;case i.Struct:return e.Struct;case i.Event:return e.Event;case i.Operator:return e.Operator;case i.TypeParameter:return e.TypeParameter;default:return e.Property}}var I=class{constructor(e,r){this._worker=e,this._defaults=r,this.triggerCharacters=[".","("]}async provideCompletionItems(e,r){let o=await this._worker(e.uri),u=this._defaults.getApiContextForModel(e.uri),a=await o.doComplete(e.uri.toString(),H(r),u),d=e.getWordUntilPosition(r),g=new _(r.lineNumber,d.startColumn,r.lineNumber,d.endColumn),s=a.items.map(n=>{let c={label:n.label,insertText:n.insertText||n.label,sortText:n.sortText,filterText:n.filterText,detail:n.detail,range:g,kind:B(n.kind)};return n.textEdit&&(U(n.textEdit)?c.range={insert:f(n.textEdit.insert),replace:f(n.textEdit.replace)}:c.range=f(n.textEdit.range),c.insertText=n.textEdit.newText),n.additionalTextEdits&&(c.additionalTextEdits=n.additionalTextEdits.map(O)),n.insertTextFormat===F.Snippet&&(c.insertTextRules=l.CompletionItemInsertTextRule.InsertAsSnippet),n.documentation&&(typeof n.documentation=="string"?c.documentation=n.documentation:c.documentation={supportThemeIcons:!1,value:n.documentation.value,supportHtml:!0}),c});return{incomplete:a.isIncomplete,suggestions:s}}},v=class{constructor(e,r){this._worker=e,this._defaults=r}async provideDocumentFormattingEdits(e){let r=await this._worker(e.uri),o=this._defaults.getApiContextForModel(e.uri.toString());return(await r.doFormat(e.uri.toString(),o)).map(u=>({range:f(u.range),text:u.newText}))}},b=Promise.withResolvers(),w=class{constructor(e){this._defaults=e,this._worker=null,this._client=null,this._configChangeListener=this._defaults.onDidChange(()=>this.stopWorker())}dispose(){this._configChangeListener.dispose(),this.stopWorker()}stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null,b=Promise.withResolvers()),this._client=null}static async waitForWorker(){return await b.promise}async _getClientProxy(){let e=await h();if(!this._client){let{languageId:r}=this._defaults,o=window.MonacoEnvironment?.getWorker;if(!o)throw new Error("MonacoEnvironment.getWorker is not configured. Call setupMonacoEnvironment(...) before creating Arcade workers.");this._worker=e.createWebWorker({worker:o("ArcadeWorker",r),host:this._defaults.workerHost}),b.resolve(this._worker),this._client=this._worker.getProxy()}return await this._client}async getLanguageServiceWorker(...e){let r=await this._getClientProxy();return await this._worker?.withSyncedResources(e),r}},E,q="quickfix",Z="arcgis.arcade-editor.ask-ai",x=new Map,C;function te(t,e){let r=typeof t=="string"?t:t.uri.toString();if(!e){x.delete(r);return}x.set(r,e)}async function j(){return C||(C=(async()=>(await h()).addCommand({id:Z,run:(...t)=>{let[,e,r]=t;if(typeof e!="string")return;let o=typeof r=="string"?r:void 0;x.get(e)?.run(o)}}))()),await C}var A=class{async provideCodeActions(e,r,o,u){let a=x.get(e.uri.toString());return{actions:a?await a.provideCodeActions({model:e,range:r,context:o,token:u}):[],dispose:()=>{}}}};async function re(...t){return await w.waitForWorker(),await new Promise((e,r)=>{if(!E){r(new Error("Arcade not registered!"));return}e(E(...t))})}var M=class{constructor(){this._onDiagnosticsChange=new S}get onDiagnosticsChange(){return this._onDiagnosticsChange.event}fireDiagnosticsChange(e,r){this._onDiagnosticsChange.fire({uri:e,diagnostics:r})}},D=new M;function ne(){return D}function se(t){j();let e=new w(t),r=async(...o)=>await e.getLanguageServiceWorker(...o);E=r,l.setMonarchTokensProvider(t.languageId,K),l.setLanguageConfiguration(t.languageId,R),l.registerCompletionItemProvider(t.languageId,new I(r,t)),l.registerDocumentFormattingEditProvider(t.languageId,new v(r,t)),l.registerCodeActionProvider(t.languageId,new A,{providedCodeActionKinds:[q]}),new y(t.languageId,r,{defaults:t,diagnosticsService:D})}export{q as a,Z as b,te as c,re as d,ne as e,se as f};