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.
- package/.idea/dictionaries/project.xml +7 -0
- package/.idea/inspectionProfiles/Project_Default.xml +22 -0
- package/.idea/jsLibraryMappings.xml +6 -0
- package/.idea/misc.xml +10 -0
- package/.idea/modules.xml +8 -0
- package/.idea/ts-run-test.iml +12 -0
- package/.idea/vcs.xml +6 -0
- package/.release-it.json +23 -0
- package/CHANGELOG.md +6 -0
- package/_test_/EventBus.ts +33 -0
- package/_test_/EventLoop.js +60 -0
- package/_test_/EventLoop.ts +85 -0
- package/_test_/IO.ts +62 -0
- package/_test_/ShengBei.html +84 -0
- package/_test_/__dirname.ts +17 -0
- package/_test_/aaaa.cjs +4 -0
- package/_test_/array.ts +26 -0
- package/_test_/async.ts +58 -0
- package/_test_/bfc.html +28 -0
- package/_test_/bin.ts +26 -0
- package/_test_/buffer.ts +21 -0
- package/_test_/build-icons/icon.ico +0 -0
- package/_test_/build-icons/icon_1024x1024.png +0 -0
- package/_test_/build-icons/icon_128x128.png +0 -0
- package/_test_/build-icons/icon_16x16.png +0 -0
- package/_test_/build-icons/icon_256x256.png +0 -0
- package/_test_/build-icons/icon_32x32.png +0 -0
- package/_test_/build-icons/icon_48x48.png +0 -0
- package/_test_/build-icons/icon_512x512.png +0 -0
- package/_test_/build-icons/icon_64x64.png +0 -0
- package/_test_/build-icons/splash/splash_100.png +0 -0
- package/_test_/build-icons/splash/splash_200.png +0 -0
- package/_test_/build-icons/tray/tray_black.png +0 -0
- package/_test_/build-icons/tray/tray_white.png +0 -0
- package/_test_/check.ts +65 -0
- package/_test_/closures.ts +12 -0
- package/_test_/copy.ts +25 -0
- package/_test_/debounce.ts +71 -0
- package/_test_/decorator.ts +37 -0
- package/_test_/deepCopy.ts +35 -0
- package/_test_/dom.ts +19 -0
- package/_test_/fetch.ts +45 -0
- package/_test_/get-template-version.ts +48 -0
- package/_test_/get.ts +52 -0
- package/_test_/gh.ts +19 -0
- package/_test_/gh_test.ts +93 -0
- package/_test_/icon.ico +0 -0
- package/_test_/icon.png +0 -0
- package/_test_/icon.ts +120 -0
- package/_test_/iconsize.ts +30 -0
- package/_test_/iterator.ts +112 -0
- package/_test_/link.ts +10 -0
- package/_test_/my/instanceof.ts +35 -0
- package/_test_/my/new.ts +22 -0
- package/_test_/new.ts +6 -0
- package/_test_/object.ts +2 -0
- package/_test_/observer.html +40 -0
- package/_test_/package.json +49 -0
- package/_test_/prototype.ts +27 -0
- package/_test_/proxy.ts +6 -0
- package/_test_/random.ts +29 -0
- package/_test_/react.ts +0 -0
- package/_test_/reg.ts +1 -0
- package/_test_/register.ts +61 -0
- package/_test_/release.config.cts +11 -0
- package/_test_/result.ts +37 -0
- package/_test_/task.ts +196 -0
- package/_test_/temp.md +8 -0
- package/_test_/tesp.ts +23 -0
- package/_test_/test.ts +59 -0
- package/_test_/typed.ts +55 -0
- package/_test_/worker.html +23 -0
- package/_test_/worker.js +4 -0
- package/_test_/worker.ts +5 -0
- package/_test_/xhr.ts +27 -0
- package/_test_//347/210/254/350/231/253.html +93 -0
- package/cache/00a25bc33880251d135060b213749534.jpg +0 -0
- package/cache/10_1730106978_t_NW.jpg +0 -0
- package/cache/11_1730104692_t_NW.jpg +0 -0
- package/cache/15_1730601804_t_NW.jpg +0 -0
- package/cache/17_1730434147_t_NW.jpg +0 -0
- package/cache/19ca581d7f9bf915d3cfb64299a9d5e0.jpg +0 -0
- package/cache/1ccf0b78ab293de8b2aa984773cf315b.jpg +0 -0
- package/cache/21a7518978f91278e75600b75390654e.jpg +0 -0
- package/cache/26ec1ad41910fa9f6236a98c8165a4f3.jpg +0 -0
- package/cache/2_1730114275_t_NW.jpg +0 -0
- package/cache/2a8542fbba235dda9d40c417a94083b5.jpg +0 -0
- package/cache/38_1730084632_t_NW.jpg +0 -0
- package/cache/45205cfc98b45aba7284124f730d37a4.jpg +0 -0
- package/cache/4_1730111766_t_NW.jpg +0 -0
- package/cache/544139e9bbc38597242c2a3d2ba9ede3.jpg +0 -0
- package/cache/60_1729079556_t_NW.jpg +0 -0
- package/cache/61_1729079251_t_NW.jpg +0 -0
- package/cache/65_1729078235_t_NW.jpg +0 -0
- package/cache/6b553b33cb2bc5423ca0a825a9596d7e.jpg +0 -0
- package/cache/74f7bbcd04af36cd224ebed548ba9f96.jpg +0 -0
- package/cache/762fa502959439d4ab1cc2f124c5fe31.jpg +0 -0
- package/cache/7_1730108771_t_NW.jpg +0 -0
- package/cache/82_1730202406_t_NW.jpg +0 -0
- package/cache/861641b72e0aa40abd4ad87c473100f6.jpg +0 -0
- package/cache/91_1730201579_t_NW.jpg +0 -0
- package/cache/95c1eceb38272ac57be2d1f14af3baa5.jpg +0 -0
- package/cache/99cae3416ed7d4ebce46003c291d5cc2.jpg +0 -0
- package/cache/9cf9878a0e979c6b9965ef415cfb43f1.jpg +0 -0
- package/cache/9e9db2fd267dc561244225efc1a872b3.jpg +0 -0
- package/cache/bc7bde2766d07dadd7fafd80854d6c5c.jpg +0 -0
- package/cache/c18d359f69c6b975604549f56237bfa8.jpg +0 -0
- package/cache/cf8143cd193619f57fc1ae06aed1ffec.jpg +0 -0
- package/cache/f3a5f2b40033da74d857c8dc0244948a.jpg +0 -0
- package/cache/f5d0336a68ec2b35eeb76706b02576bd.jpg +0 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.js +2 -0
- package/dist/ip2region.cjs +11 -0
- package/dist/ip2region.d.cts +1 -0
- package/dist/ip2region.d.ts +1 -0
- package/dist/ip2region.js +20 -0
- package/dist/npm.d.ts +1 -0
- package/dist/npm.js +3 -0
- package/dist/pkg-filed.d.ts +1 -0
- package/dist/pkg-filed.js +18 -0
- package/dist/restore-wechat-images.d.ts +1 -0
- package/dist/restore-wechat-images.js +39 -0
- package/package.json +43 -0
- package/record.md +59 -0
- package/src/copyDir.ts +21 -0
- package/src/example.png +0 -0
- package/src/formatText.ts +83 -0
- package/src/index.ts +1 -0
- package/src/ip2region.cts +13 -0
- package/src/npm.ts +5 -0
- package/src/pkg-filed.ts +30 -0
- package/src/puppeteer.ts +51 -0
- package/src/restore-wechat-images.ts +50 -0
- package/src/try.ts +9 -0
- package/src/useCrawler.ts +31 -0
- package/tsconfig.json +20 -0
- package/tsdown.config.ts +15 -0
|
@@ -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>
|
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
package/.release-it.json
ADDED
|
@@ -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,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));
|
package/_test_/aaaa.cjs
ADDED
package/_test_/array.ts
ADDED
|
@@ -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()))
|
package/_test_/async.ts
ADDED
|
@@ -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
|
+
// })
|
package/_test_/bfc.html
ADDED
|
@@ -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)
|
package/_test_/buffer.ts
ADDED
|
@@ -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
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|