{"version":3,"mappings":"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","names":["e","o","c","u","s","t","r","l","p","m","x","i","n","f"],"sources":["../../node_modules/lit-html/directive.js","../../node_modules/lit-html/directive-helpers.js","../../node_modules/lit-html/directives/repeat.js","../../src/script/services/chord-service.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:l}=o,t=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,i={HTML:1,SVG:2},n=(o,l)=>void 0===l?void 0!==(null==o?void 0:o._$litType$):(null==o?void 0:o._$litType$)===l,d=o=>void 0!==(null==o?void 0:o._$litDirective$),v=o=>null==o?void 0:o._$litDirective$,e=o=>void 0===o.strings,c=()=>document.createComment(\"\"),r=(o,t,i)=>{var n;const d=o._$AA.parentNode,v=void 0===t?o._$AB:t._$AA;if(void 0===i){const t=d.insertBefore(c(),v),n=d.insertBefore(c(),v);i=new l(t,n,o,o.options)}else{const l=i._$AB.nextSibling,t=i._$AM,e=t!==o;if(e){let l;null===(n=i._$AQ)||void 0===n||n.call(i,o),i._$AM=o,void 0!==i._$AP&&(l=o._$AU)!==t._$AU&&i._$AP(l)}if(l!==v||e){let o=i._$AA;for(;o!==l;){const l=o.nextSibling;d.insertBefore(o,v),o=l}}}return i},u=(o,l,t=o)=>(o._$AI(l,t),o),f={},s=(o,l=f)=>o._$AH=l,m=o=>o._$AH,p=o=>{var l;null===(l=o._$AP)||void 0===l||l.call(o,!1,!0);let t=o._$AA;const i=o._$AB.nextSibling;for(;t!==i;){const o=t.nextSibling;t.remove(),t=o}},a=o=>{o._$AR()};export{i as TemplateResultType,a as clearPart,m as getCommittedValue,v as getDirectiveClass,r as insertPart,d as isDirectiveResult,t as isPrimitive,e as isSingleExpression,n as isTemplateResult,p as removePart,u as setChildPartValue,s as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}ht(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.ht(e,s,t).values}update(s,[t,r,c]){var d;const a=l(s),{values:p,keys:v}=this.ht(t,r,c);if(!Array.isArray(a))return this.ut=v,p;const h=null!==(d=this.ut)&&void 0!==d?d:this.ut=[],m=[];let y,x,j=0,k=a.length-1,w=0,A=p.length-1;for(;j<=k&&w<=A;)if(null===a[j])j++;else if(null===a[k])k--;else if(h[j]===v[w])m[w]=o(a[j],p[w]),j++,w++;else if(h[k]===v[A])m[A]=o(a[k],p[A]),k--,A--;else if(h[j]===v[A])m[A]=o(a[j],p[A]),i(s,m[A+1],a[j]),j++,A--;else if(h[k]===v[w])m[w]=o(a[k],p[w]),i(s,a[j],a[k]),k--,w++;else if(void 0===y&&(y=u(v,w,A),x=u(h,j,k)),y.has(h[j]))if(y.has(h[k])){const e=x.get(v[w]),t=void 0!==e?a[e]:null;if(null===t){const e=i(s,a[j]);o(e,p[w]),m[w]=e}else m[w]=o(t,p[w]),i(s,a[j],t),a[e]=null;w++}else n(a[k]),k--;else n(a[j]),j++;for(;w<=A;){const e=i(s,m[A+1]);o(e,p[w]),m[w++]=e}for(;j<=k;){const e=a[j++];null!==e&&n(e)}return this.ut=v,f(s,m),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","import { ChordSheet } from \"../models/interfaces\";\r\nimport { PagedResult } from \"../models/paged-result\";\r\nimport { ApiServiceBase } from \"./api-service-base\";\r\nimport type { ChordCache } from \"./chord-cache\"; // Import types only for now, as we only use the real module if we're offline.\r\nimport { ChordFetchBackend } from \"./chord-fetch-backend\";\r\nimport { onlineDetector } from \"./online-detector\";\r\n\r\nexport class ChordService extends ApiServiceBase {\r\n\r\n private backend: ChordFetchBackend | null = null;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n getById(chordId: string): Promise {\r\n return this.getBackend().then(b => b.getById(chordId));\r\n }\r\n\r\n getByOrderedIndex(index: number): Promise {\r\n return this.getBackend().then(b => b.getByOrderedIndex(index));\r\n }\r\n\r\n search(query: string): Promise {\r\n return this.getBackend().then(b => b.search(query));\r\n }\r\n\r\n getBySongName(skip: number, take: number): Promise> {\r\n return this.getBackend().then(b => b.getBySongName(skip, take));\r\n }\r\n\r\n getByArtistName(artist: string | null, skip: number, take: number): Promise> {\r\n return this.getBackend().then(b => b.getByArtistName(artist, skip, take));\r\n }\r\n\r\n getByRandom(take: number): Promise {\r\n return this.getBackend().then(b => b.getByRandom(take));\r\n }\r\n\r\n getAllArtists(): Promise {\r\n return this.getBackend().then(b => b.getAllArtists());\r\n }\r\n\r\n getNew(skip: number, take: number): Promise> {\r\n return this.getBackend().then(b => b.getNew(skip, take));\r\n }\r\n\r\n downloadUrlFor(chord: ChordSheet): string {\r\n if (chord.downloadUrl) {\r\n return chord.downloadUrl;\r\n }\r\n\r\n return `${this.apiUrl}/chords/download?id=${chord.id}`;\r\n }\r\n\r\n submitChordEdit(chord: ChordSheet, attachments: File[]): Promise {\r\n return this.getBackend().then(b => b.submitChordEdit(chord, attachments));\r\n }\r\n\r\n getPlainTextChords(): Promise {\r\n return this.getBackend().then(b => b.getPlainTextChords());\r\n }\r\n\r\n private async getBackend(): Promise {\r\n if (this.backend) {\r\n return this.backend;\r\n }\r\n\r\n const isOnline = onlineDetector.onlineStatus;\r\n this.backend = isOnline ?\r\n new ApiBackend() :\r\n new CacheBackend();\r\n return this.backend;\r\n }\r\n}\r\n\r\n/**\r\n * An implementation of ChordFetchBackend that talks to the API. Used when online.\r\n */\r\n class ApiBackend extends ApiServiceBase implements ChordFetchBackend {\r\n\r\n async getById(chordId: string): Promise {\r\n return super.getJson(\"/chords/get\", { id: chordId });\r\n }\r\n\r\n getByOrderedIndex(index: number): Promise {\r\n return super.getString(\"/chords/getByOrderedIndex\", { index: index });\r\n }\r\n\r\n search(query: string): Promise {\r\n return super.getJson(\"/chords/search\", { search: query });\r\n }\r\n\r\n getBySongName(skip: number, take: number): Promise> {\r\n const args = {\r\n skip,\r\n take\r\n };\r\n return super.getJson(\"/chords/getBySongName\", args);\r\n }\r\n\r\n getByArtistName(artist: string | null, skip: number, take: number): Promise> {\r\n const args: any = {\r\n skip,\r\n take\r\n };\r\n const url = artist ? \"/chords/getArtistSongs\" : \"/chords/getByArtistName\";\r\n if (artist) {\r\n args.artist = artist;\r\n }\r\n return super.getJson(url, args);\r\n }\r\n\r\n getByRandom(take: number): Promise {\r\n const args = {\r\n take\r\n };\r\n return super.getJson(\"/chords/getByRandom\", args);\r\n }\r\n\r\n getAllArtists(): Promise {\r\n return super.getJson(\"/chords/getAllArtists\");\r\n }\r\n\r\n async getNew(skip: number, take: number): Promise> {\r\n const args = {\r\n skip,\r\n take\r\n };\r\n return super.getJson(\"/chords/getNew\", args);\r\n }\r\n\r\n downloadUrlFor(chord: ChordSheet): string {\r\n if (!chord.chords && chord.downloadUrl) {\r\n return chord.downloadUrl;\r\n }\r\n\r\n return `${this.apiUrl}/chords/download?id=${chord.id}`;\r\n }\r\n\r\n submitChordEdit(chord: ChordSheet, attachments: File[]): Promise {\r\n // Create a new form to hold all the chord props and attachments.\r\n const formData = new FormData();\r\n const chordProps = Object.entries(chord);\r\n for (let [prop,val] of chordProps) {\r\n if (val !== null && val !== undefined) {\r\n // Is it an array? Append all array values to the form.\r\n const arrayVal = Array.isArray(val) ? val as Array : null;\r\n if (arrayVal) {\r\n arrayVal.forEach(v => formData.append(prop, `${v}`))\r\n } else {\r\n formData.append(prop, `${val}`);\r\n }\r\n }\r\n }\r\n\r\n if (attachments.length > 0) {\r\n attachments.forEach(a => formData.append(\"attachments\", a, a.name));\r\n }\r\n\r\n return super.postFormData(\"/chords/submitEdit\", formData);\r\n }\r\n\r\n async getPlainTextChords(): Promise {\r\n return super.getJson(\"/chords/getPlainTextChords\");\r\n }\r\n}\r\n\r\n/**\r\n * Implementation of ChordFetchService that loads chords from the local Chord Cache. Intended for use when offline.\r\n */\r\nclass CacheBackend implements ChordFetchBackend {\r\n private chordCache: ChordCache | null = null;\r\n\r\n async getById(chordId: string): Promise {\r\n const cache = await this.getChordCache();\r\n const chord = await cache.get(chordId);\r\n if (!chord) {\r\n throw new Error(\"Couldn't find chord in cache\");\r\n }\r\n\r\n return chord;\r\n }\r\n\r\n getByOrderedIndex(index: number): Promise {\r\n throw new Error(`getByOrderedIndex(${index}) is intended for online use only.`);\r\n }\r\n\r\n async search(query: string): Promise {\r\n const cache = await this.getChordCache();\r\n return await cache.search(query);\r\n }\r\n\r\n async getBySongName(skip: number, take: number): Promise> {\r\n const cache = await this.getChordCache();\r\n return await cache.getBySongName(skip, take);\r\n }\r\n\r\n async getByArtistName(artist: string | null, skip: number, take: number): Promise> {\r\n const cache = await this.getChordCache();\r\n return await cache.getByArtistName(artist, skip, take);\r\n }\r\n\r\n async getByRandom(take: number): Promise {\r\n const cache = await this.getChordCache();\r\n return await cache.getRandom(take);\r\n }\r\n\r\n async getAllArtists(): Promise {\r\n const cache = await this.getChordCache();\r\n return await cache.getAllArtists();\r\n }\r\n\r\n async getNew(skip: number, take: number): Promise> {\r\n const cache = await this.getChordCache();\r\n return cache.getNew(skip, take);\r\n }\r\n\r\n async getChordCache(): Promise {\r\n if (!this.chordCache) {\r\n const module = await import(\"./chord-cache\");\r\n this.chordCache = new module.ChordCache();\r\n }\r\n\r\n return this.chordCache;\r\n }\r\n\r\n // @ts-ignore\r\n submitChordEdit(chord: ChordSheet, attachments: File[]): Promise {\r\n throw new Error(\"Can't upload chords while offline.\");\r\n }\r\n\r\n async getPlainTextChords(): Promise {\r\n throw new Error(\"Not supported while offline\");\r\n }\r\n}"],"file":"code/chord-service.51e80b10.js"}