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 +41 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/vitepress/constants.d.ts +7 -0
- package/dist/vitepress/constants.d.ts.map +1 -0
- package/dist/vitepress/constants.js +7 -0
- package/dist/vitepress/constants.js.map +1 -0
- package/dist/vitepress/create-owner.d.ts +27 -0
- package/dist/vitepress/create-owner.d.ts.map +1 -0
- package/dist/vitepress/create-owner.js +28 -0
- package/dist/vitepress/create-owner.js.map +1 -0
- package/dist/vitepress/ember-fence.d.ts +1 -1
- package/dist/vitepress/ember-fence.d.ts.map +1 -1
- package/dist/vitepress/ember-fence.js +59 -10
- package/dist/vitepress/ember-fence.js.map +1 -1
- package/dist/vitepress/setup.d.ts +60 -0
- package/dist/vitepress/setup.d.ts.map +1 -0
- package/dist/vitepress/setup.js +45 -0
- package/dist/vitepress/setup.js.map +1 -0
- package/package.json +11 -2
- package/src/vitepress/code-preview.vue +14 -2
- package/src/vitepress/constants.ts +6 -0
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
|
|
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
|
|
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
|
-
│
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ember-fence.d.ts","sourceRoot":"","sources":["../../src/vitepress/ember-fence.ts"],"names":[],"mappings":"
|
|
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
|
-
*
|
|
12
|
-
*
|
|
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
|
|
15
|
-
const
|
|
16
|
-
|
|
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
|
|
42
|
-
|
|
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 =
|
|
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 =
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
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
|
|
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
|
-
|
|
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);
|