+ {{ config.public.apiBase }}
+
+
+
+`)
+ writeFileSync(join(appDir, 'server/api/config.get.ts'), `export default defineEventHandler(() => {
+ const config = useSafeRuntimeConfig()
+ return { port: config.port }
+})
+`)
+ writeFileSync(join(appDir, 'nuxt.config.ts'), `import { number, object, string } from 'valibot'
+
+const runtimeConfigSchema = object({
+ port: number(),
+ secretKey: string(),
+ public: object({ apiBase: string() }),
+})
+
+export default defineNuxtConfig({
+ modules: ['nuxt-safe-runtime-config'],
+ runtimeConfig: {
+ port: 3000,
+ secretKey: 'test-secret',
+ public: { apiBase: 'https://api.example.com' },
+ },
+ safeRuntimeConfig: {
+ $schema: runtimeConfigSchema,
+ validateAtRuntime: true,
+ },
+})
+`)
+}
+
+function createEslintConsumer(appDir, tarballPath) {
+ rmSync(appDir, { recursive: true, force: true })
+ mkdirSync(appDir, { recursive: true })
+ writeJson(join(appDir, 'package.json'), {
+ type: 'module',
+ private: true,
+ dependencies: {
+ 'nuxt-safe-runtime-config': `file:${tarballPath}`,
+ 'eslint': '^9.0.0',
+ 'typescript': '^5.8.3',
+ },
+ })
+ writeFileSync(join(appDir, 'eslint.config.mjs'), `import safeRuntimeConfig from 'nuxt-safe-runtime-config/eslint'
+
+export default [
+ safeRuntimeConfig.configs.recommended,
+]
+`)
+ writeFileSync(join(appDir, 'sample.js'), `const config = useRuntimeConfig()
+console.log(config.public)
+`)
+}
+
+function createArkTypeConsumer(appDir, tarballPath) {
+ rmSync(appDir, { recursive: true, force: true })
+ mkdirSync(appDir, { recursive: true })
+ writeJson(join(appDir, 'package.json'), {
+ type: 'module',
+ private: true,
+ scripts: {
+ prepare: 'nuxt prepare',
+ build: 'nuxt build',
+ },
+ dependencies: {
+ 'nuxt-safe-runtime-config': `file:${tarballPath}`,
+ 'arktype': '^2.2.0',
+ 'nuxt': '^4',
+ 'typescript': '^5.8.3',
+ },
+ })
+ writeFileSync(join(appDir, 'app.vue'), `