@lvce-editor/extension-detail-view 7.8.0 → 7.10.0
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.
|
@@ -20,6 +20,7 @@ const Copy = 'Copy';
|
|
|
20
20
|
const CopyImage = 'Copy Image';
|
|
21
21
|
const CopyImageUrl = 'Copy Image Url';
|
|
22
22
|
const CopyLink = 'Copy Link';
|
|
23
|
+
const Created = 'Created';
|
|
23
24
|
const Details$1 = 'Details';
|
|
24
25
|
const Disable$1 = 'Disable';
|
|
25
26
|
const Elements = 'Elements';
|
|
@@ -214,6 +215,9 @@ const identifier = () => {
|
|
|
214
215
|
const version = () => {
|
|
215
216
|
return i18nString(Version);
|
|
216
217
|
};
|
|
218
|
+
const created = () => {
|
|
219
|
+
return i18nString(Created);
|
|
220
|
+
};
|
|
217
221
|
const lastUpdated = () => {
|
|
218
222
|
return i18nString(LastUpdated);
|
|
219
223
|
};
|
|
@@ -2492,6 +2496,9 @@ const enable2 = (id, platform) => {
|
|
|
2492
2496
|
const disable2 = (id, platform) => {
|
|
2493
2497
|
return invoke$4(`Extensions.disable2`, id, platform);
|
|
2494
2498
|
};
|
|
2499
|
+
const getLanguages = (platform, assetDir) => {
|
|
2500
|
+
return invoke$4('Extensions.getLanguages', platform, assetDir);
|
|
2501
|
+
};
|
|
2495
2502
|
|
|
2496
2503
|
const {
|
|
2497
2504
|
invoke: invoke$3,
|
|
@@ -3417,6 +3424,7 @@ const create = (uid, uri, x, y, width, height, platform, assetDir) => {
|
|
|
3417
3424
|
changelogVirtualDom: [],
|
|
3418
3425
|
commands: [],
|
|
3419
3426
|
commit: '',
|
|
3427
|
+
created: null,
|
|
3420
3428
|
currentColorThemeId: '',
|
|
3421
3429
|
description: '',
|
|
3422
3430
|
detailsVirtualDom: [],
|
|
@@ -3439,6 +3447,7 @@ const create = (uid, uri, x, y, width, height, platform, assetDir) => {
|
|
|
3439
3447
|
initial: true,
|
|
3440
3448
|
installationEntries: [],
|
|
3441
3449
|
jsonValidation: [],
|
|
3450
|
+
languages: [],
|
|
3442
3451
|
lastUpdated: null,
|
|
3443
3452
|
linkProtectionEnabled: false,
|
|
3444
3453
|
locationHost: '',
|
|
@@ -4070,6 +4079,42 @@ const getSideBarWidth = width => {
|
|
|
4070
4079
|
return Math.max(175 + Math.round(20 * (width / 100)), Math.round(width / 4));
|
|
4071
4080
|
};
|
|
4072
4081
|
|
|
4082
|
+
const getStringArray = value => {
|
|
4083
|
+
if (!Array.isArray(value)) {
|
|
4084
|
+
return undefined;
|
|
4085
|
+
}
|
|
4086
|
+
return value.filter(item => typeof item === 'string');
|
|
4087
|
+
};
|
|
4088
|
+
const toSyntaxLanguage = value => {
|
|
4089
|
+
if (!value || typeof value !== 'object') {
|
|
4090
|
+
return undefined;
|
|
4091
|
+
}
|
|
4092
|
+
const language = value;
|
|
4093
|
+
if (typeof language.id !== 'string' || typeof language.tokenize !== 'string') {
|
|
4094
|
+
return undefined;
|
|
4095
|
+
}
|
|
4096
|
+
return {
|
|
4097
|
+
aliases: getStringArray(language.aliases),
|
|
4098
|
+
extensions: getStringArray(language.extensions),
|
|
4099
|
+
id: language.id,
|
|
4100
|
+
tokenize: language.tokenize
|
|
4101
|
+
};
|
|
4102
|
+
};
|
|
4103
|
+
const getSyntaxLanguages = async (platform, assetDir) => {
|
|
4104
|
+
try {
|
|
4105
|
+
const languages = await getLanguages(platform, assetDir);
|
|
4106
|
+
if (!Array.isArray(languages)) {
|
|
4107
|
+
return [];
|
|
4108
|
+
}
|
|
4109
|
+
return languages.flatMap(language => {
|
|
4110
|
+
const syntaxLanguage = toSyntaxLanguage(language);
|
|
4111
|
+
return syntaxLanguage ? [syntaxLanguage] : [];
|
|
4112
|
+
});
|
|
4113
|
+
} catch {
|
|
4114
|
+
return [];
|
|
4115
|
+
}
|
|
4116
|
+
};
|
|
4117
|
+
|
|
4073
4118
|
const getTabs = (selectedTab, hasReadme, hasFeatures, hasChangelog) => {
|
|
4074
4119
|
const tabs = [{
|
|
4075
4120
|
enabled: hasReadme,
|
|
@@ -4419,6 +4464,39 @@ const getFolderSize = async uri => {
|
|
|
4419
4464
|
}
|
|
4420
4465
|
};
|
|
4421
4466
|
|
|
4467
|
+
const minute = 60 * 1000;
|
|
4468
|
+
const hour = 60 * minute;
|
|
4469
|
+
const day = 24 * hour;
|
|
4470
|
+
const month = 30 * day;
|
|
4471
|
+
const year = 365 * day;
|
|
4472
|
+
const relativeTimeFormat = new Intl.RelativeTimeFormat(undefined, {
|
|
4473
|
+
numeric: 'always'
|
|
4474
|
+
});
|
|
4475
|
+
const getRelativeValue = diff => {
|
|
4476
|
+
const absoluteDiff = Math.abs(diff);
|
|
4477
|
+
if (absoluteDiff >= year) {
|
|
4478
|
+
return [Math.trunc(diff / year), 'year'];
|
|
4479
|
+
}
|
|
4480
|
+
if (absoluteDiff >= month) {
|
|
4481
|
+
return [Math.trunc(diff / month), 'month'];
|
|
4482
|
+
}
|
|
4483
|
+
if (absoluteDiff >= day) {
|
|
4484
|
+
return [Math.trunc(diff / day), 'day'];
|
|
4485
|
+
}
|
|
4486
|
+
if (absoluteDiff >= hour) {
|
|
4487
|
+
return [Math.trunc(diff / hour), 'hour'];
|
|
4488
|
+
}
|
|
4489
|
+
return [Math.trunc(diff / minute), 'minute'];
|
|
4490
|
+
};
|
|
4491
|
+
const formatCreated = (created, now = Date.now()) => {
|
|
4492
|
+
if (created === null || !Number.isFinite(created)) {
|
|
4493
|
+
return 'n/a';
|
|
4494
|
+
}
|
|
4495
|
+
const diff = created - now;
|
|
4496
|
+
const [value, unit] = getRelativeValue(diff);
|
|
4497
|
+
return relativeTimeFormat.format(value, unit);
|
|
4498
|
+
};
|
|
4499
|
+
|
|
4422
4500
|
const formatLastUpdated = lastUpdated => {
|
|
4423
4501
|
if (lastUpdated === null) {
|
|
4424
4502
|
return 'n/a';
|
|
@@ -4450,22 +4528,38 @@ const getSizeEntries = (showSizeLink, displaySize, extensionUri) => {
|
|
|
4450
4528
|
}];
|
|
4451
4529
|
};
|
|
4452
4530
|
|
|
4453
|
-
const
|
|
4531
|
+
const addOddEntries = entries => {
|
|
4532
|
+
return entries.map((entry, index) => {
|
|
4533
|
+
if (index % 2 === 0) {
|
|
4534
|
+
return {
|
|
4535
|
+
...entry,
|
|
4536
|
+
odd: true
|
|
4537
|
+
};
|
|
4538
|
+
}
|
|
4539
|
+
return entry;
|
|
4540
|
+
});
|
|
4541
|
+
};
|
|
4542
|
+
const getInstallationEntries = (displaySize, extensionId, extensionVersion, extensionUri, showSizeLink, created$1, lastUpdated$1) => {
|
|
4454
4543
|
const entries = [{
|
|
4455
4544
|
code: true,
|
|
4456
4545
|
key: identifier(),
|
|
4457
|
-
odd: true,
|
|
4458
4546
|
value: extensionId
|
|
4459
4547
|
}, {
|
|
4460
4548
|
code: true,
|
|
4461
4549
|
key: version(),
|
|
4462
4550
|
value: extensionVersion
|
|
4463
|
-
}
|
|
4551
|
+
}];
|
|
4552
|
+
if (created$1 !== null) {
|
|
4553
|
+
entries.push({
|
|
4554
|
+
key: created(),
|
|
4555
|
+
value: formatCreated(created$1)
|
|
4556
|
+
});
|
|
4557
|
+
}
|
|
4558
|
+
entries.push({
|
|
4464
4559
|
key: lastUpdated(),
|
|
4465
|
-
odd: true,
|
|
4466
4560
|
value: formatLastUpdated(lastUpdated$1)
|
|
4467
|
-
}, ...getSizeEntries(showSizeLink, displaySize, extensionUri)
|
|
4468
|
-
return entries;
|
|
4561
|
+
}, ...getSizeEntries(showSizeLink, displaySize, extensionUri));
|
|
4562
|
+
return addOddEntries(entries);
|
|
4469
4563
|
};
|
|
4470
4564
|
|
|
4471
4565
|
const getMarketplaceEntries = isBuiltin => {
|
|
@@ -4566,10 +4660,10 @@ const getResources = (isBuiltin, extension) => {
|
|
|
4566
4660
|
return rawResources.filter(resource => resource.enabled);
|
|
4567
4661
|
};
|
|
4568
4662
|
|
|
4569
|
-
const loadSideBarContent = async (extensionId, extensionVersion, extensionUri, isBuiltin, extension, showSizeLink, lastUpdated) => {
|
|
4663
|
+
const loadSideBarContent = async (extensionId, extensionVersion, extensionUri, isBuiltin, extension, showSizeLink, created, lastUpdated) => {
|
|
4570
4664
|
const folderSize = await getFolderSize(extensionUri);
|
|
4571
4665
|
const displaySize = getDisplaySize(folderSize);
|
|
4572
|
-
const installationEntries = getInstallationEntries(displaySize, extensionId, extensionVersion, extensionUri, showSizeLink, lastUpdated);
|
|
4666
|
+
const installationEntries = getInstallationEntries(displaySize, extensionId, extensionVersion, extensionUri, showSizeLink, created, lastUpdated);
|
|
4573
4667
|
const marketplaceEntries = getMarketplaceEntries(isBuiltin);
|
|
4574
4668
|
const categories = getCategories(extension);
|
|
4575
4669
|
const resources = getResources(isBuiltin, extension);
|
|
@@ -4583,6 +4677,23 @@ const loadSideBarContent = async (extensionId, extensionVersion, extensionUri, i
|
|
|
4583
4677
|
};
|
|
4584
4678
|
};
|
|
4585
4679
|
|
|
4680
|
+
const parseCreated = extension => {
|
|
4681
|
+
if (!extension || typeof extension !== 'object') {
|
|
4682
|
+
return null;
|
|
4683
|
+
}
|
|
4684
|
+
const {
|
|
4685
|
+
created
|
|
4686
|
+
} = extension;
|
|
4687
|
+
if (typeof created !== 'string' || created === '') {
|
|
4688
|
+
return null;
|
|
4689
|
+
}
|
|
4690
|
+
const timestamp = Date.parse(created);
|
|
4691
|
+
if (!Number.isFinite(timestamp)) {
|
|
4692
|
+
return null;
|
|
4693
|
+
}
|
|
4694
|
+
return timestamp;
|
|
4695
|
+
};
|
|
4696
|
+
|
|
4586
4697
|
const parseLastUpdated = extension => {
|
|
4587
4698
|
if (!extension || typeof extension !== 'object') {
|
|
4588
4699
|
return null;
|
|
@@ -4671,6 +4782,7 @@ const loadContent = async (state, platform, savedState, isTest = false) => {
|
|
|
4671
4782
|
}
|
|
4672
4783
|
const currentColorThemeId = await getCurrentColorTheme();
|
|
4673
4784
|
const commit = await getCommit();
|
|
4785
|
+
const languages = await getSyntaxLanguages(platform, state.assetDir);
|
|
4674
4786
|
const headerData = loadHeaderContent(state, platform, extension);
|
|
4675
4787
|
const {
|
|
4676
4788
|
badge,
|
|
@@ -4695,6 +4807,7 @@ const loadContent = async (state, platform, savedState, isTest = false) => {
|
|
|
4695
4807
|
const readmeHtml = await renderMarkdown(readmeContent, {
|
|
4696
4808
|
baseUrl,
|
|
4697
4809
|
commit,
|
|
4810
|
+
languages,
|
|
4698
4811
|
linksExternal: true,
|
|
4699
4812
|
locationProtocol
|
|
4700
4813
|
});
|
|
@@ -4719,6 +4832,7 @@ const loadContent = async (state, platform, savedState, isTest = false) => {
|
|
|
4719
4832
|
const enabledTabs = tabs.filter(isEnabled);
|
|
4720
4833
|
const sizeValue = getViewletSize(width || 0);
|
|
4721
4834
|
const showSizeLink = platform !== Web$1;
|
|
4835
|
+
const created = parseCreated(extension);
|
|
4722
4836
|
const lastUpdated = parseLastUpdated(extension);
|
|
4723
4837
|
const {
|
|
4724
4838
|
categories,
|
|
@@ -4727,7 +4841,7 @@ const loadContent = async (state, platform, savedState, isTest = false) => {
|
|
|
4727
4841
|
installationEntries,
|
|
4728
4842
|
marketplaceEntries,
|
|
4729
4843
|
resources
|
|
4730
|
-
} = await loadSideBarContent(extensionId, extensionVersion, extensionUri, isBuiltin, extension, showSizeLink, lastUpdated);
|
|
4844
|
+
} = await loadSideBarContent(extensionId, extensionVersion, extensionUri, isBuiltin, extension, showSizeLink, created, lastUpdated);
|
|
4731
4845
|
const padding = getPadding(width);
|
|
4732
4846
|
const sideBarWidth = getSideBarWidth(width);
|
|
4733
4847
|
const showSideBar = sideBarWidth > 0;
|
|
@@ -4740,6 +4854,7 @@ const loadContent = async (state, platform, savedState, isTest = false) => {
|
|
|
4740
4854
|
categories,
|
|
4741
4855
|
changelogScrollTop,
|
|
4742
4856
|
commit,
|
|
4857
|
+
created,
|
|
4743
4858
|
currentColorThemeId,
|
|
4744
4859
|
description,
|
|
4745
4860
|
detailsVirtualDom,
|
|
@@ -4757,6 +4872,7 @@ const loadContent = async (state, platform, savedState, isTest = false) => {
|
|
|
4757
4872
|
iconSrc,
|
|
4758
4873
|
initial: false,
|
|
4759
4874
|
installationEntries,
|
|
4875
|
+
languages,
|
|
4760
4876
|
lastUpdated,
|
|
4761
4877
|
linkProtectionEnabled,
|
|
4762
4878
|
locationHost,
|
|
@@ -4980,12 +5096,14 @@ const selectTabChangelog = async state => {
|
|
|
4980
5096
|
const {
|
|
4981
5097
|
baseUrl,
|
|
4982
5098
|
extension,
|
|
5099
|
+
languages,
|
|
4983
5100
|
locationProtocol,
|
|
4984
5101
|
tabs
|
|
4985
5102
|
} = state;
|
|
4986
5103
|
const changelogContent = await loadChangelogContent(extension.path); // TODO use uri
|
|
4987
5104
|
const changelogMarkdownHtml = await renderMarkdown(changelogContent, {
|
|
4988
5105
|
baseUrl,
|
|
5106
|
+
languages,
|
|
4989
5107
|
locationProtocol
|
|
4990
5108
|
});
|
|
4991
5109
|
const changelogDom = await getMarkdownVirtualDom(changelogMarkdownHtml);
|
|
@@ -5010,6 +5128,7 @@ const selectTabDefault = async state => {
|
|
|
5010
5128
|
const selectTabDetails = async state => {
|
|
5011
5129
|
const {
|
|
5012
5130
|
baseUrl,
|
|
5131
|
+
languages,
|
|
5013
5132
|
locationProtocol,
|
|
5014
5133
|
readmeUrl,
|
|
5015
5134
|
tabs
|
|
@@ -5017,6 +5136,7 @@ const selectTabDetails = async state => {
|
|
|
5017
5136
|
const readmeContent = await loadReadmeContent(readmeUrl);
|
|
5018
5137
|
const readmeHtml = await renderMarkdown(readmeContent, {
|
|
5019
5138
|
baseUrl,
|
|
5139
|
+
languages,
|
|
5020
5140
|
linksExternal: true,
|
|
5021
5141
|
locationProtocol
|
|
5022
5142
|
});
|
|
@@ -5102,6 +5222,7 @@ const handleTabsClick = (state, name) => {
|
|
|
5102
5222
|
|
|
5103
5223
|
const hideSizeLink = state => {
|
|
5104
5224
|
const {
|
|
5225
|
+
created,
|
|
5105
5226
|
displaySize,
|
|
5106
5227
|
extensionId,
|
|
5107
5228
|
extensionUri,
|
|
@@ -5109,7 +5230,7 @@ const hideSizeLink = state => {
|
|
|
5109
5230
|
lastUpdated
|
|
5110
5231
|
} = state;
|
|
5111
5232
|
const newShowSizeLink = false;
|
|
5112
|
-
const installationEntries = getInstallationEntries(displaySize, extensionId, extensionVersion, extensionUri, newShowSizeLink, lastUpdated);
|
|
5233
|
+
const installationEntries = getInstallationEntries(displaySize, extensionId, extensionVersion, extensionUri, newShowSizeLink, created, lastUpdated);
|
|
5113
5234
|
return {
|
|
5114
5235
|
...state,
|
|
5115
5236
|
installationEntries,
|
|
@@ -5338,7 +5459,7 @@ const getExtraProps = (title, onClick) => {
|
|
|
5338
5459
|
props.title = title;
|
|
5339
5460
|
}
|
|
5340
5461
|
if (onClick) {
|
|
5341
|
-
props.style = 'cursor: pointer';
|
|
5462
|
+
props.style = 'color: var(--vscode-textLink-foreground, #3794ff); cursor: pointer; text-decoration: none';
|
|
5342
5463
|
props.tabIndex = 0;
|
|
5343
5464
|
}
|
|
5344
5465
|
return props;
|