npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@spark-view/spark-app

v0.3.2

Published

SPARK Application Layer - 应用层基础设施(AppContext、Router Guards、Error Boundary、Bootstrap)

Readme

@spark-view/spark-app

SPARK 应用层基础设施 - 提供应用启动、认证、路由守卫、错误处理和日志系统

TypeScript Vue

特性

  • SparkApp.start() - 声明式应用启动(推荐)
  • 🔐 Authentication - 内置认证服务和令牌管理
  • 🛡️ Router Guards - 鉴权和权限检查
  • 🚨 Error Boundary - 全局错误处理
  • 📝 Logger - 多级别、多传输器日志系统
  • 🎯 Composables - Vue 3 组合式 API(推荐)

安装

pnpm add @spark-view/spark-app

快速开始

1. 使用 SparkApp.start()(推荐)

最简单的方式 - 100% 声明式配置:

import { SparkApp } from '@spark-view/spark-app'
import App from './App.vue'

await SparkApp.start({
  rootComponent: App,
  routerMode: 'history',
  config: {
    apiBaseUrl: '/api',
    logLevel: 'debug',
    enableMock: import.meta.env.DEV
  }
})

2. 使用 SparkApp.bootstrap()(高级用法)

需要更多控制时:

import { createApp } from 'vue'
import { createRouter, createWebHistory } from 'vue-router'
import { SparkApp } from '@spark-view/spark-app'
import App from './App.vue'
import routes from './routes'

const app = createApp(App)
const router = createRouter({ 
  history: createWebHistory(),
  routes 
})

await SparkApp.bootstrap({
  app,
  router,
  config: {
    apiBaseUrl: '/api',
    logLevel: import.meta.env.DEV ? 'debug' : 'warn'
  },
  beforeMount: async (context) => {
    console.log('即将挂载', context)
  }
})

核心功能

认证服务

import { authService } from '@spark-view/spark-app'

// 登录
const result = await authService.login({
  username: 'admin',
  password: '123456'
})

if (result) {
  console.log('登录成功', result.user)
}

// 登出
await authService.logout()

// 检查认证状态
const authResult = await authService.checkAuth()

日志系统

import { createLogger } from '@spark-view/spark-app'

const logger = createLogger('MyComponent')

logger.info('应用启动')
logger.warn('警告信息', { code: 400 })
logger.error('错误信息', new Error('Something went wrong'))
logger.debug('调试信息', { data: {...} })

服务访问(推荐使用 SPARK 能力系统)

import { useSparkComponent } from '@spark-view/spark-component'
import { APP_SERVICES } from '@spark-view/spark-utils'
import { useRouter } from 'vue-router'
import { Logger } from '@spark-view/spark-utils'

export default {
  setup() {
    // 方式 1:直接使用标准工具(推荐)
    const router = useRouter()  // vue-router
    const logger = Logger('MyComponent')  // 工厂函数
    logger.info('组件初始化')
    
    // 方式 2:通过 APP_SERVICES 能力获取(组件内)
    const { consume } = useSparkComponent({ type: 'my-comp' })
    const services = consume(APP_SERVICES)
    if (services) {
      services.router?.push('/home')
      services.logger?.info('Action')
      services.auth?.logout()
    }
    
    return { router, logger }
  }
}

组件注册表访问

import { useSparkRegistry } from '@spark-view/spark-app'

export default {
  setup() {
    // 访问 SPARK 组件注册表
    const registry = useSparkRegistry()
    const hasComponent = registry.has('my-component')
    
    return { hasComponent }
  }
}

配置管理

import { loadConfig, isFeatureEnabled } from '@spark-view/spark-app'

// 加载配置
const config = await loadConfig({
  apiBaseUrl: '/api',
  enableMock: true,
  features: {
    enableExport: true
  }
})

// 检查功能开关
if (isFeatureEnabled(config, 'enableExport')) {
  // 显示导出功能
}

错误处理

import { setupErrorHandler, createErrorBoundary } from '@spark-view/spark-app'

// 全局错误处理
setupErrorHandler(app, {
  enableFallback: true
})

// 错误边界组件
const ErrorBoundary = createErrorBoundary((error) => {
  // 自定义降级 UI
  return h('div', `发生错误: ${error.message}`)
})

API 概览

SparkApp 命名空间

| API | 描述 | 类型 | |-----|------|------| | SparkApp.start() | 启动应用(推荐) | 高级 API | | SparkApp.bootstrap() | 初始化流水线 | 中级 API | | SparkApp.setupRouterGuards() | 设置路由守卫 | 工具函数 | | SparkApp.setupErrorHandler() | 设置错误处理 | 工具函数 | | SparkApp.loadConfig() | 加载配置 | 工具函数 | | SparkApp.createAppContext() | 创建应用上下文 | 工具函数 |

服务访问方式

| 方式 | 用途 | 示例 | |------|------|------| | useRouter() from vue-router | 路由导航 | const router = useRouter() | | Logger('module') 工厂函数 | 日志记录 | const logger = Logger('MyComponent') | | consume(APP_SERVICES) | 应用服务能力 | const services = consume(APP_SERVICES) | | useSparkRegistry() | 组件注册表 | const registry = useSparkRegistry() |

认证服务

| 方法 | 描述 | |------|------| | authService.login(credentials) | 用户登录 | | authService.logout() | 用户登出 | | authService.checkAuth() | 检查认证状态 | | authService.getToken() | 获取访问令牌 | | authService.refreshToken() | 刷新令牌 |

日志系统

| 方法 | 描述 | |------|------| | createLogger(scope) | 创建作用域日志 | | logger.debug(msg, data?) | 调试日志 | | logger.info(msg, data?) | 信息日志 | | logger.warn(msg, data?) | 警告日志 | | logger.error(msg, error?) | 错误日志 |

类型定义

interface AppContext {
  user: UserInfo
  tenant: TenantInfo
  env: EnvironmentInfo
  config: Record<string, unknown>
  initializedAt: string
}

interface UserInfo {
  id: string | number
  name: string
  email?: string
  roles: string[]
  permissions: string[]
}

interface TenantInfo {
  id: string
  name: string
  domain?: string
}

最佳实践

✅ 推荐用法

// 使用 vue-router 标准 API
import { useRouter } from 'vue-router'
const router = useRouter()

// 使用 Logger 工厂函数
import { Logger } from '@spark-view/spark-utils'
const logger = Logger('MyComponent')

// 使用 SPARK 能力系统
import { useSparkComponent } from '@spark-view/spark-component'
import { APP_SERVICES } from '@spark-view/spark-utils'
const { consume } = useSparkComponent({ type: 'my-comp' })
const services = consume(APP_SERVICES)

// 使用命名空间 API
await SparkApp.start({ ... })

依赖

{
  "vue": "^3.4.0",
  "vue-router": "^4.2.0"
}

开发命令

pnpm run typecheck   # 类型检查
pnpm run lint        # 代码检查
pnpm run test        # 运行测试
pnpm run build       # 构建包

更新日志

查看 CHANGELOG.md 了解详细的更新历史。

License

MIT