├── .editorconfig
├── .gitignore
├── .travis.yml
├── Gruntfile.js
├── README.md
├── bdd-describe.sublime-snippet
├── bdd-ita.sublime-snippet
├── bdd-itp.sublime-snippet
├── bdd-its.sublime-snippet
├── console-dir.sublime-snippet
├── console-error.sublime-snippet
├── console-info.sublime-snippet
├── console-log.sublime-snippet
├── console-warn.sublime-snippet
├── dom-addEvent.sublime-snippet
├── dom-attrGet.sublime-snippet
├── dom-attrRemove.sublime-snippet
├── dom-attrSet.sublime-snippet
├── dom-childAppend.sublime-snippet
├── dom-childRemove.sublime-snippet
├── dom-classAdd.sublime-snippet
├── dom-classRemove.sublime-snippet
├── dom-classToggle.sublime-snippet
├── dom-createDocumentFragment.sublime-snippet
├── dom-createElement.sublime-snippet
├── dom-getByClass.sublime-snippet
├── dom-getById.sublime-snippet
├── dom-getByTag.sublime-snippet
├── dom-innerHTML.sublime-snippet
├── dom-query.sublime-snippet
├── dom-queryAll.sublime-snippet
├── dom-textContent.sublime-snippet
├── for-each.sublime-snippet
├── for-in.sublime-snippet
├── function-anonymous.sublime-snippet
├── function-apply.sublime-snippet
├── function-call.sublime-snippet
├── function-iife.sublime-snippet
├── function-objectProperty.sublime-snippet
├── function-prototype.sublime-snippet
├── function.sublime-snippet
├── json-parse.sublime-snippet
├── json-stringify.sublime-snippet
├── misc-alert.sublime-snippet
├── misc-confirm.sublime-snippet
├── misc-debugger.sublime-snippet
├── misc-prompt.sublime-snippet
├── misc-useStrict.sublime-snippet
├── node-assertDeepEqual.sublime-snippet
├── node-assertEqual.sublime-snippet
├── node-assertNotEqual.sublime-snippet
├── node-moduleExports.sublime-snippet
├── node-processExit.sublime-snippet
├── node-require.sublime-snippet
├── package.json
├── timer-setInterval.sublime-snippet
└── timer-setTimeout.sublime-snippet
/.editorconfig:
--------------------------------------------------------------------------------
1 | # This file is for unifying the coding style for different editors and IDEs
2 | # editorconfig.org
3 |
4 | root = true
5 |
6 | [*]
7 | end_of_line = lf
8 | insert_final_newline = false
9 | indent_style = tab
10 | indent_size = 4
11 | end_of_line = lf
12 | charset = utf-8
13 | trim_trailing_whitespace = true
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 0.10
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function(grunt) {
2 | grunt.initConfig({
3 | bump: {
4 | options: {
5 | files: ['package.json'],
6 | commit: true,
7 | commitMessage: 'Release v%VERSION%',
8 | commitFiles: ['package.json'],
9 | createTag: true,
10 | tagName: '%VERSION%',
11 | tagMessage: '',
12 | push: true,
13 | pushTo: 'origin'
14 | }
15 | },
16 |
17 | lintspaces: {
18 | all: {
19 | src: ['*'],
20 | options: {
21 | editorconfig: '.editorconfig'
22 | }
23 | }
24 | }
25 | });
26 |
27 | grunt.loadNpmTasks('grunt-bump');
28 | grunt.loadNpmTasks('grunt-lintspaces');
29 |
30 | grunt.registerTask('default', ['lintspaces']);
31 | };
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # JavaScript Snippets for Sublime [](https://travis-ci.org/zenorocha/sublime-javascript-snippets)
2 |
3 | 
4 |
5 | ## Install
6 |
7 | To install through [Package Control](http://wbond.net/sublime_packages/package_control),
8 | search for **JavaScript & NodeJS Snippets**. If you still don't have Package Control in Sublime Text, [go get it](http://wbond.net/sublime_packages/package_control/installation).
9 | It's pure awesomeness.
10 |
11 | If you prefer to install it manually, you can download the package and put it inside your `Packages` directory. It should work but will not update automatically.
12 |
13 | ## Console
14 |
15 | ### [cd] console.dir
16 |
17 | ```javascript
18 | console.dir(${1:obj});
19 | ```
20 |
21 | ### [ce] console.error
22 |
23 | ```javascript
24 | console.error(${1:obj});
25 | ```
26 |
27 | ### [ci] console.info
28 |
29 | ```javascript
30 | console.info(${1:obj});
31 | ```
32 |
33 | ### [cl] console.log
34 |
35 | ```javascript
36 | console.log(${1:obj});
37 | ```
38 |
39 | ### [cw] console.warn
40 |
41 | ```javascript
42 | console.warn(${1:obj});
43 | ```
44 |
45 | ### [de] debugger
46 |
47 | ```javascript
48 | debugger;
49 | ```
50 |
51 | ## DOM
52 |
53 | ### [ae] addEventListener
54 |
55 | ```javascript
56 | ${1:document}.addEventListener('${2:event}', function(e) {
57 | ${3}
58 | });
59 | ```
60 |
61 | ### [ac] appendChild
62 |
63 | ```javascript
64 | ${1:document}.appendChild(${2:elem});
65 | ```
66 |
67 | ### [rc] removeChild
68 |
69 | ```javascript
70 | ${1:document}.removeChild(${2:elem});
71 | ```
72 |
73 | ### [cel] createElement
74 |
75 | ```javascript
76 | ${1:document}.createElement(${2:elem});
77 | ```
78 |
79 | ### [cdf] createDocumentFragment
80 |
81 | ```javascript
82 | ${1:document}.createDocumentFragment();
83 | ```
84 |
85 | ### [ca] classList.add
86 |
87 | ```javascript
88 | ${1:document}.classList.add('${2:class}');
89 | ```
90 |
91 | ### [ct] classList.toggle
92 |
93 | ```javascript
94 | ${1:document}.classList.toggle('${2:class}');
95 | ```
96 |
97 | ### [cr] classList.remove
98 |
99 | ```javascript
100 | ${1:document}.classList.remove('${2:class}');
101 | ```
102 |
103 | ### [gi] getElementById
104 |
105 | ```javascript
106 | ${1:document}.getElementById('${2:id}');
107 | ```
108 |
109 | ### [gc] getElementsByClassName
110 |
111 | ```javascript
112 | ${1:document}.getElementsByClassName('${2:class}');
113 | ```
114 |
115 | ### [gt] getElementsByTagName
116 |
117 | ```javascript
118 | ${1:document}.getElementsByTagName('${2:tag}');
119 | ```
120 |
121 | ### [ga] getAttribute
122 |
123 | ```javascript
124 | ${1:document}.getAttribute('${2:attr}');
125 | ```
126 |
127 | ### [sa] setAttribute
128 |
129 | ```javascript
130 | ${1:document}.setAttribute('${2:attr}', ${3:value});
131 | ```
132 |
133 | ### [ra] removeAttribute
134 |
135 | ```javascript
136 | ${1:document}.removeAttribute('${2:attr}');
137 | ```
138 |
139 | ### [ih] innerHTML
140 |
141 | ```javascript
142 | ${1:document}.innerHTML = '${2:elem}';
143 | ```
144 |
145 | ### [tc] textContent
146 |
147 | ```javascript
148 | ${1:document}.textContent = '${2:content}';
149 | ```
150 |
151 | ### [qs] querySelector
152 |
153 | ```javascript
154 | ${1:document}.querySelector('${2:selector}');
155 | ```
156 |
157 | ### [qsa] querySelectorAll
158 |
159 | ```javascript
160 | ${1:document}.querySelectorAll('${2:selector}');
161 | ```
162 |
163 | ## Loop
164 |
165 | ### [fe] forEach
166 |
167 | ```javascript
168 | ${1:myArray}.forEach(function(${2:elem}) {
169 | ${3}
170 | });
171 | ```
172 |
173 | ### [fi] for in
174 |
175 | ```javascript
176 | for (${1:prop} in ${2:obj}) {
177 | if (${2:obj}.hasOwnProperty(${1:prop})) {
178 | ${3}
179 | }
180 | }
181 | ```
182 |
183 | ## Function
184 |
185 | ### [fn] function
186 |
187 | ```javascript
188 | function ${1:methodName}(${2:arguments}) {
189 | ${3}
190 | }
191 | ```
192 |
193 | ### [afn] anonymous function
194 |
195 | ```javascript
196 | function(${1:arguments}) {
197 | ${2}
198 | }
199 | ```
200 |
201 | ### [pr] prototype
202 |
203 | ```javascript
204 | ${1:ClassName}.prototype.${2:methodName} = function(${3:arguments}) {
205 | ${4}
206 | }
207 | ```
208 |
209 | ### [iife] immediately-invoked function expression
210 |
211 | ```javascript
212 | (function(${1:window}, ${2:document}) {
213 | ${1}
214 | })(${1:window}, ${2:document});
215 | ```
216 |
217 | ### [call] function call
218 |
219 | ```javascript
220 | ${1:methodName}.call(${2:context}, ${3:arguments})
221 | ```
222 |
223 | ### [apply] function apply
224 |
225 | ```javascript
226 | ${1:methodName}.apply(${2:context}, [${3:arguments}])
227 | ```
228 |
229 | ### [ofn] function as a property of an object
230 |
231 | ```javascript
232 | ${1:functionName}: function (${2:arguments}) {
233 | ${3}
234 | }
235 | ```
236 |
237 | ## JSON
238 |
239 | ### [jp] JSON.parse
240 |
241 | ```javascript
242 | JSON.parse(${1:obj});
243 | ```
244 |
245 | ### [js] JSON.stringify
246 |
247 | ```javascript
248 | JSON.stringify(${1:obj});
249 | ```
250 |
251 | ## Timer
252 |
253 | ### [si] setInterval
254 |
255 | ```javascript
256 | setInterval(function() {
257 | ${2}
258 | }, ${1:delay});
259 | ```
260 |
261 | ### [st] setTimeout
262 |
263 | ```javascript
264 | setTimeout(function() {
265 | ${2}
266 | }, ${1:delay});
267 | ```
268 |
269 | ## NodeJS
270 |
271 | ### [ase] assert.equal
272 |
273 | ```javascript
274 | assert.equal(${1:actual}, ${2:expected});
275 | ```
276 |
277 | ### [asd] assert.deepEqual
278 |
279 | ```javascript
280 | assert.deepEqual(${1:actual}, ${2:expected});
281 | ```
282 |
283 | ### [asn] assert.notEqual
284 |
285 | ```javascript
286 | assert.notEqual(${1:actual}, ${2:expected});
287 | ```
288 |
289 | ### [me] module.exports
290 |
291 | ```javascript
292 | module.exports = ${1:name};
293 | ```
294 |
295 | ### [pe] process.exit
296 |
297 | ```javascript
298 | process.exit(${1:code});
299 | ```
300 |
301 | ### [re] require
302 |
303 | ```javascript
304 | require('${1:module}');
305 | ```
306 | ## BDD
307 |
308 | ### [desc] describe
309 |
310 | ```javascript
311 | describe('${1:description}', function() {
312 | ${2}
313 | });
314 | ```
315 | ### [ita] it asynchronous
316 |
317 | ```javascript
318 | it('${1:description}', function(done) {
319 | ${2}
320 | });
321 | ```
322 |
323 | ### [its] it synchronous
324 |
325 | ```javascript
326 | it('${1:description}', function() {
327 | ${2}
328 | });
329 | ```
330 |
331 | ### [itp] it pending
332 |
333 | ```javascript
334 | it('${1:description}');
335 | ```
336 |
337 | ## Misc
338 |
339 | ### [us] use strict
340 |
341 | ```javascript
342 | 'use strict';
343 | ```
344 |
345 | ### [al] alert
346 |
347 | ```javascript
348 | alert('${1:msg}');
349 | ```
350 |
351 | ### [co] confirm
352 |
353 | ```javascript
354 | confirm('${1:msg}');
355 | ```
356 |
357 | ### [pm] prompt
358 |
359 | ```javascript
360 | prompt('${1:msg}');
361 | ```
362 |
363 | ## Contributing
364 |
365 | 1. Fork it!
366 | 2. Create your feature branch: `git checkout -b my-new-feature`
367 | 3. Commit your changes: `git commit -m 'Add some feature'`
368 | 4. Push to the branch: `git push origin my-new-feature`
369 | 5. Submit a pull request :D
370 |
371 | ## History
372 |
373 | Check [Releases](https://github.com/zenorocha/sublime-javascript-snippets/releases) for detailed changelog.
374 |
375 | ## License
376 |
377 | [MIT License](http://zenorocha.mit-license.org/) © Zeno Rocha
378 |
--------------------------------------------------------------------------------
/bdd-describe.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | desc
8 | source.js, source.jsx, source.ts
9 | BDD describe
10 |
--------------------------------------------------------------------------------
/bdd-ita.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | ita
8 | source.js, source.jsx, source.ts
9 | BDD it asynchronous
10 |
--------------------------------------------------------------------------------
/bdd-itp.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | itp
6 | source.js, source.jsx, source.ts
7 | BDD it pending
8 |
--------------------------------------------------------------------------------
/bdd-its.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | its
8 | source.js, source.jsx, source.ts
9 | BDD it synchronous
10 |
--------------------------------------------------------------------------------
/console-dir.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | cd
6 | source.js, source.jsx, source.ts
7 | console.dir
8 |
--------------------------------------------------------------------------------
/console-error.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ce
6 | source.js, source.jsx, source.ts
7 | console.error
8 |
--------------------------------------------------------------------------------
/console-info.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ci
6 | source.js, source.jsx, source.ts
7 | console.info
8 |
--------------------------------------------------------------------------------
/console-log.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | cl
6 | source.js, source.jsx, source.ts
7 | console.log
8 |
--------------------------------------------------------------------------------
/console-warn.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | cw
6 | source.js, source.jsx, source.ts
7 | console.warn
8 |
--------------------------------------------------------------------------------
/dom-addEvent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | ae
8 | source.js, source.jsx, source.ts
9 | addEventListener
10 |
--------------------------------------------------------------------------------
/dom-attrGet.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ga
6 | source.js, source.jsx, source.ts
7 | getAttribute
8 |
--------------------------------------------------------------------------------
/dom-attrRemove.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ra
6 | source.js, source.jsx, source.ts
7 | removeAttribute
8 |
--------------------------------------------------------------------------------
/dom-attrSet.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | sa
6 | source.js, source.jsx, source.ts
7 | setAttribute
8 |
--------------------------------------------------------------------------------
/dom-childAppend.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ac
6 | source.js, source.jsx, source.ts
7 | appendChild
8 |
9 |
--------------------------------------------------------------------------------
/dom-childRemove.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | rc
6 | source.js, source.jsx, source.ts
7 | removeChild
8 |
--------------------------------------------------------------------------------
/dom-classAdd.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ca
6 | source.js, source.jsx, source.ts
7 | classList.add
8 |
--------------------------------------------------------------------------------
/dom-classRemove.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | cr
6 | source.js, source.jsx, source.ts
7 | classList.remove
8 |
--------------------------------------------------------------------------------
/dom-classToggle.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ct
6 | source.js, source.jsx, source.ts
7 | classList.toggle
8 |
--------------------------------------------------------------------------------
/dom-createDocumentFragment.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | cdf
6 | source.js, source.jsx, source.ts
7 | createDocumentFragment
8 |
--------------------------------------------------------------------------------
/dom-createElement.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | cel
6 | source.js, source.jsx, source.ts
7 | createElement
8 |
--------------------------------------------------------------------------------
/dom-getByClass.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | gc
6 | source.js, source.jsx, source.ts
7 | getElementsByClassName
8 |
--------------------------------------------------------------------------------
/dom-getById.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | gi
6 | source.js, source.jsx, source.ts
7 | getElementById
8 |
--------------------------------------------------------------------------------
/dom-getByTag.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | gt
6 | source.js, source.jsx, source.ts
7 | getElementsByTagName
8 |
--------------------------------------------------------------------------------
/dom-innerHTML.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ih
6 | source.js, source.jsx, source.ts
7 | innerHTML
8 |
--------------------------------------------------------------------------------
/dom-query.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | qs
6 | source.js, source.jsx, source.ts
7 | querySelector
8 |
--------------------------------------------------------------------------------
/dom-queryAll.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | qsa
6 | source.js, source.jsx, source.ts
7 | querySelectorAll
8 |
--------------------------------------------------------------------------------
/dom-textContent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | tc
6 | source.js, source.jsx, source.ts
7 | textContent
8 |
--------------------------------------------------------------------------------
/for-each.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | fe
8 | source.js, source.jsx, source.ts
9 | forEach
10 |
--------------------------------------------------------------------------------
/for-in.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
9 | fi
10 | source.js, source.jsx, source.ts
11 | for in
12 |
--------------------------------------------------------------------------------
/function-anonymous.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | afn
8 | source.js, source.jsx, source.ts
9 | anonymous function
10 |
--------------------------------------------------------------------------------
/function-apply.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | apply
6 | source.js, source.jsx, source.ts
7 | method.apply()
8 |
--------------------------------------------------------------------------------
/function-call.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | call
6 | source.js, source.jsx, source.ts
7 | method.call()
8 |
--------------------------------------------------------------------------------
/function-iife.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | iife
8 | source.js, source.jsx, source.ts
9 | immediately-invoked function expression
10 |
11 |
--------------------------------------------------------------------------------
/function-objectProperty.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | ofn
8 | source.js, source.jsx, source.ts
9 | function as a property of an object
10 |
--------------------------------------------------------------------------------
/function-prototype.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | pr
8 | source.js, source.jsx, source.ts
9 | prototype
10 |
--------------------------------------------------------------------------------
/function.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | fn
8 | source.js, source.jsx, source.ts
9 | function
10 |
--------------------------------------------------------------------------------
/json-parse.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | jp
6 | source.js, source.jsx, source.ts
7 | JSON.parse
8 |
--------------------------------------------------------------------------------
/json-stringify.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | js
6 | source.js, source.jsx, source.ts
7 | JSON.stringify
8 |
--------------------------------------------------------------------------------
/misc-alert.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | al
6 | source.js, source.jsx, source.ts
7 | alert
8 |
--------------------------------------------------------------------------------
/misc-confirm.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | co
6 | source.js, source.jsx, source.ts
7 | confirm
8 |
--------------------------------------------------------------------------------
/misc-debugger.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | de
6 | source.js, source.jsx, source.ts
7 | debugger
8 |
--------------------------------------------------------------------------------
/misc-prompt.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | pm
6 | source.js, source.jsx, source.ts
7 | prompt
8 |
--------------------------------------------------------------------------------
/misc-useStrict.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | us
6 | source.js, source.jsx, source.ts
7 | use strict
8 |
--------------------------------------------------------------------------------
/node-assertDeepEqual.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | asd
6 | source.js, source.jsx, source.ts
7 | assert.deepEqual
8 |
--------------------------------------------------------------------------------
/node-assertEqual.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ase
6 | source.js, source.jsx, source.ts
7 | assert.equal
8 |
--------------------------------------------------------------------------------
/node-assertNotEqual.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | asn
6 | source.js, source.jsx, source.ts
7 | assert.notEqual
8 |
--------------------------------------------------------------------------------
/node-moduleExports.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | me
6 | source.js, source.jsx, source.ts
7 | module.exports
8 |
--------------------------------------------------------------------------------
/node-processExit.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | pe
6 | source.js, source.jsx, source.ts
7 | process.exit
8 |
--------------------------------------------------------------------------------
/node-require.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | re
6 | source.js, source.jsx, source.ts
7 | require
8 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sublime-snippets-js",
3 | "version": "1.2.1",
4 | "repository": {
5 | "type": "git",
6 | "url": "https://github.com/zenorocha/sublime-snippets-js.git"
7 | },
8 | "devDependencies": {
9 | "grunt": "0.4.2",
10 | "grunt-bump": "0.0.13",
11 | "grunt-cli": "1.2.0",
12 | "grunt-lintspaces": "0.8.0"
13 | },
14 | "scripts": {
15 | "test": "grunt"
16 | }
17 | }
--------------------------------------------------------------------------------
/timer-setInterval.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | si
8 | source.js, source.jsx, source.ts
9 | setInterval
10 |
--------------------------------------------------------------------------------
/timer-setTimeout.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | st
8 | source.js, source.jsx, source.ts
9 | setTimeout
10 |
--------------------------------------------------------------------------------