collectCoverage: true,
coverageDirectory: 'coverage',
coverageReporters: ['html', 'lcov', 'text'],
- collectCoverageFrom: ['packages/*/src/**/*.ts'],
+ collectCoverageFrom: ['packages/pinia/src/**/*.ts'],
coveragePathIgnorePatterns: [
'/node_modules/',
'src/index.ts',
'src/deprecated.ts',
'src/vue2-plugin.ts',
],
- testMatch: ['<rootDir>/packages/*/__tests__/**/*.spec.ts'],
+ testMatch: ['<rootDir>/packages/pinia/__tests__/**/*.spec.ts'],
transform: {
'^.+\\.tsx?$': '@sucrase/jest-plugin',
},
"release": "node TODO: scripts/release.mjs",
"size": "lerna run size",
"build": "lerna run build --parallel",
+ "play": "lerna run play",
"build:dts": "lerna run build:dts --parallel",
"lint": "prettier -c --parser typescript \"packages/*/{src,__tests__,e2e}/**/*.[jt]s?(x)\"",
"lint:fix": "yarn run lint --write",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s --commit-path . -l pinia -r 1",
"test:dts": "tsc -p ./test-dts/tsconfig.json",
"dev": "yarn run test:unit --watchAll",
- "play": "yarn vite",
"test": "yarn run build && yarn run build:dts && yarn test:dts"
},
"files": [
"@microsoft/api-extractor": "7.18.5",
"@nuxt/app": "^0.5.0",
"@nuxt/kit": "^0.6.4",
- "@vitejs/plugin-vue": "^1.4.0",
"@vue/compiler-sfc": "^3.2.2",
"@vue/server-renderer": "^3.2.2",
"@vue/test-utils": "^2.0.0-rc.12",
- "@vueuse/core": "^6.0.0",
- "mande": "^1.0.0",
- "swrv": "^1.0.0-beta.8",
- "vite": "^2.5.0",
"vitepress": "^0.16.1",
"vue": "^3.2.2",
- "vue-promised": "^2.1.0",
- "vue-router": "^4.0.11",
"vue2": "npm:vue@2"
},
"dependencies": {
+++ /dev/null
-import { defineConfig } from 'vite'
-import vue from '@vitejs/plugin-vue'
-
-// https://vitejs.dev/config/
-export default defineConfig({
- plugins: [vue()],
- define: {
- __DEV__: 'true',
- __BROWSER__: 'true',
- __TEST__: 'false',
- },
- optimizeDeps: {
- exclude: ['vue-demi', '@vueuse/shared', '@vueuse/core'],
- },
-})
<body>
<div id="app"></div>
- <script type="module" src="/playground/src/main.ts"></script>
+ <script type="module" src="/src/main.ts"></script>
</body>
</html>
--- /dev/null
+{
+ "name": "@pinia/playground",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "play": "vite",
+ "play:build": "vite build",
+ "serve": "vite preview"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^1.4.0",
+ "vite": "^2.4.0"
+ },
+ "dependencies": {
+ "@vueuse/core": "^6.0.0",
+ "mande": "^1.0.0",
+ "swrv": "^1.0.0-beta.8",
+ "vue": "^3.2.2",
+ "@vue/compiler-sfc": "^3.2.2",
+ "vue-promised": "^2.1.0",
+ "vue-router": "^4.0.11"
+ }
+}
-import { computed, createApp, markRaw } from 'vue'
+import { computed, createApp, markRaw, Ref } from 'vue'
import App from './App.vue'
-import { createPinia } from '../../src'
+import { createPinia } from 'pinia'
import { router } from './router'
+import {
+ RouteLocationNormalized,
+ RouteLocationNormalizedLoaded,
+} from 'vue-router'
const pinia = createPinia()
+declare module 'pinia' {
+ export interface PiniaCustomProperties {
+ set route(
+ value: RouteLocationNormalizedLoaded | Ref<RouteLocationNormalizedLoaded>
+ )
+ get route(): RouteLocationNormalized
+ }
+}
+
pinia.use(() => ({
+ // @ts-expect-error: WHY?
route: computed(() => markRaw(router.currentRoute.value)),
}))
-import { defineStore } from '../../../src'
+import { defineStore } from 'pinia'
import { useUserStore } from './user'
export const useCartStore = defineStore({
-import { acceptHMRUpdate, defineStore } from '../../../src'
+import { acceptHMRUpdate, defineStore } from 'pinia'
const delay = (t: number) => new Promise((r) => setTimeout(r, t))
import { computed, toRefs, reactive } from 'vue'
-import { acceptHMRUpdate, defineStore } from '../../../src'
+import { acceptHMRUpdate, defineStore } from 'pinia'
const delay = (t: number) => new Promise((r) => setTimeout(r, t))
-import { ref, toRaw, unref, watch } from 'vue'
-import { acceptHMRUpdate, defineStore } from '../../../src'
+import { ref, toRaw, watch } from 'vue'
+import { acceptHMRUpdate, defineStore } from 'pinia'
import { getRandomJoke, Joke } from '../api/jokes'
import useSWRV from 'swrv'
// const current = ref<null | Joke>(null)
const history = ref<Joke[]>([])
- const { data, error, isValidating, mutate } = useSWRV('jokes', getRandomJoke)
+ const { data, error, mutate } = useSWRV('jokes', getRandomJoke)
watch(data, (joke) => {
console.log('changed from within the store', joke)
import { ref, unref } from 'vue'
-import { acceptHMRUpdate, defineStore } from '../../../src'
+import { acceptHMRUpdate, defineStore } from 'pinia'
import { getRandomJoke, Joke } from '../api/jokes'
export const useJokes = defineStore('jokes', {
-import { acceptHMRUpdate, defineStore } from '../../../src'
+import { acceptHMRUpdate, defineStore } from 'pinia'
import { getRandomJoke, Joke } from '../api/jokes'
import { usePromise } from 'vue-promised'
import { ref, watch } from 'vue'
})
if (import.meta.hot) {
- // import.meta.hot.accept(acceptHMRUpdate(useJokes, import.meta.hot))
+ import.meta.hot.accept(acceptHMRUpdate(useJokes, import.meta.hot))
// import.meta.hot.accept(acceptHMRUpdate(useSetupJokes, import.meta.hot))
}
import useSWRV from 'swrv'
-import { computed, ref } from 'vue'
-import { acceptHMRUpdate, defineStore } from '../../../src'
+import { ref } from 'vue'
+import { acceptHMRUpdate, defineStore } from 'pinia'
import { getNASAPOD } from '../api/nasa'
-import LocalStorageCache from 'swrv/dist/cache/adapters/localStorage'
-
export const useNasaStore = defineStore('nasa-pod-swrv', () => {
// can't go past today
const today = new Date().toISOString().slice(0, 10)
-import { defineStore } from '../../../src'
+import { defineStore } from 'pinia'
-export const useUserStore = defineStore({
- id: 'user',
+export const useUserStore = defineStore('user', {
state: () => ({
name: 'Eduardo',
isAdmin: true,
async login(user: string, password: string) {
const userData = await apiLogin(user, password)
- this.patch({
+ this.$patch({
name: user,
...userData,
})
},
logout() {
- this.patch({
+ this.$patch({
name: '',
isAdmin: false,
})
{
+ "extends": "../../tsconfig.json",
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"resolveJsonModule": true,
"esModuleInterop": true,
"lib": ["esnext", "dom"]
- },
- "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
+ }
+ // "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}
--- /dev/null
+import { defineConfig, Plugin } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import _fs from 'fs'
+import path from 'path'
+
+const fs = _fs.promises
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [vue(), copyPiniaPlugin()],
+ define: {
+ // __DEV__: 'true',
+ // __BROWSER__: 'true',
+ __TEST__: 'false',
+ },
+ resolve: {
+ // alias: {
+ // '@vue/composition-api': 'vue-demi',
+ // },
+ dedupe: ['vue-demi', 'vue'],
+ },
+ optimizeDeps: {
+ exclude: ['vue-demi', '@vueuse/shared', '@vueuse/core', 'pinia'],
+ },
+})
+
+function copyPiniaPlugin(): Plugin {
+ return {
+ name: 'copy-pinia',
+ async generateBundle() {
+ const filePath = path.resolve(
+ __dirname,
+ '../pinia/dist/pinia.esm-bundler.js'
+ )
+
+ // throws if file doesn't exist
+ await fs.access(filePath)
+
+ this.emitFile({
+ type: 'asset',
+ fileName: 'pinia.esm-bundler.js',
+ source: await fs.readFile(filePath, 'utf-8'),
+ })
+ },
+ }
+}
core-util-is "1.0.2"
extsprintf "^1.2.0"
-vite@^2.4.4, vite@^2.5.0:
+vite@^2.4.0, vite@^2.4.4:
version "2.5.0"
resolved "https://registry.yarnpkg.com/vite/-/vite-2.5.0.tgz#111ba3679432d426e44566acf480005a7914cbd6"
integrity sha512-Dn4B+g54PJsMG5WCc4QeFy1ygMXRdTtFrUPegqfk4+vzVQcbF/DqqmI/1bxezArzbujBJg/67QeT5wz8edfJVQ==