vite-plugin-ember 0.0.4 → 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.
package/README.md CHANGED
@@ -53,13 +53,13 @@ export default defineConfig({
53
53
  ```ts
54
54
  // .vitepress/theme/index.ts
55
55
  import DefaultTheme from 'vitepress/theme';
56
- import CodePreview from 'vite-plugin-ember/components/code-preview.vue';
56
+ import { setupEmber } from 'vite-plugin-ember/setup';
57
57
  import type { Theme } from 'vitepress';
58
58
 
59
59
  export default {
60
60
  ...DefaultTheme,
61
61
  enhanceApp({ app }) {
62
- app.component('CodePreview', CodePreview);
62
+ setupEmber(app);
63
63
  },
64
64
  } satisfies Theme;
65
65
  ```
@@ -107,7 +107,10 @@ pnpm dev
107
107
  │ ├── index.ts # Plugin + Ember compilation pipeline
108
108
  │ └── vitepress/
109
109
  │ ├── ember-fence.ts # markdown-it plugin for ```gjs live fences
110
- └── code-preview.vue # Vue wrapper component
110
+ ├── code-preview.vue # Vue wrapper component
111
+ │ ├── setup.ts # One-call theme setup helper
112
+ │ ├── create-owner.ts # Minimal Ember owner factory
113
+ │ └── constants.ts # Shared injection keys
111
114
  ├── docs/ # VitePress documentation site
112
115
  │ ├── demos/ # .gjs/.gts demo components
113
116
  │ └── guide/ # Documentation pages
@@ -115,6 +118,41 @@ pnpm dev
115
118
  └── pnpm-workspace.yaml
116
119
  ````
117
120
 
121
+ ## Limitations
122
+
123
+ Components are rendered standalone via `@ember/renderer`. By default there is **no Ember application container**, which means:
124
+
125
+ - **`@service` injection** requires calling `setupEmber` with a `services` option (see below)
126
+ - **Initializers and instance-initializers** are not executed
127
+ - **Routing** (`LinkTo`, `RouterService`) is not available
128
+
129
+ Components that rely only on `@tracked` state, `@action`, modifiers, and helpers work out of the box.
130
+
131
+ ### Enabling service injection
132
+
133
+ To support `@service` in your demos, pass a `services` map to `setupEmber`:
134
+
135
+ ```ts
136
+ // .vitepress/theme/index.ts
137
+ import DefaultTheme from 'vitepress/theme';
138
+ import { setupEmber } from 'vite-plugin-ember/setup';
139
+ import type { Theme } from 'vitepress';
140
+ import GreetingService from '../demos/greeting-service';
141
+
142
+ export default {
143
+ ...DefaultTheme,
144
+ enhanceApp({ app }) {
145
+ setupEmber(app, {
146
+ services: {
147
+ greeting: new GreetingService(),
148
+ },
149
+ });
150
+ },
151
+ } satisfies Theme;
152
+ ```
153
+
154
+ All `<CodePreview>` instances (including those from ` ```gjs live ` fences) will then use the `@service` decorator for dependency injection.
155
+
118
156
  ## Requirements
119
157
 
120
158
  - Node.js ≥ 20
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY,qBAA4B,CAAC;AAgCtD,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,OAAO,GAAE,sBAA2B,GAEnC,GAAG,CAkPL;AAGD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY,qBAA4B,CAAC;AAgCtD,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,OAAO,GAAE,sBAA2B,GAEnC,GAAG,CAqPL;AAGD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -211,6 +211,9 @@ export default function vitePluginEmber(options = {}) {
211
211
  },
212
212
  /* ─── transform .gjs / .gts files ─────────────────────────────── */
213
213
  async transform(code, id) {
214
+ // Skip ?raw imports — let Vite serve the original source text
215
+ if (id.includes('?raw') || id.includes('&raw'))
216
+ return null;
214
217
  const bareId = id.split('?', 1)[0];
215
218
  const isGJS = bareId.endsWith('.gjs');
216
219
  const isGTS = bareId.endsWith('.gts');
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Vue injection key for providing a default Ember owner to all CodePreview
3
+ * instances. You typically don't need this directly — use `setupEmber()`
4
+ * from `vite-plugin-ember/setup` instead.
5
+ */
6
+ export declare const EMBER_OWNER_KEY: unique symbol;
7
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/vitepress/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,eAAe,eAAwB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Vue injection key for providing a default Ember owner to all CodePreview
3
+ * instances. You typically don't need this directly — use `setupEmber()`
4
+ * from `vite-plugin-ember/setup` instead.
5
+ */
6
+ export const EMBER_OWNER_KEY = Symbol('ember-owner');
7
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/vitepress/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * A minimal Ember-compatible owner backed by a simple `Map`.
3
+ */
4
+ export interface EmberOwner {
5
+ /** Register a pre-built instance under a full name (e.g. `'service:greeting'`). */
6
+ register(fullName: string, instance: unknown): void;
7
+ /** Look up a previously registered instance. */
8
+ lookup(fullName: string): unknown;
9
+ }
10
+ /**
11
+ * Create a minimal Ember-compatible "owner" backed by a simple Map.
12
+ *
13
+ * A full Ember app uses an `ApplicationInstance` as the owner, but for
14
+ * standalone `renderComponent` usage this lightweight implementation is
15
+ * enough to satisfy `getOwner(this).lookup(...)` and the `@service`
16
+ * decorator.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import { createOwner } from 'vite-plugin-ember/owner';
21
+ *
22
+ * const owner = createOwner();
23
+ * owner.register('service:greeting', new GreetingService());
24
+ * ```
25
+ */
26
+ export declare function createOwner(): EmberOwner;
27
+ //# sourceMappingURL=create-owner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-owner.d.ts","sourceRoot":"","sources":["../../src/vitepress/create-owner.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACpD,gDAAgD;IAChD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,IAAI,UAAU,CAYxC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Create a minimal Ember-compatible "owner" backed by a simple Map.
3
+ *
4
+ * A full Ember app uses an `ApplicationInstance` as the owner, but for
5
+ * standalone `renderComponent` usage this lightweight implementation is
6
+ * enough to satisfy `getOwner(this).lookup(...)` and the `@service`
7
+ * decorator.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { createOwner } from 'vite-plugin-ember/owner';
12
+ *
13
+ * const owner = createOwner();
14
+ * owner.register('service:greeting', new GreetingService());
15
+ * ```
16
+ */
17
+ export function createOwner() {
18
+ const services = new Map();
19
+ return {
20
+ register(fullName, instance) {
21
+ services.set(fullName, instance);
22
+ },
23
+ lookup(fullName) {
24
+ return services.get(fullName);
25
+ },
26
+ };
27
+ }
28
+ //# sourceMappingURL=create-owner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-owner.js","sourceRoot":"","sources":["../../src/vitepress/create-owner.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE5C,OAAO;QACL,QAAQ,CAAC,QAAgB,EAAE,QAAiB;YAC1C,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,CAAC,QAAgB;YACrB,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type MarkdownIt from 'markdown-it';
1
+ import MarkdownIt from 'markdown-it';
2
2
  /** Markdown-it plugin: ```gjs live → <CodePreview /> */
3
3
  export declare function emberFence(md: MarkdownIt, component?: string): void;
4
4
  //# sourceMappingURL=ember-fence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ember-fence.d.ts","sourceRoot":"","sources":["../../src/vitepress/ember-fence.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAsB1C,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,SAAgB,QAsCnE"}
1
+ {"version":3,"file":"ember-fence.d.ts","sourceRoot":"","sources":["../../src/vitepress/ember-fence.ts"],"names":[],"mappings":"AAIA,OAAO,UAAU,MAAM,aAAa,CAAC;AAuDrC,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,SAAgB,QAqFnE"}
@@ -1,4 +1,6 @@
1
1
  import { createHash } from 'node:crypto';
2
+ import { readFileSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
2
4
  import { demoRegistry } from '../index.js';
3
5
  function makeVirtualId(code, lang) {
4
6
  const hash = createHash('sha1').update(code).digest('hex').slice(0, 8);
@@ -8,16 +10,38 @@ function makeVirtualId(code, lang) {
8
10
  return moduleId;
9
11
  }
10
12
  /**
11
- * Replace `<Component src="...">` with `:loader="() => import('...')"` so
12
- * Vite can statically analyse and bundle the import in production (SSG) builds.
13
+ * Read a source file and produce a Shiki-highlighted code block via the
14
+ * original markdown-it fence renderer. Returns `null` on any failure.
13
15
  */
14
- function transformSrcToLoader(content, component) {
15
- const re = new RegExp(`<${component}\\s+src="([^"]+)"`, 'g');
16
- return content.replace(re, (_, src) => `<${component} :loader="() => import('${src}')"`);
16
+ function renderSourceBlock(src, srcDir, state, originalFence) {
17
+ const filePath = resolve(srcDir, src.replace(/^\//, ''));
18
+ let source;
19
+ try {
20
+ source = readFileSync(filePath, 'utf-8').trim();
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ const lang = src.endsWith('.gts') ? 'gts' : 'gjs';
26
+ const token = new state.Token('fence', 'code', 0);
27
+ token.info = lang;
28
+ token.content = source + '\n';
29
+ token.markup = '```';
30
+ token.map = [0, source.split('\n').length];
31
+ token.block = true;
32
+ try {
33
+ return originalFence([token], 0, state.md.options, state.env, state.md.renderer);
34
+ }
35
+ catch {
36
+ return null;
37
+ }
17
38
  }
18
39
  /** Markdown-it plugin: ```gjs live → <CodePreview /> */
19
40
  export function emberFence(md, component = 'CodePreview') {
20
41
  const originalFence = md.renderer.rules.fence;
42
+ // Pre-compile regex once per plugin instance.
43
+ // Captures: (1) attrs before src, (2) src value, (3) attrs after src, (4) optional self-close slash
44
+ const srcTagRe = new RegExp(`<${component}\\b([^>]*?)\\bsrc="([^"]+)"([^>]*?)(\\s*/?)>`, 'g');
21
45
  md.renderer.rules.fence = (tokens, idx, options, env, self) => {
22
46
  const token = tokens[idx];
23
47
  const info = (token.info || '').trim();
@@ -38,20 +62,45 @@ export function emberFence(md, component = 'CodePreview') {
38
62
  }
39
63
  return originalFence(tokens, idx, options, env, self);
40
64
  };
41
- // Transform file-based <CodePreview src="..."> tags so Vite can bundle them
42
- md.core.ruler.push('ember-loader-transform', (state) => {
65
+ // Transform file-based <CodePreview src="..."> tags in a single pass:
66
+ // 1. Inject `:loader="() => import('…')"` so Vite can bundle the import.
67
+ // 2. When `preview` is present on a self-closing tag, read the source file
68
+ // and embed a Shiki-highlighted code block as slot content.
69
+ md.core.ruler.push('ember-loader-transform', loaderTransform);
70
+ function loaderTransform(state) {
71
+ // Compute srcDir once per markdown file
72
+ const { env } = state;
73
+ const srcDir = env?.path && env?.relativePath
74
+ ? env.path.slice(0, -env.relativePath.length)
75
+ : null;
76
+ function transform(content) {
77
+ srcTagRe.lastIndex = 0;
78
+ return content.replace(srcTagRe, (_match, before, src, after, slash) => {
79
+ const loader = `:loader="() => import('${src}')"`;
80
+ const attrs = `${before}src="${src}" ${loader}${after}`;
81
+ const isSelfClosing = slash.includes('/');
82
+ const hasPreview = /\bpreview\b/.test(before + after);
83
+ if (isSelfClosing && hasPreview && srcDir) {
84
+ const highlighted = renderSourceBlock(src, srcDir, state, originalFence);
85
+ if (highlighted) {
86
+ return `<${component} ${attrs}>${highlighted}</${component}>`;
87
+ }
88
+ }
89
+ return `<${component} ${attrs}${slash}>`;
90
+ });
91
+ }
43
92
  for (const token of state.tokens) {
44
93
  if (token.type === 'html_block' || token.type === 'html_inline') {
45
- token.content = transformSrcToLoader(token.content, component);
94
+ token.content = transform(token.content);
46
95
  }
47
96
  if (token.children) {
48
97
  for (const child of token.children) {
49
98
  if (child.type === 'html_inline') {
50
- child.content = transformSrcToLoader(child.content, component);
99
+ child.content = transform(child.content);
51
100
  }
52
101
  }
53
102
  }
54
103
  }
55
- });
104
+ }
56
105
  }
57
106
  //# sourceMappingURL=ember-fence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ember-fence.js","sourceRoot":"","sources":["../../src/vitepress/ember-fence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ember-fence.js","sourceRoot":"","sources":["../../src/vitepress/ember-fence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { App } from 'vue';
2
+ import { EMBER_OWNER_KEY } from './constants.js';
3
+ import { createOwner } from './create-owner.js';
4
+ import type { EmberOwner } from './create-owner.js';
5
+ export type { EmberOwner };
6
+ export { createOwner, EMBER_OWNER_KEY };
7
+ export interface SetupEmberOptions {
8
+ /**
9
+ * Services to register on the owner, keyed by name.
10
+ *
11
+ * The key is the service name (without the `service:` prefix).
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * setupEmber(app, {
16
+ * services: { greeting: new GreetingService() },
17
+ * });
18
+ * ```
19
+ */
20
+ services?: Record<string, unknown>;
21
+ /**
22
+ * A pre-built owner to use instead of creating one internally.
23
+ * If provided, `services` entries are still registered on it.
24
+ */
25
+ owner?: EmberOwner;
26
+ /**
27
+ * The name to register the `CodePreview` component under.
28
+ * @default 'CodePreview'
29
+ */
30
+ componentName?: string;
31
+ }
32
+ /**
33
+ * One-call setup for Ember live demos in VitePress.
34
+ *
35
+ * Registers the `<CodePreview>` component and provides an Ember-compatible
36
+ * owner (with optional services) to all instances via Vue's `provide` API.
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * // .vitepress/theme/index.ts
41
+ * import DefaultTheme from 'vitepress/theme';
42
+ * import { setupEmber } from 'vite-plugin-ember/setup';
43
+ * import type { Theme } from 'vitepress';
44
+ *
45
+ * export default {
46
+ * ...DefaultTheme,
47
+ * enhanceApp({ app }) {
48
+ * setupEmber(app, {
49
+ * services: {
50
+ * greeting: new GreetingService(),
51
+ * },
52
+ * });
53
+ * },
54
+ * } satisfies Theme;
55
+ * ```
56
+ *
57
+ * @returns The owner instance, in case you need to register more services later.
58
+ */
59
+ export declare function setupEmber(app: App, options?: SetupEmberOptions): EmberOwner;
60
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/vitepress/setup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAExC,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,iBAAsB,GAC9B,UAAU,CAiBZ"}
@@ -0,0 +1,45 @@
1
+ import { defineAsyncComponent } from 'vue';
2
+ import { EMBER_OWNER_KEY } from './constants.js';
3
+ import { createOwner } from './create-owner.js';
4
+ export { createOwner, EMBER_OWNER_KEY };
5
+ /**
6
+ * One-call setup for Ember live demos in VitePress.
7
+ *
8
+ * Registers the `<CodePreview>` component and provides an Ember-compatible
9
+ * owner (with optional services) to all instances via Vue's `provide` API.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // .vitepress/theme/index.ts
14
+ * import DefaultTheme from 'vitepress/theme';
15
+ * import { setupEmber } from 'vite-plugin-ember/setup';
16
+ * import type { Theme } from 'vitepress';
17
+ *
18
+ * export default {
19
+ * ...DefaultTheme,
20
+ * enhanceApp({ app }) {
21
+ * setupEmber(app, {
22
+ * services: {
23
+ * greeting: new GreetingService(),
24
+ * },
25
+ * });
26
+ * },
27
+ * } satisfies Theme;
28
+ * ```
29
+ *
30
+ * @returns The owner instance, in case you need to register more services later.
31
+ */
32
+ export function setupEmber(app, options = {}) {
33
+ const { services, componentName = 'CodePreview' } = options;
34
+ const owner = options.owner ?? createOwner();
35
+ if (services) {
36
+ for (const [name, instance] of Object.entries(services)) {
37
+ owner.register(`service:${name}`, instance);
38
+ }
39
+ }
40
+ const CodePreview = defineAsyncComponent(() => import('../../src/vitepress/code-preview.vue'));
41
+ app.component(componentName, CodePreview);
42
+ app.provide(EMBER_OWNER_KEY, owner);
43
+ return owner;
44
+ }
45
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/vitepress/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,KAAK,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AA8BxC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,UAAU,CACxB,GAAQ,EACR,UAA6B,EAAE;IAE/B,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;IAE7C,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,oBAAoB,CACtC,GAAG,EAAE,CAAC,MAAM,CAAC,sCAAsC,CAAC,CACrD,CAAC;IACF,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAC1C,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAEpC,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-ember",
3
- "version": "0.0.4",
3
+ "version": "0.1.0",
4
4
  "description": "Vite plugin for rendering live Ember components in VitePress documentation",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -33,6 +33,14 @@
33
33
  },
34
34
  "./components/code-preview.vue": "./src/vitepress/code-preview.vue",
35
35
  "./components/CodePreview": "./src/vitepress/code-preview.vue",
36
+ "./owner": {
37
+ "types": "./dist/vitepress/create-owner.d.ts",
38
+ "default": "./dist/vitepress/create-owner.js"
39
+ },
40
+ "./setup": {
41
+ "types": "./dist/vitepress/setup.d.ts",
42
+ "default": "./dist/vitepress/setup.js"
43
+ },
36
44
  "./*": {
37
45
  "types": "./dist/*.d.ts",
38
46
  "default": "./dist/*.js"
@@ -40,7 +48,8 @@
40
48
  },
41
49
  "files": [
42
50
  "dist",
43
- "src/vitepress/code-preview.vue"
51
+ "src/vitepress/code-preview.vue",
52
+ "src/vitepress/constants.ts"
44
53
  ],
45
54
  "dependencies": {
46
55
  "@babel/core": "^7.29.0",
@@ -1,11 +1,19 @@
1
+ <script lang="ts">
2
+ import { EMBER_OWNER_KEY } from './constants';
3
+ export { EMBER_OWNER_KEY };
4
+ </script>
5
+
1
6
  <script setup lang="ts">
2
- import { onMounted, onBeforeUnmount, ref } from 'vue';
7
+ import { onMounted, onBeforeUnmount, ref, inject } from 'vue';
3
8
  import { inBrowser } from 'vitepress';
4
9
 
5
10
  const props = defineProps<{
6
11
  src?: string;
7
12
  loader?: () => Promise<any>;
13
+ owner?: object;
14
+ preview?: boolean;
8
15
  }>();
16
+ const injectedOwner = inject<object | undefined>(EMBER_OWNER_KEY, undefined);
9
17
  const mountEl = ref<HTMLDivElement | null>(null);
10
18
  const error = ref<string | null>(null);
11
19
  let cleanup: undefined | { destroy?: () => void };
@@ -28,7 +36,11 @@ onMounted(async () => {
28
36
  ]);
29
37
 
30
38
  const component = mod?.default ?? mod;
31
- cleanup = renderComponent(component, { into: mountEl.value });
39
+ const owner = props.owner ?? injectedOwner;
40
+ cleanup = renderComponent(component, {
41
+ into: mountEl.value,
42
+ ...(owner ? { owner } : {}),
43
+ });
32
44
  } catch (err) {
33
45
  console.error('[CodePreview] Failed to render:', err);
34
46
  error.value = String(err);
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Vue injection key for providing a default Ember owner to all CodePreview
3
+ * instances. You typically don't need this directly — use `setupEmber()`
4
+ * from `vite-plugin-ember/setup` instead.
5
+ */
6
+ export const EMBER_OWNER_KEY = Symbol('ember-owner');