gemercheung преди 3 години
родител
ревизия
f8618c9c94

+ 4 - 3
.prettierrc

@@ -1,5 +1,6 @@
 {
-  "tabWidth": 4,
-  "singleQuote": true,
-  "trailingComma": "all"
+    "tabWidth": 4,
+    "singleQuote": true,
+    "trailingComma": "all",
+    "printWidth": 300
 }

+ 1 - 6
packages/core/src/basicTrack.ts

@@ -3,10 +3,5 @@ import { IBaseAction } from '@medici/types';
 export class BaseTrack implements IBaseAction {
     constructor() {}
     public trackView(url: string, referrer: string, uuid: string): void {}
-    public TrackEvent(
-        value: string,
-        type: string,
-        url: string,
-        uuid: string,
-    ): void {}
+    public TrackEvent(value: string, type: string, url: string, uuid: string): void {}
 }

+ 2 - 2
packages/core/src/config.ts

@@ -1,5 +1,5 @@
 import { BehaviorSubject } from 'rxjs';
-import { version } from '../package.json';
+// import * as pjson from '../package.json';
 
 export interface ProjectConfigType {
     serverUrl: string;
@@ -11,7 +11,7 @@ export interface ProjectConfigType {
 export const projectConfig = new BehaviorSubject<ProjectConfigType>({
     serverUrl: '',
     appId: '',
-    version: version,
+    version: '',
 });
 
 export function getProjectConfig(): ProjectConfigType {

+ 1 - 3
packages/core/src/event.ts

@@ -1,5 +1,3 @@
 import { GlobalEventType } from '@medici/types';
 // export
-export class Eventer {
-
-}
+export class Eventer {}

+ 37 - 5
packages/core/src/history.ts

@@ -7,22 +7,54 @@ export class History {
     protected _sdk: SDK;
     private currentRef: string;
     private currentUrl: string;
+
     constructor(sdk: SDK) {
         this._sdk = sdk;
         this.init();
     }
 
     init(): void {
-        global.document.addEventListener(
-            'readystatechange',
-            this.handleReadystatechange,
-        );
+        console.log('history init');
+        global.document.addEventListener('readystatechange', this.handleReadystatechange, true);
+        global.history.pushState = hook(global.history, 'pushState', this.handlePushState);
+        global.history.replaceState = hook(global.history, 'replaceState', this.handlePushState);
+        const {
+            screen: { width, height },
+            navigator: { language },
+            location: { hostname, pathname, search },
+            localStorage,
+            document,
+            history,
+        } = global;
+        this.currentUrl = `${pathname}${search}`;
+        this.currentRef = global.document.referrer;
     }
 
     handleReadystatechange(): void {
-
+        console.log('handleReadystatechange');
     }
 
+    handlePushState(data: any, unused: string, url?: string | URL): void {
+        console.log('handlePushState', data, unused, url);
+        if (!url) return;
+        this.currentRef = this.currentUrl;
+        const newUrl = url.toString();
+        if (newUrl.substring(0, 4) === 'http') {
+            this.currentUrl = '/' + newUrl.split('/').splice(3).join('/');
+        } else {
+            this.currentUrl = newUrl;
+        }
+        console.log('this.currentUrl', this.currentUrl);
+        console.log('this.currentRef', this.currentRef);
+
+        if (this.currentUrl !== this.currentRef) {
+            console.log('trackView');
+            //   trackView();
+        }
+    }
+    handleReplaceState(data: any, unused: string, url?: string | URL): void {
+        console.log('handleReplaceState', data, unused, url);
+    }
 }
 // const handlePush = (state, title, url) => {
 //     if (!url) return;

+ 0 - 1
packages/core/src/index.ts

@@ -1,2 +1 @@
 export * from './sdk';
-export * from './event';

+ 1 - 3
packages/core/src/xhr.ts

@@ -3,9 +3,7 @@ export interface BrowserTransportOptions {
     data: any;
 }
 
-export const makeXHRRequest = (
-    options: BrowserTransportOptions,
-): PromiseLike<XMLHttpRequestResponseType> => {
+export const makeXHRRequest = (options: BrowserTransportOptions): PromiseLike<XMLHttpRequestResponseType> => {
     return new Promise((resolve, reject) => {
         const xhr = new XMLHttpRequest();
         xhr.onerror = reject;

+ 0 - 1
packages/core/target/npmlist.json

@@ -1 +0,0 @@
-{"version":"1.0.0","name":"@medici/core","dependencies":{"@medici/foo":{"version":"1.0.0"},"uuidv4":{"version":"6.2.13"}}}

+ 2 - 8
packages/types/src/event.ts

@@ -18,12 +18,6 @@ export interface IBaseAction {
 
 export interface ICustomAction {
     track(trackActionName: string, trackActionOption?: TrackActionOption): void;
-    startTrack(
-        trackActionName: string,
-        trackActionOption?: TrackActionOption,
-    ): void;
-    endTrack(
-        trackActionName: string,
-        trackActionOption?: TrackActionOption,
-    ): void;
+    startTrack(trackActionName: string, trackActionOption?: TrackActionOption): void;
+    endTrack(trackActionName: string, trackActionOption?: TrackActionOption): void;
 }

+ 0 - 1
packages/web/package.json

@@ -17,6 +17,5 @@
     "typescript": "~4.7.4"
   },
   "dependencies": {
-    "@medici/core": "workspace:^0.0.1"
   }
 }

+ 3 - 1
play/package.json

@@ -9,7 +9,9 @@
     "preview": "vite preview"
   },
   "dependencies": {
-    "vue": "^3.2.37"
+    "@medici/core": "workspace:^0.0.1",
+    "vue": "^3.2.37",
+    "vue-router": "4"
   },
   "devDependencies": {
     "@vitejs/plugin-vue": "^3.0.0",

+ 15 - 15
play/src/App.vue

@@ -1,31 +1,31 @@
 <script setup lang="ts">
 // This starter template is using Vue 3 <script setup> SFCs
 // Check out https://vuejs.org/api/sfc-script-setup.html#script-setup
-import HelloWorld from './components/HelloWorld.vue'
+import HelloWorld from './components/HelloWorld.vue';
+import { SDK } from '@medici/core';
+
+const medici = new SDK({
+    platform: 'web',
+});
+console.log('medici', medici);
 </script>
 
 <template>
-  <div>
-    <!-- <a href="https://vitejs.dev" target="_blank">
-      <img src="/vite.svg" class="logo" alt="Vite logo" />
-    </a>
-    <a href="https://vuejs.org/" target="_blank">
-      <img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
-    </a> -->
-  </div>
-  <!-- <HelloWorld msg="Vite + Vue" /> -->
+    <div>
+        <router-view></router-view>
+    </div>
 </template>
 
 <style scoped>
 .logo {
-  height: 6em;
-  padding: 1.5em;
-  will-change: filter;
+    height: 6em;
+    padding: 1.5em;
+    will-change: filter;
 }
 .logo:hover {
-  filter: drop-shadow(0 0 2em #646cffaa);
+    filter: drop-shadow(0 0 2em #646cffaa);
 }
 .logo.vue:hover {
-  filter: drop-shadow(0 0 2em #42b883aa);
+    filter: drop-shadow(0 0 2em #42b883aa);
 }
 </style>

+ 15 - 0
play/src/components/home.vue

@@ -0,0 +1,15 @@
+<script setup lang="ts">
+</script>
+
+<template>
+  <h1>home</h1>
+  <router-link to="page1">page1</router-link>
+  <router-link to="page2">page2</router-link>
+
+</template>
+
+<style scoped>
+.read-the-docs {
+  color: #888;
+}
+</style>

+ 14 - 0
play/src/components/page1.vue

@@ -0,0 +1,14 @@
+<script setup lang="ts">
+
+</script>
+
+<template>
+  <h1>page1</h1>
+
+</template>
+
+<style scoped>
+.read-the-docs {
+  color: #888;
+}
+</style>

+ 14 - 0
play/src/components/page2.vue

@@ -0,0 +1,14 @@
+<script setup lang="ts">
+
+</script>
+
+<template>
+  <h1>page2</h1>
+
+</template>
+
+<style scoped>
+.read-the-docs {
+  color: #888;
+}
+</style>

+ 2 - 1
play/src/main.ts

@@ -1,5 +1,6 @@
 import { createApp } from 'vue';
 import './style.css';
 import App from './App.vue';
+import { router } from './router';
 
-createApp(App).mount('#app');
+createApp(App).use(router).mount('#app');

+ 27 - 0
play/src/router.ts

@@ -0,0 +1,27 @@
+import { createRouter, createWebHistory } from 'vue-router';
+export const routerHistory = createWebHistory();
+const Home = () => import('./components/home.vue');
+const Page1 = () => import('./components/page1.vue');
+const Page2 = () => import('./components/page2.vue');
+
+export const router = createRouter({
+    history: routerHistory,
+    strict: true,
+    routes: [
+        {
+            path: '/',
+            component: Home,
+            // props: (to) => ({ waited: to.meta.waitedFor }),
+        },
+        {
+            path: '/page1',
+            component: Page1,
+            // props: (to) => ({ waited: to.meta.waitedFor }),
+        },
+        {
+            path: '/page2',
+            component: Page2,
+            // props: (to) => ({ waited: to.meta.waitedFor }),
+        },
+    ],
+});

+ 35 - 4
pnpm-lock.yaml

@@ -43,7 +43,24 @@ importers:
       rimraf: 3.0.2
       typescript: 4.7.4
 
-  packages/core/dist:
+  packages/core1:
+    specifiers:
+      '@medici/types': workspace:^0.0.1
+      '@medici/utils': workspace:^0.0.1
+      rimraf: ~3.0.2
+      rxjs: ^7.5.6
+      typescript: ~4.7.4
+      uuidv4: ^6.2.13
+    dependencies:
+      '@medici/types': link:../types
+      '@medici/utils': link:../utils
+      rxjs: 7.5.6
+      uuidv4: 6.2.13
+    devDependencies:
+      rimraf: 3.0.2
+      typescript: 4.7.4
+
+  packages/core1/dist:
     specifiers:
       '@medici/types': workspace:^0.0.1
       '@medici/utils': workspace:^0.0.1
@@ -86,24 +103,25 @@ importers:
 
   packages/web:
     specifiers:
-      '@medici/core': workspace:^0.0.1
       rimraf: ~3.0.2
       typescript: ~4.7.4
-    dependencies:
-      '@medici/core': link:../core/dist
     devDependencies:
       rimraf: 3.0.2
       typescript: 4.7.4
 
   play:
     specifiers:
+      '@medici/core': workspace:^0.0.1
       '@vitejs/plugin-vue': ^3.0.0
       typescript: ^4.6.4
       vite: ^3.0.0
       vue: ^3.2.37
+      vue-router: '4'
       vue-tsc: ^0.38.4
     dependencies:
+      '@medici/core': link:../packages/core
       vue: 3.2.37
+      vue-router: 4.1.3_vue@3.2.37
     devDependencies:
       '@vitejs/plugin-vue': 3.0.1_vite@3.0.4+vue@3.2.37
       typescript: 4.7.4
@@ -687,6 +705,10 @@ packages:
       '@vue/compiler-dom': 3.2.37
       '@vue/shared': 3.2.37
 
+  /@vue/devtools-api/6.2.1:
+    resolution: {integrity: sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==}
+    dev: false
+
   /@vue/reactivity-transform/3.2.37:
     resolution: {integrity: sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==}
     dependencies:
@@ -3408,6 +3430,15 @@ packages:
       fsevents: 2.3.2
     dev: true
 
+  /vue-router/4.1.3_vue@3.2.37:
+    resolution: {integrity: sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA==}
+    peerDependencies:
+      vue: ^3.2.0
+    dependencies:
+      '@vue/devtools-api': 6.2.1
+      vue: 3.2.37
+    dev: false
+
   /vue-tsc/0.38.9_typescript@4.7.4:
     resolution: {integrity: sha512-Yoy5phgvGqyF98Fb4mYqboR4Q149jrdcGv5kSmufXJUq++RZJ2iMVG0g6zl+v3t4ORVWkQmRpsV4x2szufZ0LQ==}
     hasBin: true

+ 17 - 18
tsconfig.build.json

@@ -1,20 +1,19 @@
 {
-  "compilerOptions": {
-    "module": "commonjs",
-    "target": "ES6",
-    "sourceMap": true,
-    "declaration": true,
-    "declarationMap": true,
-    "noEmitOnError": true,
-    "skipLibCheck": true,
-    // "esModuleInterop": true,
-    "resolveJsonModule": true,
-    "types": [],
-    "jsx": "react",
-    "noEmit": false
-  },
-  "exclude": [
-    "node_modules",
-    "dist"
-  ]
+    "compilerOptions": {
+        "target": "es2016",
+        "module": "esnext",
+        "moduleResolution": "node",
+        "lib": ["es2015", "es5", "es6", "dom"],
+        "esModuleInterop": true,
+        "sourceMap": true,
+        "declaration": true,
+        "declarationMap": true,
+        "noEmitOnError": true,
+        "skipLibCheck": true,
+        "resolveJsonModule": true,
+        "types": [],
+        "jsx": "react",
+        "noEmit": false
+    },
+    "exclude": ["node_modules", "dist"]
 }