Skip to content

Commit 1eb260c

Browse files
Update Node.js & NPM (#952)
* Update Node.js & NPM in project's engines This change updates Node.js to 22.17.0 & NPM to 10.9.2. I chose 22.17.0 version of Node because it's the latest LTS (Long Term Support) version. * Update @vue/test-utils * Update tree-sitter-vue * Fix LanguageSwitcher.spec.js * Fix Column.spec.js * Fix Hero.spec.js * Fix ColorSchemeToggle.spec.js * Fix ImageAsset.spec.js * Fix Pager.spec.js * Fix Assessments.spec.js * Fix swift.spec.js Since highlight.js 11.6+, the `distributed` keyword is built-in and no custom overrides are needed * Fix FilterInput.spec.js * Replace wrapper.find Replace wrapper.find with wrapper.findComponent instead since wrapper.find is deprecated * Wait for wrapper.setProps * Wait for wrapper.setData * Await after .trigger() function * Fix Navigator.spec.js * Fix ReplayableVideoAsset.spec.js * Replace 'Contains' contains is deprecated and will be removed in the next major version. Use `wrapper.find`, `wrapper.findComponent` or `wrapper.get` instead * Wait for nextTick after emitting an event * Fix TopicsLinkCardGridItem.spec.js * Fix components/DocumentationTopic.spec.js * Fix Chapter.spec.js * Fix AdjustableSidebarWidth.spec.js * Fix Availability.spec.js * Fix Hierarchy.spec.js * Fix NavBase.spec.js * Fix DocumentationLayout.spec.js * Fix TopicsLinkBlock.spec.js * Fix CodePreview.spec.js * Fix App.spec.js * Fix DropdownCustom.spec.js * Wait for .setValue() * Fix GenericModal.spec.js * Fix LinksBlock.spec.js * Fix ResourcesTile.spec.js * Fix RelationshipsList.spec.js * Fix all deprecated .is() method warnings * Fix .find() and .get() deprecation warnings * Fix .findAll() deprecation warnings * Fix .contains() deprecation warnings * Fix .isEmpty() deprecation warnings * Fix attachToDocument deprecation warnings * Fix QuickNavigationModal.spec.js * Fix console error warnings for TopicsLinkBlock.spec.js * Fix ResourcesTileGroup.spec.js This change fixes the deprecation warning: [Vue warn]: Duplicate keys detected: 'A'. This may cause an update error. * Fix DeclarationTokenGroup.spec.js * Remove redundant nextTick * Update tree-sitter-javascript and tree-sitter-jsdoc * Make build-script-helper.py use python3 By aiming to update the Node version to 22.17.0 on Swift Docker for Swift DocC Render [1], we need to specify the version 3 of python, otherwise it will try to use python 2 which it's not available in Node 22. [1] swiftlang/swift-docker#487 * Update build-script helper. --------- Co-authored-by: Marcus Ortiz <[email protected]>
1 parent 595cae7 commit 1eb260c

File tree

212 files changed

+10481
-22068
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

212 files changed

+10481
-22068
lines changed

.nvmrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
18.16.1
1+
22.17.0

build-script-helper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ def ensure_npm_is_installed(verbose=False):
7676
# Ensure node_version is a string (decode if it's bytes)
7777
if isinstance(node_version, bytes):
7878
node_version = node_version.decode('utf-8')
79-
if not node_version.strip().startswith('v18.16.'):
80-
warn_msg = "Unexpected version of 'node' installed. Swift-DocC-Render requires node 18.16.1. "\
79+
if not node_version.strip().startswith('v22.17.'):
80+
warn_msg = "Unexpected version of 'node' installed. Swift-DocC-Render requires node v22.17 "\
8181
"See the README.md file for more information about building Swift-DocC-Render."
8282
printerr('-- Warning: %s' % warn_msg)
8383
except:

package-lock.json

Lines changed: 7278 additions & 19059 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"@vue/cli-plugin-unit-jest": "^5.0.8",
4040
"@vue/cli-service": "^5.0.8",
4141
"@vue/eslint-config-airbnb": "^6.0.0",
42-
"@vue/test-utils": "1.0.0-beta.27",
42+
"@vue/test-utils": "1.3.6",
4343
"@vue/vue2-jest": "^27.0.0-alpha.2",
4444
"babel-jest": "^27.0.6",
4545
"eslint": "^7.32.0",
@@ -50,9 +50,9 @@
5050
"jest": "^27.0.5",
5151
"sass": "^1.55.0",
5252
"sass-loader": "^12.0.0",
53-
"tree-sitter": "^0.20.6",
54-
"tree-sitter-javascript": "^0.20.4",
55-
"tree-sitter-jsdoc": "^0.19.0",
53+
"tree-sitter": "^0.21.1",
54+
"tree-sitter-javascript": "^0.23.1",
55+
"tree-sitter-jsdoc": "^0.23.2",
5656
"tree-sitter-vue": "^0.2.1",
5757
"vue": "^2.7.10",
5858
"vue-router": "^3.5.2",
@@ -63,7 +63,12 @@
6363
"vue-router": "^3.5.2"
6464
},
6565
"engines": {
66-
"node": ">=18.16.1 <21",
67-
"npm": ">=9.5.1"
66+
"node": ">=22.17.0 <23",
67+
"npm": ">=10.9.2"
68+
},
69+
"overrides": {
70+
"tree-sitter-vue": {
71+
"nan": "^2.22.2"
72+
}
6873
}
6974
}

