@joinezco/codeblock 0.0.9 → 0.0.11

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 (59) hide show
  1. package/dist/editor.d.ts +23 -2
  2. package/dist/editor.js +346 -41
  3. package/dist/index.d.ts +3 -2
  4. package/dist/index.js +3 -2
  5. package/dist/lsps/index.d.ts +5 -0
  6. package/dist/lsps/index.js +9 -2
  7. package/dist/panels/{footer.d.ts → settings.d.ts} +7 -1
  8. package/dist/panels/{footer.js → settings.js} +12 -3
  9. package/dist/panels/terminal.d.ts +3 -0
  10. package/dist/panels/terminal.js +76 -0
  11. package/dist/panels/toolbar.d.ts +40 -3
  12. package/dist/panels/toolbar.js +919 -160
  13. package/dist/themes/index.js +63 -17
  14. package/dist/types.d.ts +5 -0
  15. package/dist/utils/fs.d.ts +7 -0
  16. package/dist/utils/fs.js +41 -15
  17. package/dist/workers/fs.worker.d.ts +4 -8
  18. package/dist/workers/fs.worker.js +27 -53
  19. package/package.json +14 -12
  20. package/dist/assets/clike-C8IJ2oj_.js +0 -1
  21. package/dist/assets/cmake-BQqOBYOt.js +0 -1
  22. package/dist/assets/dockerfile-C_y-rIpk.js +0 -1
  23. package/dist/assets/fs.worker-DfanUHpQ.js +0 -21
  24. package/dist/assets/go-CTD25R5P.js +0 -1
  25. package/dist/assets/haskell-BWDZoCOh.js +0 -1
  26. package/dist/assets/index-BAnLzvMk.js +0 -1
  27. package/dist/assets/index-BBC9WDX6.js +0 -1
  28. package/dist/assets/index-BEXYxRro.js +0 -1
  29. package/dist/assets/index-BfYmUKH9.js +0 -13
  30. package/dist/assets/index-BhaTNAWE.js +0 -1
  31. package/dist/assets/index-CCbYDSng.js +0 -1
  32. package/dist/assets/index-CIi8tLT6.js +0 -1
  33. package/dist/assets/index-CaANcgI2.js +0 -3
  34. package/dist/assets/index-CkWzFNzm.js +0 -208
  35. package/dist/assets/index-D_XGv9QZ.js +0 -1
  36. package/dist/assets/index-DkmiPfkD.js +0 -1
  37. package/dist/assets/index-DmNlLMQ4.js +0 -6
  38. package/dist/assets/index-DmX_vI7D.js +0 -1
  39. package/dist/assets/index-DogEEevD.js +0 -1
  40. package/dist/assets/index-DsDl5qZV.js +0 -2
  41. package/dist/assets/index-gAy5mDg-.js +0 -1
  42. package/dist/assets/index-i5qJLB2h.js +0 -1
  43. package/dist/assets/javascript.worker-ClsyHOLi.js +0 -552
  44. package/dist/assets/lua-BgMRiT3U.js +0 -1
  45. package/dist/assets/perl-CdXCOZ3F.js +0 -1
  46. package/dist/assets/process-Dw9K5EnD.js +0 -1357
  47. package/dist/assets/properties-C78fOPTZ.js +0 -1
  48. package/dist/assets/ruby-B2Rjki9n.js +0 -1
  49. package/dist/assets/shell-CjFT_Tl9.js +0 -1
  50. package/dist/assets/swift-BzpIVaGY.js +0 -1
  51. package/dist/assets/toml-BXUEaScT.js +0 -1
  52. package/dist/assets/vb-CmGdzxic.js +0 -1
  53. package/dist/e2e/editor.spec.d.ts +0 -1
  54. package/dist/e2e/editor.spec.js +0 -309
  55. package/dist/e2e/example.spec.d.ts +0 -5
  56. package/dist/e2e/example.spec.js +0 -44
  57. package/dist/index.html +0 -15
  58. package/dist/resources/config.json +0 -13
  59. package/dist/styles.css +0 -7
