Skip to content

Commit f0ba096

Browse files
authored
Merge pull request #84 from InhiblabCore/dev
chore: auto-import resolver
2 parents aa9b184 + b64d3c9 commit f0ba096

File tree

13 files changed

+690
-5
lines changed

13 files changed

+690
-5
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,12 @@
5252
"gh-pages": "^4.0.0",
5353
"happy-dom": "^7.5.10",
5454
"less": "^4.1.3",
55+
"kolorist": "^1.6.0",
5556
"prettier": "^1.19.1",
5657
"rimraf": "^3.0.2",
5758
"ts-morph": "^13.0.2",
5859
"ts-node": "^10.7.0",
60+
"tsx": "^3.11.0",
5961
"typeit": "^8.7.0",
6062
"typescript": "^4.9.3",
6163
"vite": "3.0.2",

packages/hooks/meta-data.json

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{
2+
"function": [
3+
"useAsyncOrder",
4+
"useBoolean",
5+
"useCookieState",
6+
"useCounter",
7+
"useDarkMode",
8+
"useDebounce",
9+
"useDebounceFn",
10+
"useDrag",
11+
"useDrop",
12+
"useEventEmitter",
13+
"useEventListener",
14+
"useExternal",
15+
"useFavicon",
16+
"useFetchs",
17+
"useFocusWithin",
18+
"useFormatResult",
19+
"useFullscreen",
20+
"useHover",
21+
"useInViewport",
22+
"useInfiniteScroll",
23+
"useInterval",
24+
"useKeyPress",
25+
"useLocalStorageState",
26+
"useLockFn",
27+
"useMap",
28+
"useMedia",
29+
"useMouse",
30+
"useNetwork",
31+
"usePreview",
32+
"usePrevious",
33+
"useRequest",
34+
"useScroll",
35+
"useSessionStorageState",
36+
"useSet",
37+
"useSetState",
38+
"useSize",
39+
"useThrottle",
40+
"useThrottleFn",
41+
"useTimeout",
42+
"useTitle",
43+
"useToggle",
44+
"useTrackedEffect",
45+
"useUpdate",
46+
"useUrlState",
47+
"useVirtualList",
48+
"useWebSocket",
49+
"useWhyDidYouUpdate",
50+
"useWinResize"
51+
]
52+
}