src/utils/custom-highlight-lang/swift.js

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,6 @@ import swift from 'highlight.js/lib/languages/swift';
1313
export default function swiftOverride(hljs) {
1414
const language = swift(hljs);
1515

16-
// Temporarily patch the Swift language syntax to recognize `distributed` as
17-
// a keyword until the next version of highlight.js (v11.6) is released, which
18-
// will have built-in support for this [1]
19-
//
20-
// [1]: https://github.com/highlightjs/highlight.js/pull/3523
21-
language.keywords.keyword = [
22-
...language.keywords.keyword,
23-
'distributed',
24-
];
25-
2616
const isClassMode = ({ beginKeywords = '' }) => beginKeywords
2717
.split(' ')
2818
.includes('class');

tests/unit/App.spec.js

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,10 @@ describe('App', () => {
101101
const wrapper = createWrapper();
102102
expect(wrapper.classes('hascustomheader')).toBe(false);
103103

104-
const header = wrapper.find('custom-header-stub');
104+
const header = wrapper.findComponent('custom-header-stub');
105105
expect(header.exists()).toBe(false);
106106

107-
const footer = wrapper.find('custom-footer-stub');
107+
const footer = wrapper.findComponent('custom-footer-stub');
108108
expect(footer.exists()).toBe(false);
109109
});
110110

@@ -115,7 +115,7 @@ describe('App', () => {
115115

116116
it('renders Skip Navigation', () => {
117117
const wrapper = createWrapper();
118-
const skipNavigation = wrapper.find('#skip-nav');
118+
const skipNavigation = wrapper.findComponent('#skip-nav');
119119
expect(skipNavigation.text()).toBe('accessibility.skip-navigation');
120120
expect(skipNavigation.attributes('href')).toBe('#app-main');
121121
});
@@ -126,7 +126,7 @@ describe('App', () => {
126126
header: '<div class="header">Header</div>',
127127
},
128128
});
129-
const header = wrapper.find('.header');
129+
const header = wrapper.findComponent('.header');
130130
expect(header.text()).toBe('Header');
131131
});
132132

