ts-run-test 1.0.5

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.
Files changed (137) hide show
  1. package/.idea/dictionaries/project.xml +7 -0
  2. package/.idea/inspectionProfiles/Project_Default.xml +22 -0
  3. package/.idea/jsLibraryMappings.xml +6 -0
  4. package/.idea/misc.xml +10 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/ts-run-test.iml +12 -0
  7. package/.idea/vcs.xml +6 -0
  8. package/.release-it.json +23 -0
  9. package/CHANGELOG.md +6 -0
  10. package/_test_/EventBus.ts +33 -0
  11. package/_test_/EventLoop.js +60 -0
  12. package/_test_/EventLoop.ts +85 -0
  13. package/_test_/IO.ts +62 -0
  14. package/_test_/ShengBei.html +84 -0
  15. package/_test_/__dirname.ts +17 -0
  16. package/_test_/aaaa.cjs +4 -0
  17. package/_test_/array.ts +26 -0
  18. package/_test_/async.ts +58 -0
  19. package/_test_/bfc.html +28 -0
  20. package/_test_/bin.ts +26 -0
  21. package/_test_/buffer.ts +21 -0
  22. package/_test_/build-icons/icon.ico +0 -0
  23. package/_test_/build-icons/icon_1024x1024.png +0 -0
  24. package/_test_/build-icons/icon_128x128.png +0 -0
  25. package/_test_/build-icons/icon_16x16.png +0 -0
  26. package/_test_/build-icons/icon_256x256.png +0 -0
  27. package/_test_/build-icons/icon_32x32.png +0 -0
  28. package/_test_/build-icons/icon_48x48.png +0 -0
  29. package/_test_/build-icons/icon_512x512.png +0 -0
  30. package/_test_/build-icons/icon_64x64.png +0 -0
  31. package/_test_/build-icons/splash/splash_100.png +0 -0
  32. package/_test_/build-icons/splash/splash_200.png +0 -0
  33. package/_test_/build-icons/tray/tray_black.png +0 -0
  34. package/_test_/build-icons/tray/tray_white.png +0 -0
  35. package/_test_/check.ts +65 -0
  36. package/_test_/closures.ts +12 -0
  37. package/_test_/copy.ts +25 -0
  38. package/_test_/debounce.ts +71 -0
  39. package/_test_/decorator.ts +37 -0
  40. package/_test_/deepCopy.ts +35 -0
  41. package/_test_/dom.ts +19 -0
  42. package/_test_/fetch.ts +45 -0
  43. package/_test_/get-template-version.ts +48 -0
  44. package/_test_/get.ts +52 -0
  45. package/_test_/gh.ts +19 -0
  46. package/_test_/gh_test.ts +93 -0
  47. package/_test_/icon.ico +0 -0
  48. package/_test_/icon.png +0 -0
  49. package/_test_/icon.ts +120 -0
  50. package/_test_/iconsize.ts +30 -0
  51. package/_test_/iterator.ts +112 -0
  52. package/_test_/link.ts +10 -0
  53. package/_test_/my/instanceof.ts +35 -0
  54. package/_test_/my/new.ts +22 -0
  55. package/_test_/new.ts +6 -0
  56. package/_test_/object.ts +2 -0
  57. package/_test_/observer.html +40 -0
  58. package/_test_/package.json +49 -0
  59. package/_test_/prototype.ts +27 -0
  60. package/_test_/proxy.ts +6 -0
  61. package/_test_/random.ts +29 -0
  62. package/_test_/react.ts +0 -0
  63. package/_test_/reg.ts +1 -0
  64. package/_test_/register.ts +61 -0
  65. package/_test_/release.config.cts +11 -0
  66. package/_test_/result.ts +37 -0
  67. package/_test_/task.ts +196 -0
  68. package/_test_/temp.md +8 -0
  69. package/_test_/tesp.ts +23 -0
  70. package/_test_/test.ts +59 -0
  71. package/_test_/typed.ts +55 -0
  72. package/_test_/worker.html +23 -0
  73. package/_test_/worker.js +4 -0
  74. package/_test_/worker.ts +5 -0
  75. package/_test_/xhr.ts +27 -0
  76. package/_test_//347/210/254/350/231/253.html +93 -0
  77. package/cache/00a25bc33880251d135060b213749534.jpg +0 -0
  78. package/cache/10_1730106978_t_NW.jpg +0 -0
  79. package/cache/11_1730104692_t_NW.jpg +0 -0
  80. package/cache/15_1730601804_t_NW.jpg +0 -0
  81. package/cache/17_1730434147_t_NW.jpg +0 -0
  82. package/cache/19ca581d7f9bf915d3cfb64299a9d5e0.jpg +0 -0
  83. package/cache/1ccf0b78ab293de8b2aa984773cf315b.jpg +0 -0
  84. package/cache/21a7518978f91278e75600b75390654e.jpg +0 -0
  85. package/cache/26ec1ad41910fa9f6236a98c8165a4f3.jpg +0 -0
  86. package/cache/2_1730114275_t_NW.jpg +0 -0
  87. package/cache/2a8542fbba235dda9d40c417a94083b5.jpg +0 -0
  88. package/cache/38_1730084632_t_NW.jpg +0 -0
  89. package/cache/45205cfc98b45aba7284124f730d37a4.jpg +0 -0
  90. package/cache/4_1730111766_t_NW.jpg +0 -0
  91. package/cache/544139e9bbc38597242c2a3d2ba9ede3.jpg +0 -0
  92. package/cache/60_1729079556_t_NW.jpg +0 -0
  93. package/cache/61_1729079251_t_NW.jpg +0 -0
  94. package/cache/65_1729078235_t_NW.jpg +0 -0
  95. package/cache/6b553b33cb2bc5423ca0a825a9596d7e.jpg +0 -0
  96. package/cache/74f7bbcd04af36cd224ebed548ba9f96.jpg +0 -0
  97. package/cache/762fa502959439d4ab1cc2f124c5fe31.jpg +0 -0
  98. package/cache/7_1730108771_t_NW.jpg +0 -0
  99. package/cache/82_1730202406_t_NW.jpg +0 -0
  100. package/cache/861641b72e0aa40abd4ad87c473100f6.jpg +0 -0
  101. package/cache/91_1730201579_t_NW.jpg +0 -0
  102. package/cache/95c1eceb38272ac57be2d1f14af3baa5.jpg +0 -0
  103. package/cache/99cae3416ed7d4ebce46003c291d5cc2.jpg +0 -0
  104. package/cache/9cf9878a0e979c6b9965ef415cfb43f1.jpg +0 -0
  105. package/cache/9e9db2fd267dc561244225efc1a872b3.jpg +0 -0
  106. package/cache/bc7bde2766d07dadd7fafd80854d6c5c.jpg +0 -0
  107. package/cache/c18d359f69c6b975604549f56237bfa8.jpg +0 -0
  108. package/cache/cf8143cd193619f57fc1ae06aed1ffec.jpg +0 -0
  109. package/cache/f3a5f2b40033da74d857c8dc0244948a.jpg +0 -0
  110. package/cache/f5d0336a68ec2b35eeb76706b02576bd.jpg +0 -0
  111. package/dist/index.d.ts +0 -0
  112. package/dist/index.js +2 -0
  113. package/dist/ip2region.cjs +11 -0
  114. package/dist/ip2region.d.cts +1 -0
  115. package/dist/ip2region.d.ts +1 -0
  116. package/dist/ip2region.js +20 -0
  117. package/dist/npm.d.ts +1 -0
  118. package/dist/npm.js +3 -0
  119. package/dist/pkg-filed.d.ts +1 -0
  120. package/dist/pkg-filed.js +18 -0
  121. package/dist/restore-wechat-images.d.ts +1 -0
  122. package/dist/restore-wechat-images.js +39 -0
  123. package/package.json +43 -0
  124. package/record.md +59 -0
  125. package/src/copyDir.ts +21 -0
  126. package/src/example.png +0 -0
  127. package/src/formatText.ts +83 -0
  128. package/src/index.ts +1 -0
  129. package/src/ip2region.cts +13 -0
  130. package/src/npm.ts +5 -0
  131. package/src/pkg-filed.ts +30 -0
  132. package/src/puppeteer.ts +51 -0
  133. package/src/restore-wechat-images.ts +50 -0
  134. package/src/try.ts +9 -0
  135. package/src/useCrawler.ts +31 -0
  136. package/tsconfig.json +20 -0
  137. package/tsdown.config.ts +15 -0
