@shrub/vue-3 0.5.40 → 0.5.41

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/esm/index.js CHANGED
@@ -1,2 +1,76 @@
1
- export * from "./module";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUMifQ==
1
+ import { createConfig, createService } from "@shrub/core";
2
+ import { createApp, h, inject } from "vue";
3
+ export const IVueAppService = createService("vue-app-service");
4
+ export const IVueConfiguration = createConfig();
5
+ const servicesKey = Symbol("services");
6
+ /** Provides access to the service collection for the current Vue app and is intended to be used with the new composition Api. */
7
+ export function useServices() {
8
+ return inject(servicesKey);
9
+ }
10
+ /** Gets an instances of the specified service registered with the current Vue app. */
11
+ export function useService(service) {
12
+ const services = inject(servicesKey);
13
+ return services.get(service);
14
+ }
15
+ export class VueModule {
16
+ constructor() {
17
+ this.app = createApp({
18
+ render: () => this.render()
19
+ });
20
+ this.name = "vue";
21
+ }
22
+ initialize({ config }) {
23
+ config(IVueConfiguration).register(() => ({
24
+ configure: callback => callback(this.app),
25
+ mount: (component, props) => {
26
+ if (this.component) {
27
+ throw new Error("A component has already been mounted.");
28
+ }
29
+ this.component = component;
30
+ this.props = props;
31
+ }
32
+ }));
33
+ }
34
+ configureServices(registration) {
35
+ const self = this;
36
+ registration.registerInstance(IVueAppService, {
37
+ app: this.app,
38
+ get instance() {
39
+ return self.instance;
40
+ }
41
+ });
42
+ }
43
+ async configure({ settings, services, next }) {
44
+ this.app.config.globalProperties.$services = services;
45
+ this.app.provide(servicesKey, services);
46
+ // mount the element after all dependents have had a chance to configure
47
+ await next();
48
+ if (!this.component) {
49
+ // TODO: write a warning to the console
50
+ return Promise.resolve();
51
+ }
52
+ const el = this.getElementId(settings);
53
+ if (!document.getElementById(el.substr(1))) {
54
+ throw new Error(`Element with id (${el}) not found`);
55
+ }
56
+ const router = this.app.config.globalProperties.$router;
57
+ const component = typeof this.component === "function" ? this.component() : this.component;
58
+ const props = typeof this.props === "function" ? this.props() : this.props;
59
+ this.render = () => h(component, props);
60
+ if (router) {
61
+ // need to wait on the router when using SSR
62
+ router.isReady().then(() => this.instance = this.app.mount(el));
63
+ }
64
+ else {
65
+ this.instance = this.app.mount(el);
66
+ }
67
+ }
68
+ getElementId(settings) {
69
+ if (settings.el) {
70
+ // Vue expects the element id to be prefixed with a '#'
71
+ return settings.el[0] === "#" ? settings.el : "#" + settings.el;
72
+ }
73
+ return "#app";
74
+ }
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQXdHLE1BQU0sYUFBYSxDQUFDO0FBQ2hLLE9BQU8sRUFBa0QsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sS0FBSyxDQUFDO0FBaUM5RyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFpQixpQkFBaUIsQ0FBQyxDQUFDO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFlBQVksRUFBcUIsQ0FBQztBQUVuRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFdkMsaUlBQWlJO0FBQ2pJLE1BQU0sVUFBVSxXQUFXO0lBQ3ZCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBRSxDQUFDO0FBQ2hDLENBQUM7QUFFRCxzRkFBc0Y7QUFDdEYsTUFBTSxVQUFVLFVBQVUsQ0FBSSxPQUFvQjtJQUM5QyxNQUFNLFFBQVEsR0FBdUIsTUFBTSxDQUFDLFdBQVcsQ0FBRSxDQUFDO0lBQzFELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxPQUFPLFNBQVM7SUFBdEI7UUFDcUIsUUFBRyxHQUFHLFNBQVMsQ0FBQztZQUM3QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU8sRUFBRTtTQUMvQixDQUFDLENBQUM7UUFPTSxTQUFJLEdBQUcsS0FBSyxDQUFDO0lBaUUxQixDQUFDO0lBL0RHLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBc0I7UUFDckMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdEMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElB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
package/dist/index.d.ts CHANGED
@@ -1 +1,41 @@
1
- export * from "./module";
1
+ import { IModule, IModuleConfigurator, IModuleInitializer, IService, IServiceCollection, IServiceRegistration } from "@shrub/core";
2
+ import { App, ComponentPublicInstance, ComponentOptions, VNodeProps } from "vue";
3
+ declare module "@vue/runtime-core" {
4
+ interface ComponentCustomProperties {
5
+ /** Provides access to the global services container. */
6
+ readonly $services: IServiceCollection;
7
+ }
8
+ }
9
+ export declare type ComponentProps<P> = VNodeProps & Record<string, any> & P;
10
+ export interface IVueAppService {
11
+ readonly app: App;
12
+ readonly instance: ComponentPublicInstance;
13
+ }
14
+ export interface IVueConfiguration {
15
+ /** Allows configuring the Vue application before the root component is mounted. */
16
+ configure(callback: (app: App<Element>) => void): void;
17
+ /** Mounts a root Vue component. */
18
+ mount<P>(component: ComponentOptions<P> | (() => ComponentOptions<P>), props?: ComponentProps<P> | (() => ComponentProps<P>)): void;
19
+ }
20
+ export interface IVueModuleSettings {
21
+ /** The element id to mount to; the default is #app. */
22
+ readonly el?: string;
23
+ }
24
+ export declare const IVueAppService: IService<IVueAppService>;
25
+ export declare const IVueConfiguration: import("@shrub/core").IModuleConfigurationType<IVueConfiguration>;
26
+ /** Provides access to the service collection for the current Vue app and is intended to be used with the new composition Api. */
27
+ export declare function useServices(): IServiceCollection;
28
+ /** Gets an instances of the specified service registered with the current Vue app. */
29
+ export declare function useService<T>(service: IService<T>): T;
30
+ export declare class VueModule implements IModule {
31
+ private readonly app;
32
+ private component?;
33
+ private instance?;
34
+ private props?;
35
+ private render?;
36
+ readonly name = "vue";
37
+ initialize({ config }: IModuleInitializer): void;
38
+ configureServices(registration: IServiceRegistration): void;
39
+ configure({ settings, services, next }: IModuleConfigurator): Promise<void>;
40
+ private getElementId;
41
+ }
package/dist/index.js CHANGED
@@ -1,14 +1,82 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
- };
12
2
  Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./module"), exports);
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXlCIn0=
3
+ exports.VueModule = exports.useService = exports.useServices = exports.IVueConfiguration = exports.IVueAppService = void 0;
4
+ const core_1 = require("@shrub/core");
5
+ const vue_1 = require("vue");
6
+ exports.IVueAppService = core_1.createService("vue-app-service");
7
+ exports.IVueConfiguration = core_1.createConfig();
8
+ const servicesKey = Symbol("services");
9
+ /** Provides access to the service collection for the current Vue app and is intended to be used with the new composition Api. */
10
+ function useServices() {
11
+ return vue_1.inject(servicesKey);
12
+ }
13
+ exports.useServices = useServices;
14
+ /** Gets an instances of the specified service registered with the current Vue app. */
15
+ function useService(service) {
16
+ const services = vue_1.inject(servicesKey);
17
+ return services.get(service);
18
+ }
19
+ exports.useService = useService;
20
+ class VueModule {
21
+ constructor() {
22
+ this.app = vue_1.createApp({
23
+ render: () => this.render()
24
+ });
25
+ this.name = "vue";
26
+ }
27
+ initialize({ config }) {
28
+ config(exports.IVueConfiguration).register(() => ({
29
+ configure: callback => callback(this.app),
30
+ mount: (component, props) => {
31
+ if (this.component) {
32
+ throw new Error("A component has already been mounted.");
33
+ }
34
+ this.component = component;
35
+ this.props = props;
36
+ }
37
+ }));
38
+ }
39
+ configureServices(registration) {
40
+ const self = this;
41
+ registration.registerInstance(exports.IVueAppService, {
42
+ app: this.app,
43
+ get instance() {
44
+ return self.instance;
45
+ }
46
+ });
47
+ }
48
+ async configure({ settings, services, next }) {
49
+ this.app.config.globalProperties.$services = services;
50
+ this.app.provide(servicesKey, services);
51
+ // mount the element after all dependents have had a chance to configure
52
+ await next();
53
+ if (!this.component) {
54
+ // TODO: write a warning to the console
55
+ return Promise.resolve();
56
+ }
57
+ const el = this.getElementId(settings);
58
+ if (!document.getElementById(el.substr(1))) {
59
+ throw new Error(`Element with id (${el}) not found`);
60
+ }
61
+ const router = this.app.config.globalProperties.$router;
62
+ const component = typeof this.component === "function" ? this.component() : this.component;
63
+ const props = typeof this.props === "function" ? this.props() : this.props;
64
+ this.render = () => vue_1.h(component, props);
65
+ if (router) {
66
+ // need to wait on the router when using SSR
67
+ router.isReady().then(() => this.instance = this.app.mount(el));
68
+ }
69
+ else {
70
+ this.instance = this.app.mount(el);
71
+ }
72
+ }
73
+ getElementId(settings) {
74
+ if (settings.el) {
75
+ // Vue expects the element id to be prefixed with a '#'
76
+ return settings.el[0] === "#" ? settings.el : "#" + settings.el;
77
+ }
78
+ return "#app";
79
+ }
80
+ }
81
+ exports.VueModule = VueModule;
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0NBQWdLO0FBQ2hLLDZCQUE4RztBQWlDakcsUUFBQSxjQUFjLEdBQUcsb0JBQWEsQ0FBaUIsaUJBQWlCLENBQUMsQ0FBQztBQUNsRSxRQUFBLGlCQUFpQixHQUFHLG1CQUFZLEVBQXFCLENBQUM7QUFFbkUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXZDLGlJQUFpSTtBQUNqSSxTQUFnQixXQUFXO0lBQ3ZCLE9BQU8sWUFBTSxDQUFDLFdBQVcsQ0FBRSxDQUFDO0FBQ2hDLENBQUM7QUFGRCxrQ0FFQztBQUVELHNGQUFzRjtBQUN0RixTQUFnQixVQUFVLENBQUksT0FBb0I7SUFDOUMsTUFBTSxRQUFRLEdBQXVCLFlBQU0sQ0FBQyxXQUFXLENBQUUsQ0FBQztJQUMxRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUhELGdDQUdDO0FBRUQsTUFBYSxTQUFTO0lBQXRCO1FBQ3FCLFFBQUcsR0FBRyxlQUFTLENBQUM7WUFDN0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFPLEVBQUU7U0FDL0IsQ0FBQyxDQUFDO1FBT00sU0FBSSxHQUFHLEtBQUssQ0FBQztJQWlFMUIsQ0FBQztJQS9ERyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQXNCO1FBQ3JDLE1BQU0sQ0FBQyx5QkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3pDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29C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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shrub/vue-3",
3
3
  "description": "A module that adds support for Vue 3 based apps.",
