Skip to content
This repository was archived by the owner on Dec 10, 2024. It is now read-only.

Commit d28c7ac

Browse files
committedJan 23, 2024·
feat:(nuxt): add slugify package and configuration
1 parent 96c9af1 commit d28c7ac

File tree

6 files changed

+93
-2
lines changed

6 files changed

+93
-2
lines changed
 

‎packages/box/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"nuxt-icon": "^0.6.8",
4949
"pinia": "^2.1.7",
5050
"radix-vue": "^1.3.2",
51+
"slugify": "^1.6.6",
5152
"tailwind-merge": "^2.2.0",
5253
"tailwindcss-animate": "^1.0.7",
5354
"vee-validate": "^4.12.4",

‎packages/nuxt/src/module.ts

+14
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import YAML from 'yaml'
1010

1111
import defu from 'defu'
1212
import type { NuxtConfigLayer } from '@nuxt/schema'
13+
import type slugify from 'slugify'
1314
import { version } from '../package.json'
1415
import { setupDevToolsUI } from './devtools'
1516
import { DEVTOOLS_MODULE_KEY, DEVTOOLS_MODULE_NAME } from './constants'
@@ -19,6 +20,19 @@ import { generateReadmeJson } from './runtime/core/utils/generateYaml'
1920
import { setupModules } from './runtime/core/setupModules'
2021
import type { PergelOptions, ResolvedPergelOptions } from './runtime/core/types/nuxtModule'
2122

23+
export interface ModulePublicRuntimeConfig {
24+
slugify: {
25+
extends: {
26+
[key: string]: any
27+
}
28+
default: Parameters<typeof slugify>[1]
29+
}
30+
}
31+
32+
declare module '@nuxt/schema' {
33+
interface PublicRuntimeConfig extends ModulePublicRuntimeConfig { }
34+
}
35+
2236
export default defineNuxtModule<PergelOptions>({
2337
meta: {
2438
name: DEVTOOLS_MODULE_NAME,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import slugifyFunc from 'slugify'
2+
3+
export function useSlugify() {
4+
const { slugify } = useRuntimeConfig().public
5+
if (Object.keys(slugify.extends).length)
6+
slugifyFunc.extend(slugify.extends)
7+
8+
return (string: string, options?: Parameters<typeof slugifyFunc>[1]) =>
9+
slugifyFunc(string, { ...typeof slugify.default === 'object' ? slugify.default : {}, ...typeof options === 'object' ? options : {} })
10+
}

‎packages/nuxt/src/runtime/modules/box/index.ts

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { join } from 'node:path'
2-
import { addComponent, addPlugin, createResolver, installModule } from '@nuxt/kit'
2+
import { addComponent, addImportsDir, addPlugin, addServerImportsDir, createResolver, extendViteConfig, installModule } from '@nuxt/kit'
33
import { isPackageExists } from 'local-pkg'
44

55
import type { IconsPluginOptions } from '@egoist/tailwindcss-icons'
66
import type { ModuleOptions } from '@nuxtjs/i18n'
77
import consola from 'consola'
88
import type { ModuleOptions as TailwindCSSOptions } from '@nuxtjs/tailwindcss'
99
import type { ModuleOptions as GoogleFonts } from '@nuxtjs/google-fonts'
10+
import defu from 'defu'
1011
import { definePergelModule } from '../../core/definePergel'
1112
import { useNitroImports, useNuxtImports } from '../../core/utils/useImports'
1213
import { addDownloadTemplate } from '../../core/utils/createDownloadTemplate'
@@ -41,6 +42,7 @@ export default definePergelModule<BoxOptions, ResolvedBoxOptions>({
4142
vueUse: false,
4243
neoconfetti: false,
4344
googleFonts: false,
45+
slugify: false,
4446
},
4547
},
4648
async setup({ nuxt, options }) {
@@ -362,6 +364,27 @@ export default definePergelModule<BoxOptions, ResolvedBoxOptions>({
362364
} as Partial<GoogleFonts>)
363365
}
364366

367+
if (options.packages.slugify) {
368+
// Public runtimeConfig
369+
nuxt.options.runtimeConfig.public.slugify = defu(
370+
nuxt.options.runtimeConfig.public.slugify,
371+
{
372+
extend: options.extend,
373+
defaults: options.defaults,
374+
},
375+
)
376+
377+
// Add Vite configurations
378+
extendViteConfig((config) => {
379+
config.optimizeDeps = config.optimizeDeps || {}
380+
config.optimizeDeps.include = config.optimizeDeps.include || []
381+
config.optimizeDeps.include.push('slugify')
382+
})
383+
384+
addServerImportsDir(resolver.resolve('./composables/slugify'))
385+
addImportsDir(resolver.resolve('./composables/slugify'))
386+
}
387+
365388
addDownloadTemplate({
366389
nuxt,
367390
data: {

‎packages/nuxt/src/runtime/modules/box/types.ts

+18
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { CollectionNames, IconsPluginOptions } from '@egoist/tailwindcss-icons'
2+
import type slugify from 'slugify'
23

34
import type { PergelModuleOptions, ResolvedPergelModuleOptions } from '../../core/types/module'
45

@@ -80,6 +81,17 @@ export interface BoxOptions extends PergelModuleOptions {
8081
* @see https://google-fonts.nuxtjs.org/
8182
*/
8283
googleFonts?: boolean | 'custom'
84+
85+
/**
86+
* default: false
87+
* @see https://github.com/simov/slugify
88+
*/
89+
slugify?: boolean | {
90+
extend?: {
91+
[key: string]: any
92+
}
93+
defaults?: Parameters<typeof slugify>[1]
94+
}
8395
}
8496
}
8597

@@ -98,5 +110,11 @@ export interface ResolvedBoxOptions extends ResolvedPergelModuleOptions {
98110
vueUse: boolean
99111
neoconfetti: boolean
100112
googleFonts: boolean | 'custom'
113+
slugify: boolean | {
114+
extend?: {
115+
[key: string]: any
116+
}
117+
defaults?: Parameters<typeof slugify>[1]
118+
}
101119
}
102120
}

‎pnpm-lock.yaml

+26-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
This repository has been archived.