@@ -0,0 +1,7 @@
1
+ <component name="ProjectDictionaryState">
2
+ <dictionary name="project">
3
+ <words>
4
+ <w>treeshake</w>
5
+ </words>
6
+ </dictionary>
7
+ </component>
@@ -0,0 +1,22 @@
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true">
5
+ <option name="myValues">
6
+ <value>
7
+ <list size="7">
8
+ <item index="0" class="java.lang.String" itemvalue="nobr" />
9
+ <item index="1" class="java.lang.String" itemvalue="noembed" />
10
+ <item index="2" class="java.lang.String" itemvalue="comment" />
11
+ <item index="3" class="java.lang.String" itemvalue="noscript" />
12
+ <item index="4" class="java.lang.String" itemvalue="embed" />
13
+ <item index="5" class="java.lang.String" itemvalue="script" />
14
+ <item index="6" class="java.lang.String" itemvalue="clipPath" />
15
+ </list>
16
+ </value>
17
+ </option>
18
+ <option name="myCustomValuesEnabled" value="true" />
19
+ </inspection_tool>
20
+ <inspection_tool class="JSUnusedLocalSymbols" enabled="true" level="WARNING" enabled_by_default="true" editorAttributes="WARNING_ATTRIBUTES" />
21
+ </profile>
22
+ </component>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="JavaScriptLibraryMappings">
4
+ <includedPredefinedLibrary name="Node.js Core" />
5
+ </component>
6
+ </project>
package/.idea/misc.xml ADDED
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="MaterialThemeProjectNewConfig">
4
+ <option name="metadata">
5
+ <MTProjectMetadataState>
6
+ <option name="userId" value="-3b2ce3eb:18f43d531e2:-7fff" />
7
+ </MTProjectMetadataState>
8
+ </option>
9
+ </component>
10
+ </project>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/ts-run-test.iml" filepath="$PROJECT_DIR$/.idea/ts-run-test.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="WEB_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$">
5
+ <excludeFolder url="file://$MODULE_DIR$/.tmp" />
6
+ <excludeFolder url="file://$MODULE_DIR$/temp" />
7
+ <excludeFolder url="file://$MODULE_DIR$/tmp" />
8
+ </content>
9
+ <orderEntry type="inheritedJdk" />
10
+ <orderEntry type="sourceFolder" forTests="false" />
11
+ </component>
12
+ </module>
package/.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://unpkg.com/release-it/schema/release-it.json",
3
+ "github": {
4
+ "release": true
5
+ },
6
+ "npm": {
7
+ "publish": true
8
+ },
9
+ "git": {
10
+ "commit": true,
11
+ "tag": true,
12
+ "push": true,
13
+ "requireCleanWorkingDir": false,
14
+ "commitMessage": "chore(release): v${version}",
15
+ "tagName": "${version}"
16
+ },
17
+ "hooks": {
18
+ "before:init": "echo 'Starting release...'",
19
+ "after:bump": "echo 'Version bumped'",
20
+
21
+ "after:release": "echo 'Release finished'"
22
+ }
23
+ }
package/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ # Changelog
2
+
3
+
4
+ ## [1.0.5](https://github.com/peiyanlu/testOnly/compare/1.0.4...1.0.5) (2026-01-10)
5
+
6
+ **Full Changelog**: https://github.com/peiyanlu/testOnly/compare/1.0.4...1.0.5
@@ -0,0 +1,33 @@
1
+ type Listener = (...args: any[]) => void
2
+
3
+ class EventBus {
4
+ events: Record<string, Function[]>
5
+
6
+ constructor() {
7
+ this.events = {}
8
+ }
9
+
10
+ $on(eventName: string, listener: Listener): void {
11
+ (this.events[eventName] ||= []).push(listener)
12
+ }
13
+
14
+ $emit(eventName: string, ...args: any[]): void {
15
+ this.events[eventName]?.forEach((listener) => listener(...args))
16
+ }
17
+
18
+ $off(eventName: string, listener?: Listener): void {
19
+ if (!listener) {
20
+ this.events[eventName] = []
21
+ return
22
+ }
23
+ this.events[eventName] = (this.events[eventName] || []).filter(fn => fn !== listener)
24
+ }
25
+
26
+ $once(eventName: string, listener: Listener): void {
27
+ const event = (...args: any[]) => {
28
+ listener(...args)
29
+ this.$off(eventName, event)
30
+ }
31
+ this.$on(eventName, event)
32
+ }
33
+ }
@@ -0,0 +1,60 @@
1
+ import * as fs from 'node:fs'
2
+
3
+
4
+ console.log('🟢 [sync] start');
5
+
6
+ // ✅ process.nextTick
7
+ process.nextTick(() => {
8
+ console.log('🔁 [nextTick]');
9
+ });
10
+
11
+ // ✅ Promise 微任务
12
+ Promise.resolve().then(() => {
13
+ console.log('🧩 [Promise.then]');
14
+ });
15
+
16
+ // ✅ setTimeout (timers)
17
+ setTimeout(() => {
18
+ console.log('⏰ [setTimeout]');
19
+
20
+ // 👀 setImmediate inside setTimeout
21
+ setImmediate(() => {
22
+ console.log('⚡ [setImmediate in setTimeout]');
23
+ });
24
+
25
+ process.nextTick(() => {
26
+ console.log('🔁 [nextTick in setTimeout]');
27
+ });
28
+
29
+ Promise.resolve().then(() => {
30
+ console.log('🧩 [Promise in setTimeout]');
31
+ });
32
+ }, 0);
33
+
34
+ // ✅ setImmediate (check)
35
+ setImmediate(() => {
36
+ console.log('⚡ [setImmediate]');
37
+ });
38
+
39
+ // ✅ fs.readFile (poll)
40
+ fs.readFile('.', () => {
41
+ console.log('📄 [fs.readFile callback]');
42
+
43
+ setImmediate(() => {
44
+ console.log('⚡ [setImmediate in fs.readFile]');
45
+ });
46
+
47
+ setTimeout(() => {
48
+ console.log('⏰ [setTimeout in fs.readFile]');
49
+ }, 0);
50
+
51
+ process.nextTick(() => {
52
+ console.log('🔁 [nextTick in fs.readFile]');
53
+ });
54
+
55
+ Promise.resolve().then(() => {
56
+ console.log('🧩 [Promise in fs.readFile]');
57
+ });
58
+ });
59
+
60
+ console.log('🟢 [sync] end');
@@ -0,0 +1,85 @@
1
+ import { readFile } from 'node:fs'
2
+
3
+
4
+ console.log('version:', process.version);
5
+
6
+ // 同步
7
+ console.log('🟢 [sync] start')
8
+
9
+ // ✅ process.nextTick 微任务
10
+ process.nextTick(() => {
11
+ console.log('🔁 [nextTick]')
12
+ })
13
+
14
+ // ✅ Promise 微任务
15
+ Promise.resolve().then(() => {
16
+ console.log('🧩 [Promise.then]')
17
+ })
18
+
19
+ // ✅ setTimeout (timers)
20
+ setTimeout(() => {
21
+ console.log('⏰ [setTimeout]')
22
+
23
+ // 👀 setImmediate inside setTimeout
24
+ setImmediate(() => {
25
+ console.log('⚡ [setImmediate in setTimeout]')
26
+ })
27
+
28
+ process.nextTick(() => {
29
+ console.log('🔁 [nextTick in setTimeout]')
30
+ })
31
+
32
+ Promise.resolve().then(() => {
33
+ console.log('🧩 [Promise in setTimeout]')
34
+ })
35
+ }, 1000)
36
+
37
+ // ✅ setImmediate (check)
38
+ setImmediate(() => {
39
+ console.log('⚡ [setImmediate]')
40
+ })
41
+
42
+ // ✅ fs.readFile (poll)
43
+ readFile('.', () => {
44
+ console.log('📄 [fs.readFile callback]')
45
+
46
+ setImmediate(() => {
47
+ console.log('⚡ [setImmediate in fs.readFile]')
48
+ })
49
+
50
+ setTimeout(() => {
51
+ console.log('⏰ [setTimeout in fs.readFile]')
52
+
53
+ // 👀 setImmediate inside setTimeout
54
+ setImmediate(() => {
55
+ console.log('⚡ [setImmediate in fs.readFile - setTimeout]')
56
+ })
57
+
58
+ process.nextTick(() => {
59
+ console.log('🔁 [nextTick in fs.readFile - setTimeout]')
60
+ })
61
+
62
+ Promise.resolve().then(() => {
63
+ console.log('🧩 [Promise in fs.readFile - setTimeout]')
64
+ })
65
+ }, 0)
66
+
67
+ process.nextTick(() => {
68
+ console.log('🔁 [nextTick in fs.readFile]')
69
+ })
70
+
71
+ Promise.resolve().then(() => {
72
+ console.log('🧩 [Promise in fs.readFile]')
73
+ })
74
+ })
75
+
76
+ // 同步
77
+ console.log('🟢 [sync] end')
78
+
79
+
80
+ setTimeout(() => console.log('timer')) // timers 阶段宏任务
81
+ setImmediate(() => console.log('immediate')) // check 阶段宏任务
82
+ readFile('.', () => console.log('readFile')) // poll 阶段宏任务
83
+ process.nextTick(() => console.log('nextTick')) // 微任务
84
+ Promise.resolve().then(() => console.log('promise')) // 微任务
85
+
package/_test_/IO.ts ADDED
@@ -0,0 +1,62 @@
1
+ // console.log('start');
2
+ //
3
+ // setImmediate(() => {
4
+ // console.log('setImmediate');
5
+ // });
6
+ //
7
+ // process.nextTick(() => {
8
+ // console.log('nextTick');
9
+ // });
10
+ //
11
+ // Promise.resolve().then(() => {
12
+ // console.log('promise');
13
+ // });
14
+ //
15
+ // console.log('end');
16
+ //
17
+ // setTimeout(()=> {
18
+ // console.log('setTimeout');
19
+ //
20
+ // setImmediate(() => {
21
+ // console.log('setImmediate1');
22
+ // });
23
+ //
24
+ // process.nextTick(() => {
25
+ // console.log('nextTick1');
26
+ // });
27
+ //
28
+ // Promise.resolve().then(() => {
29
+ // console.log('promise1');
30
+ // });
31
+ // })
32
+
33
+
34
+
35
+ // import * as fs from 'node:fs'
36
+ //
37
+ //
38
+ // fs.readFile('.', () => {
39
+ // setTimeout(() => {
40
+ // console.log('setTimeout');
41
+ // }, 0);
42
+ //
43
+ // setImmediate(() => {
44
+ // console.log('setImmediate');
45
+ // });
46
+ // });
47
+
48
+
49
+ // console.log('sync');
50
+ //
51
+ // process.nextTick(() => console.log('nextTick'));
52
+ //
53
+ // Promise.resolve().then(() => console.log('promise'));
54
+ //
55
+ // setTimeout(() => console.log('setTimeout'), 0);
56
+ //
57
+ // queueMicrotask(()=> {
58
+ // console.log('queueMicrotask');
59
+ // })
60
+ //
61
+ // setImmediate(() => console.log('setImmediate'));
62
+
@@ -0,0 +1,84 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>圣杯布局(传统)</title>
6
+ <style>
7
+ body {
8
+ margin: 0;
9
+ padding: 0;
10
+ }
11
+
12
+ header, footer {
13
+ background: #CCCCCC;
14
+ padding: 20px;
15
+ text-align: center;
16
+ }
17
+
18
+ .container {
19
+ overflow: hidden; /* 清除浮动 */
20
+ }
21
+
22
+ .main {
23
+ float: left;
24
+ width: 100%;
25
+ background: #DDDDDD;
26
+ padding: 20px;
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ .left {
31
+ float: left;
32
+ width: 200px;
33
+ margin-left: -100%;
34
+ background: #EEEEEE;
35
+ padding: 20px;
36
+ box-sizing: border-box;
37
+ }
38
+
39
+ .right {
40
+ float: left;
41
+ width: 200px;
42
+ margin-left: -200px;
43
+ background: #EEEEEE;
44
+ padding: 20px;
45
+ box-sizing: border-box;
46
+ }
47
+ </style>
48
+ </head>
49
+ <body>
50
+ <header>头部</header>
51
+
52
+ <div class="container">
53
+ <div class="main">主内容区</div>
54
+ <div class="left">左栏</div>
55
+ <div class="right">右栏</div>
56
+ </div>
57
+
58
+ <footer>底部</footer>
59
+ </body>
60
+
61
+ <script >
62
+
63
+ // 同步
64
+ console.log('🟢 [sync] start')
65
+
66
+ // ✅ Promise 微任务
67
+ Promise.resolve().then(() => {
68
+ console.log('🧩 [Promise.then]')
69
+ })
70
+
71
+ // ✅ setTimeout (timers)
72
+ setTimeout(() => {
73
+ console.log('⏰ [setTimeout]')
74
+
75
+ Promise.resolve().then(() => {
76
+ console.log('🧩 [Promise in setTimeout]')
77
+ })
78
+ }, 0)
79
+
80
+ // 同步
81
+ console.log('🟢 [sync] end')
82
+
83
+ </script>
84
+ </html>
@@ -0,0 +1,17 @@
1
+ import { dirname } from 'path'
2
+ import { fileURLToPath } from 'url'
3
+
4
+
5
+ const __filename = fileURLToPath(import.meta.url)
6
+ const __dirname = dirname(__filename)
7
+
8
+ console.log(__filename, __dirname)
9
+
10
+
11
+ const encoder = new TextEncoder();
12
+ const bytes = encoder.encode('前端');
13
+ let binary = "";
14
+ for (let i = 0; i < bytes.length; i++) {
15
+ binary += String.fromCharCode(bytes[i]);
16
+ }
17
+ console.log(btoa(binary));
@@ -0,0 +1,4 @@
1
+ const path = require('path');
2
+
3
+ console.log(path.join(__filename))
4
+ console.log(path.join(__filename, '..', 'a.js'))
@@ -0,0 +1,26 @@
1
+ // arr.keys()
2
+ const arr = [ 'a', , 'c' ]
3
+ const sparseKeys = Object.keys(arr)
4
+ const denseKeys = [ ...arr.keys() ]
5
+
6
+ console.log(arr)
7
+ console.log(sparseKeys) // ['0', '2']
8
+ console.log(denseKeys) // [0, 1, 2]
9
+
10
+
11
+ console.log(arr.unshift('5'))
12
+ console.log(arr.shift(), 5555)
13
+ console.log(arr.pop())
14
+ console.log(arr.push(...[ '4' ]))
15
+ console.log(arr)
16
+
17
+
18
+ console.log([ 1, 2, 3, 4, 5 ].copyWithin(0, 3, 4))
19
+
20
+
21
+ console.log(Array(100).fill(0).map((_, i) => i + 1))
22
+ console.log([ ...Array(101).keys() ].slice(1))
23
+
24
+ console.log(Array.from(Array(10).keys(), (_,i) => i + 1))
25
+
26
+ console.log(Array.of(...Array(10).keys()))
@@ -0,0 +1,58 @@
1
+ export async function asyncPool<T>(
2
+ limit: number,
3
+ tasks: (() => Promise<T>)[]
4
+ ): Promise<T[]> {
5
+ const results: T[] = []
6
+ const executing: Promise<void>[] = []
7
+ let index = 0
8
+
9
+ const runNext = async () => {
10
+ if (index >= tasks.length) {
11
+ return
12
+ }
13
+
14
+ const i = index++
15
+ const task = tasks[i]
16
+ try {
17
+ results[i] = await task()
18
+ } catch (e) {
19
+ results[i] = await Promise.reject(e)
20
+ }
21
+
22
+ await runNext()
23
+ }
24
+
25
+ for (let i = 0; i < Math.min(limit, tasks.length); i++) {
26
+ const p = runNext()
27
+ executing.push(p)
28
+ }
29
+
30
+ await Promise.all(executing)
31
+ return results
32
+ }
33
+
34
+
35
+ const sleep = (ms: number, label: string) => () =>
36
+ new Promise<string>((resolve) => {
37
+ setTimeout(() => {
38
+ console.log(`✅ 完成: ${ label }`)
39
+ resolve(label)
40
+ }, ms)
41
+ })
42
+
43
+ const tasks = [
44
+ sleep(1000, '任务1'),
45
+ sleep(500, '任务2'),
46
+ sleep(2000, '任务3'),
47
+ sleep(800, '任务4'),
48
+ sleep(100, '任务5'),
49
+ ]
50
+
51
+ const start = Date.now()
52
+ asyncPool(2, tasks).then((res) => {
53
+ console.log('全部完成:', res, (Date.now() - start) / 1000)
54
+ })
55
+
56
+ // Promise.all(tasks.map(f=>f())).then(async () => {
57
+ // console.log((Date.now() - start) / 1000)
58
+ // })
@@ -0,0 +1,28 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>BFC</title>
6
+
7
+ <style>
8
+ .container {
9
+ background: aquamarine;
10
+ }
11
+
12
+ .box {
13
+ width: 120px;
14
+ height: 120px;
15
+ background: coral;
16
+ margin: 20px;
17
+ }
18
+ </style>
19
+ </head>
20
+ <body>
21
+ <div class="container">
22
+ <div class="box">1</div>
23
+ <div class="box">3</div>
24
+ <div class="box">2</div>
25
+
26
+ </div>
27
+ </body>
28
+ </html>
package/_test_/bin.ts ADDED
@@ -0,0 +1,26 @@
1
+ const pnpm = 'xxx/node_modules/.pnpm/@cbe+core-frontend@1.0.0/node_modules/@cbe/core-frontend'
2
+ const npm = 'node_modules/@cbe/core-frontend'
3
+
4
+ import { sep } from 'node:path'
5
+
6
+
7
+ const [ _node, _script, dir ] = process.argv
8
+
9
+ const cwd = process.cwd()
10
+
11
+
12
+ const deep = () => {
13
+ const nm = `node_modules`
14
+ // const nm = `/node_modules/`
15
+ // const nm = `${ sep }node_modules${ sep }`
16
+ const u = pnpm.split(nm).slice(1)
17
+ console.log(u)
18
+ if (u.length > 0) {
19
+ return u.join(nm).split(sep).length
20
+ } else {
21
+ return u.length
22
+ }
23
+ }
24
+
25
+ console.log(cwd)
26
+ console.log(deep(), 222)
@@ -0,0 +1,21 @@
1
+ console.log(new Uint8Array([1, 2, 3, 4, 5]));
2
+
3
+ // console.log(Buffer)
4
+
5
+ console.log(Buffer.from(new Uint8Array([ 1, 2, 3, 4, 5 ])).toString('base64'))
6
+ console.log(Buffer.from(new Uint8Array([ 1, 2, 3, 4, 5 ])).toString('base64url'))
7
+
8
+ console.log(Buffer.from('AQIDBAU=', 'base64'))
9
+
10
+
11
+ for (var item of [1,2,3,4,5,6]) {
12
+ setTimeout(() => {
13
+ console.log(item)
14
+ })
15
+ }
16
+
17
+
18
+ console.log(btoa('123'))
19
+ console.log(atob('MTIz'))
20
+
21
+ console.log(Buffer.from('123').toString('base64'))
Binary file