@@ -135,49 +135,49 @@ describe('App', () => {
135135
getSetting.mockReturnValue(true);
136136

137137
const wrapper = createWrapper();
138-
wrapper.setData({
138+
await wrapper.setData({
139139
appState: {
140140
...wrapper.vm.appState,
141141
availableLocales,
142142
},
143143
});
144144

145-
const SuggestLangComponent = wrapper.find(SuggestLang);
145+
const SuggestLangComponent = wrapper.findComponent(SuggestLang);
146146
expect(SuggestLangComponent.exists()).toBe(true);
147147
});
148148

149-
it('renders LocaleSelector if enablei18n is true', () => {
149+
it('renders LocaleSelector if enablei18n is true', async () => {
150150
const { LocaleSelector } = App.components;
151151
({ getSetting } = require('docc-render/utils/theme-settings'));
152152
getSetting.mockReturnValue(true);
153153

154154
const wrapper = createWrapper();
155-
expect(wrapper.find(LocaleSelector).exists()).toBe(false);
156-
wrapper.setData({
155+
expect(wrapper.findComponent(LocaleSelector).exists()).toBe(false);
156+
await wrapper.setData({
157157
appState: {
158158
...wrapper.vm.appState,
159159
availableLocales,
160160
},
161161
});
162162

163-
expect(wrapper.find(LocaleSelector).exists()).toBe(true);
163+
expect(wrapper.findComponent(LocaleSelector).exists()).toBe(true);
164164
});
165165

166-
it('does not render LocaleSelector if there is less than two available locales', () => {
166+
it('does not render LocaleSelector if there is less than two available locales', async () => {
167167
const { LocaleSelector } = App.components;
168168
({ getSetting } = require('docc-render/utils/theme-settings'));
169169
getSetting.mockReturnValue(true);
170170

171171
const wrapper = createWrapper();
172-
expect(wrapper.find(LocaleSelector).exists()).toBe(false);
173-
wrapper.setData({
172+
expect(wrapper.findComponent(LocaleSelector).exists()).toBe(false);
173+
await wrapper.setData({
174174
appState: {
175175
...wrapper.vm.appState,
176176
availableLocales: ['en-US'],
177177
},
178178
});
179179

180-
expect(wrapper.find(LocaleSelector).exists()).toBe(false);
180+
expect(wrapper.findComponent(LocaleSelector).exists()).toBe(false);
181181
});
182182

183183
it('renders the `#nav-sticky-anchor` between the header and loading placeholder', () => {
@@ -186,9 +186,9 @@ describe('App', () => {
186186
header: '<div class="header">Footer</div>',
187187
},
188188
});
189-
const header = wrapper.find('.header');
190-
const stickyAnchor = wrapper.find(`#${baseNavStickyAnchorId}`);
191-
const loadingPlaceholder = wrapper.find(InitialLoadingPlaceholder);
189+
const header = wrapper.findComponent('.header');
190+
const stickyAnchor = wrapper.findComponent(`#${baseNavStickyAnchorId}`);
191+
const loadingPlaceholder = wrapper.findComponent(InitialLoadingPlaceholder);
192192

193193
// make sure the anchor is below the header and above the content
194194
expect(header.element.nextElementSibling).toBe(stickyAnchor.element);
@@ -201,9 +201,9 @@ describe('App', () => {
201201
default: '<div class="default">Default</div>',
202202
},
203203
});
204-
const stickyAnchor = wrapper.find(`#${baseNavStickyAnchorId}`);
205-
const content = wrapper.find('.default');
206-
const placeholder = wrapper.find(InitialLoadingPlaceholder);
204+
const stickyAnchor = wrapper.findComponent(`#${baseNavStickyAnchorId}`);
205+
const content = wrapper.findComponent('.default');
206+
const placeholder = wrapper.findComponent(InitialLoadingPlaceholder);
207207
// make sure the anchor is below the header and above the content
208208
expect(placeholder.exists()).toBe(true);
209209
expect(stickyAnchor.element.nextElementSibling).toBe(placeholder.element);
@@ -216,7 +216,7 @@ describe('App', () => {
216216
footer: '<div class="footer-slot">Footer</div>',
217217
},
218218
});
219-
const footer = wrapper.find('.footer-slot');
219+
const footer = wrapper.findComponent('.footer-slot');
220220
expect(footer.text()).toBe('Footer');
221221
});
222222

@@ -226,22 +226,22 @@ describe('App', () => {
226226
default: '<div class="default">Default</div>',
227227
},
228228
});
229-
const slotContent = wrapper.find('.default');
229+
const slotContent = wrapper.findComponent('.default');
230230
expect(slotContent.text()).toBe('Default');
231-
expect(wrapper.find('router-view-stub').exists()).toBe(false);
231+
expect(wrapper.findComponent('router-view-stub').exists()).toBe(false);
232232
});
233233

234-
it('renders a default `Footer` for non-IDE targets', () => {
234+
it('renders a default `Footer` for non-IDE targets', async () => {
235235
const wrapper = createWrapper();
236-
expect(wrapper.contains(Footer)).toBe(true);
236+
expect(wrapper.findComponent(Footer).exists()).toBe(true);
237237

238-
wrapper.setData({ isTargetIDE: true });
239-
expect(wrapper.contains(Footer)).toBe(false);
238+
await wrapper.setData({ isTargetIDE: true });
239+
expect(wrapper.findComponent(Footer).exists()).toBe(false);
240240
});
241241

242242
it('renders the app-top element', () => {
243243
const wrapper = createWrapper();
244-
expect(wrapper.find(`#${AppTopID}`).exists()).toBe(true);
244+
expect(wrapper.findComponent(`#${AppTopID}`).exists()).toBe(true);
245245
});
246246

247247
describe('Custom CSS Properties', () => {
@@ -295,7 +295,7 @@ describe('App', () => {
295295
matches: true,
296296
});
297297
const wrapper = createWrapper();
298-
wrapper.setData({
298+
await wrapper.setData({
299299
appState: {
300300
...wrapper.vm.appState,
301301
preferredColorScheme: ColorScheme.auto,
@@ -308,7 +308,7 @@ describe('App', () => {
308308

309309
it('dynamically changes the data, upon color scheme change (in auto mode)', async () => {
310310
const wrapper = createWrapper();
311-
wrapper.setData({
311+
await wrapper.setData({
312312
appState: {
313313
...wrapper.vm.appState,
314314
preferredColorScheme: ColorScheme.auto,
@@ -317,13 +317,14 @@ describe('App', () => {
317317
await flushPromises();
318318
expect(setPropertySpy).toHaveBeenCalledWith('--text', LightDarkModeCSSSettings.text.light);
319319
matchMedia.addListener.mock.calls[0][0].call(wrapper.vm, { matches: true });
320+
await wrapper.vm.$nextTick();
320321
expect(setPropertySpy).toHaveBeenCalledTimes(2);
321322
expect(setPropertySpy).toHaveBeenCalledWith('--text', LightDarkModeCSSSettings.text.dark);
322323
});
323324

324325
it('updates the values applied to the root, if the colors update', async () => {
325326
const wrapper = createWrapper();
326-
wrapper.setData({
327+
await wrapper.setData({
327328
appState: {
328329
...wrapper.vm.appState,
329330
preferredColorScheme: ColorScheme.auto,
@@ -334,6 +335,7 @@ describe('App', () => {
334335
expect(setPropertySpy).toHaveBeenCalledTimes(1);
335336
expect(setPropertySpy).toHaveBeenCalledWith('--text', 'light');
336337
matchMedia.addListener.mock.calls[0][0].call(wrapper.vm, { matches: true });
338+
await wrapper.vm.$nextTick();
337339
expect(removePropertySpy).toHaveBeenCalledTimes(2);
338340
expect(removePropertySpy).toHaveBeenLastCalledWith('--text');
339341
expect(setPropertySpy).toHaveBeenCalledWith('--text', 'dark');
@@ -365,7 +367,7 @@ describe('App', () => {
365367
});
366368

367369
it('renders a <custom-header>', () => {
368-
const header = wrapper.find('custom-header-stub');
370+
const header = wrapper.findComponent('custom-header-stub');
369371
expect(header.exists()).toBe(true);
370372
expect(header.attributes('data-color-scheme')).toBeDefined();
371373
});
@@ -376,15 +378,15 @@ describe('App', () => {
376378
header: '<div class="header">Header</div>',
377379
},
378380
});
379-
const header = wrapper.find('custom-header-stub');
381+
const header = wrapper.findComponent('custom-header-stub');
380382
expect(header.exists()).toBe(false);
381383
});
382384
});
383385

384386
it('renders a <custom-footer> if one has been defined', () => {
385387
window.customElements.get.mockImplementation(name => name === 'custom-footer');
386388
const wrapper = createWrapper();
387-
const footer = wrapper.find('custom-footer-stub');
389+
const footer = wrapper.findComponent('custom-footer-stub');
388390
expect(footer.exists()).toBe(true);
389391
expect(footer.attributes('data-color-scheme')).toBeDefined();
390392
});

0 commit comments

Comments
 (0)