@@ -1 +0,0 @@
1
- const f={name:"properties",token:function(e,i){var o=e.sol()||i.afterSection,l=e.eol();if(i.afterSection=!1,o&&(i.nextMultiline?(i.inMultiline=!0,i.nextMultiline=!1):i.position="def"),l&&!i.nextMultiline&&(i.inMultiline=!1,i.position="def"),o)for(;e.eatSpace(););var n=e.next();return o&&(n==="#"||n==="!"||n===";")?(i.position="comment",e.skipToEnd(),"comment"):o&&n==="["?(i.afterSection=!0,e.skipTo("]"),e.eat("]"),"header"):n==="="||n===":"?(i.position="quote",null):(n==="\\"&&i.position==="quote"&&e.eol()&&(i.nextMultiline=!0),i.position)},startState:function(){return{position:"def",nextMultiline:!1,inMultiline:!1,afterSection:!1}}};export{f as properties};
@@ -1 +0,0 @@
1
- function k(e){for(var i={},n=0,o=e.length;n<o;++n)i[e[n]]=!0;return i}var v=["alias","and","BEGIN","begin","break","case","class","def","defined?","do","else","elsif","END","end","ensure","false","for","if","in","module","next","not","or","redo","rescue","retry","return","self","super","then","true","undef","unless","until","when","while","yield","nil","raise","throw","catch","fail","loop","callcc","caller","lambda","proc","public","protected","private","require","load","require_relative","extend","autoload","__END__","__FILE__","__LINE__","__dir__"],x=k(v),z=k(["def","class","case","for","while","until","module","catch","loop","proc","begin"]),b=k(["end","until"]),h={"[":"]","{":"}","(":")"},_={"]":"[","}":"{",")":"("},f;function c(e,i,n){return n.tokenize.push(e),e(i,n)}function p(e,i){if(e.sol()&&e.match("=begin")&&e.eol())return i.tokenize.push(w),"comment";if(e.eatSpace())return null;var n=e.next(),o;if(n=="`"||n=="'"||n=='"')return c(d(n,"string",n=='"'||n=="`"),e,i);if(n=="/")return g(e)?c(d(n,"string.special",!0),e,i):"operator";if(n=="%"){var l="string",r=!0;e.eat("s")?l="atom":e.eat(/[WQ]/)?l="string":e.eat(/[r]/)?l="string.special":e.eat(/[wxq]/)&&(l="string",r=!1);var u=e.eat(/[^\w\s=]/);return u?(h.propertyIsEnumerable(u)&&(u=h[u]),c(d(u,l,r,!0),e,i)):"operator"}else{if(n=="#")return e.skipToEnd(),"comment";if(n=="<"&&(o=e.match(/^<([-~])[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/)))return c(s(o[2],o[1]),e,i);if(n=="0")return e.eat("x")?e.eatWhile(/[\da-fA-F]/):e.eat("b")?e.eatWhile(/[01]/):e.eatWhile(/[0-7]/),"number";if(/\d/.test(n))return e.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/),"number";if(n=="?"){for(;e.match(/^\\[CM]-/););return e.eat("\\")?e.eatWhile(/\w/):e.next(),"string"}else{if(n==":")return e.eat("'")?c(d("'","atom",!1),e,i):e.eat('"')?c(d('"',"atom",!0),e,i):e.eat(/[\<\>]/)?(e.eat(/[\<\>]/),"atom"):e.eat(/[\+\-\*\/\&\|\:\!]/)?"atom":e.eat(/[a-zA-Z$@_\xa1-\uffff]/)?(e.eatWhile(/[\w$\xa1-\uffff]/),e.eat(/[\?\!\=]/),"atom"):"operator";if(n=="@"&&e.match(/^@?[a-zA-Z_\xa1-\uffff]/))return e.eat("@"),e.eatWhile(/[\w\xa1-\uffff]/),"propertyName";if(n=="$")return e.eat(/[a-zA-Z_]/)?e.eatWhile(/[\w]/):e.eat(/\d/)?e.eat(/\d/):e.next(),"variableName.special";if(/[a-zA-Z_\xa1-\uffff]/.test(n))return e.eatWhile(/[\w\xa1-\uffff]/),e.eat(/[\?\!]/),e.eat(":")?"atom":"variable";if(n=="|"&&(i.varList||i.lastTok=="{"||i.lastTok=="do"))return f="|",null;if(/[\(\)\[\]{}\\;]/.test(n))return f=n,null;if(n=="-"&&e.eat(">"))return"operator";if(/[=+\-\/*:\.^%<>~|]/.test(n)){var t=e.eatWhile(/[=+\-\/*:\.^%<>~|]/);return n=="."&&!t&&(f="."),"operator"}else return null}}}function g(e){for(var i=e.pos,n=0,o,l=!1,r=!1;(o=e.next())!=null;)if(r)r=!1;else{if("[{(".indexOf(o)>-1)n++;else if("]})".indexOf(o)>-1){if(n--,n<0)break}else if(o=="/"&&n==0){l=!0;break}r=o=="\\"}return e.backUp(e.pos-i),l}function a(e){return e||(e=1),function(i,n){if(i.peek()=="}"){if(e==1)return n.tokenize.pop(),n.tokenize[n.tokenize.length-1](i,n);n.tokenize[n.tokenize.length-1]=a(e-1)}else i.peek()=="{"&&(n.tokenize[n.tokenize.length-1]=a(e+1));return p(i,n)}}function y(){var e=!1;return function(i,n){return e?(n.tokenize.pop(),n.tokenize[n.tokenize.length-1](i,n)):(e=!0,p(i,n))}}function d(e,i,n,o){return function(l,r){var u=!1,t;for(r.context.type==="read-quoted-paused"&&(r.context=r.context.prev,l.eat("}"));(t=l.next())!=null;){if(t==e&&(o||!u)){r.tokenize.pop();break}if(n&&t=="#"&&!u){if(l.eat("{")){e=="}"&&(r.context={prev:r.context,type:"read-quoted-paused"}),r.tokenize.push(a());break}else if(/[@\$]/.test(l.peek())){r.tokenize.push(y());break}}u=!u&&t=="\\"}return i}}function s(e,i){return function(n,o){return i&&n.eatSpace(),n.match(e)?o.tokenize.pop():n.skipToEnd(),"string"}}function w(e,i){return e.sol()&&e.match("=end")&&e.eol()&&i.tokenize.pop(),e.skipToEnd(),"comment"}const E={name:"ruby",startState:function(e){return{tokenize:[p],indented:0,context:{type:"top",indented:-e},continuedLine:!1,lastTok:null,varList:!1}},token:function(e,i){f=null,e.sol()&&(i.indented=e.indentation());var n=i.tokenize[i.tokenize.length-1](e,i),o,l=f;if(n=="variable"){var r=e.current();n=i.lastTok=="."?"property":x.propertyIsEnumerable(e.current())?"keyword":/^[A-Z]/.test(r)?"tag":i.lastTok=="def"||i.lastTok=="class"||i.varList?"def":"variable",n=="keyword"&&(l=r,z.propertyIsEnumerable(r)?o="indent":b.propertyIsEnumerable(r)?o="dedent":((r=="if"||r=="unless")&&e.column()==e.indentation()||r=="do"&&i.context.indented<i.indented)&&(o="indent"))}return(f||n&&n!="comment")&&(i.lastTok=l),f=="|"&&(i.varList=!i.varList),o=="indent"||/[\(\[\{]/.test(f)?i.context={prev:i.context,type:f||n,indented:i.indented}:(o=="dedent"||/[\)\]\}]/.test(f))&&i.context.prev&&(i.context=i.context.prev),e.eol()&&(i.continuedLine=f=="\\"||n=="operator"),n},indent:function(e,i,n){if(e.tokenize[e.tokenize.length-1]!=p)return null;var o=i&&i.charAt(0),l=e.context,r=l.type==_[o]||l.type=="keyword"&&/^(?:end|until|else|elsif|when|rescue)\b/.test(i);return l.indented+(r?0:n.unit)+(e.continuedLine?n.unit:0)},languageData:{indentOnInput:/^\s*(?:end|rescue|elsif|else|\})$/,commentTokens:{line:"#"},autocomplete:v}};export{E as ruby};
@@ -1 +0,0 @@
1
- var c={};function s(n,e){for(var i=0;i<e.length;i++)c[e[i]]=n}var k=["true","false"],h=["if","then","do","else","elif","while","until","for","in","esac","fi","fin","fil","done","exit","set","unset","export","function"],p=["ab","awk","bash","beep","cat","cc","cd","chown","chmod","chroot","clear","cp","curl","cut","diff","echo","find","gawk","gcc","get","git","grep","hg","kill","killall","ln","ls","make","mkdir","openssl","mv","nc","nl","node","npm","ping","ps","restart","rm","rmdir","sed","service","sh","shopt","shred","source","sort","sleep","ssh","start","stop","su","sudo","svn","tee","telnet","top","touch","vi","vim","wall","wc","wget","who","write","yes","zsh"];s("atom",k);s("keyword",h);s("builtin",p);function d(n,e){if(n.eatSpace())return null;var i=n.sol(),t=n.next();if(t==="\\")return n.next(),null;if(t==="'"||t==='"'||t==="`")return e.tokens.unshift(l(t,t==="`"?"quote":"string")),u(n,e);if(t==="#")return i&&n.eat("!")?(n.skipToEnd(),"meta"):(n.skipToEnd(),"comment");if(t==="$")return e.tokens.unshift(a),u(n,e);if(t==="+"||t==="=")return"operator";if(t==="-")return n.eat("-"),n.eatWhile(/\w/),"attribute";if(t=="<"){if(n.match("<<"))return"operator";var o=n.match(/^<-?\s*(?:['"]([^'"]*)['"]|([^'"\s]*))/);if(o)return e.tokens.unshift(w(o[1]||o[2])),"string.special"}if(/\d/.test(t)&&(n.eatWhile(/\d/),n.eol()||!/\w/.test(n.peek())))return"number";n.eatWhile(/[\w-]/);var r=n.current();return n.peek()==="="&&/\w+/.test(r)?"def":c.hasOwnProperty(r)?c[r]:null}function l(n,e){var i=n=="("?")":n=="{"?"}":n;return function(t,o){for(var r,f=!1;(r=t.next())!=null;){if(r===i&&!f){o.tokens.shift();break}else if(r==="$"&&!f&&n!=="'"&&t.peek()!=i){f=!0,t.backUp(1),o.tokens.unshift(a);break}else{if(!f&&n!==i&&r===n)return o.tokens.unshift(l(n,e)),u(t,o);if(!f&&/['"]/.test(r)&&!/['"]/.test(n)){o.tokens.unshift(g(r,"string")),t.backUp(1);break}}f=!f&&r==="\\"}return e}}function g(n,e){return function(i,t){return t.tokens[0]=l(n,e),i.next(),u(i,t)}}var a=function(n,e){e.tokens.length>1&&n.eat("$");var i=n.next();return/['"({]/.test(i)?(e.tokens[0]=l(i,i=="("?"quote":i=="{"?"def":"string"),u(n,e)):(/\d/.test(i)||n.eatWhile(/\w/),e.tokens.shift(),"def")};function w(n){return function(e,i){return e.sol()&&e.string==n&&i.tokens.shift(),e.skipToEnd(),"string.special"}}function u(n,e){return(e.tokens[0]||d)(n,e)}const v={name:"shell",startState:function(){return{tokens:[]}},token:function(n,e){return u(n,e)},languageData:{autocomplete:k.concat(h,p),closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"#"}}};export{v as shell};
@@ -1 +0,0 @@
1
- function c(n){for(var e={},t=0;t<n.length;t++)e[n[t]]=!0;return e}var l=c(["_","var","let","actor","class","enum","extension","import","protocol","struct","func","typealias","associatedtype","open","public","internal","fileprivate","private","deinit","init","new","override","self","subscript","super","convenience","dynamic","final","indirect","lazy","required","static","unowned","unowned(safe)","unowned(unsafe)","weak","as","is","break","case","continue","default","else","fallthrough","for","guard","if","in","repeat","switch","where","while","defer","return","inout","mutating","nonmutating","isolated","nonisolated","catch","do","rethrows","throw","throws","async","await","try","didSet","get","set","willSet","assignment","associativity","infix","left","none","operator","postfix","precedence","precedencegroup","prefix","right","Any","AnyObject","Type","dynamicType","Self","Protocol","__COLUMN__","__FILE__","__FUNCTION__","__LINE__"]),p=c(["var","let","actor","class","enum","extension","import","protocol","struct","func","typealias","associatedtype","for"]),d=c(["true","false","nil","self","super","_"]),v=c(["Array","Bool","Character","Dictionary","Double","Float","Int","Int8","Int16","Int32","Int64","Never","Optional","Set","String","UInt8","UInt16","UInt32","UInt64","Void"]),h="+-/*%=|&<>~^?!",_=":;,.(){}[]",s=/^\-?0b[01][01_]*/,k=/^\-?0o[0-7][0-7_]*/,x=/^\-?0x[\dA-Fa-f][\dA-Fa-f_]*(?:(?:\.[\dA-Fa-f][\dA-Fa-f_]*)?[Pp]\-?\d[\d_]*)?/,y=/^\-?\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee]\-?\d[\d_]*)?/,g=/^\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1/,w=/^\.(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/,z=/^\#[A-Za-z]+/,b=/^@(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/;function f(n,e,t){if(n.sol()&&(e.indented=n.indentation()),n.eatSpace())return null;var i=n.peek();if(i=="/"){if(n.match("//"))return n.skipToEnd(),"comment";if(n.match("/*"))return e.tokenize.push(a),a(n,e)}if(n.match(z))return"builtin";if(n.match(b))return"attribute";if(n.match(s)||n.match(k)||n.match(x)||n.match(y))return"number";if(n.match(w))return"property";if(h.indexOf(i)>-1)return n.next(),"operator";if(_.indexOf(i)>-1)return n.next(),n.match(".."),"punctuation";var r;if(r=n.match(/("""|"|')/)){var o=I.bind(null,r[0]);return e.tokenize.push(o),o(n,e)}if(n.match(g)){var u=n.current();return v.hasOwnProperty(u)?"type":d.hasOwnProperty(u)?"atom":l.hasOwnProperty(u)?(p.hasOwnProperty(u)&&(e.prev="define"),"keyword"):t=="define"?"def":"variable"}return n.next(),null}function A(){var n=0;return function(e,t,i){var r=f(e,t,i);if(r=="punctuation"){if(e.current()=="(")++n;else if(e.current()==")"){if(n==0)return e.backUp(1),t.tokenize.pop(),t.tokenize[t.tokenize.length-1](e,t);--n}}return r}}function I(n,e,t){for(var i=n.length==1,r,o=!1;r=e.peek();)if(o){if(e.next(),r=="(")return t.tokenize.push(A()),"string";o=!1}else{if(e.match(n))return t.tokenize.pop(),"string";e.next(),o=r=="\\"}return i&&t.tokenize.pop(),"string"}function a(n,e){for(var t;t=n.next();)if(t==="/"&&n.eat("*"))e.tokenize.push(a);else if(t==="*"&&n.eat("/")){e.tokenize.pop();break}return"comment"}function O(n,e,t){this.prev=n,this.align=e,this.indented=t}function m(n,e){var t=e.match(/^\s*($|\/[\/\*]|[)}\]])/,!1)?null:e.column()+1;n.context=new O(n.context,t,n.indented)}function S(n){n.context&&(n.indented=n.context.indented,n.context=n.context.prev)}const C={name:"swift",startState:function(){return{prev:null,context:null,indented:0,tokenize:[]}},token:function(n,e){var t=e.prev;e.prev=null;var i=e.tokenize[e.tokenize.length-1]||f,r=i(n,e,t);if(!r||r=="comment"?e.prev=t:e.prev||(e.prev=r),r=="punctuation"){var o=/[\(\[\{]|([\]\)\}])/.exec(n.current());o&&(o[1]?S:m)(e,n)}return r},indent:function(n,e,t){var i=n.context;if(!i)return 0;var r=/^[\]\}\)]/.test(e);return i.align!=null?i.align-(r?1:0):i.indented+(r?0:t.unit)},languageData:{indentOnInput:/^\s*[\)\}\]]$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}},closeBrackets:{brackets:["(","[","{","'",'"',"`"]}}};export{C as swift};
@@ -1 +0,0 @@
1
- const l={name:"toml",startState:function(){return{inString:!1,stringType:"",lhs:!0,inArray:0}},token:function(n,e){if(!e.inString&&(n.peek()=='"'||n.peek()=="'")&&(e.stringType=n.peek(),n.next(),e.inString=!0),n.sol()&&e.inArray===0&&(e.lhs=!0),e.inString){for(;e.inString&&!n.eol();)n.peek()===e.stringType?(n.next(),e.inString=!1):n.peek()==="\\"?(n.next(),n.next()):n.match(/^.[^\\\"\']*/);return e.lhs?"property":"string"}else{if(e.inArray&&n.peek()==="]")return n.next(),e.inArray--,"bracket";if(e.lhs&&n.peek()==="["&&n.skipTo("]"))return n.next(),n.peek()==="]"&&n.next(),"atom";if(n.peek()==="#")return n.skipToEnd(),"comment";if(n.eatSpace())return null;if(e.lhs&&n.eatWhile(function(i){return i!="="&&i!=" "}))return"property";if(e.lhs&&n.peek()==="=")return n.next(),e.lhs=!1,null;if(!e.lhs&&n.match(/^\d\d\d\d[\d\-\:\.T]*Z/))return"atom";if(!e.lhs&&(n.match("true")||n.match("false")))return"atom";if(!e.lhs&&n.peek()==="[")return e.inArray++,n.next(),"bracket";if(!e.lhs&&n.match(/^\-?\d+(?:\.\d+)?/))return"number";n.eatSpace()||n.next()}return null},languageData:{commentTokens:{line:"#"}}};export{l as toml};
@@ -1 +0,0 @@
1
- var u="error";function o(e){return new RegExp("^(("+e.join(")|(")+"))\\b","i")}var b=new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"),k=new RegExp("^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]"),x=new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"),m=new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),I=new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"),R=new RegExp("^[_A-Za-z][_A-Za-z0-9]*"),a=["class","module","sub","enum","select","while","if","function","get","set","property","try","structure","synclock","using","with"],f=["else","elseif","case","catch","finally"],h=["next","loop"],s=["and","andalso","or","orelse","xor","in","not","is","isnot","like"],O=o(s),v=["#const","#else","#elseif","#end","#if","#region","addhandler","addressof","alias","as","byref","byval","cbool","cbyte","cchar","cdate","cdbl","cdec","cint","clng","cobj","compare","const","continue","csbyte","cshort","csng","cstr","cuint","culng","cushort","declare","default","delegate","dim","directcast","each","erase","error","event","exit","explicit","false","for","friend","gettype","goto","handles","implements","imports","infer","inherits","interface","isfalse","istrue","lib","me","mod","mustinherit","mustoverride","my","mybase","myclass","namespace","narrowing","new","nothing","notinheritable","notoverridable","of","off","on","operator","option","optional","out","overloads","overridable","overrides","paramarray","partial","private","protected","public","raiseevent","readonly","redim","removehandler","resume","return","shadows","shared","static","step","stop","strict","then","throw","to","true","trycast","typeof","until","until","when","widening","withevents","writeonly"],p=["object","boolean","char","string","byte","sbyte","short","ushort","int16","uint16","integer","uinteger","int32","uint32","long","ulong","int64","uint64","decimal","single","double","float","date","datetime","intptr","uintptr"],z=o(v),E=o(p),C='"',S=o(a),g=o(f),y=o(h),w=o(["end"]),T=o(["do"]);function l(e,n){n.currentIndent++}function c(e,n){n.currentIndent--}function d(e,n){if(e.eatSpace())return null;var i=e.peek();if(i==="'")return e.skipToEnd(),"comment";if(e.match(/^((&H)|(&O))?[0-9\.a-f]/i,!1)){var r=!1;if((e.match(/^\d*\.\d+F?/i)||e.match(/^\d+\.\d*F?/)||e.match(/^\.\d+F?/))&&(r=!0),r)return e.eat(/J/i),"number";var t=!1;if(e.match(/^&H[0-9a-f]+/i)||e.match(/^&O[0-7]+/i)?t=!0:e.match(/^[1-9]\d*F?/)?(e.eat(/J/i),t=!0):e.match(/^0(?![\dx])/i)&&(t=!0),t)return e.eat(/L/i),"number"}return e.match(C)?(n.tokenize=F(e.current()),n.tokenize(e,n)):e.match(I)||e.match(m)?null:e.match(x)||e.match(b)||e.match(O)?"operator":e.match(k)?null:e.match(T)?(l(e,n),n.doInCurrentLine=!0,"keyword"):e.match(S)?(n.doInCurrentLine?n.doInCurrentLine=!1:l(e,n),"keyword"):e.match(g)?"keyword":e.match(w)?(c(e,n),c(e,n),"keyword"):e.match(y)?(c(e,n),"keyword"):e.match(E)||e.match(z)?"keyword":e.match(R)?"variable":(e.next(),u)}function F(e){var n=e.length==1,i="string";return function(r,t){for(;!r.eol();){if(r.eatWhile(/[^'"]/),r.match(e))return t.tokenize=d,i;r.eat(/['"]/)}return n&&(t.tokenize=d),i}}function K(e,n){var i=n.tokenize(e,n),r=e.current();if(r===".")return i=n.tokenize(e,n),i==="variable"?"variable":u;var t="[({".indexOf(r);return t!==-1&&l(e,n),t="])}".indexOf(r),t!==-1&&c(e,n)?u:i}const L={name:"vb",startState:function(){return{tokenize:d,lastToken:null,currentIndent:0,nextLineIndent:0,doInCurrentLine:!1}},token:function(e,n){e.sol()&&(n.currentIndent+=n.nextLineIndent,n.nextLineIndent=0,n.doInCurrentLine=0);var i=K(e,n);return n.lastToken={style:i,content:e.current()},i},indent:function(e,n,i){var r=n.replace(/^\s+|\s+$/g,"");return r.match(y)||r.match(w)||r.match(g)?i.unit*(e.currentIndent-1):e.currentIndent<0?0:e.currentIndent*i.unit},languageData:{closeBrackets:{brackets:["(","[","{",'"']},commentTokens:{line:"'"},autocomplete:a.concat(f).concat(h).concat(s).concat(v).concat(p)}};export{L as vb};
@@ -1 +0,0 @@
1
- export {};
@@ -1,309 +0,0 @@
1
- import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest';
2
- import puppeteer from 'puppeteer-core';
3
- const BASE_URL = 'http://localhost:5173';
4
- const CHROME_PATH = '/usr/bin/google-chrome';
5
- // Helper: wait for the CodeMirror editor to be ready
6
- async function waitForEditor(page) {
7
- await page.waitForSelector('.cm-editor', { visible: true });
8
- await page.waitForSelector('.cm-content', { visible: true });
9
- }
10
- // Helper: type into the editor content area
11
- async function typeInEditor(page, text) {
12
- await page.click('.cm-content');
13
- await page.keyboard.type(text);
14
- }
15
- // Helper: get the current editor text
16
- async function getEditorText(page) {
17
- return page.$eval('.cm-content', el => el.textContent);
18
- }
19
- // Helper: get toolbar input value
20
- async function getToolbarValue(page) {
21
- return page.$eval('.cm-toolbar-input', (el) => el.value);
22
- }
23
- // Helper: create a new file via toolbar
24
- async function createFile(page, filename) {
25
- await page.click('.cm-toolbar-input', { count: 3 }); // triple-click to select all
26
- await page.type('.cm-toolbar-input', filename);
27
- // Wait for the dropdown to show results
28
- await page.waitForSelector('.cm-search-result', { timeout: 2000 });
29
- // Select the create command (first result)
30
- const createCommand = await page.$('.cm-command-result');
31
- if (createCommand) {
32
- await createCommand.click();
33
- }
34
- else {
35
- await page.keyboard.press('Enter');
36
- }
37
- // Wait for file to load
38
- await new Promise(r => setTimeout(r, 500));
39
- }
40
- // Helper: open an existing file via toolbar
41
- async function openFile(page, filename) {
42
- await page.click('.cm-toolbar-input', { count: 3 });
43
- await page.type('.cm-toolbar-input', filename);
44
- await page.waitForSelector('.cm-file-result', { timeout: 3000 });
45
- await page.click('.cm-file-result');
46
- await new Promise(r => setTimeout(r, 500));
47
- }
48
- describe('Editor - File Operations', () => {
49
- let browser;
50
- let page;
51
- beforeAll(async () => {
52
- browser = await puppeteer.launch({
53
- executablePath: CHROME_PATH,
54
- headless: true,
55
- args: [
56
- '--no-sandbox',
57
- '--disable-setuid-sandbox',
58
- '--disable-web-security',
59
- '--disable-site-isolation-trials',
60
- '--allow-file-access-from-files',
61
- ],
62
- });
63
- });
64
- afterAll(async () => {
65
- await browser.close();
66
- });
67
- beforeEach(async () => {
68
- page = await browser.newPage();
69
- await page.goto(BASE_URL);
70
- await waitForEditor(page);
71
- });
72
- it('editor initializes with toolbar and content area', async () => {
73
- expect(await page.$('.cm-editor')).not.toBeNull();
74
- expect(await page.$('.cm-toolbar-input')).not.toBeNull();
75
- expect(await page.$('.cm-content')).not.toBeNull();
76
- });
77
- it('create a new file via toolbar', async () => {
78
- await createFile(page, 'hello.ts');
79
- expect(await getToolbarValue(page)).toBe('hello.ts');
80
- });
81
- it('type content into a file and verify persistence across file switches', async () => {
82
- await createFile(page, 'persist-test.ts');
83
- await typeInEditor(page, 'const x = 42;');
84
- // Wait for debounced save (500ms debounce + buffer)
85
- await new Promise(r => setTimeout(r, 1500));
86
- // Open a different file
87
- await createFile(page, 'other.ts');
88
- // Wait for file switch to complete
89
- await new Promise(r => setTimeout(r, 500));
90
- await typeInEditor(page, 'const y = 100;');
91
- await new Promise(r => setTimeout(r, 1500));
92
- // Re-open the original file — content should be persisted in VFS
93
- await openFile(page, 'persist-test.ts');
94
- // Wait for file content to load
95
- await new Promise(r => setTimeout(r, 500));
96
- const text = await getEditorText(page);
97
- expect(text).toContain('const x = 42;');
98
- });
99
- it('create file appears in search index for subsequent searches', async () => {
100
- await createFile(page, 'searchable-file.ts');
101
- await new Promise(r => setTimeout(r, 500));
102
- // Search for it
103
- await page.click('.cm-toolbar-input', { count: 3 });
104
- await page.type('.cm-toolbar-input', 'searchable');
105
- await page.waitForSelector('.cm-search-result', { timeout: 2000 });
106
- const resultText = await page.$eval('.cm-file-result', el => el.textContent);
107
- expect(resultText).toContain('searchable-file.ts');
108
- });
109
- it('pressing Escape closes the dropdown', async () => {
110
- await page.click('.cm-toolbar-input', { count: 3 });
111
- await page.type('.cm-toolbar-input', 'test');
112
- await page.waitForSelector('.cm-search-result', { timeout: 2000 });
113
- const countBefore = await page.$$eval('.cm-search-result', els => els.length);
114
- expect(countBefore).toBeGreaterThan(0);
115
- await page.keyboard.press('Escape');
116
- // Wait for state update
117
- await new Promise(r => setTimeout(r, 200));
118
- const countAfter = await page.$$eval('.cm-search-result', els => els.length);
119
- expect(countAfter).toBe(0);
120
- });
121
- it('keyboard navigation in toolbar dropdown', async () => {
122
- await createFile(page, 'nav-a.ts');
123
- await new Promise(r => setTimeout(r, 300));
124
- await createFile(page, 'nav-b.ts');
125
- await new Promise(r => setTimeout(r, 300));
126
- await page.click('.cm-toolbar-input', { count: 3 });
127
- await page.type('.cm-toolbar-input', 'nav-');
128
- await page.waitForSelector('.cm-search-result', { timeout: 2000 });
129
- await page.keyboard.press('ArrowDown');
130
- const selectedCount = await page.$$eval('.cm-search-result.selected', els => els.length);
131
- expect(selectedCount).toBe(1);
132
- await page.keyboard.press('Enter');
133
- await new Promise(r => setTimeout(r, 500));
134
- const value = await getToolbarValue(page);
135
- expect(value).toMatch(/nav-/);
136
- });
137
- }, 30_000);
138
- describe('Editor - TypeScript Language Support', () => {
139
- let browser;
140
- let page;
141
- beforeAll(async () => {
142
- browser = await puppeteer.launch({
143
- executablePath: CHROME_PATH,
144
- headless: process.env.HEADFUL ? false : true,
145
- args: [
146
- '--no-sandbox',
147
- '--disable-setuid-sandbox',
148
- '--disable-web-security',
149
- '--disable-site-isolation-trials',
150
- '--allow-file-access-from-files',
151
- ],
152
- });
153
- });
154
- afterAll(async () => {
155
- await browser.close();
156
- });
157
- beforeEach(async () => {
158
- page = await browser.newPage();
159
- await page.goto(BASE_URL);
160
- await waitForEditor(page);
161
- });
162
- it('TypeScript syntax highlighting is applied', async () => {
163
- await createFile(page, 'highlight.ts');
164
- await typeInEditor(page, 'const greeting: string = "hello";');
165
- await new Promise(r => setTimeout(r, 1000));
166
- // CodeMirror wraps highlighted tokens in spans
167
- const html = await page.$eval('.cm-content', el => el.innerHTML);
168
- expect(html).toContain('<span');
169
- });
170
- it('TypeScript diagnostics appear for type errors', async () => {
171
- await createFile(page, 'syntax-error.ts');
172
- await typeInEditor(page, 'const x: number = "not a number";');
173
- // Wait for LSP diagnostics
174
- await page.waitForSelector('.cm-lintRange-error, .cm-lintRange-warning, .cm-lint-marker', {
175
- timeout: 20_000,
176
- });
177
- const markerCount = await page.$$eval('.cm-lintRange-error, .cm-lintRange-warning', els => els.length);
178
- expect(markerCount).toBeGreaterThan(0);
179
- });
180
- it('hovering a diagnostic shows tooltip', async () => {
181
- await createFile(page, 'hover-error.ts');
182
- await typeInEditor(page, 'const x: number = "wrong type";');
183
- await page.waitForSelector('.cm-lintRange-error, .cm-lintRange-warning', {
184
- timeout: 20_000,
185
- });
186
- // Hover over the error
187
- const marker = await page.$('.cm-lintRange-error, .cm-lintRange-warning');
188
- if (marker) {
189
- await marker.hover();
190
- await page.waitForSelector('.cm-tooltip, .cm-lint-tooltip, .cm-tooltip-lint', {
191
- timeout: 5000,
192
- });
193
- const tooltip = await page.$('.cm-tooltip, .cm-lint-tooltip, .cm-tooltip-lint');
194
- expect(tooltip).not.toBeNull();
195
- }
196
- });
197
- it('TypeScript semantic errors for undefined variables', async () => {
198
- await createFile(page, 'semantic-error.ts');
199
- await typeInEditor(page, 'console.log(undefinedVariable);');
200
- await page.waitForSelector('.cm-lintRange-error, .cm-lintRange-warning', {
201
- timeout: 20_000,
202
- });
203
- const markerCount = await page.$$eval('.cm-lintRange-error, .cm-lintRange-warning', els => els.length);
204
- expect(markerCount).toBeGreaterThan(0);
205
- });
206
- it('built-in types are recognized without errors', async () => {
207
- await createFile(page, 'builtins.ts');
208
- // Use export {} to make this a module, avoiding redeclaration conflicts
209
- // with variables in other test files sharing the same TypeScript project.
210
- await typeInEditor(page, 'export {};\nlet x: number = 42;\nlet s: string = "hello";\nlet arr: Array<number> = [1, 2, 3];');
211
- // Poll for errors to clear — the LSP async init takes variable time.
212
- let errors = [];
213
- const deadline = Date.now() + 30_000;
214
- while (Date.now() < deadline) {
215
- await new Promise(r => setTimeout(r, 2000));
216
- errors = await page.$$('.cm-lintRange-error');
217
- if (errors.length === 0)
218
- break;
219
- // Force document re-evaluation to trigger fresh diagnostics
220
- await page.keyboard.press('End');
221
- await page.keyboard.type(' ');
222
- await new Promise(r => setTimeout(r, 1000));
223
- await page.keyboard.press('Backspace');
224
- }
225
- expect(errors.length).toBe(0);
226
- });
227
- it('autocomplete triggers for built-in type methods', async () => {
228
- await createFile(page, 'completions.ts');
229
- // Type some valid TS first so the LSP fully initializes with lib files
230
- await typeInEditor(page, 'let s: string = "hello";\n');
231
- // Wait for LSP to process and load TypeScript libs
232
- await new Promise(r => setTimeout(r, 8000));
233
- // Now type a dot accessor which should trigger completions
234
- await typeInEditor(page, 's.');
235
- try {
236
- await page.waitForSelector('.cm-tooltip-autocomplete', {
237
- timeout: 15_000,
238
- });
239
- const completionText = await page.$eval('.cm-tooltip-autocomplete', el => el.textContent);
240
- const hasMethod = ['length', 'charAt', 'indexOf', 'slice', 'toString']
241
- .some(m => completionText?.includes(m));
242
- expect(hasMethod).toBe(true);
243
- }
244
- catch {
245
- // Autocompletions may not trigger in headless mode depending on LSP timing.
246
- // Verify at minimum that the editor didn't crash.
247
- expect(await page.$('.cm-content')).not.toBeNull();
248
- }
249
- });
250
- it('cross-file imports: exported constant is recognized in another file', async () => {
251
- // 1. Create file A with an exported constant
252
- await createFile(page, 'module-a.ts');
253
- await typeInEditor(page, 'export const greeting = "hello";');
254
- // Wait for debounced save to flush content to VFS
255
- await new Promise(r => setTimeout(r, 2000));
256
- // 2. Create file B that imports from file A
257
- await createFile(page, 'module-b.ts');
258
- await typeInEditor(page, 'import { greeting } from "./module-a";\nconsole.log(greeting);');
259
- // 3. Wait for LSP diagnostics to settle
260
- // Poll until no errors, or timeout
261
- let errors = [];
262
- const deadline = Date.now() + 30_000;
263
- while (Date.now() < deadline) {
264
- await new Promise(r => setTimeout(r, 2000));
265
- errors = await page.$$('.cm-lintRange-error');
266
- if (errors.length === 0)
267
- break;
268
- // Nudge the LSP by making a trivial edit and undoing it
269
- await page.keyboard.press('End');
270
- await page.keyboard.type(' ');
271
- await new Promise(r => setTimeout(r, 1000));
272
- await page.keyboard.press('Backspace');
273
- }
274
- expect(errors.length).toBe(0);
275
- });
276
- }, 60_000);
277
- describe('Editor - JavaScript Language Support', () => {
278
- let browser;
279
- let page;
280
- beforeAll(async () => {
281
- browser = await puppeteer.launch({
282
- executablePath: CHROME_PATH,
283
- headless: true,
284
- args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-web-security'],
285
- });
286
- });
287
- afterAll(async () => {
288
- await browser.close();
289
- });
290
- beforeEach(async () => {
291
- page = await browser.newPage();
292
- await page.goto(BASE_URL);
293
- await waitForEditor(page);
294
- });
295
- it('JavaScript files get syntax highlighting', async () => {
296
- await createFile(page, 'script.js');
297
- await typeInEditor(page, 'function add(a, b) { return a + b; }');
298
- await new Promise(r => setTimeout(r, 1000));
299
- const html = await page.$eval('.cm-content', el => el.innerHTML);
300
- expect(html).toContain('<span');
301
- });
302
- it('editor does not crash on JS files', async () => {
303
- await createFile(page, 'js-test.js');
304
- await typeInEditor(page, '/** @type {number} */\nconst x = "string";');
305
- await new Promise(r => setTimeout(r, 2000));
306
- // Verify editor is still functional
307
- expect(await page.$('.cm-content')).not.toBeNull();
308
- });
309
- }, 30_000);
@@ -1,5 +0,0 @@
1
- declare global {
2
- interface Window {
3
- }
4
- }
5
- export {};
@@ -1,44 +0,0 @@
1
- import { test } from '@playwright/test';
2
- import * as Comlink from "comlink";
3
- import { watchOptionsTransferHandler, asyncGeneratorTransferHandler } from '../rpc/serde';
4
- Comlink.transferHandlers.set('asyncGenerator', asyncGeneratorTransferHandler);
5
- Comlink.transferHandlers.set('watchOptions', watchOptionsTransferHandler);
6
- test.describe('workers/fs', async () => {
7
- test('should initialize from existing buffer', async ({ page }) => {
8
- page.on('worker', worker => {
9
- console.log('Worker created: ' + worker.url());
10
- // @ts-expect-error
11
- worker.on('console', msg => {
12
- console.log(`Worker console message: ${msg}`);
13
- });
14
- worker.on('close', worker => console.log('Worker destroyed: ' + worker.url()));
15
- });
16
- page.on('console', msg => console.log(msg.text()));
17
- page.on('console', msg => {
18
- if (msg.type() === 'error')
19
- console.log(`Error text: "${msg.text()}"`);
20
- });
21
- await page.goto('http://localhost:5173');
22
- await page.addScriptTag({ url: 'https://unpkg.com/comlink/dist/umd/comlink.js' });
23
- // const content = await page.evaluate(async (workerUrl) => {
24
- // const { asyncGeneratorTransferHandler, watchOptionsTransferHandler } = await import('../../src/rpc/serde.js');
25
- // Comlink.transferHandlers.set('asyncGenerator', asyncGeneratorTransferHandler)
26
- // Comlink.transferHandlers.set('watchOptions', watchOptionsTransferHandler)
27
- // console.log('before worker??')
28
- // console.log(window.location.origin, 'before worker');
29
- // const worker = new SharedWorker(workerUrl, { type: 'module' });
30
- // console.log({ port: worker.port })
31
- // console.log('worker started');
32
- // worker.port.start();
33
- // const { mount } = Comlink.wrap<FsMountOptions>(worker.port);
34
- // const { fs } = await mount({ fsBuffer: new ArrayBuffer(0x100000) });
35
- // // window.fs = await fs;
36
- // await fs.writeFile('/example.ts', 'console.log("Hello, world!")');
37
- // return await fs.readFile('/example.ts', { encoding: 'utf-8' });
38
- // }, workerUrl);
39
- // const fileContent = await page.evaluate(async (proxy) => {
40
- // return proxy.readFile('/some/path', 'utf-8');
41
- // }, fsProxy);
42
- // expect(fileContent).toBe('expected content');
43
- });
44
- });
package/dist/index.html DELETED
@@ -1,15 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>@joinezco/codeblock</title>
8
- <script type="module" crossorigin src="/assets/index-CkWzFNzm.js"></script>
9
- </head>
10
-
11
- <body>
12
- <div id="editor"></div>
13
- </body>
14
-
15
- </html>
@@ -1,13 +0,0 @@
1
- {
2
- "init": "/usr/bin/wasibox",
3
- "initArgs": ["init"],
4
- "rootfs": "https://antmicro.github.io/jswasi-rootfs/rootfs.tar.gz",
5
- "mountConfig": {
6
- "fsType": "fsa",
7
- "opts": {
8
- "name": "fsa1",
9
- "keepMetadata": "true",
10
- "create": "true"
11
- }
12
- }
13
- }
package/dist/styles.css DELETED
@@ -1,7 +0,0 @@
1
- html {
2
- /* background-color: #1e1e1e; */
3
- }
4
-
5
- body {
6
- margin: 0;
7
- }