4
- "version": "0.5.40",
4
+ "version": "0.5.41",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -22,8 +22,8 @@
22
22
  "clean": "rimraf ./dist && rimraf tsconfig.tsbuildinfo"
23
23
  },
24
24
  "dependencies": {
25
- "@shrub/core": "0.5.40",
26
- "vue": "^3.0.2"
25
+ "@shrub/core": "0.5.41",
26
+ "vue": "^3.2.20"
27
27
  },
28
- "gitHead": "56c97188c9cb641bc97aad4f21f7f4d2dec3557a"
28
+ "gitHead": "e6656ccca43a46d4227ba2f7c225f7334a7b4333"
29
29
  }
@@ -1,56 +0,0 @@
1
- import { createApp, h } from "vue";
2
- import { createConfig } from "@shrub/core";
3
- export const IVueConfiguration = createConfig();
4
- export class VueModule {
5
- constructor() {
6
- this.app = createApp({
7
- render: () => this.render()
8
- });
9
- this.name = "vue";
10
- }
11
- initialize({ config }) {
12
- config(IVueConfiguration).register(() => ({
13
- configure: callback => callback(this.app),
14
- mount: (component, props) => {
15
- if (this.component) {
16
- throw new Error("A component has already been mounted.");
17
- }
18
- this.component = component;
19
- this.props = props;
20
- }
21
- }));
22
- }
23
- async configure({ settings, services, next }) {
24
- // TODO: how to make the $service property discoverable in TS?
25
- this.app.config.globalProperties.$services = services;
26
- // mount the element after all dependents have had a chance to configure
27
- await next();
28
- if (!this.component) {
29
- // TODO: write a warning to the console
30
- return Promise.resolve();
31
- }
32
- const el = this.getElementId(settings);
33
- if (!document.getElementById(el.substr(1))) {
34
- throw new Error(`Element with id (${el}) not found`);
35
- }
36
- const router = this.app.config.globalProperties.$router;
37
- const component = typeof this.component === "function" ? this.component() : this.component;
38
- const props = typeof this.props === "function" ? this.props() : this.props;
39
- this.render = () => h(component, props);
40
- if (router) {
41
- // need to wait on the router when using SSR
42
- router.isReady().then(() => this.app.mount(el));
43
- }
44
- else {
45
- this.app.mount(el);
46
- }
47
- }
48
- getElementId(settings) {
49
- if (settings.el) {
50
- // Vue expects the element id to be prefixed with a '#'
51
- return settings.el[0] === "#" ? settings.el : "#" + settings.el;
52
- }
53
- return "#app";
54
- }
55
- }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXlCLFNBQVMsRUFBRSxDQUFDLEVBQXFCLE1BQU0sS0FBSyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQW9ELE1BQU0sYUFBYSxDQUFDO0FBSTdGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFlBQVksRUFBcUIsQ0FBQztBQWtCbkUsTUFBTSxPQUFPLFNBQVM7SUFBdEI7UUFDcUIsUUFBRyxHQUFHLFNBQVMsQ0FBQztZQUM3QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU8sRUFBRTtTQUMvQixDQUFDLENBQUM7UUFNTSxTQUFJLEdBQUcsS0FBSyxDQUFDO0lBdUQxQixDQUFDO0lBckRHLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBc0I7UUFDckMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdEMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDekMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztpQkFDNUQ7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLENBQUM7U0FDSixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQXVCO1FBQzdELDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBRXRELHdFQUF3RTtRQUN4RSxNQUFNLElBQUksRUFBRSxDQUFDO1FBRWIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsdUNBQXVDO1lBQ3ZDLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzVCO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN4RDtRQUVELE1BQU0sTUFBTSxHQUFlLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDM0YsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzNFLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QyxJQUFJLE1BQU0sRUFBRTtZQUNSLDRDQUE0QztZQUM1QyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkQ7YUFDSTtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUE0QjtRQUM3QyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDYix1REFBdUQ7WUFDdkQsT0FBTyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7U0FDbkU7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBQ0oifQ==
package/dist/module.d.ts DELETED
@@ -1,24 +0,0 @@
1
- import { App, ComponentOptions, VNodeProps } from "vue";
2
- import { IModule, IModuleConfigurator, IModuleInitializer } from "@shrub/core";
3
- export declare type ComponentProps<P> = VNodeProps & Record<string, any> & P;
4
- export declare const IVueConfiguration: import("@shrub/core").IModuleConfigurationType<IVueConfiguration>;
5
- export interface IVueConfiguration {
6
- /** Allows configuring the Vue application before the root component is mounted. */
7
- configure(callback: (app: App<Element>) => void): void;
8
- /** Mounts a root Vue component. */
9
- mount<P>(component: ComponentOptions<P> | (() => ComponentOptions<P>), props?: ComponentProps<P> | (() => ComponentProps<P>)): void;
10
- }
11
- export interface IVueModuleSettings {
12
- /** The element id to mount to; the default is #app. */
13
- readonly el?: string;
14
- }
15
- export declare class VueModule implements IModule {
16
- private readonly app;
17
- private component?;
18
- private props?;
19
- private render?;
20
- readonly name = "vue";
21
- initialize({ config }: IModuleInitializer): void;
22
- configure({ settings, services, next }: IModuleConfigurator): Promise<void>;
23
- private getElementId;
24
- }
package/dist/module.js DELETED
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VueModule = exports.IVueConfiguration = void 0;
4
- const vue_1 = require("vue");
5
- const core_1 = require("@shrub/core");
6
- exports.IVueConfiguration = core_1.createConfig();
7
- class VueModule {
8
- constructor() {
9
- this.app = vue_1.createApp({
10
- render: () => this.render()
11
- });
12
- this.name = "vue";
13
- }
14
- initialize({ config }) {
15
- config(exports.IVueConfiguration).register(() => ({
16
- configure: callback => callback(this.app),
17
- mount: (component, props) => {
18
- if (this.component) {
19
- throw new Error("A component has already been mounted.");
20
- }
21
- this.component = component;
22
- this.props = props;
23
- }
24
- }));
25
- }
26
- async configure({ settings, services, next }) {
27
- // TODO: how to make the $service property discoverable in TS?
28
- this.app.config.globalProperties.$services = services;
29
- // mount the element after all dependents have had a chance to configure
30
- await next();
31
- if (!this.component) {
32
- // TODO: write a warning to the console
33
- return Promise.resolve();
34
- }
35
- const el = this.getElementId(settings);
36
- if (!document.getElementById(el.substr(1))) {
37
- throw new Error(`Element with id (${el}) not found`);
38
- }
39
- const router = this.app.config.globalProperties.$router;
40
- const component = typeof this.component === "function" ? this.component() : this.component;
41
- const props = typeof this.props === "function" ? this.props() : this.props;
42
- this.render = () => vue_1.h(component, props);
43
- if (router) {
44
- // need to wait on the router when using SSR
45
- router.isReady().then(() => this.app.mount(el));
46
- }
47
- else {
48
- this.app.mount(el);
49
- }
50
- }
51
- getElementId(settings) {
52
- if (settings.el) {
53
- // Vue expects the element id to be prefixed with a '#'
54
- return settings.el[0] === "#" ? settings.el : "#" + settings.el;
55
- }
56
- return "#app";
57
- }
58
- }
59
- exports.VueModule = VueModule;
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkU7QUFDN0Usc0NBQTZGO0FBSWhGLFFBQUEsaUJBQWlCLEdBQUcsbUJBQVksRUFBcUIsQ0FBQztBQWtCbkUsTUFBYSxTQUFTO0lBQXRCO1FBQ3FCLFFBQUcsR0FBRyxlQUFTLENBQUM7WUFDN0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFPLEVBQUU7U0FDL0IsQ0FBQyxDQUFDO1FBTU0sU0FBSSxHQUFHLEtBQUssQ0FBQztJQXVEMUIsQ0FBQztJQXJERyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQXNCO1FBQ3JDLE1BQU0sQ0FBQyx5QkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3pDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7aUJBQzVEO2dCQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1NBQ0osQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUF1QjtRQUM3RCw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUV0RCx3RUFBd0U7UUFDeEUsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUViLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLHVDQUF1QztZQUN2QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QjtRQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDeEQ7UUFFRCxNQUFNLE1BQU0sR0FBZSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDcEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzNGLE1BQU0sS0FBSyxHQUFHLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMzRSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEMsSUFBSSxNQUFNLEVBQUU7WUFDUiw0Q0FBNEM7WUFDNUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25EO2FBQ0k7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN0QjtJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsUUFBNEI7UUFDN0MsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ2IsdURBQXVEO1lBQ3ZELE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1NBQ25FO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKO0FBaEVELDhCQWdFQyJ9