@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 2.41 kB
JavaScript
import*as i18n from"../../core/i18n/i18n.js";import*as Workspace from"../workspace/workspace.js";const UIStrings={unknownErrorLoadingFile:"Unknown error loading file"},str_=i18n.i18n.registerUIStrings("models/bindings/ContentProviderBasedProject.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class ContentProviderBasedProject extends Workspace.Workspace.ProjectStore{#e;#t;constructor(e,t,r,n,o){super(e,t,r,n),this.#e=o,this.#t=new WeakMap,e.addProject(this)}async requestFileContent(e){const{contentProvider:t}=this.#t.get(e);try{const e=await t.requestContent();if("error"in e)return{error:e.error,isEncoded:e.isEncoded,content:null};const r="wasmDisassemblyInfo"in e?e.wasmDisassemblyInfo:void 0;return r&&!1===e.isEncoded?{content:"",wasmDisassemblyInfo:r,isEncoded:!1}:{content:e.content,isEncoded:e.isEncoded}}catch(e){return{content:null,isEncoded:!1,error:e?String(e):i18nString(UIStrings.unknownErrorLoadingFile)}}}isServiceProject(){return this.#e}async requestMetadata(e){const{metadata:t}=this.#t.get(e);return t}canSetFileContent(){return!1}async setFileContent(e,t,r){}fullDisplayName(e){let t=e.parentURL().replace(/^(?:https?|file)\:\/\//,"");try{t=decodeURI(t)}catch(e){}return t+"/"+e.displayName(!0)}mimeType(e){const{mimeType:t}=this.#t.get(e);return t}canRename(){return!1}rename(e,t,r){const n=e.url();this.performRename(n,t,((t,n)=>{t&&n&&this.renameUISourceCode(e,n),r(t,n)}))}excludeFolder(e){}canExcludeFolder(e){return!1}async createFile(e,t,r,n){return null}canCreateFile(){return!1}deleteFile(e){}remove(){}performRename(e,t,r){r(!1)}searchInFileContent(e,t,r,n){const{contentProvider:o}=this.#t.get(e);return o.searchInContent(t,r,n)}async findFilesMatchingSearchRequest(e,t,r){const n=[];return r.setTotalWork(t.length),await Promise.all(t.map(async function(t){let o=!0;for(const r of e.queries().slice()){if(!(await this.searchInFileContent(t,r,!e.ignoreCase(),e.isRegex())).length){o=!1;break}}o&&n.push(t);r.incrementWorked(1)}.bind(this))),r.done(),n}indexContent(e){queueMicrotask(e.done.bind(e))}addUISourceCodeWithProvider(e,t,r,n){this.#t.set(e,{mimeType:n,metadata:r,contentProvider:t}),this.addUISourceCode(e)}addContentProvider(e,t,r){const n=this.createUISourceCode(e,t.contentType());return this.addUISourceCodeWithProvider(n,t,null,r),n}reset(){this.removeProject(),this.workspace().addProject(this)}dispose(){this.removeProject()}}