@yongdall/vue 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ export const alias = {".":"index"};
2
+ export const esm = {"index":"index.mjs"};
3
+ export const nodeModules = {"vue":{"esm":{".":"dist/vue.esm-browser.prod.js"}}};
package/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import{createApp as e,h as t,markRaw as n,ref as r}from"vue";import{effect as i,toUrl as a,waitAbortSignal as o}from"@yongdall/web";function s(e){let t=new Set,n=``;function r(){let r=e.path,i=n;n=r;for(let e of[...t])e(r,i,{type:`push`,direction:``,delta:0})}function i(e){let n=(t,n,r)=>e(t,n,r);return t.add(n),()=>{t.delete(n)}}return[r,i]}function c(e,t,n){return{get base(){return e.root},get location(){return a(e.root,e.path)},get state(){return{}},push(t){e.setPath(t),n()},replace(t){e.setPath(t,!0),n()},go(t,n){e.current&&window.history.go(t)},listen:t,createHref(e){return``},destroy(){}}}var l=class{#e;#t;#n;#r;#i;#a;#o;#s;#c;constructor(e){this.#e=e;let[t,i]=s(e);this.#t=t;let a=r(e.root),o=r(e.current),l=r(e.loading),u=r(e.path),d=r(e.title),f=r(e.unsaved);this.#n=a,this.#r=o,this.#i=l,this.#a=u,this.#o=d,this.#s=f,this.#c=c(e,i,t),n(this)}get history(){return this.#c}get define(){return this.#e.define}get ident(){return this.#e.ident}get container(){return this.#e.container}get root(){return this.#n.value}get current(){return this.#r.value}get loading(){return this.#i.value}set loading(e){this.#e.loading=e,this.#i.value=e}get path(){return this.#a.value}set path(e){this.#e.setPath(e),this.#a.value=e,this.#t()}get title(){return this.#o.value}set title(e){this.#e.title=e,this.#o.value=e}get unsaved(){return this.#s.value}set unsaved(e){this.#e.unsaved=e,this.#s.value=e}#l=!1;get linked(){return this.#l}#u=()=>{};link(){if(this.#l)return this;this.#l=!0;let e=this.#e,t=new AbortController,n=AbortSignal.any([t.signal,e.signal]);return i(()=>{this.#a.value=e.path,this.#t()},n),i(()=>this.#r.value=e.current,n),this.#u=()=>{t.abort()},this}unlink(){return this.#l?(this.#l=!1,this.#u(),this):this}};function u(n,r){return i=>{let a=new l(i);a.link();let s={get history(){return a.history},get define(){return a.define},get ident(){return a.ident},get root(){return a.root},get current(){return a.current},get loading(){return a.loading},"onUpdate:loading"(e){a.loading=e},get path(){return a.path},"onUpdate:path"(e){a.path=e},get title(){return a.title},"onUpdate:title"(e){a.title=e},get unsaved(){return a.unsaved},"onUpdate:unsaved"(e){a.unsaved=e}},c=e({render(){return t(n,{...s})}});r?.(c,a,i),c.mount(i.container),o(i.signal).then(()=>{c.unmount()})}}const d={history:{type:Object,required:!0},page:{type:Object,required:!0},root:{type:String,required:!0},current:{type:Boolean,required:!0},loading:{type:Boolean,required:!0},path:{type:String,required:!0},title:{type:String,required:!0},unsaved:{type:Boolean,required:!0}},f={"update:loading"(e){},"update:path"(e){},"update:title"(e){},"update:unsaved"(e){}};export{l as VuePageContext,f as emitsDefine,d as propsDefine,u as toPageRenderer};
2
+ //# sourceMappingURL=index.mjs.map
package/index.mjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["#ctx","#emit","#root","#current","#loading","#path","#title","#unsaved","#history","#linked","#stop"],"sources":["../../plugins/vue/VuePageContext.mjs","../../plugins/vue/toPageRenderer.mjs","../../plugins/vue/index.mjs"],"sourcesContent":["/** @import { PageContext } from '@yongdall/web' */\n/** @import { RouterHistory } from 'vue-router' */\nimport { ref, markRaw } from 'vue';\nimport { effect, toUrl } from '@yongdall/web';\n/** @typedef {RouterHistory['listen']} Listen */\n\n/**\n * \n * @param {PageContext} ctx \n */\nfunction createListen(ctx) {\n\t/**\n\t * @typedef {object} NavigationInformation\n\t * @property {any} type\n\t * @property {any} direction\n\t * @property {number} delta\n\t */\n\t/**\n\t * @callback NavigationCallback\n\t * @param {string} to\n\t * @param {string} from\n\t * @param {NavigationInformation} information\n\t * @returns {void}\n\t */\n\t/** @type {Set<NavigationCallback>} */\n\tconst listeners = new Set();\n\tlet last = '';\n\tfunction emit() {\n\t\tconst p = ctx.path;\n\t\tconst l = last;\n\t\tlast = p;\n\t\tfor (const fn of [...listeners]) {\n\t\t\t// TODO:\n\t\t\tfn(p, l, { type: 'push', direction: '', delta: 0 });\n\t\t}\n\n\t}\n\t/**\n\t * \n\t * @type {Listen}\n\t */\n\tfunction listen(cb) {\n\t\t/** @type {typeof cb} */\n\t\tconst fn = (a, b, c) => cb(a, b, c);\n\t\tlisteners.add(fn);\n\t\treturn () => { listeners.delete(fn); };\n\t}\n\t/** @type {[typeof emit, typeof listen]} */\n\tconst res = [emit, listen];\n\treturn res;\n}\n\n/**\n * \n * @param {PageContext} ctx \n * @param {Listen} listen \n * @param {() => void} update \n * @returns {RouterHistory}\n */\nfunction createHistory(ctx, listen, update) {\n\treturn {\n\t\tget base() { return ctx.root; },\n\t\tget location() { return toUrl(ctx.root, ctx.path); },\n\t\tget state() { return {}; },\n\t\tpush(to) {\n\t\t\tctx.setPath(to);\n\t\t\tupdate();\n\t\t},\n\t\treplace(to) {\n\t\t\tctx.setPath(to, true);\n\t\t\tupdate();\n\t\t},\n\t\tgo(delta, triggerListeners) {\n\t\t\tif (!ctx.current) { return; }\n\t\t\twindow.history.go(delta);\n\t\t},\n\t\tlisten,\n\t\tcreateHref(location) {\n\t\t\t// TODO:\n\t\t\treturn '';\n\t\t},\n\t\tdestroy() { },\n\t}\n}\nexport default class VuePageContext {\n\t/** @type {PageContext} */\n\t#ctx;\n\t/** @type {() => void} */\n\t#emit;\n\t#root;\n\t#current;\n\t#loading;\n\t#path;\n\t#title;\n\t#unsaved;\n\t/** @type {RouterHistory} */\n\t#history;\n\t/**\n\t * \n\t * @param {PageContext} ctx \n\t */\n\tconstructor(ctx) {\n\t\tthis.#ctx = ctx;\n\t\tconst [emit, listen] = createListen(ctx);\n\t\tthis.#emit = emit;\n\n\t\tconst root = ref(ctx.root);\n\t\tconst current = ref(ctx.current);\n\n\t\tconst loading = ref(ctx.loading);\n\n\t\tconst path = ref(ctx.path);\n\t\tconst title = ref(ctx.title);\n\t\tconst unsaved = ref(ctx.unsaved);\n\n\t\tthis.#root = root;\n\t\tthis.#current = current;\n\t\tthis.#loading = loading;\n\t\tthis.#path = path;\n\t\tthis.#title = title;\n\t\tthis.#unsaved = unsaved;\n\t\tthis.#history = createHistory(ctx, listen, emit);\n\t\tmarkRaw(this);\n\t}\n\n\n\tget history() { return this.#history; }\n\tget define() { return this.#ctx.define; }\n\tget ident() { return this.#ctx.ident; }\n\tget container() { return this.#ctx.container; }\n\n\tget root() { return this.#root.value; }\n\tget current() { return this.#current.value; }\n\n\tget loading() { return this.#loading.value; }\n\tset loading(v) { this.#ctx.loading = v; this.#loading.value = v; }\n\n\tget path() { return this.#path.value; }\n\tset path(v) {\n\t\tthis.#ctx.setPath(v);\n\t\tthis.#path.value = v;\n\t\tthis.#emit();\n\t}\n\n\tget title() { return this.#title.value; }\n\tset title(v) { this.#ctx.title = v; this.#title.value = v; }\n\n\tget unsaved() { return this.#unsaved.value; }\n\tset unsaved(v) { this.#ctx.unsaved = v; this.#unsaved.value = v; }\n\n\t#linked = false;\n\tget linked() { return this.#linked; }\n\t/** @type {() => void} */\n\t#stop = () => { };\n\tlink() {\n\t\tif (this.#linked) { return this; }\n\t\tthis.#linked = true;\n\t\tconst ctx = this.#ctx;\n\t\tconst ac = new AbortController();\n\t\tconst signal = AbortSignal.any([ac.signal, ctx.signal]);\n\t\teffect(() => {this.#path.value = ctx.path; this.#emit();}, signal);\n\t\teffect(() => this.#current.value = ctx.current, signal);\n\t\tthis.#stop = () => { ac.abort(); }\n\t\treturn this;\n\t}\n\tunlink() {\n\t\tif (!this.#linked) { return this; }\n\t\tthis.#linked = false;\n\t\tthis.#stop();\n\t\treturn this;\n\t}\n}\n","/** @import { PageRenderer } from '@yongdall/web' */\n/** @import { PageRendererInstall } from '@yongdall/vue' */\n/** @import { Component } from 'vue' */\nimport { waitAbortSignal } from '@yongdall/web';\nimport { createApp, h } from 'vue';\nimport VuePageContext from './VuePageContext.mjs';\n\n/**\n * \n * @param {Component} rootComponent \n * @param {PageRendererInstall} [install] \n * @returns {PageRenderer}\n */\nexport default function toPageRenderer(rootComponent, install) {\n\t/** @type {PageRenderer} */\n\tconst s = (ctx) => {\n\t\tconst vCtx = new VuePageContext(ctx);\n\t\tvCtx.link();\n\t\tconst rootProps = {\n\t\t\tget history() { return vCtx.history; },\n\t\t\tget define() { return vCtx.define; },\n\t\t\tget ident() { return vCtx.ident; },\n\n\t\t\tget root() { return vCtx.root; },\n\t\t\tget current() { return vCtx.current; },\n\n\t\t\tget loading() { return vCtx.loading; },\n\t\t\t/** @param {boolean} loading */\n\t\t\t'onUpdate:loading'(loading) { vCtx.loading = loading; },\n\n\t\t\tget path() { return vCtx.path; },\n\t\t\t/** @param {string} path */\n\t\t\t'onUpdate:path'(path) { vCtx.path = path; },\n\n\n\t\t\tget title() { return vCtx.title; },\n\t\t\t/** @param {string} title */\n\t\t\t'onUpdate:title'(title) { vCtx.title = title; },\n\n\t\t\tget unsaved() { return vCtx.unsaved; },\n\t\t\t/** @param {boolean} unsaved */\n\t\t\t'onUpdate:unsaved'(unsaved) { vCtx.unsaved = unsaved; },\n\n\t\t};\n\t\tconst plugin = createApp({\n\t\t\trender() {\n\t\t\t\treturn h(rootComponent, { ...rootProps });\n\t\t\t},\n\t\t});\n\t\t// TODO: 上下文及后续组件环境处理\n\t\tinstall?.(plugin, vCtx, ctx);\n\n\t\tplugin.mount(ctx.container);\n\t\tlet destroyed = false;\n\t\tconst destroy = () => {\n\t\t\tif (destroyed) { return; }\n\t\t\tplugin.unmount();\n\t\t};\n\t\twaitAbortSignal(ctx.signal).then(destroy);\n\t};\n\treturn s;\n\n}\n","/** @import { PageContext, PageIdent } from '@yongdall/web' */\n/** @import { App } from 'vue' */\n/** @import { RouterHistory } from 'vue-router' */\nimport VuePageContext from './VuePageContext.mjs'\nexport { default as VuePageContext } from './VuePageContext.mjs'\nexport { default as toPageRenderer } from './toPageRenderer.mjs';\n\n/**\n * @callback PageRenderer\n * @param {VuePageContext} vCtx\n * @param {PageContext} ctx\n * @returns {(() => void) | void}\n */\n/**\n * @callback PageRendererInstall\n * @param {App} app\n * @param {VuePageContext} vCtx\n * @param {PageContext} ctx\n * @returns {(() => void) | void}\n */\n/**\n * @typedef {object} Props \n * @property {RouterHistory} history\n * @property {PageIdent} page\n * @property {string} root\n * @property {boolean} current\n * @property {boolean} loading\n * @property {string} path\n * @property {string} title\n * @property {boolean} unsaved\n */\n\nexport const propsDefine = {\n\thistory: { type: Object, required: true },\n\tpage: { type: Object, required: true },\n\troot: { type: String, required: true },\n\tcurrent: { type: Boolean, required: true },\n\tloading: { type: Boolean, required: true },\n\tpath: { type: String, required: true },\n\ttitle: { type: String, required: true },\n\tunsaved: { type: Boolean, required: true },\n}\nexport const emitsDefine = {\n\t/** @param {boolean} loading */\n\t'update:loading'(loading) { },\n\t/** @param {string} path */\n\t'update:path'(path) { },\n\t/** @param {string} title */\n\t'update:title'(title) { },\n\t/** @param {boolean} unsaved */\n\t'update:unsaved'(unsaved) { },\n}\n"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@yongdall/vue",
3
+ "version": "0.1.0",
4
+ "main": "./index.mjs",
5
+ "exports": {
6
+ ".": "./index.mjs"
7
+ },
8
+ "devDependencies": {
9
+ "@yongdall/web": "^0.1.0",
10
+ "vue": "^3.4.38",
11
+ "vue-router": "^4.4.3"
12
+ },
13
+ "peerDependencies": {
14
+ "@yongdall/web": "^0.1.0",
15
+ "vue": "^3.4.38",
16
+ "vue-router": "^4.4.3"
17
+ },
18
+ "type": "module"
19
+ }