UNPKG

@graphql-hive/laboratory

Version:

[Hive](https://the-guild.dev/graphql/hive) is a fully open-source schema registry, analytics, metrics and gateway for [GraphQL federation](https://the-guild.dev/graphql/hive/federation) and other GraphQL APIs.

13 lines (12 loc) • 9.8 kB
const e=require(`./editor.api-hvIwRq58.cjs`),t=require(`./monaco-editor-BScBcED1.cjs`);require(`./monaco.contribution-CDB7N45b.cjs`);function n(e){return i(e,e=>!t.isSpecifiedDirective(e),r)}function r(e){return!t.isSpecifiedScalarType(e)&&!t.isIntrospectionType(e)}function i(e,t,n){let r=e.getDirectives().filter(t),i=Object.values(e.getTypeMap()).filter(n);return[a(e),...r.map(e=>y(e)),...i.map(e=>s(e))].filter(Boolean).join(` `)}function a(e){if(e.description==null&&o(e))return;let t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);let r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);let i=e.getSubscriptionType();return i&&t.push(` subscription: ${i.name}`),S(e)+`schema {\n${t.join(` `)}\n}`}function o(e){let t=e.getQueryType();if(t&&t.name!==`Query`)return!1;let n=e.getMutationType();if(n&&n.name!==`Mutation`)return!1;let r=e.getSubscriptionType();return!(r&&r.name!==`Subscription`)}function s(e){if(t.isScalarType(e))return c(e);if(t.isObjectType(e))return u(e);if(t.isInterfaceType(e))return d(e);if(t.isUnionType(e))return f(e);if(t.isEnumType(e))return p(e);if(t.isInputObjectType(e))return m(e);t.invariant(!1,`Unexpected type: `+t.inspect(e))}function c(e){return S(e)+`scalar ${e.name}`+x(e)}function l(e){let t=e.getInterfaces();return t.length?` implements `+t.map(e=>e.name).join(` & `):``}function u(e){return S(e)+`type ${e.name}`+l(e)+h(e)}function d(e){return S(e)+`interface ${e.name}`+l(e)+h(e)}function f(e){let t=e.getTypes(),n=t.length?` = `+t.join(` | `):``;return S(e)+`union `+e.name+n}function p(e){let t=e.getValues().map((e,t)=>S(e,` `,!t)+` `+e.name+b(e.deprecationReason));return S(e)+`enum ${e.name}`+g(t)}function m(e){let t=Object.values(e.getFields()).map((e,t)=>S(e,` `,!t)+` `+v(e));return S(e)+`input ${e.name}`+(e.isOneOf?` @oneOf`:``)+g(t)}function h(e){let t=Object.values(e.getFields()).map((e,t)=>S(e,` `,!t)+` `+e.name+_(e.args,` `)+`: `+String(e.type)+b(e.deprecationReason));return g(t)}function g(e){return e.length===0?``:` { `+e.join(` `)+` }`}function _(e,t=``){return e.length===0?``:e.every(e=>!e.description)?`(`+e.map(v).join(`, `)+`)`:`( `+e.map((e,n)=>S(e,` `+t,!n)+` `+t+v(e)).join(` `)+` `+t+`)`}function v(e){let n=t.astFromValue(e.defaultValue,e.type),r=e.name+`: `+String(e.type);return n&&(r+=` = ${t.print(n)}`),r+b(e.deprecationReason)}function y(e){return S(e)+`directive @`+e.name+_(e.args)+b(e.deprecationReason)+(e.isRepeatable?` repeatable`:``)+` on `+e.locations.join(` | `)}function b(e){return e==null?``:e===`No longer supported`?` @deprecated`:` @deprecated(reason: ${t.print({kind:t.Kind.STRING,value:e})})`}function x(e){return e.specifiedByURL==null?``:` @specifiedBy(url: ${t.print({kind:t.Kind.STRING,value:e.specifiedByURL})})`}function S(e,n=``,r=!0){let{description:i}=e;if(i==null)return``;let a=t.print({kind:t.Kind.STRING,value:i,block:t.isPrintableAsBlockString(i)});return(n&&!r?` `+n:n)+a.replace(/\n/g,` `+n)+` `}const C=e=>`getModeId`in e?e.getModeId():e.getLanguageId(),w=e=>{let{schema:r,documentAST:i,introspectionJSON:a,introspectionJSONString:o,documentString:s,...c}=e;if(r)return{...c,documentString:n(r)};if(o)return{...c,introspectionJSONString:o};if(s)return{...c,documentString:s};if(a)return{...c,introspectionJSONString:JSON.stringify(a)};if(i){let e=t.buildASTSchema(i,c.buildSchemaOptions);return{...c,documentString:n(e)}}throw Error(`No schema supplied`)};var T=120*1e3,E=class{_defaults;_idleCheckInterval;_lastUsedTime=0;_configChangeListener;_worker=null;_client=null;constructor(e){this._defaults=e,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._configChangeListener=this._defaults.onDidChange(()=>{this._stopWorker()})}_stopWorker(){this._worker&&=(this._worker.dispose(),null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){this._worker&&Date.now()-this._lastUsedTime>T&&this._stopWorker()}async _getClient(){if(this._lastUsedTime=Date.now(),!this._client&&!this._worker)try{let{languageId:t,formattingOptions:n,schemas:r,externalFragmentDefinitions:i,completionSettings:a}=this._defaults;this._worker=e.editor.createWebWorker({moduleId:`monaco-graphql/esm/GraphQLWorker.js`,label:t,createData:{languageId:t,formattingOptions:n,languageConfig:{schemas:r?.map(w),externalFragmentDefinitions:i,fillLeafsOnComplete:a.__experimental__fillLeafsOnComplete}}}),this._client=this._worker.getProxy()}catch(e){console.error(`error loading worker`,e)}return this._client}async getLanguageServiceWorker(...e){let t=await this._getClient();return await this._worker.withSyncedResources(e),t}},D=class{defaults;_worker;_disposables=[];_listener=Object.create(null);constructor(t,n){this.defaults=t,this._worker=n,this._worker=n;let r,i=e=>{let n=C(e);if(n!==this.defaults.languageId)return;let i=e.uri.toString(),a=t.diagnosticSettings.validateVariablesJSON?.[i];r=setTimeout(()=>{this._doValidate(e.uri,n,a)},400),this._listener[i]=e.onDidChangeContent(()=>{clearTimeout(r),r=setTimeout(()=>{this._doValidate(e.uri,n,a)},400)})},a=t=>{e.editor.setModelMarkers(t,this.defaults.languageId,[]);let n=t.uri.toString(),r=this._listener[n];r&&(r.dispose(),delete this._listener[n])};this._disposables.push(e.editor.onDidCreateModel(i),{dispose(){clearTimeout(r)}},e.editor.onWillDisposeModel(e=>{a(e)}),e.editor.onDidChangeModelLanguage(e=>{a(e.model),i(e.model)}),{dispose:()=>{for(let e of Object.values(this._listener))e.dispose()}},t.onDidChange(()=>{for(let t of e.editor.getModels())C(t)===this.defaults.languageId&&(a(t),i(t))}));for(let t of e.editor.getModels())C(t)===this.defaults.languageId&&i(t)}dispose(){for(let e of this._disposables)e.dispose();this._disposables=[]}async _doValidate(t,n,r){let i=await this._worker(t);if(!i)return;let a=await i.doValidation(t.toString());if(e.editor.setModelMarkers(e.editor.getModel(t),n,a),r){if(await Promise.resolve().then(()=>require(`./monaco.contribution-6paRlPLP.cjs`)),!r.length)throw Error(`No variables URI strings provided to validate`);let n=await i.doGetVariablesJSONSchema(t.toString());if(!n)return;let a=e.Uri.file(r[0].replace(`.json`,`-schema.json`)).toString(),o={uri:a,schema:n,fileMatch:r},s=e.languages.json.jsonDefaults.diagnosticsOptions.schemas?.filter(e=>e.uri!==a)||[];e.languages.json.jsonDefaults.setDiagnosticsOptions({schemaValidation:`error`,validate:!0,...this.defaults.diagnosticSettings.jsonDiagnosticSettings,schemas:[...s,o],enableSchemaRequest:!1})}}},O=e.languages.CompletionItemKind,k={[t.CompletionItemKind.Text]:O.Text,[t.CompletionItemKind.Method]:O.Method,[t.CompletionItemKind.Function]:O.Function,[t.CompletionItemKind.Constructor]:O.Constructor,[t.CompletionItemKind.Field]:O.Field,[t.CompletionItemKind.Variable]:O.Variable,[t.CompletionItemKind.Class]:O.Class,[t.CompletionItemKind.Interface]:O.Interface,[t.CompletionItemKind.Module]:O.Module,[t.CompletionItemKind.Property]:O.Property,[t.CompletionItemKind.Unit]:O.Unit,[t.CompletionItemKind.Value]:O.Value,[t.CompletionItemKind.Enum]:O.Enum,[t.CompletionItemKind.Keyword]:O.Keyword,[t.CompletionItemKind.Snippet]:O.Snippet,[t.CompletionItemKind.Color]:O.Color,[t.CompletionItemKind.File]:O.File,[t.CompletionItemKind.Reference]:O.Reference,[t.CompletionItemKind.Folder]:O.Folder,[t.CompletionItemKind.EnumMember]:O.EnumMember,[t.CompletionItemKind.Constant]:O.Constant,[t.CompletionItemKind.Struct]:O.Struct,[t.CompletionItemKind.Event]:O.Event,[t.CompletionItemKind.Operator]:O.Operator,[t.CompletionItemKind.TypeParameter]:O.TypeParameter};function A(e){return e in k?k[e]:O.Text}function j(t){return{range:t.range,kind:A(t.kind),label:t.label,insertText:t.insertText??t.label,insertTextRules:t.insertText?e.languages.CompletionItemInsertTextRule.InsertAsSnippet:void 0,sortText:t.sortText,filterText:t.filterText,documentation:t.documentation,detail:t.detail,command:t.command}}var M=class{_worker;constructor(e){this._worker=e,this._worker=e}get triggerCharacters(){return[`:`,`$`,` `,`(`,`@`]}async provideCompletionItems(e,t,n,r){try{return{incomplete:!0,suggestions:(await(await this._worker(e.uri)).doComplete(e.uri.toString(),t)).map(j)}}catch(e){return console.error(`Error fetching completion items`,e),{suggestions:[]}}}},N=class{_worker;constructor(e){this._worker=e,this._worker=e}async provideDocumentFormattingEdits(e,t,n){let r=await(await this._worker(e.uri)).doFormat(e.uri.toString());return r?[{range:e.getFullModelRange(),text:r}]:[]}},P=class{_worker;constructor(e){this._worker=e}async provideHover(e,t,n){let r=e.uri,i=await(await this._worker(e.uri)).doHover(r.toString(),t);return i?{range:i.range,contents:[{value:i.content}]}:{contents:[]}}dispose(){}};function F(t){let n=[],r=[],i=new E(t);n.push(i);let a=(...e)=>{try{return i.getLanguageServiceWorker(...e)}catch{throw Error(`Error fetching graphql language service worker`)}};function o(){let{modeConfiguration:n,languageId:i}=t;n.documentFormattingEdits&&r.push(e.languages.registerDocumentFormattingEditProvider(i,new N(a)))}function s(n){let{modeConfiguration:i,languageId:s}=t;L(r),i.completionItems&&r.push(e.languages.registerCompletionItemProvider(s,new M(a))),i.diagnostics&&r.push(new D(n,a)),i.hovers&&r.push(e.languages.registerHoverProvider(s,new P(a))),o()}let{modeConfiguration:c,formattingOptions:l,diagnosticSettings:u,externalFragmentDefinitions:d,schemas:f}=t;return s(t),t.onDidChange(e=>{e.modeConfiguration!==c&&(c=e.modeConfiguration,s(e)),e.formattingOptions!==l&&(l=e.formattingOptions,o()),e.externalFragmentDefinitions!==d&&(d=e.externalFragmentDefinitions,s(e)),e.diagnosticSettings!==u&&(u=e.diagnosticSettings,s(e)),e.schemas!==f&&(f=e.schemas,s(e))}),n.push(I(r)),I(n)}function I(e){return{dispose:()=>L(e)}}function L(e){for(;e.length;)e.pop().dispose()}exports.setupMode=F;