mechanica 1.0.10 → 1.0.11

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.
package/dist/main.js CHANGED
@@ -20,7 +20,7 @@ const createRouter = (app, content, data) => {
20
20
  if (path.startsWith(baseUrl)) return path.slice(baseUrl.length);
21
21
  return path;
22
22
  };
23
- const currentRoute = shallowReactive({ path: removeBasePath(import.meta.env.SSR ? "" : document.location.pathname) });
23
+ const currentRoute = shallowReactive({ path: normalizePath(removeBasePath(document.location.pathname)) });
24
24
  const isNeedToRevalidatePage = (path) => {
25
25
  return !pagesMap.has(path);
26
26
  };
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sources":["../src/useRouter.ts","../src/createMechanica.ts","../src/renderBlocks.ts","../src/components/Content.ts","../src/defineData.ts","../src/components/RouterLink.ts","../src/components/SmartLink.ts","../src/utils/cn.ts","../src/useQuery.ts","../src/index.ts"],"sourcesContent":["import { App, inject, shallowReactive, ShallowRef } from \"vue\"\r\nimport { State } from \"../../common/types\"\r\nimport { MechanicaState } from \"./createMechanica\"\r\n\r\ntype PageData = {\r\n title: string\r\n}\r\n\r\nexport const createRouter = (app: App<any>, content: ShallowRef<State[\"content\"]>, data: State[\"data\"]) => {\r\n\r\n let baseUrl: string = (window as any).state?.baseUrl ?? \"\"\r\n if (baseUrl.endsWith('/')) {\r\n baseUrl = baseUrl.slice(0, -1)\r\n }\r\n const pagesMap = new Map<string, State & PageData>()\r\n const promisesMap = new Map<string, Promise<any>>()\r\n\r\n const normalizePath = (path: string) => {\r\n let newPath = baseUrl + path\r\n if (newPath.endsWith('/') && newPath !== '/') newPath = newPath.slice(0, -1)\r\n\r\n return newPath\r\n }\r\n const removeBasePath = (path: string) => {\r\n if (baseUrl === '') return path\r\n if (path.startsWith(baseUrl)) return path.slice(baseUrl.length)\r\n return path\r\n }\r\n\r\n const currentRoute = shallowReactive({ path: removeBasePath(import.meta.env.SSR? \"\": document.location.pathname) })\r\n\r\n const isNeedToRevalidatePage = (path: string) => {\r\n return !pagesMap.has(path)\r\n }\r\n\r\n const fetchPage = (normalizedPath: string) => {\r\n if (!isNeedToRevalidatePage(normalizedPath)) return\r\n const existingPromise = promisesMap.get(normalizedPath)\r\n if (existingPromise) return existingPromise\r\n\r\n const exec = async () => {\r\n const resp = await fetch(normalizedPath).then(resp => resp.text())\r\n\r\n const _state = resp.match(/window\\.state=({.+})/)?.[1]\r\n const state = _state && JSON.parse(_state)\r\n\r\n state.title = resp.match(/<title>(.+)<\\/title>/)?.[1]\r\n\r\n pagesMap.set(normalizedPath, state)\r\n }\r\n const promise = exec()\r\n promisesMap.set(normalizedPath, promise)\r\n promise.finally(() => promisesMap.delete(normalizedPath))\r\n return promise\r\n }\r\n\r\n const openPage = async (normalizedPath: string) => {\r\n await fetchPage(normalizedPath)\r\n const { content: newContent, data: newData, title } = pagesMap.get(normalizedPath)!\r\n \r\n for (let [ key, value ] of Object.entries(newData)) {\r\n Object.assign(data[key], value)\r\n }\r\n \r\n content.value = newContent\r\n currentRoute.path = normalizedPath\r\n if (import.meta.env.DEV) {\r\n const event = new Event(\"openpage\")\r\n Object.assign(event, { data: { content: content.value, data: data, dev: { currentPath: normalizedPath } } })\r\n window.document.dispatchEvent(event)\r\n }\r\n }\r\n\r\n const push = async (path: string) => {\r\n const normalizedPath = normalizePath(path)\r\n\r\n history.pushState({}, \"\", normalizedPath)\r\n await openPage(normalizedPath)\r\n }\r\n\r\n const onPopState = () => {\r\n openPage(document.location.pathname ?? '/')\r\n }\r\n\r\n if (!import.meta.env.SSR) {\r\n window.addEventListener(\"popstate\", onPopState)\r\n \r\n app.onUnmount(() => {\r\n window.removeEventListener(\"popstate\", onPopState)\r\n })\r\n }\r\n\r\n return {\r\n push,\r\n normalizePath,\r\n currentRoute\r\n }\r\n}\r\n\r\nexport const useRouter = () => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return mechanica.router\r\n}\r\n\r\nexport const useRoute = () => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return mechanica.router.currentRoute\r\n}","import type { State } from \"../../common/types\";\r\nimport { Plugin, ShallowRef, shallowRef } from \"vue\";\r\nimport { createRouter } from \"./useRouter\";\r\n\r\nexport type MechanicaState = {\r\n content: ShallowRef<State[\"content\"]>,\r\n data: State[\"data\"]\r\n router: ReturnType<typeof createRouter>\r\n}\r\n\r\nexport const createMechanica = (): Plugin => {\r\n\r\n return {\r\n install(app) {\r\n const content = shallowRef((window as any).state.content)\r\n const data = (window as any).state.data\r\n const router = createRouter(app, content, data)\r\n\r\n const mechanicaPlugin = {\r\n content,\r\n data,\r\n router\r\n }\r\n app.provide(\"mechanica\", mechanicaPlugin)\r\n\r\n if (!import.meta.env.SSR) {\r\n // @ts-ignore\r\n if (window.__MECHANICA_STATE__ === null) {\r\n // @ts-ignore\r\n window.__MECHANICA_STATE__ = mechanicaPlugin\r\n }\r\n }\r\n\r\n if (import.meta.env.SSR) {\r\n (app as any).updateProps = (state: State) => {\r\n mechanicaPlugin.content.value = state.content\r\n Object.assign(mechanicaPlugin.data, state.data)\r\n mechanicaPlugin.router = createRouter(app, mechanicaPlugin.content.value, mechanicaPlugin.data)\r\n }\r\n }\r\n\r\n app.onUnmount(() => {\r\n \r\n })\r\n }\r\n }\r\n}","import { h, VNode } from \"vue\"\r\nimport { blocksMap } from 'virtual:builder-blocks'\r\n\r\nexport const renderBlocks = (state: any[], baseKey?: string): (VNode | null)[] => {\r\n\r\n return state.map((item, index) => {\r\n if (item.vnode) {\r\n return item.vnode\r\n }\r\n\r\n const block = blocksMap.get(item.blockId)\r\n if (!block) return null\r\n\r\n const content = { ...item.data, key: baseKey? baseKey+index: item.id }\r\n\r\n if (!item.children) {\r\n return h(block, content)\r\n } \r\n\r\n let children: Record<string, any> = {}\r\n const slotsData = Array.isArray(item.children)? { default: item.children }: item.children\r\n\r\n for (let key in slotsData) {\r\n children[key] = () => renderBlocks(slotsData[key])\r\n }\r\n\r\n return h(block, content, children)\r\n })\r\n}\r\n","import { inject } from \"vue\"\r\nimport { renderBlocks } from \"../renderBlocks\"\r\nimport { MechanicaState } from \"../createMechanica\"\r\n\r\nconst Content = {\r\n props: [],\r\n setup () {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return () => renderBlocks(mechanica.content.value)\r\n }\r\n}\r\n\r\nexport default Content","import { SchemaItem, SchemaType, unfoldSchema } from \"compact-json-schema\";\r\nimport { inject, isReactive, shallowReactive } from \"vue\";\r\nimport { MechanicaState } from \"./createMechanica\";\r\nimport { passDefaultValue } from \"../../common/utils/passDefaultValue\";\r\n\r\ndeclare global {\r\n var _dataEntries: any[]\r\n var _registerData: (setings: any) => void\r\n}\r\n\r\nif (import.meta.env.SSR) {\r\n if (!globalThis._dataEntries) {\r\n globalThis._dataEntries = []\r\n }\r\n globalThis._registerData = (settings) => globalThis._dataEntries.push(settings)\r\n}\r\n\r\ntype Settings<S extends string, T extends SchemaItem> = {\r\n id: S,\r\n title?: string,\r\n order?: number,\r\n props: T\r\n}\r\n\r\nexport type DataHook<S extends string, T extends SchemaItem> = {\r\n (): SchemaType<T>\r\n id: S\r\n}\r\n\r\nexport const defineData = <S extends string, T extends SchemaItem>(settings: Settings<S, T>): DataHook<S, T> => {\r\n\r\n if (import.meta.env.SSR || import.meta.env.DEV) {\r\n // @ts-ignore\r\n globalThis._registerData(settings)\r\n }\r\n\r\n const fn = (): SchemaType<T> => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n \r\n if (import.meta.env.DEV) {\r\n mechanica.data[settings.id] = passDefaultValue(mechanica.data[settings.id], unfoldSchema(settings.props))\r\n }\r\n\r\n const data = mechanica.data[settings.id]\r\n if (import.meta.env.SSR) {\r\n return data\r\n }\r\n \r\n if (!isReactive(data)) {\r\n const reactiveData = shallowReactive(data)\r\n mechanica.data[settings.id] = reactiveData\r\n return reactiveData\r\n }\r\n return data\r\n }\r\n\r\n fn.id = settings.id\r\n fn.toJSON = function() { return { id: this.id } }\r\n return fn\r\n}","import { defineComponent, h, computed, useSlots } from 'vue'\r\nimport { useRouter } from '../useRouter'\r\n\r\nexport const RouterLink = defineComponent({\r\n name: 'RouterLink',\r\n props: {\r\n to: {\r\n type: String,\r\n required: true\r\n },\r\n activeClass: {\r\n type: String,\r\n default: undefined\r\n },\r\n ariaCurrentValue: {\r\n type: String,\r\n default: undefined\r\n }\r\n },\r\n setup(props) {\r\n const router = useRouter()\r\n const slots = useSlots()\r\n\r\n const onClick = (e: MouseEvent) => {\r\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return\r\n if (e.defaultPrevented) return\r\n if (e.button !== undefined && e.button !== 0) return\r\n if (e.currentTarget) {\r\n // @ts-expect-error getAttribute существует\r\n const target = e.currentTarget.getAttribute('target')\r\n if (/\\b_blank\\b/i.test(target)) return\r\n }\r\n\r\n e.preventDefault()\r\n router.push(props.to)\r\n }\r\n\r\n const linkProps = computed(() => {\r\n const obj: Record<string, any> = {\r\n href: router.normalizePath(props.to),\r\n onClick\r\n }\r\n\r\n if (props.to === router.currentRoute.path) {\r\n obj.class = props.activeClass ?? 'router-link-active'\r\n if (props.ariaCurrentValue) {\r\n obj['aria-current'] = props.ariaCurrentValue\r\n }\r\n }\r\n\r\n return obj\r\n })\r\n\r\n return () =>\r\n h('a', linkProps.value, slots.default ? slots.default() : [])\r\n }\r\n})\r\n","import { defineComponent, h, computed, useSlots } from 'vue'\r\nimport { RouterLink } from './RouterLink'\r\n\r\nexport const SmartLink = defineComponent({\r\n name: 'SmartLink',\r\n props: {\r\n url: { type: String, required: true },\r\n title: { type: String, default: undefined },\r\n external: { type: Boolean, default: false },\r\n openNewTab: { type: Boolean, default: false },\r\n activeClass: { type: String, default: undefined },\r\n ariaCurrentValue: { type: String, default: undefined }\r\n },\r\n setup(props) {\r\n const slots = useSlots()\r\n\r\n const bindProps = computed(() => {\r\n const { url, external, openNewTab, ...otherProps } = props\r\n // если external → <a>, иначе → <RouterLink>\r\n const obj = props.external\r\n ? { href: url }\r\n : { to: url, ...otherProps }\r\n\r\n if (openNewTab) {\r\n Object.assign(obj, { target: '_blank' })\r\n }\r\n return obj\r\n })\r\n\r\n return () =>\r\n h(\r\n props.external ? 'a' : RouterLink,\r\n bindProps.value as any,\r\n slots.default ? slots.default() : props.title\r\n )\r\n }\r\n})\r\n","/** Tool for fast create class\r\n * ```ts\r\n * cn({ aligment: 'left' }) -> 'aligment-left'\r\n * cn({ active: true }) -> 'active'\r\n * ```\r\n * */\r\nexport const cn = (props: Record<string, boolean | string>) => {\r\n\r\n const classes = []\r\n\r\n for (let [ key, value ] of Object.entries(props)) {\r\n if (!value && typeof value !== 'number') continue\r\n if (value === true) {\r\n classes.push(key)\r\n } else {\r\n classes.push(`${key}-${value}`)\r\n }\r\n }\r\n\r\n return classes.join(\" \")\r\n}\r\n\r\n/** Pick keys from object\r\n * ```\r\n * pick({ a: \"foo\", b: \"bar\" }, \"a\") -> { a: \"foo\" }\r\n * ```\r\n */\r\nexport const pick = <T extends object, K extends (keyof T)[]>(obj: T, ...args: K) => {\r\n return Object.fromEntries(Object.entries(obj).filter(entry => args.includes(entry[0] as keyof T))) as Pick<T, K[number]>\r\n}\r\n","import { onServerPrefetch, reactive } from \"vue\"\r\nimport { DataHook } from \"./defineData\"\r\n\r\nif (import.meta.env.SSR) {\r\n // @ts-ignore\r\n globalThis._queryEntries = []\r\n // @ts-ignore\r\n globalThis._registerQuery = (key) => _queryEntries.push(key)\r\n}\r\nif (import.meta.env.DEV) {\r\n // @ts-ignore\r\n globalThis._registerQuery = async (key, value) => {\r\n const resp = await fetch(`/@mechanica/query?q=${encodeURIComponent(key)}`)\r\n const obj = await resp.json()\r\n if (Array.isArray(obj)) {\r\n value.length = 0\r\n value.push(...obj)\r\n }\r\n }\r\n}\r\n\r\ntype PageFilter<T extends readonly DataHook<any, any>[]> = {\r\n folderName?: string\r\n folderId?: number\r\n data: T\r\n}\r\n\r\nexport function useQuery<const T extends readonly DataHook<any, any>[]>(\r\n type: \"getPages\",\r\n filter?: PageFilter<T>\r\n): ({ path: string } & {[K in T[number] as K[\"id\"]]: ReturnType<K> })[];\r\n\r\nexport function useQuery (type: \"fetch\", options: RequestInit & { url: string }): any\r\nexport function useQuery (type: \"getPages\" | \"fetch\", options?: any): any {\r\n\r\n const key = type + \".\" + JSON.stringify(options ?? {})\r\n \r\n if (import.meta.env.SSR) {\r\n const value = reactive(type === 'fetch'? {}: [])\r\n onServerPrefetch(async () => {\r\n // @ts-ignore\r\n const data = await globalThis.getQuery(key)\r\n if (Array.isArray(value)) {\r\n value.length = 0\r\n value.push(...data)\r\n }\r\n })\r\n return value\r\n } else if (import.meta.env.DEV) {\r\n const value = reactive(type === 'fetch'? {}: [])\r\n // @ts-ignore\r\n globalThis._registerQuery(key, value)\r\n return value\r\n }\r\n\r\n return (window as any).state.query?.[key] ?? (type === 'fetch'? {}: [])\r\n}","import { type SchemaItem, type SchemaType } from 'compact-json-schema'\r\n\r\nexport type { Page } from './types'\r\nexport { createMechanica } from './createMechanica'\r\nexport { default as Content } from './components/Content'\r\nexport { defineData } from './defineData'\r\nexport { RouterLink } from './components/RouterLink'\r\nexport { SmartLink } from './components/SmartLink'\r\nexport { useRouter } from './useRouter'\r\nexport { cn, pick } from './utils/cn'\r\nexport { useQuery } from './useQuery'\r\nimport { registerAliases } from '../../common/utils/schemaAliases'\r\nexport {}\r\n\r\ndeclare global {\r\n type ComponentInfo<T extends SchemaItem> = {\r\n id?: string,\r\n name?: string,\r\n order?: number,\r\n group?: string,\r\n props?: T\r\n }\r\n\r\n var defineBlock: <T extends SchemaItem = {}>(input: ComponentInfo<T>) => SchemaType<T>\r\n}\r\n\r\ndeclare module 'compact-json-schema' {\r\n export interface SchemaTypesMap {\r\n \"image\": { src: string, previewSrc?: string },\r\n \"file\": { src: string },\r\n \"color\": string,\r\n \"smartLink\": { url: string, title: string, external: boolean }\r\n \"richText\": Array<{ text: string, type?: string, styles?: Array<{ start: number, end: number, style: string }> }>\r\n }\r\n}\r\n\r\nif (import.meta.env.DEV || import.meta.env.SSR) {\r\n registerAliases()\r\n}\r\n"],"names":["resp","_a"],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sources":["../src/useRouter.ts","../src/createMechanica.ts","../src/renderBlocks.ts","../src/components/Content.ts","../src/defineData.ts","../src/components/RouterLink.ts","../src/components/SmartLink.ts","../src/utils/cn.ts","../src/useQuery.ts","../src/index.ts"],"sourcesContent":["import { App, inject, shallowReactive, ShallowRef } from \"vue\"\r\nimport { State } from \"../../common/types\"\r\nimport { MechanicaState } from \"./createMechanica\"\r\n\r\ntype PageData = {\r\n title: string\r\n}\r\n\r\nexport const createRouter = (app: App<any>, content: ShallowRef<State[\"content\"]>, data: State[\"data\"]) => {\r\n\r\n let baseUrl: string = (window as any).state?.baseUrl ?? \"\"\r\n if (baseUrl.endsWith('/')) {\r\n baseUrl = baseUrl.slice(0, -1)\r\n }\r\n const pagesMap = new Map<string, State & PageData>()\r\n const promisesMap = new Map<string, Promise<any>>()\r\n\r\n const normalizePath = (path: string) => {\r\n let newPath = baseUrl + path\r\n if (newPath.endsWith('/') && newPath !== '/') newPath = newPath.slice(0, -1)\r\n\r\n return newPath\r\n }\r\n const removeBasePath = (path: string) => {\r\n if (baseUrl === '') return path\r\n if (path.startsWith(baseUrl)) return path.slice(baseUrl.length)\r\n return path\r\n }\r\n\r\n const currentRoute = shallowReactive({ path: normalizePath(removeBasePath(document.location.pathname)) })\r\n\r\n const isNeedToRevalidatePage = (path: string) => {\r\n return !pagesMap.has(path)\r\n }\r\n\r\n const fetchPage = (normalizedPath: string) => {\r\n if (!isNeedToRevalidatePage(normalizedPath)) return\r\n const existingPromise = promisesMap.get(normalizedPath)\r\n if (existingPromise) return existingPromise\r\n\r\n const exec = async () => {\r\n const resp = await fetch(normalizedPath).then(resp => resp.text())\r\n\r\n const _state = resp.match(/window\\.state=({.+})/)?.[1]\r\n const state = _state && JSON.parse(_state)\r\n\r\n state.title = resp.match(/<title>(.+)<\\/title>/)?.[1]\r\n\r\n pagesMap.set(normalizedPath, state)\r\n }\r\n const promise = exec()\r\n promisesMap.set(normalizedPath, promise)\r\n promise.finally(() => promisesMap.delete(normalizedPath))\r\n return promise\r\n }\r\n\r\n const openPage = async (normalizedPath: string) => {\r\n await fetchPage(normalizedPath)\r\n const { content: newContent, data: newData, title } = pagesMap.get(normalizedPath)!\r\n \r\n for (let [ key, value ] of Object.entries(newData)) {\r\n Object.assign(data[key], value)\r\n }\r\n \r\n content.value = newContent\r\n currentRoute.path = normalizedPath\r\n if (import.meta.env.DEV) {\r\n const event = new Event(\"openpage\")\r\n Object.assign(event, { data: { content: content.value, data: data, dev: { currentPath: normalizedPath } } })\r\n window.document.dispatchEvent(event)\r\n }\r\n }\r\n\r\n const push = async (path: string) => {\r\n const normalizedPath = normalizePath(path)\r\n\r\n history.pushState({}, \"\", normalizedPath)\r\n await openPage(normalizedPath)\r\n }\r\n\r\n const onPopState = () => {\r\n openPage(document.location.pathname ?? '/')\r\n }\r\n\r\n if (!import.meta.env.SSR) {\r\n window.addEventListener(\"popstate\", onPopState)\r\n \r\n app.onUnmount(() => {\r\n window.removeEventListener(\"popstate\", onPopState)\r\n })\r\n }\r\n\r\n return {\r\n push,\r\n normalizePath,\r\n currentRoute\r\n }\r\n}\r\n\r\nexport const useRouter = () => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return mechanica.router\r\n}\r\n\r\nexport const useRoute = () => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return mechanica.router.currentRoute\r\n}","import type { State } from \"../../common/types\";\r\nimport { Plugin, ShallowRef, shallowRef } from \"vue\";\r\nimport { createRouter } from \"./useRouter\";\r\n\r\nexport type MechanicaState = {\r\n content: ShallowRef<State[\"content\"]>,\r\n data: State[\"data\"]\r\n router: ReturnType<typeof createRouter>\r\n}\r\n\r\nexport const createMechanica = (): Plugin => {\r\n\r\n return {\r\n install(app) {\r\n const content = shallowRef((window as any).state.content)\r\n const data = (window as any).state.data\r\n const router = createRouter(app, content, data)\r\n\r\n const mechanicaPlugin = {\r\n content,\r\n data,\r\n router\r\n }\r\n app.provide(\"mechanica\", mechanicaPlugin)\r\n\r\n if (!import.meta.env.SSR) {\r\n // @ts-ignore\r\n if (window.__MECHANICA_STATE__ === null) {\r\n // @ts-ignore\r\n window.__MECHANICA_STATE__ = mechanicaPlugin\r\n }\r\n }\r\n\r\n if (import.meta.env.SSR) {\r\n (app as any).updateProps = (state: State) => {\r\n mechanicaPlugin.content.value = state.content\r\n Object.assign(mechanicaPlugin.data, state.data)\r\n mechanicaPlugin.router = createRouter(app, mechanicaPlugin.content.value, mechanicaPlugin.data)\r\n }\r\n }\r\n\r\n app.onUnmount(() => {\r\n \r\n })\r\n }\r\n }\r\n}","import { h, VNode } from \"vue\"\r\nimport { blocksMap } from 'virtual:builder-blocks'\r\n\r\nexport const renderBlocks = (state: any[], baseKey?: string): (VNode | null)[] => {\r\n\r\n return state.map((item, index) => {\r\n if (item.vnode) {\r\n return item.vnode\r\n }\r\n\r\n const block = blocksMap.get(item.blockId)\r\n if (!block) return null\r\n\r\n const content = { ...item.data, key: baseKey? baseKey+index: item.id }\r\n\r\n if (!item.children) {\r\n return h(block, content)\r\n } \r\n\r\n let children: Record<string, any> = {}\r\n const slotsData = Array.isArray(item.children)? { default: item.children }: item.children\r\n\r\n for (let key in slotsData) {\r\n children[key] = () => renderBlocks(slotsData[key])\r\n }\r\n\r\n return h(block, content, children)\r\n })\r\n}\r\n","import { inject } from \"vue\"\r\nimport { renderBlocks } from \"../renderBlocks\"\r\nimport { MechanicaState } from \"../createMechanica\"\r\n\r\nconst Content = {\r\n props: [],\r\n setup () {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n return () => renderBlocks(mechanica.content.value)\r\n }\r\n}\r\n\r\nexport default Content","import { SchemaItem, SchemaType, unfoldSchema } from \"compact-json-schema\";\r\nimport { inject, isReactive, shallowReactive } from \"vue\";\r\nimport { MechanicaState } from \"./createMechanica\";\r\nimport { passDefaultValue } from \"../../common/utils/passDefaultValue\";\r\n\r\ndeclare global {\r\n var _dataEntries: any[]\r\n var _registerData: (setings: any) => void\r\n}\r\n\r\nif (import.meta.env.SSR) {\r\n if (!globalThis._dataEntries) {\r\n globalThis._dataEntries = []\r\n }\r\n globalThis._registerData = (settings) => globalThis._dataEntries.push(settings)\r\n}\r\n\r\ntype Settings<S extends string, T extends SchemaItem> = {\r\n id: S,\r\n title?: string,\r\n order?: number,\r\n props: T\r\n}\r\n\r\nexport type DataHook<S extends string, T extends SchemaItem> = {\r\n (): SchemaType<T>\r\n id: S\r\n}\r\n\r\nexport const defineData = <S extends string, T extends SchemaItem>(settings: Settings<S, T>): DataHook<S, T> => {\r\n\r\n if (import.meta.env.SSR || import.meta.env.DEV) {\r\n // @ts-ignore\r\n globalThis._registerData(settings)\r\n }\r\n\r\n const fn = (): SchemaType<T> => {\r\n const mechanica = inject(\"mechanica\") as MechanicaState\r\n \r\n if (import.meta.env.DEV) {\r\n mechanica.data[settings.id] = passDefaultValue(mechanica.data[settings.id], unfoldSchema(settings.props))\r\n }\r\n\r\n const data = mechanica.data[settings.id]\r\n if (import.meta.env.SSR) {\r\n return data\r\n }\r\n \r\n if (!isReactive(data)) {\r\n const reactiveData = shallowReactive(data)\r\n mechanica.data[settings.id] = reactiveData\r\n return reactiveData\r\n }\r\n return data\r\n }\r\n\r\n fn.id = settings.id\r\n fn.toJSON = function() { return { id: this.id } }\r\n return fn\r\n}","import { defineComponent, h, computed, useSlots } from 'vue'\r\nimport { useRouter } from '../useRouter'\r\n\r\nexport const RouterLink = defineComponent({\r\n name: 'RouterLink',\r\n props: {\r\n to: {\r\n type: String,\r\n required: true\r\n },\r\n activeClass: {\r\n type: String,\r\n default: undefined\r\n },\r\n ariaCurrentValue: {\r\n type: String,\r\n default: undefined\r\n }\r\n },\r\n setup(props) {\r\n const router = useRouter()\r\n const slots = useSlots()\r\n\r\n const onClick = (e: MouseEvent) => {\r\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return\r\n if (e.defaultPrevented) return\r\n if (e.button !== undefined && e.button !== 0) return\r\n if (e.currentTarget) {\r\n // @ts-expect-error getAttribute существует\r\n const target = e.currentTarget.getAttribute('target')\r\n if (/\\b_blank\\b/i.test(target)) return\r\n }\r\n\r\n e.preventDefault()\r\n router.push(props.to)\r\n }\r\n\r\n const linkProps = computed(() => {\r\n const obj: Record<string, any> = {\r\n href: router.normalizePath(props.to),\r\n onClick\r\n }\r\n\r\n if (props.to === router.currentRoute.path) {\r\n obj.class = props.activeClass ?? 'router-link-active'\r\n if (props.ariaCurrentValue) {\r\n obj['aria-current'] = props.ariaCurrentValue\r\n }\r\n }\r\n\r\n return obj\r\n })\r\n\r\n return () =>\r\n h('a', linkProps.value, slots.default ? slots.default() : [])\r\n }\r\n})\r\n","import { defineComponent, h, computed, useSlots } from 'vue'\r\nimport { RouterLink } from './RouterLink'\r\n\r\nexport const SmartLink = defineComponent({\r\n name: 'SmartLink',\r\n props: {\r\n url: { type: String, required: true },\r\n title: { type: String, default: undefined },\r\n external: { type: Boolean, default: false },\r\n openNewTab: { type: Boolean, default: false },\r\n activeClass: { type: String, default: undefined },\r\n ariaCurrentValue: { type: String, default: undefined }\r\n },\r\n setup(props) {\r\n const slots = useSlots()\r\n\r\n const bindProps = computed(() => {\r\n const { url, external, openNewTab, ...otherProps } = props\r\n // если external → <a>, иначе → <RouterLink>\r\n const obj = props.external\r\n ? { href: url }\r\n : { to: url, ...otherProps }\r\n\r\n if (openNewTab) {\r\n Object.assign(obj, { target: '_blank' })\r\n }\r\n return obj\r\n })\r\n\r\n return () =>\r\n h(\r\n props.external ? 'a' : RouterLink,\r\n bindProps.value as any,\r\n slots.default ? slots.default() : props.title\r\n )\r\n }\r\n})\r\n","/** Tool for fast create class\r\n * ```ts\r\n * cn({ aligment: 'left' }) -> 'aligment-left'\r\n * cn({ active: true }) -> 'active'\r\n * ```\r\n * */\r\nexport const cn = (props: Record<string, boolean | string>) => {\r\n\r\n const classes = []\r\n\r\n for (let [ key, value ] of Object.entries(props)) {\r\n if (!value && typeof value !== 'number') continue\r\n if (value === true) {\r\n classes.push(key)\r\n } else {\r\n classes.push(`${key}-${value}`)\r\n }\r\n }\r\n\r\n return classes.join(\" \")\r\n}\r\n\r\n/** Pick keys from object\r\n * ```\r\n * pick({ a: \"foo\", b: \"bar\" }, \"a\") -> { a: \"foo\" }\r\n * ```\r\n */\r\nexport const pick = <T extends object, K extends (keyof T)[]>(obj: T, ...args: K) => {\r\n return Object.fromEntries(Object.entries(obj).filter(entry => args.includes(entry[0] as keyof T))) as Pick<T, K[number]>\r\n}\r\n","import { onServerPrefetch, reactive } from \"vue\"\r\nimport { DataHook } from \"./defineData\"\r\n\r\nif (import.meta.env.SSR) {\r\n // @ts-ignore\r\n globalThis._queryEntries = []\r\n // @ts-ignore\r\n globalThis._registerQuery = (key) => _queryEntries.push(key)\r\n}\r\nif (import.meta.env.DEV) {\r\n // @ts-ignore\r\n globalThis._registerQuery = async (key, value) => {\r\n const resp = await fetch(`/@mechanica/query?q=${encodeURIComponent(key)}`)\r\n const obj = await resp.json()\r\n if (Array.isArray(obj)) {\r\n value.length = 0\r\n value.push(...obj)\r\n }\r\n }\r\n}\r\n\r\ntype PageFilter<T extends readonly DataHook<any, any>[]> = {\r\n folderName?: string\r\n folderId?: number\r\n data: T\r\n}\r\n\r\nexport function useQuery<const T extends readonly DataHook<any, any>[]>(\r\n type: \"getPages\",\r\n filter?: PageFilter<T>\r\n): ({ path: string } & {[K in T[number] as K[\"id\"]]: ReturnType<K> })[];\r\n\r\nexport function useQuery (type: \"fetch\", options: RequestInit & { url: string }): any\r\nexport function useQuery (type: \"getPages\" | \"fetch\", options?: any): any {\r\n\r\n const key = type + \".\" + JSON.stringify(options ?? {})\r\n \r\n if (import.meta.env.SSR) {\r\n const value = reactive(type === 'fetch'? {}: [])\r\n onServerPrefetch(async () => {\r\n // @ts-ignore\r\n const data = await globalThis.getQuery(key)\r\n if (Array.isArray(value)) {\r\n value.length = 0\r\n value.push(...data)\r\n }\r\n })\r\n return value\r\n } else if (import.meta.env.DEV) {\r\n const value = reactive(type === 'fetch'? {}: [])\r\n // @ts-ignore\r\n globalThis._registerQuery(key, value)\r\n return value\r\n }\r\n\r\n return (window as any).state.query?.[key] ?? (type === 'fetch'? {}: [])\r\n}","import { type SchemaItem, type SchemaType } from 'compact-json-schema'\r\n\r\nexport type { Page } from './types'\r\nexport { createMechanica } from './createMechanica'\r\nexport { default as Content } from './components/Content'\r\nexport { defineData } from './defineData'\r\nexport { RouterLink } from './components/RouterLink'\r\nexport { SmartLink } from './components/SmartLink'\r\nexport { useRouter } from './useRouter'\r\nexport { cn, pick } from './utils/cn'\r\nexport { useQuery } from './useQuery'\r\nimport { registerAliases } from '../../common/utils/schemaAliases'\r\nexport {}\r\n\r\ndeclare global {\r\n type ComponentInfo<T extends SchemaItem> = {\r\n id?: string,\r\n name?: string,\r\n order?: number,\r\n group?: string,\r\n props?: T\r\n }\r\n\r\n var defineBlock: <T extends SchemaItem = {}>(input: ComponentInfo<T>) => SchemaType<T>\r\n}\r\n\r\ndeclare module 'compact-json-schema' {\r\n export interface SchemaTypesMap {\r\n \"image\": { src: string, previewSrc?: string },\r\n \"file\": { src: string },\r\n \"color\": string,\r\n \"smartLink\": { url: string, title: string, external: boolean }\r\n \"richText\": Array<{ text: string, type?: string, styles?: Array<{ start: number, end: number, style: string }> }>\r\n }\r\n}\r\n\r\nif (import.meta.env.DEV || import.meta.env.SSR) {\r\n registerAliases()\r\n}\r\n"],"names":["resp","_a"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mechanica",
3
- "version": "1.0.10",
3
+ "version": "1.0.11",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "type": "module",