packages/hooks/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
{
22
"name": "vue-hooks-plus",
3-
"version": "1.5.1",
3+
"version": "1.5.2",
44
"description": "Vue hooks library",
55
"files": [
66
"dist",
77
"lib",
88
"es",
99
"LICENSE",
10+
"meta-data.json",
1011
"package.json",
1112
"README.md"
1213
],
@@ -20,6 +21,7 @@
2021
"typeScript"
2122
],
2223
"scripts": {
24+
"bootstrap": "tsx scripts/bootstrap.ts",
2325
"initial": "initial-scan .docs",
2426
"docs:dev": "vhp-vitepress dev .docs --host",
2527
"docs:build": "vhp-vitepress build .docs",

packages/hooks/scripts/bootstrap.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { writeFile } from 'fs-extra'
2+
import { resolve } from 'node:path'
3+
import prettier from 'prettier'
4+
import { hooks, logger, prettierConfig, rootDir } from './utils'
5+
6+
async function main() {
7+
const ignores = ['createUseStorageState', 'utils']
8+
const exportHooks = hooks.filter(c => !ignores.includes(c))
9+
const metaData = `
10+
{
11+
function: [
12+
${exportHooks.map(name => `"${name}"`).join(',\n')},
13+
],
14+
}
15+
`
16+
17+
const metaDataPath = resolve(rootDir, 'meta-data.json')
18+
await writeFile(
19+
metaDataPath,
20+
prettier.format(metaData, { ...prettierConfig, parser: 'json' }),
21+
'utf-8',
22+
)
23+
}
24+
25+
main().catch(error => {
26+
logger.error(error)
27+
process.exit(1)
28+
})

packages/hooks/scripts/utils.ts

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,93 @@
1-
import fs from 'fs-extra'
1+
import fs, { existsSync, readdirSync, statSync } from 'fs-extra'
2+
import { resolve } from 'node:path'
3+
import { bgYellow, bgCyan, bgGreen, bgRed, yellow, cyan, green, red } from 'kolorist'
24
import { Logger } from 'vite'
5+
import { Config } from 'prettier'
36

47
const logPrefix = '[vite-plugin-move]'
58

9+
export const prettierConfig: Config = {
10+
printWidth: 100,
11+
arrowParens: 'avoid',
12+
bracketSpacing: true,
13+
endOfLine: 'lf',
14+
bracketSameLine: false,
15+
quoteProps: 'as-needed',
16+
semi: false,
17+
singleQuote: true,
18+
tabWidth: 2,
19+
trailingComma: 'none',
20+
useTabs: false,
21+
vueIndentScriptAndStyle: false,
22+
overrides: [
23+
{
24+
files: '*.md',
25+
options: {
26+
embeddedLanguageFormatting: 'off',
27+
},
28+
},
29+
],
30+
}
31+
632
export function move(originalUrl: string, targetUrl: string, log: Logger) {
733
fs.move(originalUrl, targetUrl, err => {
834
if (err) return log.error(JSON.stringify(err))
935
log.info(`\n${cyan(logPrefix)} File successfully moved!!`)
1036
})
1137
}
1238

13-
export function cyan(msg: string) {
14-
return `\x1B[36m${msg}\x1B[0m`
39+
export const rootDir = resolve(__dirname, '..')
40+
41+
export const hooksDir = resolve(rootDir, 'src')
42+
43+
export const hooks = readdirSync(hooksDir).filter(f => {
44+
const path = resolve(hooksDir, f)
45+
if (!statSync(path).isDirectory()) {
46+
return false
47+
}
48+
49+
return existsSync(`${path}/index.ts`)
50+
})
51+
52+
type LogFn = () => void
53+
54+
export const logger = {
55+
ln: () => console.log(),
56+
withStartLn: (log: LogFn) => {
57+
logger.ln()
58+
log()
59+
},
60+
withEndLn: (log: LogFn) => {
61+
log()
62+
logger.ln()
63+
},
64+
withBothLn: (log: LogFn) => {
65+
logger.ln()
66+
log()
67+
logger.ln()
68+
},
69+
warning: (msg: string) => {
70+
console.warn(`${bgYellow(' WARNING ')} ${yellow(msg)}`)
71+
},
72+
info: (msg: string) => {
73+
console.log(`${bgCyan(' INFO ')} ${cyan(msg)}`)
74+
},
75+
success: (msg: string) => {
76+
console.log(`${bgGreen(' SUCCESS ')} ${green(msg)}`)
77+
},
78+
error: (msg: string) => {
79+
console.error(`${bgRed(' ERROR ')} ${red(msg)}`)
80+
},
81+
warningText: (msg: string) => {
82+
console.warn(`${yellow(msg)}`)
83+
},
84+
infoText: (msg: string) => {
85+
console.log(`${cyan(msg)}`)
86+
},
87+
successText: (msg: string) => {
88+
console.log(`${green(msg)}`)
89+
},
90+
errorText: (msg: string) => {
91+
console.error(`${red(msg)}`)
92+
},
1593
}

packages/resolvers/package.json

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{
2+
"name": "@vue-hooks-plus/resolvers",
3+
"version": "1.0.0",
4+
"description": "",
5+
"type": "module",
6+
"main": "dist/index.cjs",
7+
"module": "dist/index.js",
8+
"types": "dist/index.d.ts",
9+
"scripts": {
10+
"build": "tsx scripts/build.ts"
11+
},
12+
"exports": {
13+
".": {
14+
"require": "./dist/index.cjs",
15+
"import": "./dist/index.js"
16+
}
17+
},
18+
"engines": {
19+
"node": ">=14"
20+
},
21+
"files": [
22+
"dist"
23+
],
24+
"keywords": [],
25+
"repository": "https://github.com/InhiblabCore/vue-hooks-plus",
26+
"homepage": "https://github.com/InhiblabCore/vue-hooks-plus",
27+
"author": "NelsonYong",
28+
"license": "MIT",
29+
"devDependencies": {
30+
"unplugin-auto-import": "^0.12.1",
31+
"@types/node": "^18.7.23",
32+
"execa": "^6.1.0",
33+
"kolorist": "^1.6.0",
34+
"tsup": "^6.2.3"
35+
},
36+
"dependencies": {
37+
"local-pkg": "^0.4.2"
38+
},
39+
"pnpm": {
40+
"peerDependencyRules": {
41+
"ignoreMissing": [
42+
"vue"
43+
]
44+
}
45+
}
46+
}

packages/resolvers/scripts/build.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { resolve } from 'node:path'
2+
import { fileURLToPath } from 'node:url'
3+
import { execa } from 'execa'
4+
import { red } from 'kolorist'
5+
6+
const rootDir = resolve(fileURLToPath(import.meta.url), '../..')
7+
8+
const bin = (name: string) => resolve(rootDir, 'node_modules/.bin/' + name)
9+
10+
async function main() {
11+
await execa(
12+
bin('tsup-node'),
13+
[
14+
'src/index.ts',
15+
'--dts',
16+
'--format',
17+
'cjs,esm'
18+
],
19+
{ stdio: 'inherit' }
20+
)
21+
}
22+
23+
main().catch(error => {
24+
console.error(red(error))
25+
process.exit(1)
26+
})
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"compilerOptions": {
3+
"target": "esnext",
4+
"module": "esnext",
5+
"allowJs": false,
6+
"strict": true,
7+
"moduleResolution": "node",
8+
"noUnusedLocals": true,
9+
"resolveJsonModule": true,
10+
"esModuleInterop": true,
11+
"allowSyntheticDefaultImports": true,
12+
"useUnknownInCatchVariables": false,
13+
"types": ["node"]
14+
},
15+
"include": ["*.ts"]
16+
}

packages/resolvers/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './vite'

packages/resolvers/src/vite/index.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { Resolver } from 'unplugin-auto-import/types'
2+
import { resolveModule } from 'local-pkg'
3+
import { readFileSync } from 'node:fs'
4+
5+
let hooks: string[] | undefined
6+
7+
export type VueHooksPlusResolverOptions = Record<string, any>
8+
9+
function queryMetaData() {
10+
try {
11+
const root = resolveModule('vue-hooks-plus') || process.cwd()
12+
const path =
13+
resolveModule('vue-hooks-plus/meta-data.json') ||
14+
resolveModule('vue-hooks-plus/meta-data.json', { paths: [root] })
15+
const metaData = JSON.parse(readFileSync(path!, 'utf-8'))
16+
17+
hooks = metaData.function
18+
} catch (e) {
19+
console.error(e)
20+
throw new Error(
21+
'[vue-hooks-plus:plugins] failed to load vue-hooks-plus, have you installed it?',
22+
)
23+
}
24+
}
25+
26+
function resolveHooks(name: string, _options: VueHooksPlusResolverOptions) {
27+
if (!hooks) return
28+
29+
if (!hooks.includes(name)) return
30+
31+
console.log({
32+
name,
33+
from: 'vue-hooks-plus',
34+
})
35+
36+
return {
37+
name,
38+
from: 'vue-hooks-plus',
39+
}
40+
}
41+
42+
export function VueHooksPlusResolver(options: VueHooksPlusResolverOptions = {}): Resolver {
43+
return name => {
44+
if (!hooks) {
45+
queryMetaData()
46+
}
47+
return resolveHooks(name, options)
48+
}
49+
}
50+
51+
export default VueHooksPlusResolver

packages/resolvers/tsconfig.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"extends": "../../tsconfig.json",
3+
"compilerOptions": {
4+
"outDir": "./dist", //输出文件
5+
"lib": ["esnext", "dom"],
6+
"baseUrl": "./",
7+
"rootDir": "./"
8+
},
9+
"include": ["src/**/*.ts"],
10+
"exclude": ["node_modules", "dist"]
11+
}

packages/resolvers/vite.config.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import path from 'path'
2+
import { defineConfig } from 'vite'
3+
import dts from 'vite-plugin-dts'
4+
5+
export default defineConfig({
6+
plugins: [
7+
dts({
8+
include: ['src/**/*.ts'],
9+
outputDir: path.resolve(__dirname, 'dist/types'),
10+
}),
11+
],
12+
build: {
13+
minify: true,
14+
lib: {
15+
entry: path.resolve(__dirname, 'src/index.ts'),
16+
name: 'VueHooks_Plus_Resolver',
17+
formats: ['es', 'cjs'],
18+
fileName: format => {
19+
return `index.${format}.js`
20+
},
21+
},
22+
chunkSizeWarningLimit: 1000,
23+
},
24+
})

0 commit comments

Comments
 (0)