@arcgis/coding-components
Version:
Contains components for editing code in different languages. The currently supported languages are html, css, json, TypeScript, JavaScript, and Arcade.
887 lines (885 loc) • 30.9 kB
JavaScript
import { newLayersFeatureLayer as b, importRequest as Q, newPortalPortalItem as X, newWebScene as Y, newWebMap as Z } from "@arcgis/core-adapter";
import { p as ee, i as te } from "./monaco-importer.js";
import { isNotNull as C, isNotUndefined as U, addLTRMark as ie, setValuesInString as V, normalizeLocale as re } from "@arcgis/components-utils";
import { s as se, f as ne, a as _, b as oe } from "./fields.js";
import { InsertTextMode as T, InsertTextFormat as I, CompletionItemKind as M } from "vscode-languageserver-types";
import { g as ae } from "./runtime.js";
import { filterApiLibraryForContext as le } from "@arcgis/languages-api-utils";
import { Emitter as x, Uri as $ } from "monaco-editor";
/*! All material copyright Esri, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
v4.32.13 */
function W(t) {
return !!t && typeof t == "object" && "declaredClass" in t && typeof t.declaredClass == "string" && t.declaredClass.startsWith("esri.layers.") && g(t) && "queryFeatures" in t && typeof t.queryFeatures == "function";
}
function ue(t) {
return !!t && typeof t == "object" && "allLayers" in t && "allTables" in t && typeof t.allLayers == "object" && typeof t.allTables == "object";
}
function B(t) {
return !!t && typeof t == "object" && "declaredClass" in t && typeof t.declaredClass == "string" && (t.declaredClass === "esri.Map" || t.declaredClass === "esri.WebMap" || t.declaredClass === "esri.WebScene");
}
function ce(t) {
return !!t && typeof t == "object" && "loadAll" in t && typeof t.loadAll == "function";
}
function N(t) {
return !!t && typeof t == "object" && "portalItem" in t && t.portalItem != null;
}
function R(t) {
return !!t && typeof t == "object" && "portalItem" in t && t.portalItem != null;
}
function g(t) {
return !!t && typeof t == "object" && "fields" in t && Array.isArray(t.fields);
}
function w(t) {
return !!t && typeof t == "object" && "url" in t && typeof t.url == "string";
}
function pe(t) {
return w(t) && /\/(?:featureserver|mapserver)(?:\/|$)/iu.test(t.url ?? "");
}
function Le(t) {
return w(t) || g(t) || R(t);
}
function Ge(t) {
return w(t) || g(t) || R(t);
}
function je(t) {
return N(t) || B(t) || pe(t);
}
function A(t) {
return !!t && typeof t == "object" && "declaredClass" in t && t.declaredClass === "esri.layers.support.Subtype";
}
function D(t) {
return !!t && typeof t == "object" && "declaredClass" in t && t.declaredClass === "esri.layers.support.CodedValueDomain";
}
function he(t) {
return !!t && typeof t == "object" && "declaredClass" in t && t.declaredClass === "esri.layers.support.InheritedDomain";
}
function Ee(t) {
return !!t && typeof t == "object" && "id" in t && typeof t.id == "string" && "definitions" in t && typeof t.definitions == "object" && !Array.isArray(t.definitions);
}
function m(t) {
return !!t && typeof t == "object" && "title" in t && typeof t.title == "string";
}
function fe(t) {
return !!t && typeof t == "object" && "url" in t && typeof t.url == "string";
}
function O(t) {
return !!t && typeof t == "object" && "layerId" in t && typeof t.layerId == "number";
}
function S(t) {
return !!t && typeof t == "object" && "typeIdField" in t && "types" in t;
}
function L(t) {
return !!t && typeof t == "object" && "getFieldDomain" in t && typeof t.getFieldDomain == "function";
}
function f(t) {
return !!t && typeof t == "object" && "subtypeField" in t;
}
function de(t) {
return f(t) && "subtypes" in t;
}
function ye(t) {
return !!t && typeof t == "object" && "portalItem" in t;
}
function _e(t) {
return O(t) && "relationships" in t && "url" in t && Array.isArray(t.relationships) && typeof t.url == "string";
}
function be(t) {
return !!t && typeof t == "object" && "isTable" in t && typeof t.isTable == "boolean";
}
function me(t) {
return !!t && typeof t == "object" && "load" in t && typeof t.load == "function";
}
async function q(t) {
if (!t)
return null;
let e;
return g(t) ? e = t : e = await b(t), me(e) && await e.load(), e;
}
async function ge(t) {
t += "/layers";
const i = await (await Q())(t, { responseType: "json", query: { f: "json" } }), r = t.endsWith("MapServer/layers") ? "data" : "query", s = G(i.data?.layers, r), n = G(i.data?.tables, r);
return { layers: s, tables: n };
}
function G(t, e) {
return t ? t.filter((i) => {
switch (i.type) {
case "Feature Layer":
case "Oriented Imagery Layer":
case "Catalog Layer":
case "Table":
return (i.capabilities ? i.capabilities.toLowerCase().split(",").map((s) => s.trim()) : []).includes(e);
default:
return !1;
}
}) : [];
}
async function we(t, e) {
const i = await b({ url: `${t.url}/${e.relatedTableId}` });
return await i.load(), i;
}
function k(t) {
return (e, i) => {
if (e.type === "oid")
return -1;
if (i.type === "oid")
return 1;
if (f(t)) {
if (e.name === t.subtypeField)
return -1;
if (i.name === t.subtypeField)
return 1;
}
if (S(t)) {
if (e.name === t.typeIdField)
return -1;
if (i.name === t.typeIdField)
return 1;
}
return e.name.localeCompare(i.name, "en", { sensitivity: "base" });
};
}
function j(t, e) {
return t?.every((i) => i.domains?.[e.name]?.type === "inherited") ?? !1;
}
const De = /^[a-z_$][a-z0-9_$]*$/giu;
function K(t, e = !0) {
return t.match(De) ? `${e ? "." : ""}${t}` : `["${t}"]`;
}
function z(t, e) {
return t ? `${t}${K(e)}` : e;
}
function E(t) {
return ye(t) ? t.portalItem : null;
}
function Ue(t, e, i = !1) {
let r = e;
const s = [], n = [];
return se(t).forEach((o) => {
r && (r += `
`), r += `**${o.name}** (${o.alias})
${o.type}`, o.description && (r += `
'${o.description}`);
const p = ne(o), c = K(o.name, !1), y = _(o);
if (s.push({
name: o.name,
description: y,
type: p,
completion: {
label: o.name,
detail: y,
insertText: c,
insertTextMode: T.asIs,
insertTextFormat: I.PlainText,
kind: M.Field
}
}), i) {
if (!o.alias || o.alias.toLowerCase() === o.name.toLowerCase())
return;
let h = `**${o.alias}**
${o.type}`;
o.description && (h += `
'${o.description}`), n.push({
name: o.alias,
description: o.name,
type: p,
completion: {
label: o.alias,
detail: o.name,
insertText: c,
insertTextMode: T.asIs,
insertTextFormat: I.PlainText,
kind: M.Field,
documentation: { kind: "markdown", value: h }
}
});
}
}), [[...s, ...n], r];
}
class H {
constructor(e, i, r) {
this._profile = e, this._label = i, this.description = r, this.filterDescription = !1;
}
/**
* Returns the label string.
*/
getLabel() {
return this._label == null ? "" : typeof this._label == "string" ? ie(this._label) : V(this._profile?.intlStrings[this._label.code], this._label.formatValues);
}
/**
* Returns the description string.
*/
getDescription() {
return this.description == null ? "" : typeof this.description == "string" ? this.description : V(this._profile?.intlStrings[this.description.code], this.description.formatValues);
}
/**
* Returns true if the item pass the filter test
*/
passFilter(e) {
return !e || e.test(this.getLabel()) ? !0 : this.filterDescription && e.test(this.getDescription());
}
}
class F extends H {
constructor(e) {
super(e.profile, e.label, e.description ?? e.declaration?.description), this.declaration = e.declaration ?? {}, this.name = e.declaration?.name ?? "", this.snippet = e.snippet ?? "", this.nonInteractive = e.nonInteractive ?? !1, this.filterDescription = e.filterDescription ?? !1, this.icon = e.icon;
}
}
class a extends F {
constructor(e) {
super(e), this.type = "text", this.isCollection = !1, this.type = e.declaration?.type ?? "text";
}
getDescription() {
return this.description == null ? this._profile?.intlStrings[this.type.toLowerCase()] ?? "" : super.getDescription();
}
toProfileVariableDefinition() {
return { type: this.type, name: "", ...this.declaration };
}
}
class Ce extends F {
constructor(e) {
super(e), this.type = "array", this.isCollection = !1, this.elementType = e.declaration?.elementType ?? { type: "number", name: "number" };
}
getDescription() {
return this.description == null ? this._profile?.intlStrings[this.type.toLowerCase()] ?? "" : super.getDescription();
}
toProfileVariableDefinition() {
return { type: this.type, elementType: this.elementType, name: "", ...this.declaration };
}
}
class v extends F {
constructor(e, i) {
super(i), this.owner = e, this.isCollection = !0, this._loaded = !0, this.variables = [];
}
get breadcrumb() {
if (this.owner) {
const e = this.owner.breadcrumb;
return e ? `${e} / ${this.name}` : this.name;
}
return this.name;
}
/**
* Returns true if the collection has been loaded
*/
get loaded() {
return this._loaded;
}
/**
* Returns an url to the associated information
*/
get informationUrl() {
return null;
}
get informationType() {
return "";
}
}
class l extends H {
constructor(e, i, r = [], s = !1) {
super(e, i), this.variables = r, this.isHeader = s, this.type = "group", this.isCollection = !0;
}
passFilter() {
return !0;
}
}
class d extends v {
constructor(e, i) {
super(e, i), this.type = "dictionary", this.dictionaryVariables = [], this.loadPropertyDeclarations(i.declaration?.properties), this.snippet && this.dictionaryVariables.length && (this.variables = [new l(this._profile, this.snippet, this.dictionaryVariables)]);
}
async loadSource() {
}
loadPropertyDeclarations(e) {
this.dictionaryVariables = this.createVariableInstances(e), this.variables = this.dictionaryVariables;
}
createVariableInstances(e) {
if (!Array.isArray(e))
return [];
const i = [];
return e.forEach((r) => {
const s = this.createVariableInstance(r);
s && i.push(s);
}), i;
}
createVariableInstance(e) {
const i = z(this.snippet, e.name);
switch (e.type) {
case "number":
case "text":
case "boolean":
case "date":
case "dateOnly":
case "time":
case "geometry":
case "knowledgeGraph":
return new a({ profile: this._profile, declaration: e, label: i, snippet: i });
case "feature":
return new Se(this, { profile: this._profile, declaration: e, label: i, snippet: i });
case "featureSet":
return new P(this, { profile: this._profile, declaration: e, label: i, snippet: i }, [
new a({ profile: this._profile, label: i, description: "", snippet: i })
]);
case "featureSetCollection":
return new Fe(this, {
profile: this._profile,
declaration: e,
label: i,
snippet: i
});
case "dictionary":
return new d(this, {
profile: this._profile,
declaration: e,
label: i,
snippet: i
});
case "array":
return new Ce({
profile: this._profile,
declaration: e,
label: i,
snippet: i
});
default:
return console.error("Editor profile: Invalid profile variable", e), null;
}
}
toProfileVariableDefinition() {
return {
type: this.type,
name: "",
...this.declaration,
properties: this.dictionaryVariables.map((e) => e.toProfileVariableDefinition())
};
}
}
class J extends v {
constructor(e, i, r) {
super(e, i), this.relationshipsProperties = r, this._source = null, this._loaded = !1, this._definition = i.declaration?.definition;
}
get title() {
return m(this._source) ? this._source.title ?? "" : "";
}
get url() {
return fe(this._source) ? this._source.url ?? "" : "";
}
get informationUrl() {
return !this.loaded || !this.url ? null : O(this._source) ? `${this.url}/${this._source.layerId}` : this.url;
}
get informationType() {
return this._profile?.intlStrings.layer ?? "layer";
}
async loadSource() {
return C(this._loadPromise) && U(this._loadPromise) ? await this._loadPromise : (this._loadPromise = this._loadSource(), await this._loadPromise);
}
_getValueSnippet(e) {
return this.type === "feature" ? z(this.snippet, e.name) : e.name;
}
_getSubtypeOrDomainNameSnippet(e) {
return this.type !== "feature" ? null : f(this._source) && e.name === this._source.subtypeField ? `SubtypeName(${this.snippet})` : `DomainName(${this.snippet}, "${e.name}")`;
}
_getFieldProperty(e) {
const i = this._getDomainDictionary(e);
if (i)
return i;
const r = this._getValueSnippet(e);
return new a({
profile: this._profile,
label: r,
description: _(e),
snippet: r,
icon: oe(e),
filterDescription: !0
});
}
_getDomainDictionary(e) {
return L(this._source) ? f(this._source) && this._source.subtypeField ? this._getSubtypeDomainDictionary(e) : S(this._source) && this._source.typeIdField ? this._getFeatureTypeDomainDictionary(e) : this._getFieldDomainDictionary(e) : null;
}
_getSubtypeDomainDictionary(e) {
if (!f(this._source))
return null;
if (!de(this._source))
return e.name === this._source.subtypeField ? null : this._getFieldDomainDictionary(e);
if (e.name === this._source.subtypeField) {
const s = this._createDomainDictionary(e);
return s.icon = "subtype", s.variables.push(this._getTypeOrSubtypeDomainGroup(this._source.subtypes, e)), s;
}
if (j(this._source.subtypes, e))
return this._getFieldDomainDictionary(e);
const i = this._getDomainValuesGroup(this._source.subtypes, e);
if (!i)
return null;
const r = this._createDomainDictionary(e);
return r.variables.push(i), r;
}
_getFeatureTypeDomainDictionary(e) {
if (!S(this._source))
return null;
if (e.name === this._source.typeIdField) {
const s = this._createDomainDictionary(e);
return s.variables.push(this._getTypeOrSubtypeDomainGroup(this._source.types, e)), s;
}
if (j(this._source.types, e))
return this._getFieldDomainDictionary(e);
const i = this._getDomainValuesGroup(this._source.types, e);
if (!i)
return null;
const r = this._createDomainDictionary(e);
return r.variables.push(i), r;
}
_getFieldDomainDictionary(e) {
if (!L(this._source))
return null;
const i = this._source.getFieldDomain(e.name);
if (!D(i))
return null;
const r = this._getCodedValueDomainGroup(i, {
code: "domainvalues"
}), s = this._createDomainDictionary(e);
return s.variables.push(r), s;
}
_getTypeOrSubtypeDomainGroup(e, i) {
if (D(i.domain))
return this._getCodedValueDomainGroup(i.domain, { code: "subtypes" });
const r = e?.map((s) => {
const n = A(s) ? s.code : s.id;
return new a({
profile: this._profile,
label: `${n}`,
description: s.name,
snippet: `"${n}"`
});
}) ?? [];
return new l(this._profile, { code: "subtypes" }, r);
}
_getCodedValueDomainGroup(e, i) {
const r = e.codedValues.map(
(s) => new a({
profile: this._profile,
label: `${s.code}`,
description: s.name,
snippet: `"${s.code}"`,
filterDescription: !0
})
);
return new l(this._profile, i, r);
}
_getDomainValuesGroup(e, i) {
const r = [];
return !e || e.length === 0 || (e.forEach((s) => {
const n = s.domains?.[i.name];
if (!n || he(n) || !D(n))
return;
const u = _(i), o = this._getCodedValueDomainGroup(n, {
code: "domainvaluesfortypeformat",
formatValues: {
fieldName: u,
typeName: s.name
}
}), p = A(s) ? s.code : s.id, c = `${p}`, y = `"${p}""`, h = new d(this, {
profile: this._profile,
label: c,
snippet: y,
description: s.name,
declaration: { name: u }
});
h.variables = [o], r.push(h);
}), !r.length) ? null : new l(this._profile, { code: "domainvaluesbysubtypes" }, r);
}
_createDomainDictionary(e) {
const i = this._getValueSnippet(e), r = _(e), s = new d(this, {
profile: this._profile,
label: i,
description: r,
snippet: i,
icon: "form-dropdown",
declaration: { name: e.name }
}), n = new l(this._profile, r, [
new a({
profile: this._profile,
label: i,
description: "",
snippet: i
})
]);
s.variables = [n];
const u = this._getSubtypeOrDomainNameSnippet(e);
return u && n.variables.push(
new a({
profile: this._profile,
label: u,
description: "",
snippet: u
})
), s;
}
async _getRelationshipsProperty() {
if (!this.relationshipsProperties?.exposeRelationships || !this._profile?.supportFeatureSetFunctions)
return null;
const e = this._source;
if (!_e(e))
return null;
const i = new l(this._profile, { code: "relationships" }), r = await Promise.all(
e.relationships?.map(async (s) => {
const n = await we(e, s);
if (!W(n) || s.relatedTableId === this.relationshipsProperties?.sourceTableId)
return null;
const u = `FeatureSetByRelationshipName(${this.snippet}, "${s.name}")`;
return new P(
this,
{
profile: this._profile,
declaration: { definition: n },
label: n.title,
description: "",
nonInteractive: !0
},
[new a({ profile: this._profile, label: u, description: "", snippet: u })],
{ exposeRelationships: !0, sourceTableId: e.layerId }
);
}) ?? []
);
return i.variables = r.filter(C), i.variables.length ? i : null;
}
}
class Se extends J {
constructor(e, i) {
super(e, i, { exposeRelationships: !0 }), this.type = "feature";
}
get title() {
return m(this._source) ? this._source.title ?? "" : { code: "feature" };
}
async _loadSource() {
if (this.loaded)
return this._source;
try {
if (this._source = await q(this._definition), !this._source)
throw new Error("Invalid definition");
const e = m(this._source) ? this._source.title ?? "" : "";
this.variables.push(
new l(this._profile, e, [
new a({
profile: this._profile,
label: this.snippet,
description: "",
snippet: this.snippet
})
])
);
const i = new l(this._profile, { code: "values" });
if (this.variables.push(i), be(this._source) && !this._source.isTable) {
const s = `Geometry(${this.snippet})`, n = new a({
profile: this._profile,
declaration: { name: s },
label: s,
description: "Geometry",
snippet: s,
icon: "shapes",
filterDescription: !0
});
i.variables.push(n);
}
this._source.fields.sort(k(this._source)).forEach((s) => {
i.variables.push(this._getFieldProperty(s));
});
const r = await this._getRelationshipsProperty();
r && this.variables.push(r);
} catch (e) {
console.error("Error with definition", e, this._definition), this._source = null;
} finally {
this._loaded = !0;
}
return this._source;
}
toProfileVariableDefinition() {
return { type: this.type, name: "", ...this.declaration, definition: this._definition };
}
}
class P extends J {
constructor(e, i, r = [], s) {
super(e, i, s), this.featureSetSnippets = r, this.type = "featureSet";
}
get title() {
return m(this._source) ? this._source.title ?? "" : { code: "featureset" };
}
async _loadSource() {
if (this.loaded)
return this._source;
try {
if (this._source = await q(this._definition), !this._source)
throw new Error("Invalid definition");
this.variables.push(new l(this._profile, this.title, this.featureSetSnippets, !0));
const e = new l(this._profile, { code: "fields" });
this.variables.push(e), e.variables = this._source.fields.sort(k(this._source)).map((r) => this._getFieldProperty(r));
const i = await this._getRelationshipsProperty();
i && this.variables.push(i);
} catch (e) {
console.error("Error with definition", e, this._definition), this._source = null;
} finally {
this._loaded = !0;
}
return this._source;
}
toProfileVariableDefinition() {
return { type: this.type, name: "", ...this.declaration, definition: this._definition };
}
}
class Fe extends v {
constructor(e, i) {
super(e, i), this.type = "featureSetCollection", this._featureSetCollections = null, this._loaded = !1, this._definition = i.declaration?.definition;
}
get informationUrl() {
return !this.loaded || !this._featureSetCollections ? null : typeof this._featureSetCollections.source != "string" ? ee(E(this._featureSetCollections.source)) : null;
}
get informationType() {
if (!this.loaded || !this._featureSetCollections)
return "";
if (typeof this._featureSetCollections.source == "string")
return this._profile?.intlStrings.featureservice ?? "featureservice";
switch (this._featureSetCollections.source.declaredClass) {
case "esri.WebMap":
return this._profile?.intlStrings.webmap ?? "webmap";
case "esri.WebScene":
return this._profile?.intlStrings.webscene ?? "webscene";
default:
return this._profile?.intlStrings.map ?? "map";
}
}
async loadSource() {
return C(this._loadPromise) && U(this._loadPromise) ? await this._loadPromise : (this._loadPromise = this._loadSource(), await this._loadPromise);
}
async _loadSource() {
if (this.loaded)
return this._featureSetCollections;
try {
if (this._featureSetCollections = await this._featureSetCollectionsFromDefinition(), !this._featureSetCollections)
throw new Error("Invalid definition");
const e = typeof this._featureSetCollections.source == "string" ? { code: this._featureSetCollections.source.endsWith("FeatureServer") ? "featureservice" : "mapservice" } : {
code: "webmapformat",
formatValues: {
webMapTitle: E(this._featureSetCollections.source)?.title || "Untitled map"
}
}, i = new l(this._profile, e, [
new a({
profile: this._profile,
label: this.snippet,
description: "",
snippet: this.snippet
})
]), r = new l(this._profile, { code: "layers" }, this._featureSetCollections.layers), s = new l(this._profile, { code: "tables" }, this._featureSetCollections.tables);
this.variables.push(i, r, s);
} catch (e) {
console.error("Error with definition", e, this._definition), this._featureSetCollections = null;
} finally {
this._loaded = !0;
}
return this._featureSetCollections;
}
async _featureSetCollectionsFromDefinition() {
return this._definition ? B(this._definition) ? await this._featureSetCollectionFromMap(this._definition) : w(this._definition) ? await this._featureSetCollectionFromUrl(this._definition.url) : N(this._definition) ? await this._featureSetCollectionFromPortalItem(this._definition.portalItem) : null : null;
}
async _featureSetCollectionFromMap(e) {
return ce(e) && await e.loadAll(), await Promise.all(e.tables.map(async (i) => await i.load())), {
layers: this._convertWebMapLayersToVariables(e.layers),
tables: this._convertWebMapLayersToVariables(e.tables, !0),
source: e
};
}
async _featureSetCollectionFromPortalItem(e) {
const i = await X(e);
switch (await i.load(), i.type) {
case "Web Map": {
const r = await Z({ portalItem: i });
return await this._featureSetCollectionFromMap(r);
}
case "Web Scene": {
const r = await Y({ portalItem: i });
return await this._featureSetCollectionFromMap(r);
}
case "Feature Service":
return await this._featureSetCollectionFromUrl(i.url);
default:
return console.error("Unsupported portal item", e), null;
}
}
async _featureSetCollectionFromUrl(e) {
let i = e?.replace(/\/featureserver\/[0-9]*/iu, "/FeatureServer");
if (i = i?.replace(/\/mapserver\/[0-9]*/iu, "/MapServer"), i = i?.split("?")[0], !i)
return null;
const r = await ge(i), s = Promise.all(
r.layers.map(async (p) => {
const c = await b({ url: `${i}/${p.id}` });
return await c.load(), this._createFeatureSetVariable(c);
})
), n = Promise.all(
r.tables.map(async (p) => {
const c = await b({ url: `${i}/${p.id}` });
return await c.load(), this._createFeatureSetVariable(c);
})
), [u, o] = await Promise.all([s, n]);
return { layers: u, tables: o, source: i };
}
_convertWebMapLayersToVariables(e, i = !1) {
const r = [];
return e.toArray().reverse().forEach((s) => {
if (W(s)) {
r.push(this._createFeatureSetVariable(s, !0));
return;
}
if (ue(s)) {
const n = i ? this._convertWebMapLayersToVariables(s.allTables, !0) : this._convertWebMapLayersToVariables(s.allLayers);
r.push(...n);
}
}), r;
}
_createFeatureSetVariable(e, i = !1) {
return new P(
this,
{
profile: this._profile,
declaration: { name: e.title ?? "", definition: e },
label: i ? e.title : e.sourceJSON.name ?? e.title,
description: "",
nonInteractive: !0
},
this._makeFeatureSetSnippets(e, i)
);
}
_makeFeatureSetSnippets(e, i = !1) {
if (!this._profile?.supportFeatureSetFunctions)
return [];
if (i) {
const r = `FeatureSetById(${this.snippet}, "${e.id}")`, s = `FeatureSetByName(${this.snippet}, "${e.title}")`;
return [
new a({ profile: this._profile, label: r, description: "", snippet: r }),
new a({ profile: this._profile, label: s, description: "", snippet: s })
];
} else {
const r = `FeatureSetById(${this.snippet}, "${e.layerId}")`;
return [new a({ profile: this._profile, label: r, description: "", snippet: r })];
}
}
toProfileVariableDefinition() {
return { type: this.type, name: "", ...this.declaration, definition: this._definition };
}
}
class We extends d {
constructor(e, i, r = "en") {
super(void 0, {
profile: null,
declaration: { properties: [] }
}), this.definition = e, this.intlStrings = i, this.locale = r, this.variables = [], this._profile = this, this.loadPropertyDeclarations(e?.variables);
}
/**
* Returns true if the profile supports feature set functions for snippets.
*/
get supportFeatureSetFunctions() {
return this.definition?.bundles?.includes("data-access") ?? !1;
}
/**
* Returns the EditorProfile as a json. The EditorProfile may have been updated. This function allows to
* get the new json representing mutations.
*/
toEditorProfileDefinition() {
return {
...this.definition,
variables: this.dictionaryVariables.map((e) => e.toProfileVariableDefinition())
};
}
}
const ve = {
locale: "en"
};
class Be {
// #endregion
constructor(e, i) {
this.languageId = e, this._apiConfig = i, this._onDidChange = new x(), this._modelToProfileMap = /* @__PURE__ */ new Map(), this._modelToApiContextMap = /* @__PURE__ */ new Map(), this._localeToApiLibraryPromiseMap = /* @__PURE__ */ new Map(), this._onModelContextDidChange = new x(), this._onDidModelContextChangeTimeout = -1, this.workerHost = {
getApiLibrary: async (r) => await this.getApiLibrary(r)
}, te().then((r) => {
r.onWillDisposeModel((s) => {
this.disposeForModel(s.uri);
});
});
}
// #region Protected methods
_fireModelContextDidChange(e) {
this._onDidModelContextChangeTimeout === -1 && (this._onDidModelContextChangeTimeout = window.setTimeout(() => {
this._onDidModelContextChangeTimeout = -1, this._onModelContextDidChange.fire(e);
}, 0));
}
_getApiKey(e) {
return $.isUri(e) || (e = $.parse(e)), e.toString();
}
// #endregion
// #region Public methods
get onDidChange() {
return this._onDidChange.event;
}
/**
* Dispose any cached resources for the model
*/
disposeForModel(e) {
const i = this._getApiKey(e);
this._modelToProfileMap.delete(i), this._modelToApiContextMap.delete(i) && this._fireModelContextDidChange(i);
}
/**
* Returns the editor profile for the given model id.
* @param modelId The model id for which to get the editor profile.
* @returns The editor profile for the model.
*/
getEditorProfileForModel(e) {
return this._modelToProfileMap.get(this._getApiKey(e));
}
/**
* Returns the API context for the given model id.
* Returns the default context if the model has no context.
* @param modelId The model id for which to get the API context.
* @returns The API context for the model.
*/
getApiContextForModel(e) {
return this._modelToApiContextMap.get(this._getApiKey(e)) ?? ve;
}
/**
* Set or update api context for the given model id.
* @param modelId The model id for which to set the context.
* @param apiContext The api context to set.
*/
updateApiContextForModel(e, i) {
const r = this._getApiKey(e), s = this._modelToApiContextMap.get(r) ?? {};
this._modelToApiContextMap.set(r, { ...s, ...i }), this._fireModelContextDidChange(r);
}
get onModelContextDidChange() {
return this._onModelContextDidChange.event;
}
/**
* Gets the API library for the given model id.
* @param modelId The model id for which to get the API library.
* @returns The API library for the model.
*/
async getApiLibraryForModel(e) {
const i = this.getApiContextForModel(e), r = this.getApiLibrary(i.locale ?? "en");
return (await le(r, i)).categories;
}
// #endregion
//#region Private methods
async fetchApiLibrary(e) {
try {
const { apiPath: i, apiPrefix: r } = this._apiConfig, s = ae(`${i}/${r}${e}.json`), n = await fetch(s);
return n.ok ? await n.json() : [];
} catch {
return [];
}
}
async getApiLibrary(e) {
const i = re(e);
return this._localeToApiLibraryPromiseMap.has(i) || this._localeToApiLibraryPromiseMap.set(i, this.fetchApiLibrary(i)), await this._localeToApiLibraryPromiseMap.get(i) ?? [];
}
// #endregion
}
export {
We as E,
Be as L,
Ge as a,
je as b,
Le as c,
Ue as f,
Ee as i
};