mirror of
https://github.com/tompro/sattle.git
synced 2026-08-27 07:15:59 +00:00
sattle: Quasar PWA scaffold with lnurlcash-kit protocol core
M1: Quasar 2 / Vue 3 / TS / Pinia / i18n / PWA app shell in the lnurl-wallet palette (#002222/#004444/#55ffcc, Noto Sans). Protocol layer is the external lnurlcash-kit library (git dependency on the fork until upstream merges the prepare fix / publishes to npm); keys.ts + receive.ts vendored from lnurl-wallet with the derivation domain renamed to 'sattle'. Nix dev shell, ci workflow (typecheck, vitest, pwa build).
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
// Configuration for your app
|
||||
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file
|
||||
|
||||
import { defineConfig } from '#q-app';
|
||||
|
||||
export default defineConfig((ctx) => {
|
||||
return {
|
||||
// https://v2.quasar.dev/quasar-cli-vite/prefetch-feature
|
||||
// preFetch: true,
|
||||
|
||||
// app boot file (/src/boot)
|
||||
// --> boot files are part of "main.js"
|
||||
// https://v2.quasar.dev/quasar-cli-vite/boot-files
|
||||
boot: ['i18n'],
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#css
|
||||
css: ['app.scss'],
|
||||
|
||||
// https://github.com/quasarframework/quasar/tree/dev/extras
|
||||
extras: [
|
||||
// 'ionicons-v4',
|
||||
// 'mdi-v7',
|
||||
// 'fontawesome-v7',
|
||||
// 'eva-icons',
|
||||
// 'themify',
|
||||
// 'line-awesome',
|
||||
// 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both!
|
||||
|
||||
'material-icons', // optional, you are not bound to it
|
||||
],
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#build
|
||||
build: {
|
||||
target: {
|
||||
// browser: 'baseline-widely-available',
|
||||
// node: 'node22'
|
||||
},
|
||||
|
||||
typescript: {
|
||||
strict: true,
|
||||
vueShim: true,
|
||||
// extendTsConfig (tsConfig) {}
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/page-routing-with-vue-router#filename-based-routing
|
||||
// filenameBasedRouting: true,
|
||||
|
||||
vueRouterMode: 'hash', // available values: 'hash', 'history'
|
||||
// vueRouterBase,
|
||||
|
||||
// publicPath: '/',
|
||||
// define: {},
|
||||
// defineEnv: {}
|
||||
// ignorePublicFolder: true,
|
||||
// minify: false,
|
||||
// distDir
|
||||
|
||||
// extendViteConf (viteConf) {},
|
||||
// viteVuePluginOptions: {},
|
||||
|
||||
vitePlugins: [
|
||||
[
|
||||
'@intlify/unplugin-vue-i18n/vite',
|
||||
{
|
||||
// if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false`
|
||||
// compositionOnly: false,
|
||||
|
||||
// if you want to use named tokens in your Vue I18n messages, such as 'Hello {name}',
|
||||
// you need to set `runtimeOnly: false`
|
||||
// runtimeOnly: false,
|
||||
|
||||
ssr: ctx.mode.ssr || ctx.mode.ssg,
|
||||
|
||||
// you need to set i18n resource including paths !
|
||||
include: [ctx.appPaths.resolve.app('src/i18n')],
|
||||
},
|
||||
],
|
||||
[
|
||||
'vite-plugin-checker',
|
||||
{
|
||||
vueTsc: true,
|
||||
eslint: {
|
||||
lintCommand: 'eslint -c ./eslint.config.js "./src*/**/*.{ts,js,mjs,cjs,vue}"',
|
||||
useFlatConfig: true,
|
||||
},
|
||||
},
|
||||
{ server: false },
|
||||
],
|
||||
],
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#devserver
|
||||
devServer: {
|
||||
// vueDevtools: true,
|
||||
// https: true,
|
||||
open: true, // opens browser window automatically
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#framework
|
||||
framework: {
|
||||
config: {
|
||||
// sattle is dark-only: lnurl-wallet's dark-teal identity is the
|
||||
// brand, there is no light theme
|
||||
dark: true,
|
||||
},
|
||||
|
||||
// iconSet: 'material-icons', // Quasar icon set
|
||||
// lang: 'en-US', // Quasar language pack
|
||||
|
||||
// For special cases outside of where the auto-import strategy can have an impact
|
||||
// (like functional components as one of the examples),
|
||||
// you can manually specify Quasar components/directives to be available everywhere:
|
||||
//
|
||||
// components: [],
|
||||
// directives: [],
|
||||
|
||||
// Quasar plugins
|
||||
plugins: [],
|
||||
},
|
||||
|
||||
// animations: 'all', // --- includes all animations
|
||||
// https://v2.quasar.dev/options/animations
|
||||
animations: [],
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#sourcefiles
|
||||
// sourceFiles: {
|
||||
// rootComponent: 'src/App.vue',
|
||||
// router: 'src/router/index',
|
||||
// store: 'src/store/index',
|
||||
// pwaRegisterServiceWorker: 'src-pwa/register-sw',
|
||||
// pwaServiceWorker: 'src-pwa/sw/custom-sw',
|
||||
// pwaManifestFile: 'src-pwa/manifest.json',
|
||||
// electronMain: 'src-electron/electron-main',
|
||||
// electronPreload: 'src-electron/electron-preload'
|
||||
// bexManifestFile: 'src-bex/manifest.json
|
||||
// },
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/developing-ssr/configuring-ssr
|
||||
ssr: {
|
||||
/**
|
||||
* The default port that the production server should use
|
||||
* (gets superseded if process.env.PORT is specified at runtime)
|
||||
*/
|
||||
prodPort: 3000,
|
||||
middlewares: [
|
||||
'render', // keep this as last one
|
||||
],
|
||||
|
||||
// clientSideRenderingRoutes: [],
|
||||
// noPreloadTagRoutes: [],
|
||||
// manualStoreSerialization: true,
|
||||
// manualStoreSsrContextInjection: true,
|
||||
// manualStoreHydration: true,
|
||||
// manualPostHydrationTrigger: true,
|
||||
// prodScriptNamedExport: false,
|
||||
|
||||
// extendSSRPackageJson (pkgJson) {},
|
||||
// extendSSRManifestJson (json) {},
|
||||
// extendSSRWebserverConf (rolldownConf) {},
|
||||
|
||||
// pwa: true,
|
||||
// pwaOfflineHtmlFilename: 'offline.html', // do NOT use index.html as name!
|
||||
// extendSSRGenerateSWOptions (cfg) {},
|
||||
// extendSSRInjectManifestOptions (cfg) {},
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/developing-ssg/configuring-ssg
|
||||
ssg: {
|
||||
// onSsgRendererError: 'abort',
|
||||
// ssgRendererConcurrency: 1,
|
||||
// ssgRendererRetryCount: 0,
|
||||
// ssgRendererRetryDelay: 1000,
|
||||
// ssgRendererDirectoryIndexes: true,
|
||||
// error404HtmlFilename: '404.html',
|
||||
// clientSideRenderingHtmlFilename: 'csr.html',
|
||||
// clientSideRenderingRoutes: [],
|
||||
// noPreloadTagRoutes: []
|
||||
// extendSSGRendererConf (rolldownConf) {},
|
||||
// extendSSGManifestJson (json) {},
|
||||
// manualStoreSerialization: true,
|
||||
// manualStoreSsrContextInjection: true,
|
||||
// manualStoreHydration: true,
|
||||
// manualPostHydrationTrigger: true,
|
||||
// pwa: true,
|
||||
// pwaOfflineHtmlFilename: 'offline.html',
|
||||
// extendSSGGenerateSWOptions (cfg) {},
|
||||
// extendSSGInjectManifestOptions (cfg) {},
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/developing-pwa/configuring-pwa
|
||||
pwa: {
|
||||
workboxMode: 'GenerateSW', // 'GenerateSW' or 'InjectManifest'
|
||||
// swFilename: 'sw.js',
|
||||
// manifestFilename: 'manifest.json',
|
||||
// extendPWAManifestJson (json) {},
|
||||
// useCredentialsForManifestTag: true,
|
||||
// injectPWAMetaTags: false,
|
||||
// extendPWACustomSWConf (rolldownConf) {},
|
||||
// extendPWAGenerateSWOptions (cfg) {},
|
||||
// extendPWAInjectManifestOptions (cfg) {},
|
||||
// extendPWASwTsConfig (tsConfig) {}
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/developing-cordova-apps/configuring-cordova
|
||||
cordova: {},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/developing-capacitor-apps/configuring-capacitor
|
||||
capacitor: {
|
||||
hideSplashscreen: true,
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/developing-electron-apps/configuring-electron
|
||||
electron: {
|
||||
// extendElectronMainConf (rolldownConf) {},
|
||||
// extendElectronPreloadConf (rolldownConf) {},
|
||||
// extendElectronPackageJson (pkgJson) {},
|
||||
|
||||
// Electron preload scripts (if any) from /src-electron, WITHOUT file extension
|
||||
preloadScripts: ['electron-preload'],
|
||||
|
||||
// specify the debugging port to use for the Electron app when running in development mode
|
||||
inspectPort: 5858,
|
||||
|
||||
bundler: 'packager', // 'packager' or 'builder'
|
||||
|
||||
packager: {
|
||||
// https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options
|
||||
// OS X / Mac App Store
|
||||
// appBundleId: '',
|
||||
// appCategoryType: '',
|
||||
// osxSign: '',
|
||||
// protocol: 'myapp://path',
|
||||
// Windows only
|
||||
// win32metadata: { ... }
|
||||
},
|
||||
|
||||
builder: {
|
||||
// https://www.electron.build/configuration
|
||||
|
||||
appId: 'sattle',
|
||||
},
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/developing-browser-extensions/configuring-bex
|
||||
bex: {
|
||||
// extendBexScriptsConf (rolldownConf) {},
|
||||
// extendBexManifestJson (json) {},
|
||||
|
||||
/**
|
||||
* The list of extra scripts (js/ts) not in your bex manifest that you want to
|
||||
* compile and use in your browser extension. Maybe dynamic use them?
|
||||
*
|
||||
* Each entry in the list should be a relative filename to /src-bex/
|
||||
*
|
||||
* @example [ 'my-script.ts', 'sub-folder/my-other-script.js' ]
|
||||
*/
|
||||
extraScripts: [],
|
||||
},
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user