profile-pane 3.1.2-test.5 → 3.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"CVPresenter.d.ts","sourceRoot":"","sources":["../src/CVPresenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAa,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAG9E,MAAM,WAAW,IAAI;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AACD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,UAAU,EAAE,IAAI,EAAE,CAAC;CACpB;AAID,eAAO,MAAM,WAAW,UAA4C,CAAA;AAEpE,wBAAgB,WAAW,CAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,GAAE,MAAM,CAW1D;AAED,wBAAgB,cAAc,CAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,GAAE,MAAM,CAM9D;AAED,wBAAgB,WAAW,CAAE,SAAS,CAAC,EAAC,OAAO,EAAE,OAAO,CAAC,EAAC,OAAO,GAAE,MAAM,CAIxE;AAsED,wBAAgB,SAAS,CACvB,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,SAAS,GACf,cAAc,CAyBhB"}
1
+ {"version":3,"file":"CVPresenter.d.ts","sourceRoot":"","sources":["../src/CVPresenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAa,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAG9E,MAAM,WAAW,IAAI;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AACD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,UAAU,EAAE,IAAI,EAAE,CAAC;CACpB;AAID,eAAO,MAAM,WAAW,UAA4C,CAAA;AAEpE,wBAAgB,WAAW,CAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,GAAE,MAAM,CAW1D;AAED,wBAAgB,cAAc,CAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,GAAE,MAAM,CAM9D;AAED,wBAAgB,WAAW,CAAE,SAAS,CAAC,EAAC,OAAO,EAAE,OAAO,CAAC,EAAC,OAAO,GAAE,MAAM,CAIxE;AAsED,wBAAgB,SAAS,CACvB,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,SAAS,GACf,cAAc,CA0BhB"}
@@ -108,10 +108,12 @@ function presentCV(subject, store) {
108
108
  }
109
109
  const skills = store.each(subject, _solidUi.ns.schema('skills')).map(sk => skillAsText(store, sk)).filter(skill => skill !== '');
110
110
  const languageNodes = store.each(subject, _solidUi.ns.schema('knowsLanguage'));
111
- const languages = languageNodes.flatMap(node => expandRdfList(store, node)).map(lan => languageAsText(store, lan)).filter(language => language !== '');
111
+ const languages = languageNodes.flatMap(node => expandRdfList(store, node)).map(lan => languageAsText(store, lan));
112
+ // Deduplicate languages
113
+ const uniqueLanguages = Array.from(new Set(languages));
112
114
  return {
113
115
  rolesByType,
114
116
  skills,
115
- languages
117
+ languages: uniqueLanguages
116
118
  };
117
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SocialPresenter.d.ts","sourceRoot":"","sources":["../src/SocialPresenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAQ,MAAM,QAAQ,CAAA;AAQnD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAuBD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,SAAS,GACf,kBAAkB,CAiEpB"}
1
+ {"version":3,"file":"SocialPresenter.d.ts","sourceRoot":"","sources":["../src/SocialPresenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAQ,MAAM,QAAQ,CAAA;AAQnD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAiCD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,SAAS,GACf,kBAAkB,CA+EpB"}
@@ -13,22 +13,31 @@ const socialMediaFormName = 'socialMedia.ttl'; // The name of the file to upload
13
13
  const DEFAULT_ICON_URI = _solidUi.icons.iconBase + 'noun_10636_grey.svg'; // grey disc
14
14
 
15
15
  function expandRdfList(store, node) {
16
- const collectionElements = node.elements;
17
- if (Array.isArray(collectionElements)) {
18
- return collectionElements.flatMap(element => expandRdfList(store, element));
19
- }
20
- const first = store.any(node, _solidUi.ns.rdf('first'));
21
- if (!first) return [node];
22
- const items = [];
23
- let current = node;
24
- while (current) {
25
- const value = store.any(current, _solidUi.ns.rdf('first'));
26
- if (value) items.push(...expandRdfList(store, value));
27
- const rest = store.any(current, _solidUi.ns.rdf('rest'));
28
- if (!rest || rest.termType === 'NamedNode' && rest.value === _solidUi.ns.rdf('nil').value) break;
29
- current = rest;
16
+ const visited = new Set();
17
+ function inner(node) {
18
+ const termType = node.termType || typeof node;
19
+ const value = node.value || String(node);
20
+ const key = `${termType}:${value}`;
21
+ if (visited.has(key)) return [];
22
+ visited.add(key);
23
+ const collectionElements = node.elements;
24
+ if (Array.isArray(collectionElements)) {
25
+ return collectionElements.flatMap(element => inner(element));
26
+ }
27
+ const first = store.any(node, _solidUi.ns.rdf('first'));
28
+ if (!first) return [node];
29
+ const items = [];
30
+ let current = node;
31
+ while (current) {
32
+ const value = store.any(current, _solidUi.ns.rdf('first'));
33
+ if (value) items.push(...inner(value));
34
+ const rest = store.any(current, _solidUi.ns.rdf('rest'));
35
+ if (!rest || rest.termType === 'NamedNode' && rest.value === _solidUi.ns.rdf('nil').value) break;
36
+ current = rest;
37
+ }
38
+ return items;
30
39
  }
31
- return items;
40
+ return inner(node);
32
41
  }
33
42
  function presentSocial(subject, store) {
34
43
  function nameForAccount(subject) {
@@ -59,12 +68,17 @@ function presentSocial(subject, store) {
59
68
  return DEFAULT_ICON_URI;
60
69
  }
61
70
  function homepageForAccount(subject) {
62
- const id = store.anyJS(subject, _solidUi.ns.foaf('accountName'), null, subject.doc()) || '';
71
+ const acHomepage = store.any(subject, _solidUi.ns.foaf('homepage')); // on the account itself?
72
+ if (acHomepage) return acHomepage.value;
73
+ const id = store.anyJS(subject, _solidUi.ns.foaf('accountName'), null, subject.doc()) || 'No_account_Name';
63
74
  const classes = store.each(subject, _solidUi.ns.rdf('type'));
64
75
  for (const k of classes) {
65
- const userProfilePrefix = store.any(k, _solidUi.ns.foaf('userProfilePrefix'));
66
- if (userProfilePrefix) {
67
- return userProfilePrefix.value + id.trim();
76
+ // Fix: ensure k is a NamedNode for store.any
77
+ if (k.termType === 'NamedNode') {
78
+ const userProfilePrefix = store.any(k, _solidUi.ns.foaf('userProfilePrefix'));
79
+ if (userProfilePrefix) {
80
+ return userProfilePrefix.value + id.trim();
81
+ }
68
82
  }
69
83
  }
70
84
  return store.anyJS(subject, _solidUi.ns.foaf('homepage'), null, subject.doc()) || '';
@@ -80,14 +94,23 @@ function presentSocial(subject, store) {
80
94
  // we need to load the social media accounts ontology to be able to query all data needed
81
95
  (0, _rdfFormsHelper.loadDocument)(store, socialMediaForm, socialMediaFormName);
82
96
  const accountNodes = store.each(subject, _solidUi.ns.foaf('account'));
83
- const accountThings = accountNodes.flatMap(node => expandRdfList(store, node));
84
- if (!accountThings.length) return {
97
+ let accountThings = accountNodes.flatMap(node => expandRdfList(store, node));
98
+ // Deduplicate by foaf:accountName value
99
+ const accountNameSet = new Set();
100
+ const accounts = [];
101
+ for (const ac of accountThings) {
102
+ if (ac.termType === 'NamedNode') {
103
+ const accountNameNode = store.any(ac, _solidUi.ns.foaf('accountName'));
104
+ const accountName = accountNameNode ? accountNameNode.value : '';
105
+ if (!accountNameSet.has(accountName)) {
106
+ accountNameSet.add(accountName);
107
+ accounts.push(accountAsObject(ac));
108
+ }
109
+ }
110
+ }
111
+ if (!accounts.length) return {
85
112
  accounts: []
86
113
  };
87
- //console.log('Social: accountThings', accountThings)
88
- const accounts = accountThings.map(ac => accountAsObject(ac));
89
- //console.log('Social: account objects', accounts)
90
-
91
114
  return {
92
115
  accounts
93
116
  };
@@ -5197,9 +5197,10 @@ function presentCV(subject, store) {
5197
5197
  const languageNodes = store.each(subject, external_UI_.ns.schema('knowsLanguage'));
5198
5198
  const languages = languageNodes
5199
5199
  .flatMap(node => expandRdfList(store, node))
5200
- .map(lan => languageAsText(store, lan))
5201
- .filter((language) => language !== '');
5202
- return { rolesByType, skills, languages };
5200
+ .map(lan => languageAsText(store, lan));
5201
+ // Deduplicate languages
5202
+ const uniqueLanguages = Array.from(new Set(languages));
5203
+ return { rolesByType, skills, languages: uniqueLanguages };
5203
5204
  }
5204
5205
 
5205
5206
  ;// ./src/ontology/socialMedia.ttl
@@ -5240,25 +5241,35 @@ function loadDocument(store, documentSource, documentName, documentURI) {
5240
5241
  const socialMediaFormName = 'socialMedia.ttl'; // The name of the file to upload
5241
5242
  const DEFAULT_ICON_URI = external_UI_.icons.iconBase + 'noun_10636_grey.svg'; // grey disc
5242
5243
  function SocialPresenter_expandRdfList(store, node) {
5243
- const collectionElements = node.elements;
5244
- if (Array.isArray(collectionElements)) {
5245
- return collectionElements.flatMap(element => SocialPresenter_expandRdfList(store, element));
5246
- }
5247
- const first = store.any(node, external_UI_.ns.rdf('first'));
5248
- if (!first)
5249
- return [node];
5250
- const items = [];
5251
- let current = node;
5252
- while (current) {
5253
- const value = store.any(current, external_UI_.ns.rdf('first'));
5254
- if (value)
5255
- items.push(...SocialPresenter_expandRdfList(store, value));
5256
- const rest = store.any(current, external_UI_.ns.rdf('rest'));
5257
- if (!rest || (rest.termType === 'NamedNode' && rest.value === external_UI_.ns.rdf('nil').value))
5258
- break;
5259
- current = rest;
5244
+ const visited = new Set();
5245
+ function inner(node) {
5246
+ const termType = node.termType || typeof node;
5247
+ const value = node.value || String(node);
5248
+ const key = `${termType}:${value}`;
5249
+ if (visited.has(key))
5250
+ return [];
5251
+ visited.add(key);
5252
+ const collectionElements = node.elements;
5253
+ if (Array.isArray(collectionElements)) {
5254
+ return collectionElements.flatMap(element => inner(element));
5255
+ }
5256
+ const first = store.any(node, external_UI_.ns.rdf('first'));
5257
+ if (!first)
5258
+ return [node];
5259
+ const items = [];
5260
+ let current = node;
5261
+ while (current) {
5262
+ const value = store.any(current, external_UI_.ns.rdf('first'));
5263
+ if (value)
5264
+ items.push(...inner(value));
5265
+ const rest = store.any(current, external_UI_.ns.rdf('rest'));
5266
+ if (!rest || (rest.termType === 'NamedNode' && rest.value === external_UI_.ns.rdf('nil').value))
5267
+ break;
5268
+ current = rest;
5269
+ }
5270
+ return items;
5260
5271
  }
5261
- return items;
5272
+ return inner(node);
5262
5273
  }
5263
5274
  function presentSocial(subject, store) {
5264
5275
  function nameForAccount(subject) {
@@ -5292,12 +5303,18 @@ function presentSocial(subject, store) {
5292
5303
  return DEFAULT_ICON_URI;
5293
5304
  }
5294
5305
  function homepageForAccount(subject) {
5295
- const id = store.anyJS(subject, external_UI_.ns.foaf('accountName'), null, subject.doc()) || '';
5306
+ const acHomepage = store.any(subject, external_UI_.ns.foaf('homepage')); // on the account itself?
5307
+ if (acHomepage)
5308
+ return acHomepage.value;
5309
+ const id = store.anyJS(subject, external_UI_.ns.foaf('accountName'), null, subject.doc()) || 'No_account_Name';
5296
5310
  const classes = store.each(subject, external_UI_.ns.rdf('type'));
5297
5311
  for (const k of classes) {
5298
- const userProfilePrefix = store.any(k, external_UI_.ns.foaf('userProfilePrefix'));
5299
- if (userProfilePrefix) {
5300
- return userProfilePrefix.value + id.trim();
5312
+ // Fix: ensure k is a NamedNode for store.any
5313
+ if (k.termType === 'NamedNode') {
5314
+ const userProfilePrefix = store.any(k, external_UI_.ns.foaf('userProfilePrefix'));
5315
+ if (userProfilePrefix) {
5316
+ return userProfilePrefix.value + id.trim();
5317
+ }
5301
5318
  }
5302
5319
  }
5303
5320
  return store.anyJS(subject, external_UI_.ns.foaf('homepage'), null, subject.doc()) || '';
@@ -5312,12 +5329,22 @@ function presentSocial(subject, store) {
5312
5329
  // we need to load the social media accounts ontology to be able to query all data needed
5313
5330
  loadDocument(store, socialMedia_namespaceObject, socialMediaFormName);
5314
5331
  const accountNodes = store.each(subject, external_UI_.ns.foaf('account'));
5315
- const accountThings = accountNodes.flatMap(node => SocialPresenter_expandRdfList(store, node));
5316
- if (!accountThings.length)
5332
+ let accountThings = accountNodes.flatMap(node => SocialPresenter_expandRdfList(store, node));
5333
+ // Deduplicate by foaf:accountName value
5334
+ const accountNameSet = new Set();
5335
+ const accounts = [];
5336
+ for (const ac of accountThings) {
5337
+ if (ac.termType === 'NamedNode') {
5338
+ const accountNameNode = store.any(ac, external_UI_.ns.foaf('accountName'));
5339
+ const accountName = accountNameNode ? accountNameNode.value : '';
5340
+ if (!accountNameSet.has(accountName)) {
5341
+ accountNameSet.add(accountName);
5342
+ accounts.push(accountAsObject(ac));
5343
+ }
5344
+ }
5345
+ }
5346
+ if (!accounts.length)
5317
5347
  return { accounts: [] };
5318
- //console.log('Social: accountThings', accountThings)
5319
- const accounts = accountThings.map(ac => accountAsObject(ac));
5320
- //console.log('Social: account objects', accounts)
5321
5348
  return { accounts };
5322
5349
  }
5323
5350