vzcode 0.23.0 → 0.25.0
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.
- package/dist/assets/index-8628ebab.js +111 -0
- package/dist/assets/{index-c63b4be7.css → index-cf19de3b.css} +1 -1
- package/dist/assets/{worker-d5f0575a.js → worker-b775ddff.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +19 -9
- package/src/client/App.tsx +111 -30
- package/src/client/CodeEditor/getOrCreateEditor.ts +10 -1
- package/src/client/CodeEditor/index.tsx +9 -5
- package/src/client/CodeEditor/json1PresenceBroadcast.js +2 -0
- package/src/client/CodeEditor/json1PresenceDisplay.js +45 -1
- package/src/client/CodeEditor/widgets.ts +183 -10
- package/src/client/PresenceNotifications/index.tsx +145 -0
- package/src/client/PresenceNotifications/style.scss +17 -0
- package/src/client/PrettierErrorOverlay/index.tsx +9 -0
- package/src/client/PrettierErrorOverlay/style.scss +9 -0
- package/src/client/Settings.tsx +11 -1
- package/src/client/Sidebar/FileListing.tsx +0 -1
- package/src/client/Sidebar/Item.tsx +20 -11
- package/src/client/reducer.ts +119 -0
- package/src/client/style.scss +3 -0
- package/src/client/themes/index.ts +7 -0
- package/src/client/{themes.ts → themes/themes.ts} +5 -5
- package/src/client/{useDynamicTheme.ts → themes/useDynamicTheme.ts} +1 -1
- package/src/client/themes/vizhubTheme/colors.ts +80 -0
- package/src/client/themes/vizhubTheme/index.ts +166 -0
- package/src/client/usePrettier/index.ts +32 -14
- package/src/client/usePrettier/worker.ts +1 -1
- package/dist/assets/index-49f71876.js +0 -110
- package/src/client/useTabsState.ts +0 -58
- package/src/client/vizhubTheme.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
.vz-code-editor{flex:1;display:flex;font-family:var(--vzcode-font-family);overflow-x:auto}.vz-code-editor .cm-editor{flex:1}.vz-sidebar{height:100%;background:rgb(54,65,89);display:flex;flex-direction:column;justify-content:space-between}.vz-sidebar .full-box{padding:7px;display:flex;flex-direction:row;align-items:center;justify-content:space-between}.vz-sidebar .files{overflow:auto}.vz-sidebar .file-or-directory{display:flex;flex-direction:row;align-items:center;justify-content:space-between;cursor:pointer;margin:0 10px;color:#dbdde1;border-radius:5px}.vz-sidebar .link-name{margin-top:30px;margin-left:10px;color:#9aa0ac;font-size:12px;text-decoration:none}.vz-sidebar .new-btn{justify-content:right;margin-right:10px;cursor:pointer}.vz-sidebar .utils{display:flex}.vz-sidebar .utilities{margin-right:3px}.vz-sidebar .file-or-directory:hover,.vz-sidebar .settings:hover{background-color:#4a5469}.vz-sidebar .name{display:flex;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vz-sidebar .indentation{margin-left:20px}.vz-sidebar .arrow-wrapper{margin-right:4px}.vz-sidebar .settings{height:30px;color:#dbdde1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:14px 0;margin:10px;border-radius:5px}.vz-tab-list{display:flex;background-color:#252526;overflow-x:auto}.vz-tab-list .tab{background:rgb(45,45,45);color:#fff;font-family:var(--vzcode-font-family);align-items:center;display:flex;padding-top:2px;padding-left:10px;padding-right:10px;border-top-left-radius:10px;border-top-right-radius:10px;margin-top:5px;margin-left:2px;margin-right:2px;cursor:pointer;white-space:nowrap}.vz-tab-list .tab .tab-close{margin-left:5px}.vz-tab-list .tab .tab-close:hover{border-radius:30%;background-color:#252526}.vz-tab-list .tab.active{background-color:#292c34}.vz-resizer{position:absolute;top:0;left:0;bottom:0}.vz-resizer:hover{cursor:col-resize}.vz-resizer .vz-resizer-thumb{position:absolute;top:0;bottom:0;transition:background-color .15s .25s}.vz-resizer:hover .vz-resizer-thumb{background-color:#0078d4}:root{--vzcode-font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;--vz-bg-color: rgb( 41, 44, 52 )}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:var(--app-bg-color)}::-webkit-scrollbar-thumb{background:rgb(37,37,38)}::-webkit-scrollbar-thumb:hover{background:#555}html,body,#root,.app{height:100%}.app{background-color:var(--vz-bg-color);font-family:Poppins,sans-serif;display:flex;position:relative}.app .left,.app .right{display:flex}.app .right{flex:1;flex-direction:column;min-width:0}
|
|
1
|
+
.vz-code-editor{flex:1;display:flex;font-family:var(--vzcode-font-family);overflow-x:auto}.vz-code-editor .cm-editor{flex:1}.vz-sidebar{height:100%;background:rgb(54,65,89);display:flex;flex-direction:column;justify-content:space-between}.vz-sidebar .full-box{padding:7px;display:flex;flex-direction:row;align-items:center;justify-content:space-between}.vz-sidebar .files{overflow:auto}.vz-sidebar .file-or-directory{display:flex;flex-direction:row;align-items:center;justify-content:space-between;cursor:pointer;margin:0 10px;color:#dbdde1;border-radius:5px}.vz-sidebar .link-name{margin-top:30px;margin-left:10px;color:#9aa0ac;font-size:12px;text-decoration:none}.vz-sidebar .new-btn{justify-content:right;margin-right:10px;cursor:pointer}.vz-sidebar .utils{display:flex}.vz-sidebar .utilities{margin-right:3px}.vz-sidebar .file-or-directory:hover,.vz-sidebar .settings:hover{background-color:#4a5469}.vz-sidebar .name{display:flex;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vz-sidebar .indentation{margin-left:20px}.vz-sidebar .arrow-wrapper{margin-right:4px}.vz-sidebar .settings{height:30px;color:#dbdde1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:14px 0;margin:10px;border-radius:5px}.vz-tab-list{display:flex;background-color:#252526;overflow-x:auto}.vz-tab-list .tab{background:rgb(45,45,45);color:#fff;font-family:var(--vzcode-font-family);align-items:center;display:flex;padding-top:2px;padding-left:10px;padding-right:10px;border-top-left-radius:10px;border-top-right-radius:10px;margin-top:5px;margin-left:2px;margin-right:2px;cursor:pointer;white-space:nowrap}.vz-tab-list .tab .tab-close{margin-left:5px}.vz-tab-list .tab .tab-close:hover{border-radius:30%;background-color:#252526}.vz-tab-list .tab.active{background-color:#292c34}.vz-resizer{position:absolute;top:0;left:0;bottom:0}.vz-resizer:hover{cursor:col-resize}.vz-resizer .vz-resizer-thumb{position:absolute;top:0;bottom:0;transition:background-color .15s .25s}.vz-resizer:hover .vz-resizer-thumb{background-color:#0078d4}.vz-notification{position:fixed;display:flex;flex-direction:column;gap:10px;bottom:20px;right:20px;color:#9aa0ac;padding:15px}.vz-notification .vz-notification-item{background-color:#364159;padding:5px;border-radius:5px}:root{--vzcode-font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;--vz-bg-color: rgb( 41, 44, 52 )}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:var(--app-bg-color)}::-webkit-scrollbar-thumb{background:rgb(37,37,38)}::-webkit-scrollbar-thumb:hover{background:#555}html,body,#root,.app{height:100%}.app{background-color:var(--vz-bg-color);font-family:Poppins,sans-serif;display:flex;position:relative}.app .left,.app .right{display:flex;position:relative}.app .right{flex:1;flex-direction:column;min-width:0}.prettier-error-overlay{color:#ff3535;background-color:#0009;position:absolute;bottom:0;left:0;right:0;pointer-events:none}
|
|
@@ -234,4 +234,4 @@ ${j.join(`
|
|
|
234
234
|
`;N=N.replace(n,"").replace(r,"").replace(v,"$1");let k="";for(;k!==N;)k=N,N=N.replace(_,`${m}$1 $2${m}`);N=N.replace(u,"").trimRight();let F=Object.create(null),q=N.replace(f,"").replace(u,"").trimRight(),$;for(;$=f.exec(N);){let R=$[2].replace(s,"");typeof F[$[1]]=="string"||Array.isArray(F[$[1]])?F[$[1]]=g.concat(F[$[1]],R):F[$[1]]=R}return{comments:q,pragmas:F}}function S({comments:N="",pragmas:m={}}){let k=`
|
|
235
235
|
`,F="/**",q=" *",$=" */",R=Object.keys(m),H=R.map(X=>L(X,m[X])).reduce((X,ne)=>X.concat(ne),[]).map(X=>`${q} ${X}${k}`).join("");if(!N){if(R.length===0)return"";if(R.length===1&&!Array.isArray(m[R[0]])){let X=m[R[0]];return`${F} ${L(R[0],X)[0]}${$}`}}let U=N.split(k).map(X=>`${q} ${X}`).join(k)+k;return F+k+(N?U:"")+(N&&R.length?q+k:"")+H+$}function L(N,m){return g.concat(m).map(k=>`@${N} ${k}`.trim())}}),BP={};UT(BP,{parsers:()=>HT});var HT={};UT(HT,{typescript:()=>roe});var xse=AP(Dse(),1);function vse(t,r){let n=new SyntaxError(t+" ("+r.loc.start.line+":"+r.loc.start.column+")");return Object.assign(n,r)}var Tse=vse;function Sse(t){let r=[];for(let n of t)try{return n()}catch(a){r.push(a)}throw Object.assign(new Error("All combinations failed"),{errors:r})}var Cse=Sse,OP=AP(bse(),1);function Ase(t){if(!t.startsWith("#!"))return"";let r=t.indexOf(`
|
|
236
236
|
`);return r===-1?t:t.slice(0,r)}var Ese=Ase;function wse(t){let r=Ese(t);r&&(t=t.slice(r.length+1));let n=(0,OP.extract)(t),{pragmas:a,comments:s}=(0,OP.parseWithComments)(n);return{shebang:r,text:t,pragmas:a,comments:s}}function kse(t){let{pragmas:r}=wse(t);return Object.prototype.hasOwnProperty.call(r,"prettier")||Object.prototype.hasOwnProperty.call(r,"format")}function Fse(t){return Array.isArray(t)&&t.length>0}var LP=Fse;function ao(t){var r;let n=t.range?t.range[0]:t.start,a=((r=t.declaration)==null?void 0:r.decorators)??t.decorators;return LP(a)?Math.min(ao(a[0]),n):n}function tc(t){return t.range?t.range[1]:t.end}function Pse(t){return t=typeof t=="function"?{parse:t}:t,{astFormat:"estree",hasPragma:kse,locStart:ao,locEnd:tc,...t}}var Nse=Pse;function Ise(t){return t.charAt(0)==="#"&&t.charAt(1)==="!"?"//"+t.slice(2):t}var Bse=Ise,Ose=(t,r,n)=>{if(!(t&&r==null))return Array.isArray(r)||typeof r=="string"?r[n<0?r.length+n:n]:r.at(n)},MP=Ose;function Lse(t){return t=new Set(t),r=>t.has(r==null?void 0:r.type)}var Mse=Lse,jse=Mse(["Block","CommentBlock","MultiLine"]),GT=jse;function Rse(t){return GT(t)&&t.value[0]==="*"&&/@(?:type|satisfies)\b/.test(t.value)}var $se=Rse;function Jse(t){let r=`*${t.value}*`.split(`
|
|
237
|
-
`);return r.length>1&&r.every(n=>n.trimStart()[0]==="*")}var jP=Jse,Th=null;function Sh(t){if(Th!==null&&typeof Th.property){let r=Th;return Th=Sh.prototype=null,r}return Th=Sh.prototype=t??Object.create(null),new Sh}var qse=10;for(let t=0;t<=qse;t++)Sh();function Use(t){return Sh(t)}function zse(t,r="type"){Use(t);function n(a){let s=a[r],u=t[s];if(!Array.isArray(u))throw Object.assign(new Error(`Missing visitor keys for '${s}'.`),{node:a});return u}return n}var Kse=zse,Wse={ArrayExpression:["elements"],AssignmentExpression:["left","right"],BinaryExpression:["left","right"],InterpreterDirective:[],Directive:["value"],DirectiveLiteral:[],BlockStatement:["directives","body"],BreakStatement:["label"],CallExpression:["callee","arguments","typeParameters","typeArguments"],CatchClause:["param","body"],ConditionalExpression:["test","consequent","alternate"],ContinueStatement:["label"],DebuggerStatement:[],DoWhileStatement:["test","body"],EmptyStatement:[],ExpressionStatement:["expression"],File:["program"],ForInStatement:["left","right","body"],ForStatement:["init","test","update","body"],FunctionDeclaration:["id","params","body","returnType","typeParameters","predicate"],FunctionExpression:["id","params","body","returnType","typeParameters"],Identifier:["typeAnnotation","decorators"],IfStatement:["test","consequent","alternate"],LabeledStatement:["label","body"],StringLiteral:[],NumericLiteral:[],NullLiteral:[],BooleanLiteral:[],RegExpLiteral:[],LogicalExpression:["left","right"],MemberExpression:["object","property"],NewExpression:["callee","arguments","typeParameters","typeArguments"],Program:["directives","body"],ObjectExpression:["properties"],ObjectMethod:["key","params","body","decorators","returnType","typeParameters"],ObjectProperty:["key","value","decorators"],RestElement:["argument","typeAnnotation","decorators"],ReturnStatement:["argument"],SequenceExpression:["expressions"],ParenthesizedExpression:["expression"],SwitchCase:["test","consequent"],SwitchStatement:["discriminant","cases"],ThisExpression:[],ThrowStatement:["argument"],TryStatement:["block","handler","finalizer"],UnaryExpression:["argument"],UpdateExpression:["argument"],VariableDeclaration:["declarations"],VariableDeclarator:["id","init"],WhileStatement:["test","body"],WithStatement:["object","body"],AssignmentPattern:["left","right","decorators","typeAnnotation"],ArrayPattern:["elements","typeAnnotation","decorators"],ArrowFunctionExpression:["params","body","returnType","typeParameters","predicate"],ClassBody:["body"],ClassExpression:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators","superTypeArguments"],ClassDeclaration:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators","superTypeArguments"],ExportAllDeclaration:["source","attributes","assertions","exported"],ExportDefaultDeclaration:["declaration"],ExportNamedDeclaration:["declaration","specifiers","source","attributes","assertions"],ExportSpecifier:["local","exported"],ForOfStatement:["left","right","body"],ImportDeclaration:["specifiers","source","attributes","assertions"],ImportDefaultSpecifier:["local"],ImportNamespaceSpecifier:["local"],ImportSpecifier:["local","imported"],MetaProperty:["meta","property"],ClassMethod:["key","params","body","decorators","returnType","typeParameters"],ObjectPattern:["properties","typeAnnotation","decorators"],SpreadElement:["argument"],Super:[],TaggedTemplateExpression:["tag","quasi","typeParameters","typeArguments"],TemplateElement:[],TemplateLiteral:["quasis","expressions"],YieldExpression:["argument"],AwaitExpression:["argument"],Import:[],BigIntLiteral:[],ExportNamespaceSpecifier:["exported"],OptionalMemberExpression:["object","property"],OptionalCallExpression:["callee","arguments","typeParameters","typeArguments"],ClassProperty:["key","value","typeAnnotation","decorators","variance"],ClassAccessorProperty:["key","value","typeAnnotation","decorators"],ClassPrivateProperty:["key","value","decorators","typeAnnotation","variance"],ClassPrivateMethod:["key","params","body","decorators","returnType","typeParameters"],PrivateName:["id"],StaticBlock:["body"],AnyTypeAnnotation:[],ArrayTypeAnnotation:["elementType"],BooleanTypeAnnotation:[],BooleanLiteralTypeAnnotation:[],NullLiteralTypeAnnotation:[],ClassImplements:["id","typeParameters"],DeclareClass:["id","typeParameters","extends","mixins","implements","body"],DeclareFunction:["id","predicate"],DeclareInterface:["id","typeParameters","extends","body"],DeclareModule:["id","body"],DeclareModuleExports:["typeAnnotation"],DeclareTypeAlias:["id","typeParameters","right"],DeclareOpaqueType:["id","typeParameters","supertype"],DeclareVariable:["id"],DeclareExportDeclaration:["declaration","specifiers","source"],DeclareExportAllDeclaration:["source"],DeclaredPredicate:["value"],ExistsTypeAnnotation:[],FunctionTypeAnnotation:["typeParameters","params","rest","returnType","this"],FunctionTypeParam:["name","typeAnnotation"],GenericTypeAnnotation:["id","typeParameters"],InferredPredicate:[],InterfaceExtends:["id","typeParameters"],InterfaceDeclaration:["id","typeParameters","extends","body"],InterfaceTypeAnnotation:["extends","body"],IntersectionTypeAnnotation:["types"],MixedTypeAnnotation:[],EmptyTypeAnnotation:[],NullableTypeAnnotation:["typeAnnotation"],NumberLiteralTypeAnnotation:[],NumberTypeAnnotation:[],ObjectTypeAnnotation:["properties","indexers","callProperties","internalSlots"],ObjectTypeInternalSlot:["id","value","optional","static","method"],ObjectTypeCallProperty:["value"],ObjectTypeIndexer:["id","key","value","variance"],ObjectTypeProperty:["key","value","variance"],ObjectTypeSpreadProperty:["argument"],OpaqueType:["id","typeParameters","supertype","impltype"],QualifiedTypeIdentifier:["id","qualification"],StringLiteralTypeAnnotation:[],StringTypeAnnotation:[],SymbolTypeAnnotation:[],ThisTypeAnnotation:[],TupleTypeAnnotation:["types","elementTypes"],TypeofTypeAnnotation:["argument"],TypeAlias:["id","typeParameters","right"],TypeAnnotation:["typeAnnotation"],TypeCastExpression:["expression","typeAnnotation"],TypeParameter:["bound","default","variance"],TypeParameterDeclaration:["params"],TypeParameterInstantiation:["params"],UnionTypeAnnotation:["types"],Variance:[],VoidTypeAnnotation:[],EnumDeclaration:["id","body"],EnumBooleanBody:["members"],EnumNumberBody:["members"],EnumStringBody:["members"],EnumSymbolBody:["members"],EnumBooleanMember:["id","init"],EnumNumberMember:["id","init"],EnumStringMember:["id","init"],EnumDefaultedMember:["id"],IndexedAccessType:["objectType","indexType"],OptionalIndexedAccessType:["objectType","indexType"],JSXAttribute:["name","value"],JSXClosingElement:["name"],JSXElement:["openingElement","children","closingElement"],JSXEmptyExpression:[],JSXExpressionContainer:["expression"],JSXSpreadChild:["expression"],JSXIdentifier:[],JSXMemberExpression:["object","property"],JSXNamespacedName:["namespace","name"],JSXOpeningElement:["name","attributes","typeArguments","typeParameters"],JSXSpreadAttribute:["argument"],JSXText:[],JSXFragment:["openingFragment","children","closingFragment"],JSXOpeningFragment:[],JSXClosingFragment:[],Noop:[],Placeholder:[],V8IntrinsicIdentifier:[],ArgumentPlaceholder:[],BindExpression:["object","callee"],ImportAttribute:["key","value"],Decorator:["expression"],DoExpression:["body"],ExportDefaultSpecifier:["exported"],RecordExpression:["properties"],TupleExpression:["elements"],DecimalLiteral:[],ModuleExpression:["body"],TopicReference:[],PipelineTopicExpression:["expression"],PipelineBareFunction:["callee"],PipelinePrimaryTopicReference:[],TSParameterProperty:["parameter","decorators"],TSDeclareFunction:["id","typeParameters","params","returnType","body"],TSDeclareMethod:["decorators","key","typeParameters","params","returnType"],TSQualifiedName:["left","right"],TSCallSignatureDeclaration:["typeParameters","parameters","typeAnnotation","params","returnType"],TSConstructSignatureDeclaration:["typeParameters","parameters","typeAnnotation","params","returnType"],TSPropertySignature:["key","typeAnnotation"],TSMethodSignature:["key","typeParameters","parameters","typeAnnotation","params","returnType"],TSIndexSignature:["parameters","typeAnnotation"],TSAnyKeyword:[],TSBooleanKeyword:[],TSBigIntKeyword:[],TSIntrinsicKeyword:[],TSNeverKeyword:[],TSNullKeyword:[],TSNumberKeyword:[],TSObjectKeyword:[],TSStringKeyword:[],TSSymbolKeyword:[],TSUndefinedKeyword:[],TSUnknownKeyword:[],TSVoidKeyword:[],TSThisType:[],TSFunctionType:["typeParameters","parameters","typeAnnotation","params","returnType"],TSConstructorType:["typeParameters","parameters","typeAnnotation","params","returnType"],TSTypeReference:["typeName","typeParameters","typeArguments"],TSTypePredicate:["parameterName","typeAnnotation"],TSTypeQuery:["exprName","typeParameters","typeArguments"],TSTypeLiteral:["members"],TSArrayType:["elementType"],TSTupleType:["elementTypes"],TSOptionalType:["typeAnnotation"],TSRestType:["typeAnnotation"],TSNamedTupleMember:["label","elementType"],TSUnionType:["types"],TSIntersectionType:["types"],TSConditionalType:["checkType","extendsType","trueType","falseType"],TSInferType:["typeParameter"],TSParenthesizedType:["typeAnnotation"],TSTypeOperator:["typeAnnotation"],TSIndexedAccessType:["objectType","indexType"],TSMappedType:["typeParameter","typeAnnotation","nameType"],TSLiteralType:["literal"],TSExpressionWithTypeArguments:["expression","typeParameters"],TSInterfaceDeclaration:["id","typeParameters","extends","body"],TSInterfaceBody:["body"],TSTypeAliasDeclaration:["id","typeParameters","typeAnnotation"],TSInstantiationExpression:["expression","typeParameters","typeArguments"],TSAsExpression:["expression","typeAnnotation"],TSSatisfiesExpression:["expression","typeAnnotation"],TSTypeAssertion:["typeAnnotation","expression"],TSEnumDeclaration:["id","members"],TSEnumMember:["id","initializer"],TSModuleDeclaration:["id","body"],TSModuleBlock:["body"],TSImportType:["argument","qualifier","typeParameters","typeArguments"],TSImportEqualsDeclaration:["id","moduleReference"],TSExternalModuleReference:["expression"],TSNonNullExpression:["expression"],TSExportAssignment:["expression"],TSNamespaceExportDeclaration:["id"],TSTypeAnnotation:["typeAnnotation"],TSTypeParameterInstantiation:["params"],TSTypeParameterDeclaration:["params"],TSTypeParameter:["constraint","default","name"],ChainExpression:["expression"],ExperimentalRestProperty:["argument"],ExperimentalSpreadProperty:["argument"],ImportExpression:["source","attributes"],Literal:[],MethodDefinition:["decorators","key","value"],PrivateIdentifier:[],Property:["key","value"],PropertyDefinition:["decorators","key","typeAnnotation","value","variance"],AccessorProperty:["decorators","key","typeAnnotation","value"],TSAbstractAccessorProperty:["decorators","key","typeAnnotation"],TSAbstractKeyword:[],TSAbstractMethodDefinition:["key","value"],TSAbstractPropertyDefinition:["decorators","key","typeAnnotation"],TSAsyncKeyword:[],TSClassImplements:["expression","typeArguments","typeParameters"],TSDeclareKeyword:[],TSEmptyBodyFunctionExpression:["id","typeParameters","params","returnType"],TSExportKeyword:[],TSInterfaceHeritage:["expression","typeArguments","typeParameters"],TSPrivateKeyword:[],TSProtectedKeyword:[],TSPublicKeyword:[],TSReadonlyKeyword:[],TSStaticKeyword:[],TSTemplateLiteralType:["quasis","types"],BigIntLiteralTypeAnnotation:[],BigIntTypeAnnotation:[],ConditionalTypeAnnotation:["checkType","extendsType","trueType","falseType"],DeclareEnum:["id","body"],InferTypeAnnotation:["typeParameter"],KeyofTypeAnnotation:["argument"],ObjectTypeMappedTypeProperty:["keyTparam","propType","sourceType","variance"],QualifiedTypeofIdentifier:["qualification","id"],TupleTypeLabeledElement:["label","elementType","variance"],TupleTypeSpreadElement:["label","typeAnnotation"],TypePredicate:["parameterName","typeAnnotation","asserts"],NGRoot:["node"],NGPipeExpression:["left","right","arguments"],NGChainedExpression:["expressions"],NGEmptyExpression:[],NGMicrosyntax:["body"],NGMicrosyntaxKey:[],NGMicrosyntaxExpression:["expression","alias"],NGMicrosyntaxKeyedExpression:["key","expression"],NGMicrosyntaxLet:["key","value"],NGMicrosyntaxAs:["key","alias"],JsExpressionRoot:["node"],JsonRoot:["node"],TSJSDocAllType:[],TSJSDocUnknownType:[],TSJSDocNullableType:["typeAnnotation"],TSJSDocNonNullableType:["typeAnnotation"],NeverTypeAnnotation:[],UndefinedTypeAnnotation:[],UnknownTypeAnnotation:[]},Vse=Kse(Wse),Hse=Vse;function XT(t,r){if(!(t!==null&&typeof t=="object"))return t;if(Array.isArray(t)){for(let a=0;a<t.length;a++)t[a]=XT(t[a],r);return t}let n=Hse(t);for(let a=0;a<n.length;a++)t[n[a]]=XT(t[n[a]],r);return r(t)||t}var YT=XT;function Gse(t,r){let{parser:n,text:a}=r;if(t.type==="File"&&t.program.interpreter){let{program:{interpreter:u},comments:_}=t;delete t.program.interpreter,_.unshift(u)}if(n==="babel"){let u=new Set;t=YT(t,_=>{var f;(f=_.leadingComments)!=null&&f.some($se)&&u.add(ao(_))}),t=YT(t,_=>{if(_.type==="ParenthesizedExpression"){let{expression:f}=_;if(f.type==="TypeCastExpression")return f.range=_.range,f;let v=ao(_);if(!u.has(v))return f.extra={...f.extra,parenthesized:!0},f}})}if(t=YT(t,u=>{switch(u.type){case"LogicalExpression":if(RP(u))return QT(u);break;case"VariableDeclaration":{let _=MP(!1,u.declarations,-1);_!=null&&_.init&&s(u,_);break}case"TSParenthesizedType":return u.typeAnnotation;case"TSTypeParameter":if(typeof u.name=="string"){let _=ao(u);u.name={type:"Identifier",name:u.name,range:[_,_+u.name.length]}}break;case"TopicReference":t.extra={...t.extra,__isUsingHackPipeline:!0};break;case"ExportAllDeclaration":{let{exported:_}=u;if(n==="meriyah"&&(_==null?void 0:_.type)==="Identifier"){let f=a.slice(ao(_),tc(_));(f.startsWith('"')||f.startsWith("'"))&&(u.exported={...u.exported,type:"Literal",value:u.exported.name,raw:f})}break}case"TSUnionType":case"TSIntersectionType":if(u.types.length===1)return u.types[0];break}}),LP(t.comments)){let u=MP(!1,t.comments,-1);for(let _=t.comments.length-2;_>=0;_--){let f=t.comments[_];tc(f)===ao(u)&>(f)&>(u)&&jP(f)&&jP(u)&&(t.comments.splice(_+1,1),f.value+="*//*"+u.value,f.range=[ao(f),tc(u)]),u=f}}return t.type==="Program"&&(t.range=[0,a.length]),t;function s(u,_){a[tc(_)]!==";"&&(u.range=[ao(u),tc(_)])}}function RP(t){return t.type==="LogicalExpression"&&t.right.type==="LogicalExpression"&&t.operator===t.right.operator}function QT(t){return RP(t)?QT({type:"LogicalExpression",operator:t.operator,left:QT({type:"LogicalExpression",operator:t.operator,left:t.left,right:t.right.left,range:[ao(t.left),tc(t.right.left)]}),right:t.right.right,range:[ao(t),tc(t)]}):t}var Xse=Gse,ZT={loc:!0,range:!0,comment:!0,tokens:!0,loggerFn:!1,project:[],suppressDeprecatedPropertyWarnings:!0};function Yse(t){let{message:r,location:n}=t;if(!n)return t;let{start:a,end:s}=n;return Tse(r,{loc:{start:{line:a.line,column:a.column+1},end:{line:s.line,column:s.column+1}},cause:t})}var Qse=t=>/\.(?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$/i.test(t);function Zse(t,r){let n=r==null?void 0:r.filepath;if(n&&Qse(n))return[{...ZT,filePath:n}];let a=toe(t);return[{...ZT,jsx:a},{...ZT,jsx:!a}]}function eoe(t,r){let n=Bse(t),a=Zse(t,r),s;try{s=Cse(a.map(u=>()=>(0,xse.parse)(n,u)))}catch({errors:[u]}){throw Yse(u)}return Xse(s,{text:t})}function toe(t){return new RegExp(["(?:^[^\"'`]*</)","|","(?:^[^/]{2}.*/>)"].join(""),"m").test(t)}var roe=Nse(eoe),noe=BP,ioe=Object.freeze({__proto__:null,default:noe,parsers:HT});const aoe={js:"babel",jsx:"babel",mjs:"babel",cjs:"babel",ts:"typescript",tsx:"typescript",css:"css",html:"html",json:"json",json5:"json5",md:"markdown",markdown:"markdown"},soe=[dU,WH,NQ,cre,ioe,zae];onmessage=async({data:t})=>{const{fileExtension:r,fileText:n,fileId:a}=t,s=aoe[r];if(!s){postMessage({fileId:a,error:`Unsupported file extension for Prettier: ${r}`});return}try{const u=await dv(n,{parser:s,plugins:soe});postMessage({fileId:a,fileTextPrettified:u})}catch(u){postMessage({fileId:a,error:u})}}})();
|
|
237
|
+
`);return r.length>1&&r.every(n=>n.trimStart()[0]==="*")}var jP=Jse,Th=null;function Sh(t){if(Th!==null&&typeof Th.property){let r=Th;return Th=Sh.prototype=null,r}return Th=Sh.prototype=t??Object.create(null),new Sh}var qse=10;for(let t=0;t<=qse;t++)Sh();function Use(t){return Sh(t)}function zse(t,r="type"){Use(t);function n(a){let s=a[r],u=t[s];if(!Array.isArray(u))throw Object.assign(new Error(`Missing visitor keys for '${s}'.`),{node:a});return u}return n}var Kse=zse,Wse={ArrayExpression:["elements"],AssignmentExpression:["left","right"],BinaryExpression:["left","right"],InterpreterDirective:[],Directive:["value"],DirectiveLiteral:[],BlockStatement:["directives","body"],BreakStatement:["label"],CallExpression:["callee","arguments","typeParameters","typeArguments"],CatchClause:["param","body"],ConditionalExpression:["test","consequent","alternate"],ContinueStatement:["label"],DebuggerStatement:[],DoWhileStatement:["test","body"],EmptyStatement:[],ExpressionStatement:["expression"],File:["program"],ForInStatement:["left","right","body"],ForStatement:["init","test","update","body"],FunctionDeclaration:["id","params","body","returnType","typeParameters","predicate"],FunctionExpression:["id","params","body","returnType","typeParameters"],Identifier:["typeAnnotation","decorators"],IfStatement:["test","consequent","alternate"],LabeledStatement:["label","body"],StringLiteral:[],NumericLiteral:[],NullLiteral:[],BooleanLiteral:[],RegExpLiteral:[],LogicalExpression:["left","right"],MemberExpression:["object","property"],NewExpression:["callee","arguments","typeParameters","typeArguments"],Program:["directives","body"],ObjectExpression:["properties"],ObjectMethod:["key","params","body","decorators","returnType","typeParameters"],ObjectProperty:["key","value","decorators"],RestElement:["argument","typeAnnotation","decorators"],ReturnStatement:["argument"],SequenceExpression:["expressions"],ParenthesizedExpression:["expression"],SwitchCase:["test","consequent"],SwitchStatement:["discriminant","cases"],ThisExpression:[],ThrowStatement:["argument"],TryStatement:["block","handler","finalizer"],UnaryExpression:["argument"],UpdateExpression:["argument"],VariableDeclaration:["declarations"],VariableDeclarator:["id","init"],WhileStatement:["test","body"],WithStatement:["object","body"],AssignmentPattern:["left","right","decorators","typeAnnotation"],ArrayPattern:["elements","typeAnnotation","decorators"],ArrowFunctionExpression:["params","body","returnType","typeParameters","predicate"],ClassBody:["body"],ClassExpression:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators","superTypeArguments"],ClassDeclaration:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators","superTypeArguments"],ExportAllDeclaration:["source","attributes","assertions","exported"],ExportDefaultDeclaration:["declaration"],ExportNamedDeclaration:["declaration","specifiers","source","attributes","assertions"],ExportSpecifier:["local","exported"],ForOfStatement:["left","right","body"],ImportDeclaration:["specifiers","source","attributes","assertions"],ImportDefaultSpecifier:["local"],ImportNamespaceSpecifier:["local"],ImportSpecifier:["local","imported"],MetaProperty:["meta","property"],ClassMethod:["key","params","body","decorators","returnType","typeParameters"],ObjectPattern:["properties","typeAnnotation","decorators"],SpreadElement:["argument"],Super:[],TaggedTemplateExpression:["tag","quasi","typeParameters","typeArguments"],TemplateElement:[],TemplateLiteral:["quasis","expressions"],YieldExpression:["argument"],AwaitExpression:["argument"],Import:[],BigIntLiteral:[],ExportNamespaceSpecifier:["exported"],OptionalMemberExpression:["object","property"],OptionalCallExpression:["callee","arguments","typeParameters","typeArguments"],ClassProperty:["key","value","typeAnnotation","decorators","variance"],ClassAccessorProperty:["key","value","typeAnnotation","decorators"],ClassPrivateProperty:["key","value","decorators","typeAnnotation","variance"],ClassPrivateMethod:["key","params","body","decorators","returnType","typeParameters"],PrivateName:["id"],StaticBlock:["body"],AnyTypeAnnotation:[],ArrayTypeAnnotation:["elementType"],BooleanTypeAnnotation:[],BooleanLiteralTypeAnnotation:[],NullLiteralTypeAnnotation:[],ClassImplements:["id","typeParameters"],DeclareClass:["id","typeParameters","extends","mixins","implements","body"],DeclareFunction:["id","predicate"],DeclareInterface:["id","typeParameters","extends","body"],DeclareModule:["id","body"],DeclareModuleExports:["typeAnnotation"],DeclareTypeAlias:["id","typeParameters","right"],DeclareOpaqueType:["id","typeParameters","supertype"],DeclareVariable:["id"],DeclareExportDeclaration:["declaration","specifiers","source"],DeclareExportAllDeclaration:["source"],DeclaredPredicate:["value"],ExistsTypeAnnotation:[],FunctionTypeAnnotation:["typeParameters","params","rest","returnType","this"],FunctionTypeParam:["name","typeAnnotation"],GenericTypeAnnotation:["id","typeParameters"],InferredPredicate:[],InterfaceExtends:["id","typeParameters"],InterfaceDeclaration:["id","typeParameters","extends","body"],InterfaceTypeAnnotation:["extends","body"],IntersectionTypeAnnotation:["types"],MixedTypeAnnotation:[],EmptyTypeAnnotation:[],NullableTypeAnnotation:["typeAnnotation"],NumberLiteralTypeAnnotation:[],NumberTypeAnnotation:[],ObjectTypeAnnotation:["properties","indexers","callProperties","internalSlots"],ObjectTypeInternalSlot:["id","value","optional","static","method"],ObjectTypeCallProperty:["value"],ObjectTypeIndexer:["id","key","value","variance"],ObjectTypeProperty:["key","value","variance"],ObjectTypeSpreadProperty:["argument"],OpaqueType:["id","typeParameters","supertype","impltype"],QualifiedTypeIdentifier:["id","qualification"],StringLiteralTypeAnnotation:[],StringTypeAnnotation:[],SymbolTypeAnnotation:[],ThisTypeAnnotation:[],TupleTypeAnnotation:["types","elementTypes"],TypeofTypeAnnotation:["argument"],TypeAlias:["id","typeParameters","right"],TypeAnnotation:["typeAnnotation"],TypeCastExpression:["expression","typeAnnotation"],TypeParameter:["bound","default","variance"],TypeParameterDeclaration:["params"],TypeParameterInstantiation:["params"],UnionTypeAnnotation:["types"],Variance:[],VoidTypeAnnotation:[],EnumDeclaration:["id","body"],EnumBooleanBody:["members"],EnumNumberBody:["members"],EnumStringBody:["members"],EnumSymbolBody:["members"],EnumBooleanMember:["id","init"],EnumNumberMember:["id","init"],EnumStringMember:["id","init"],EnumDefaultedMember:["id"],IndexedAccessType:["objectType","indexType"],OptionalIndexedAccessType:["objectType","indexType"],JSXAttribute:["name","value"],JSXClosingElement:["name"],JSXElement:["openingElement","children","closingElement"],JSXEmptyExpression:[],JSXExpressionContainer:["expression"],JSXSpreadChild:["expression"],JSXIdentifier:[],JSXMemberExpression:["object","property"],JSXNamespacedName:["namespace","name"],JSXOpeningElement:["name","attributes","typeArguments","typeParameters"],JSXSpreadAttribute:["argument"],JSXText:[],JSXFragment:["openingFragment","children","closingFragment"],JSXOpeningFragment:[],JSXClosingFragment:[],Noop:[],Placeholder:[],V8IntrinsicIdentifier:[],ArgumentPlaceholder:[],BindExpression:["object","callee"],ImportAttribute:["key","value"],Decorator:["expression"],DoExpression:["body"],ExportDefaultSpecifier:["exported"],RecordExpression:["properties"],TupleExpression:["elements"],DecimalLiteral:[],ModuleExpression:["body"],TopicReference:[],PipelineTopicExpression:["expression"],PipelineBareFunction:["callee"],PipelinePrimaryTopicReference:[],TSParameterProperty:["parameter","decorators"],TSDeclareFunction:["id","typeParameters","params","returnType","body"],TSDeclareMethod:["decorators","key","typeParameters","params","returnType"],TSQualifiedName:["left","right"],TSCallSignatureDeclaration:["typeParameters","parameters","typeAnnotation","params","returnType"],TSConstructSignatureDeclaration:["typeParameters","parameters","typeAnnotation","params","returnType"],TSPropertySignature:["key","typeAnnotation"],TSMethodSignature:["key","typeParameters","parameters","typeAnnotation","params","returnType"],TSIndexSignature:["parameters","typeAnnotation"],TSAnyKeyword:[],TSBooleanKeyword:[],TSBigIntKeyword:[],TSIntrinsicKeyword:[],TSNeverKeyword:[],TSNullKeyword:[],TSNumberKeyword:[],TSObjectKeyword:[],TSStringKeyword:[],TSSymbolKeyword:[],TSUndefinedKeyword:[],TSUnknownKeyword:[],TSVoidKeyword:[],TSThisType:[],TSFunctionType:["typeParameters","parameters","typeAnnotation","params","returnType"],TSConstructorType:["typeParameters","parameters","typeAnnotation","params","returnType"],TSTypeReference:["typeName","typeParameters","typeArguments"],TSTypePredicate:["parameterName","typeAnnotation"],TSTypeQuery:["exprName","typeParameters","typeArguments"],TSTypeLiteral:["members"],TSArrayType:["elementType"],TSTupleType:["elementTypes"],TSOptionalType:["typeAnnotation"],TSRestType:["typeAnnotation"],TSNamedTupleMember:["label","elementType"],TSUnionType:["types"],TSIntersectionType:["types"],TSConditionalType:["checkType","extendsType","trueType","falseType"],TSInferType:["typeParameter"],TSParenthesizedType:["typeAnnotation"],TSTypeOperator:["typeAnnotation"],TSIndexedAccessType:["objectType","indexType"],TSMappedType:["typeParameter","typeAnnotation","nameType"],TSLiteralType:["literal"],TSExpressionWithTypeArguments:["expression","typeParameters"],TSInterfaceDeclaration:["id","typeParameters","extends","body"],TSInterfaceBody:["body"],TSTypeAliasDeclaration:["id","typeParameters","typeAnnotation"],TSInstantiationExpression:["expression","typeParameters","typeArguments"],TSAsExpression:["expression","typeAnnotation"],TSSatisfiesExpression:["expression","typeAnnotation"],TSTypeAssertion:["typeAnnotation","expression"],TSEnumDeclaration:["id","members"],TSEnumMember:["id","initializer"],TSModuleDeclaration:["id","body"],TSModuleBlock:["body"],TSImportType:["argument","qualifier","typeParameters","typeArguments"],TSImportEqualsDeclaration:["id","moduleReference"],TSExternalModuleReference:["expression"],TSNonNullExpression:["expression"],TSExportAssignment:["expression"],TSNamespaceExportDeclaration:["id"],TSTypeAnnotation:["typeAnnotation"],TSTypeParameterInstantiation:["params"],TSTypeParameterDeclaration:["params"],TSTypeParameter:["constraint","default","name"],ChainExpression:["expression"],ExperimentalRestProperty:["argument"],ExperimentalSpreadProperty:["argument"],ImportExpression:["source","attributes"],Literal:[],MethodDefinition:["decorators","key","value"],PrivateIdentifier:[],Property:["key","value"],PropertyDefinition:["decorators","key","typeAnnotation","value","variance"],AccessorProperty:["decorators","key","typeAnnotation","value"],TSAbstractAccessorProperty:["decorators","key","typeAnnotation"],TSAbstractKeyword:[],TSAbstractMethodDefinition:["key","value"],TSAbstractPropertyDefinition:["decorators","key","typeAnnotation"],TSAsyncKeyword:[],TSClassImplements:["expression","typeArguments","typeParameters"],TSDeclareKeyword:[],TSEmptyBodyFunctionExpression:["id","typeParameters","params","returnType"],TSExportKeyword:[],TSInterfaceHeritage:["expression","typeArguments","typeParameters"],TSPrivateKeyword:[],TSProtectedKeyword:[],TSPublicKeyword:[],TSReadonlyKeyword:[],TSStaticKeyword:[],TSTemplateLiteralType:["quasis","types"],BigIntLiteralTypeAnnotation:[],BigIntTypeAnnotation:[],ConditionalTypeAnnotation:["checkType","extendsType","trueType","falseType"],DeclareEnum:["id","body"],InferTypeAnnotation:["typeParameter"],KeyofTypeAnnotation:["argument"],ObjectTypeMappedTypeProperty:["keyTparam","propType","sourceType","variance"],QualifiedTypeofIdentifier:["qualification","id"],TupleTypeLabeledElement:["label","elementType","variance"],TupleTypeSpreadElement:["label","typeAnnotation"],TypePredicate:["parameterName","typeAnnotation","asserts"],NGRoot:["node"],NGPipeExpression:["left","right","arguments"],NGChainedExpression:["expressions"],NGEmptyExpression:[],NGMicrosyntax:["body"],NGMicrosyntaxKey:[],NGMicrosyntaxExpression:["expression","alias"],NGMicrosyntaxKeyedExpression:["key","expression"],NGMicrosyntaxLet:["key","value"],NGMicrosyntaxAs:["key","alias"],JsExpressionRoot:["node"],JsonRoot:["node"],TSJSDocAllType:[],TSJSDocUnknownType:[],TSJSDocNullableType:["typeAnnotation"],TSJSDocNonNullableType:["typeAnnotation"],NeverTypeAnnotation:[],UndefinedTypeAnnotation:[],UnknownTypeAnnotation:[]},Vse=Kse(Wse),Hse=Vse;function XT(t,r){if(!(t!==null&&typeof t=="object"))return t;if(Array.isArray(t)){for(let a=0;a<t.length;a++)t[a]=XT(t[a],r);return t}let n=Hse(t);for(let a=0;a<n.length;a++)t[n[a]]=XT(t[n[a]],r);return r(t)||t}var YT=XT;function Gse(t,r){let{parser:n,text:a}=r;if(t.type==="File"&&t.program.interpreter){let{program:{interpreter:u},comments:_}=t;delete t.program.interpreter,_.unshift(u)}if(n==="babel"){let u=new Set;t=YT(t,_=>{var f;(f=_.leadingComments)!=null&&f.some($se)&&u.add(ao(_))}),t=YT(t,_=>{if(_.type==="ParenthesizedExpression"){let{expression:f}=_;if(f.type==="TypeCastExpression")return f.range=_.range,f;let v=ao(_);if(!u.has(v))return f.extra={...f.extra,parenthesized:!0},f}})}if(t=YT(t,u=>{switch(u.type){case"LogicalExpression":if(RP(u))return QT(u);break;case"VariableDeclaration":{let _=MP(!1,u.declarations,-1);_!=null&&_.init&&s(u,_);break}case"TSParenthesizedType":return u.typeAnnotation;case"TSTypeParameter":if(typeof u.name=="string"){let _=ao(u);u.name={type:"Identifier",name:u.name,range:[_,_+u.name.length]}}break;case"TopicReference":t.extra={...t.extra,__isUsingHackPipeline:!0};break;case"ExportAllDeclaration":{let{exported:_}=u;if(n==="meriyah"&&(_==null?void 0:_.type)==="Identifier"){let f=a.slice(ao(_),tc(_));(f.startsWith('"')||f.startsWith("'"))&&(u.exported={...u.exported,type:"Literal",value:u.exported.name,raw:f})}break}case"TSUnionType":case"TSIntersectionType":if(u.types.length===1)return u.types[0];break}}),LP(t.comments)){let u=MP(!1,t.comments,-1);for(let _=t.comments.length-2;_>=0;_--){let f=t.comments[_];tc(f)===ao(u)&>(f)&>(u)&&jP(f)&&jP(u)&&(t.comments.splice(_+1,1),f.value+="*//*"+u.value,f.range=[ao(f),tc(u)]),u=f}}return t.type==="Program"&&(t.range=[0,a.length]),t;function s(u,_){a[tc(_)]!==";"&&(u.range=[ao(u),tc(_)])}}function RP(t){return t.type==="LogicalExpression"&&t.right.type==="LogicalExpression"&&t.operator===t.right.operator}function QT(t){return RP(t)?QT({type:"LogicalExpression",operator:t.operator,left:QT({type:"LogicalExpression",operator:t.operator,left:t.left,right:t.right.left,range:[ao(t.left),tc(t.right.left)]}),right:t.right.right,range:[ao(t),tc(t)]}):t}var Xse=Gse,ZT={loc:!0,range:!0,comment:!0,tokens:!0,loggerFn:!1,project:[],suppressDeprecatedPropertyWarnings:!0};function Yse(t){let{message:r,location:n}=t;if(!n)return t;let{start:a,end:s}=n;return Tse(r,{loc:{start:{line:a.line,column:a.column+1},end:{line:s.line,column:s.column+1}},cause:t})}var Qse=t=>/\.(?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$/i.test(t);function Zse(t,r){let n=r==null?void 0:r.filepath;if(n&&Qse(n))return[{...ZT,filePath:n}];let a=toe(t);return[{...ZT,jsx:a},{...ZT,jsx:!a}]}function eoe(t,r){let n=Bse(t),a=Zse(t,r),s;try{s=Cse(a.map(u=>()=>(0,xse.parse)(n,u)))}catch({errors:[u]}){throw Yse(u)}return Xse(s,{text:t})}function toe(t){return new RegExp(["(?:^[^\"'`]*</)","|","(?:^[^/]{2}.*/>)"].join(""),"m").test(t)}var roe=Nse(eoe),noe=BP,ioe=Object.freeze({__proto__:null,default:noe,parsers:HT});const aoe={js:"babel",jsx:"babel",mjs:"babel",cjs:"babel",ts:"typescript",tsx:"typescript",css:"css",html:"html",json:"json",json5:"json5",md:"markdown",markdown:"markdown"},soe=[dU,WH,NQ,cre,ioe,zae];onmessage=async({data:t})=>{const{fileExtension:r,fileText:n,fileId:a}=t,s=aoe[r];if(!s){postMessage({fileId:a,error:`Unsupported file extension for Prettier: ${r}`});return}try{const u=await dv(n,{parser:s,plugins:soe});postMessage({fileId:a,fileTextPrettified:u})}catch(u){postMessage({fileId:a,error:u.toString()})}}})();
|
package/dist/index.html
CHANGED
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
href="https://unpkg.com/bootstrap@5.3.0/dist/css/bootstrap.min.css"
|
|
29
29
|
rel="stylesheet"
|
|
30
30
|
/>
|
|
31
|
-
<script type="module" crossorigin src="/assets/index-
|
|
32
|
-
<link rel="stylesheet" href="/assets/index-
|
|
31
|
+
<script type="module" crossorigin src="/assets/index-8628ebab.js"></script>
|
|
32
|
+
<link rel="stylesheet" href="/assets/index-cf19de3b.css">
|
|
33
33
|
</head>
|
|
34
34
|
<body>
|
|
35
35
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vzcode",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "Multiplayer code editor system",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -50,11 +50,21 @@
|
|
|
50
50
|
"@codemirror/lang-html": "^6.4.6",
|
|
51
51
|
"@codemirror/lang-javascript": "^6.2.1",
|
|
52
52
|
"@codemirror/lang-markdown": "^6.2.2",
|
|
53
|
-
"@codemirror/state": "^6.
|
|
53
|
+
"@codemirror/state": "^6.3.1",
|
|
54
54
|
"@codemirror/theme-one-dark": "^6.1.2",
|
|
55
|
+
"@codemirror/view": "^6.21.3",
|
|
56
|
+
"@lezer/highlight": "^1.1.6",
|
|
55
57
|
"@replit/codemirror-interact": "^6.3.0",
|
|
56
58
|
"@teamwork/websocket-json-stream": "^2.0.0",
|
|
57
|
-
"@uiw/codemirror-
|
|
59
|
+
"@uiw/codemirror-theme-abcdef": "^4.21.20",
|
|
60
|
+
"@uiw/codemirror-theme-dracula": "^4.21.20",
|
|
61
|
+
"@uiw/codemirror-theme-eclipse": "^4.21.20",
|
|
62
|
+
"@uiw/codemirror-theme-github": "^4.21.20",
|
|
63
|
+
"@uiw/codemirror-theme-material": "^4.21.20",
|
|
64
|
+
"@uiw/codemirror-theme-nord": "^4.21.20",
|
|
65
|
+
"@uiw/codemirror-theme-okaidia": "^4.21.20",
|
|
66
|
+
"@uiw/codemirror-theme-xcode": "^4.21.20",
|
|
67
|
+
"@uiw/codemirror-themes": "^4.21.20",
|
|
58
68
|
"codemirror": "^6.0.1",
|
|
59
69
|
"codemirror-ot": "^4.1.0",
|
|
60
70
|
"d3-array": "^3.2.4",
|
|
@@ -64,22 +74,22 @@
|
|
|
64
74
|
"json0-ot-diff": "^1.1.2",
|
|
65
75
|
"ngrok": "^4.3.3",
|
|
66
76
|
"open": "^9.1.0",
|
|
77
|
+
"ot-json1": "^1.0.2",
|
|
67
78
|
"react": "^18.2.0",
|
|
68
79
|
"react-bootstrap": "^2.9.0",
|
|
69
80
|
"react-dom": "^18.2.0",
|
|
70
|
-
"sharedb": "^4.1.
|
|
81
|
+
"sharedb": "^4.1.1",
|
|
71
82
|
"sharedb-client-browser": "^4.3.1",
|
|
72
|
-
"ot-json1": "^1.0.2",
|
|
73
83
|
"ws": "^8.14.2"
|
|
74
84
|
},
|
|
75
85
|
"devDependencies": {
|
|
76
|
-
"@types/react": "^18.2.
|
|
77
|
-
"@types/react-dom": "^18.2.
|
|
86
|
+
"@types/react": "^18.2.29",
|
|
87
|
+
"@types/react-dom": "^18.2.14",
|
|
78
88
|
"@vitejs/plugin-react": "^4.1.0",
|
|
79
89
|
"prettier": "^3.0.3",
|
|
80
|
-
"sass": "^1.69.
|
|
90
|
+
"sass": "^1.69.4",
|
|
81
91
|
"typescript": "^5.2.2",
|
|
82
|
-
"vite": "^4.
|
|
92
|
+
"vite": "^4.5.0",
|
|
83
93
|
"vitest": "^0.34.6"
|
|
84
94
|
}
|
|
85
95
|
}
|
package/src/client/App.tsx
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
useEffect,
|
|
4
4
|
useCallback,
|
|
5
5
|
useRef,
|
|
6
|
+
useReducer,
|
|
6
7
|
} from 'react';
|
|
7
8
|
import ShareDBClient from 'sharedb-client-browser/dist/sharedb-client-umd.cjs';
|
|
8
9
|
import { json1Presence } from '../ot';
|
|
@@ -19,16 +20,21 @@ import {
|
|
|
19
20
|
} from '../types';
|
|
20
21
|
import { TabList } from './TabList';
|
|
21
22
|
import { useOpenDirectories } from './useOpenDirectories';
|
|
22
|
-
import {
|
|
23
|
-
|
|
23
|
+
import {
|
|
24
|
+
ThemeLabel,
|
|
25
|
+
defaultTheme,
|
|
26
|
+
useDynamicTheme,
|
|
27
|
+
} from './themes';
|
|
24
28
|
import { useEditorCache } from './useEditorCache';
|
|
25
|
-
import { useDynamicTheme } from './useDynamicTheme';
|
|
26
29
|
import { usePrettier } from './usePrettier';
|
|
27
30
|
// @ts-ignore
|
|
28
31
|
import PrettierWorker from './usePrettier/worker?worker';
|
|
29
32
|
import { SplitPaneResizeProvider } from './SplitPaneResizeContext';
|
|
30
33
|
import { Resizer } from './Resizer';
|
|
34
|
+
import { PresenceNotifications } from './PresenceNotifications';
|
|
35
|
+
import { reducer } from './reducer';
|
|
31
36
|
import './style.scss';
|
|
37
|
+
import { PrettierErrorOverlay } from './PrettierErrorOverlay';
|
|
32
38
|
|
|
33
39
|
// Instantiate the Prettier worker.
|
|
34
40
|
const prettierWorker = new PrettierWorker();
|
|
@@ -70,7 +76,13 @@ function App() {
|
|
|
70
76
|
);
|
|
71
77
|
|
|
72
78
|
// Auto-run Pretter after local changes.
|
|
73
|
-
usePrettier(
|
|
79
|
+
const { prettierError } = usePrettier(
|
|
80
|
+
shareDBDoc,
|
|
81
|
+
submitOperation,
|
|
82
|
+
prettierWorker,
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
console.log('prettierError', prettierError);
|
|
74
86
|
|
|
75
87
|
// Local ShareDB presence, for broadcasting our cursor position
|
|
76
88
|
// so other clients can see it.
|
|
@@ -143,27 +155,92 @@ function App() {
|
|
|
143
155
|
};
|
|
144
156
|
}, []);
|
|
145
157
|
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
// https://react.dev/reference/react/useReducer
|
|
159
|
+
const [state, dispatch] = useReducer(reducer, {
|
|
160
|
+
tabList: [],
|
|
161
|
+
activeFileId: null,
|
|
162
|
+
theme: defaultTheme,
|
|
163
|
+
isSettingsOpen: false,
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
//Reducer states
|
|
167
|
+
const tabList = state.tabList;
|
|
168
|
+
const activeFileId = state.activeFileId;
|
|
169
|
+
const theme = state.theme;
|
|
170
|
+
const isSettingsOpen = state.isSettingsOpen;
|
|
171
|
+
// TODO phase this out as we complete the refactoring
|
|
172
|
+
// It's here now for backwards compatibility
|
|
173
|
+
|
|
174
|
+
const setTabList = useCallback(
|
|
175
|
+
(tabList) => {
|
|
176
|
+
dispatch({
|
|
177
|
+
type: 'set_tab_list',
|
|
178
|
+
tabList,
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
[dispatch],
|
|
161
182
|
);
|
|
162
183
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
184
|
+
const setActiveFileId = useCallback(
|
|
185
|
+
(activeFileId) => {
|
|
186
|
+
dispatch({
|
|
187
|
+
type: 'set_active_fileId',
|
|
188
|
+
activeFileId,
|
|
189
|
+
});
|
|
190
|
+
},
|
|
191
|
+
[dispatch],
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
const openTab = useCallback(
|
|
195
|
+
(fileId: FileId) => {
|
|
196
|
+
dispatch({
|
|
197
|
+
type: 'open_tab',
|
|
198
|
+
fileId,
|
|
199
|
+
});
|
|
200
|
+
},
|
|
201
|
+
[dispatch],
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
const closeTab = useCallback(
|
|
205
|
+
(fileIdToRemove: FileId) => {
|
|
206
|
+
dispatch({
|
|
207
|
+
type: 'close_tab',
|
|
208
|
+
fileIdToRemove,
|
|
209
|
+
});
|
|
210
|
+
},
|
|
211
|
+
[dispatch],
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
const multiCloseTab = useCallback(
|
|
215
|
+
(idsToDelete: Array<FileId>) => {
|
|
216
|
+
dispatch({
|
|
217
|
+
type: 'multi_close_tab',
|
|
218
|
+
idsToDelete,
|
|
219
|
+
});
|
|
220
|
+
},
|
|
221
|
+
[dispatch],
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
const setTheme = useCallback(
|
|
225
|
+
(themeLabel: ThemeLabel) => {
|
|
226
|
+
dispatch({
|
|
227
|
+
type: 'set_Theme',
|
|
228
|
+
themeLabel: themeLabel,
|
|
229
|
+
});
|
|
230
|
+
},
|
|
231
|
+
[dispatch],
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
// True to show the settings modal.
|
|
235
|
+
const setIsSettingsOpen = useCallback(
|
|
236
|
+
(value: boolean) => {
|
|
237
|
+
dispatch({
|
|
238
|
+
type: 'set_Is_Settings_Open',
|
|
239
|
+
value: value,
|
|
240
|
+
});
|
|
241
|
+
},
|
|
242
|
+
[dispatch],
|
|
243
|
+
);
|
|
167
244
|
|
|
168
245
|
// Cache of CodeMirror editors by file id.
|
|
169
246
|
const editorCache = useEditorCache();
|
|
@@ -171,10 +248,6 @@ function App() {
|
|
|
171
248
|
// Handle dynamic theme changes.
|
|
172
249
|
useDynamicTheme(editorCache, theme);
|
|
173
250
|
|
|
174
|
-
// True to show the settings modal.
|
|
175
|
-
const [isSettingsOpen, setIsSettingsOpen] =
|
|
176
|
-
useState(false);
|
|
177
|
-
|
|
178
251
|
// The set of open directories.
|
|
179
252
|
const { isDirectoryOpen, toggleDirectory } =
|
|
180
253
|
useOpenDirectories();
|
|
@@ -217,30 +290,32 @@ function App() {
|
|
|
217
290
|
|
|
218
291
|
const deleteFile = useCallback(
|
|
219
292
|
(fileId: FileId) => {
|
|
220
|
-
closeTab(fileId);
|
|
221
293
|
submitOperation((document) => {
|
|
222
294
|
const updatedFiles = { ...document.files };
|
|
223
295
|
delete updatedFiles[fileId];
|
|
224
296
|
return { ...document, files: updatedFiles };
|
|
225
297
|
});
|
|
298
|
+
closeTab(fileId);
|
|
226
299
|
},
|
|
227
300
|
[submitOperation, closeTab],
|
|
228
301
|
);
|
|
229
302
|
|
|
230
303
|
const deleteDirectory = useCallback(
|
|
231
304
|
(path: FileId) => {
|
|
305
|
+
let tabsToDelete: Array<FileId> = [];
|
|
232
306
|
submitOperation((document) => {
|
|
233
307
|
const updatedFiles = { ...document.files };
|
|
234
308
|
for (const key in updatedFiles) {
|
|
235
309
|
if (updatedFiles[key].name.includes(path)) {
|
|
236
|
-
|
|
310
|
+
tabsToDelete.push(key);
|
|
237
311
|
delete updatedFiles[key];
|
|
238
312
|
}
|
|
239
313
|
}
|
|
240
314
|
return { ...document, files: updatedFiles };
|
|
241
315
|
});
|
|
316
|
+
multiCloseTab(tabsToDelete);
|
|
242
317
|
},
|
|
243
|
-
[submitOperation,
|
|
318
|
+
[submitOperation, multiCloseTab],
|
|
244
319
|
);
|
|
245
320
|
|
|
246
321
|
const handleDeleteClick = useCallback(
|
|
@@ -332,6 +407,12 @@ function App() {
|
|
|
332
407
|
editorCache={editorCache}
|
|
333
408
|
/>
|
|
334
409
|
) : null}
|
|
410
|
+
<PrettierErrorOverlay
|
|
411
|
+
prettierError={prettierError}
|
|
412
|
+
/>
|
|
413
|
+
<PresenceNotifications
|
|
414
|
+
docPresence={docPresence}
|
|
415
|
+
/>
|
|
335
416
|
</div>
|
|
336
417
|
<Resizer />
|
|
337
418
|
</div>
|
|
@@ -16,7 +16,12 @@ import {
|
|
|
16
16
|
} from '../../types';
|
|
17
17
|
import { json1PresenceBroadcast } from './json1PresenceBroadcast';
|
|
18
18
|
import { json1PresenceDisplay } from './json1PresenceDisplay';
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
colorsInTextPlugin,
|
|
21
|
+
highlightWidgets,
|
|
22
|
+
rotationIndicator,
|
|
23
|
+
widgets,
|
|
24
|
+
} from './widgets';
|
|
20
25
|
import {
|
|
21
26
|
EditorCache,
|
|
22
27
|
EditorCacheValue,
|
|
@@ -186,6 +191,10 @@ export const getOrCreateEditor = ({
|
|
|
186
191
|
// See https://github.com/replit/codemirror-interact/issues/14
|
|
187
192
|
extensions.push(widgets({ onInteract }));
|
|
188
193
|
|
|
194
|
+
extensions.push(highlightWidgets);
|
|
195
|
+
|
|
196
|
+
extensions.push(rotationIndicator);
|
|
197
|
+
|
|
189
198
|
const editor = new EditorView({
|
|
190
199
|
state: EditorState.create({
|
|
191
200
|
doc: text,
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { useRef, useLayoutEffect } from 'react';
|
|
2
|
-
import {
|
|
1
|
+
import { useRef, useLayoutEffect, useContext } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
FileId,
|
|
4
|
+
ShareDBDoc,
|
|
5
|
+
VZCodeContent,
|
|
6
|
+
} from '../../types';
|
|
3
7
|
import { ThemeLabel, defaultTheme } from '../themes';
|
|
4
8
|
import {
|
|
5
9
|
EditorCache,
|
|
@@ -7,6 +11,7 @@ import {
|
|
|
7
11
|
} from '../useEditorCache';
|
|
8
12
|
import { getOrCreateEditor } from './getOrCreateEditor';
|
|
9
13
|
import './style.scss';
|
|
14
|
+
// import { usePrettier } from '../usePrettier';
|
|
10
15
|
|
|
11
16
|
export const CodeEditor = ({
|
|
12
17
|
activeFileId,
|
|
@@ -19,7 +24,7 @@ export const CodeEditor = ({
|
|
|
19
24
|
editorCache,
|
|
20
25
|
}: {
|
|
21
26
|
activeFileId: FileId;
|
|
22
|
-
shareDBDoc:
|
|
27
|
+
shareDBDoc: ShareDBDoc<VZCodeContent> | null;
|
|
23
28
|
localPresence?: any;
|
|
24
29
|
docPresence?: any;
|
|
25
30
|
theme?: ThemeLabel;
|
|
@@ -31,7 +36,6 @@ export const CodeEditor = ({
|
|
|
31
36
|
editorCache: EditorCache;
|
|
32
37
|
}) => {
|
|
33
38
|
const ref = useRef<HTMLDivElement>(null);
|
|
34
|
-
|
|
35
39
|
// Every time the active file switches from one file to another,
|
|
36
40
|
// the editor corresponding to the old file is removed from the DOM,
|
|
37
41
|
// and the editor corresponding to the new file is added to the DOM.
|
|
@@ -65,5 +69,5 @@ export const CodeEditor = ({
|
|
|
65
69
|
};
|
|
66
70
|
}, [shareDBDoc, activeFileId]);
|
|
67
71
|
|
|
68
|
-
return <div className="vz-code-editor" ref={ref}
|
|
72
|
+
return <div className="vz-code-editor" ref={ref}></div>;
|
|
69
73
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EditorView } from 'codemirror';
|
|
2
|
+
import { username } from '../Settings.tsx';
|
|
2
3
|
|
|
3
4
|
// Deals with broadcasting changes in cursor location and selection.
|
|
4
5
|
export const json1PresenceBroadcast = ({
|
|
@@ -22,6 +23,7 @@ export const json1PresenceBroadcast = ({
|
|
|
22
23
|
const presence = {
|
|
23
24
|
start: [...path, from],
|
|
24
25
|
end: [...path, to],
|
|
26
|
+
username: username,
|
|
25
27
|
};
|
|
26
28
|
|
|
27
29
|
// Broadcast presence to remote clients!
|
|
@@ -32,13 +32,16 @@ export const json1PresenceDisplay = ({
|
|
|
32
32
|
// Receive remote presence changes.
|
|
33
33
|
docPresence.on('receive', (id, presence) => {
|
|
34
34
|
// If presence === null, the user has disconnected / exited
|
|
35
|
+
// notification(presence);
|
|
36
|
+
// console.log('docPresence in presenceDisplay:',docPresence);
|
|
37
|
+
// console.log('presence in presenceDisplay:', presence);
|
|
38
|
+
|
|
35
39
|
// We also check if the presence is for the current file or not.
|
|
36
40
|
if (presence && pathMatches(path, presence)) {
|
|
37
41
|
presenceState[id] = presence;
|
|
38
42
|
} else {
|
|
39
43
|
delete presenceState[id];
|
|
40
44
|
}
|
|
41
|
-
|
|
42
45
|
// Update decorations to reflect new presence state.
|
|
43
46
|
// TODO consider mutating this rather than recomputing it on each change.
|
|
44
47
|
this.decorations = Decoration.set(
|
|
@@ -99,6 +102,47 @@ export const json1PresenceDisplay = ({
|
|
|
99
102
|
presenceTheme,
|
|
100
103
|
];
|
|
101
104
|
|
|
105
|
+
// const notification = (presence) => {
|
|
106
|
+
// const notif = document.createElement('div');
|
|
107
|
+
// notif.className = 'notification-presence';
|
|
108
|
+
// if (presence === null){
|
|
109
|
+
// notif.textContent = 'User asdfgasdfgasdfg left the collaboration session.';
|
|
110
|
+
// notif.style.display = 'block';
|
|
111
|
+
// }
|
|
112
|
+
// // The following causes the popup to show every time the remote cursor moves
|
|
113
|
+
// // to a different location on the file and not when the user first joins
|
|
114
|
+
// // else {
|
|
115
|
+
// // notif.textContent = presence + 'joined the collaboration session.';
|
|
116
|
+
// // notif.style.display = 'block';
|
|
117
|
+
// // }
|
|
118
|
+
// document.body.appendChild(notif);
|
|
119
|
+
|
|
120
|
+
// const notifStyle = document.createElement('style');
|
|
121
|
+
// notifStyle.innerText = `
|
|
122
|
+
// .notification-presence {
|
|
123
|
+
// position: fixed;
|
|
124
|
+
// display: none;
|
|
125
|
+
// bottom: 20px;
|
|
126
|
+
// right: 20px;
|
|
127
|
+
// max-width: 300px;
|
|
128
|
+
// overflow-x: hidden;
|
|
129
|
+
// white-space: nowrap;
|
|
130
|
+
// background-color: rgb(54, 65, 89);
|
|
131
|
+
// color: rgb(154, 160, 172);
|
|
132
|
+
// padding: 15px;
|
|
133
|
+
// }
|
|
134
|
+
// .notification-presence:hover {
|
|
135
|
+
// overflow-x: auto;
|
|
136
|
+
// }`;
|
|
137
|
+
// document.head.appendChild(notifStyle);
|
|
138
|
+
|
|
139
|
+
// setTimeout(() => {
|
|
140
|
+
// notif.style.display = 'none';
|
|
141
|
+
// }, 10000);
|
|
142
|
+
|
|
143
|
+
// return notif;
|
|
144
|
+
// };
|
|
145
|
+
|
|
102
146
|
const presenceAnnotation = Annotation.define();
|
|
103
147
|
|
|
104
148
|
// Checks that the path of this file
|