@mdwrk/extension-host 1.0.1

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 ADDED
@@ -0,0 +1,49 @@
1
+ # mdwrk/extension-host
2
+
3
+ Stable host API, lifecycle, context, and registration contracts for Markdown Workspace extensions.
4
+
5
+ ## Package purpose
6
+
7
+ This package is the extension-facing boundary for interacting with the host application.
8
+
9
+ ## What it exports
10
+
11
+ - host API contracts
12
+ - extension context contract
13
+ - lifecycle contracts
14
+ - primitive utility types
15
+ - registration contracts for commands, views, components, settings sections, and action rail items
16
+ - i18n catalog and locale-loader registration contracts
17
+ - theme inspection, bridge, preview, and CSS export contracts
18
+
19
+ ## Authoring rule
20
+
21
+ Extension packages must use this package rather than importing `apps/client/*` internals directly.
22
+
23
+ ## Important Phase 9 APIs
24
+
25
+ ### i18n
26
+ Use:
27
+ - `context.registerLocaleCatalog(...)`
28
+ - `context.registerLocaleCatalogLoader(...)`
29
+ - `host.i18n.ensureLocale()`
30
+ - `host.i18n.format(...)`
31
+
32
+ ### theme
33
+ Use:
34
+ - `host.theme.getTokenMap()`
35
+ - `host.theme.getThemeBridge(target)`
36
+ - `host.theme.getThemeBridgeVariables(target)`
37
+ - `host.theme.previewTheme(...)`
38
+ - `host.theme.applyDraft()`
39
+ - `host.theme.exportThemeCss(...)`
40
+
41
+ ## Build
42
+
43
+ ```bash
44
+ npm run build -w @mdwrk/extension-host
45
+ ```
46
+
47
+ ## Publishability
48
+
49
+ This package is structured as a standalone publishable npm package with typed exports and generated build output under `dist/`.
@@ -0,0 +1,27 @@
1
+ import type { ExtensionCapability, ExtensionManifest } from "@mdwrk/extension-manifest";
2
+ import type { ExtensionLocaleCatalog, ExtensionLocaleCatalogLoader, ExtensionHost, HostEnvironment } from "./host.js";
3
+ import type { Disposable, JsonValue } from "./primitives.js";
4
+ import type { RegisteredActionRailItem, RegisteredCommand, RegisteredComponent, RegisteredSettingsSection, RegisteredView } from "./registration.js";
5
+ export interface ExtensionConfigurationStore {
6
+ get<T extends JsonValue = JsonValue>(key: string): Promise<T | null>;
7
+ set<T extends JsonValue = JsonValue>(key: string, value: T): Promise<void>;
8
+ remove(key: string): Promise<void>;
9
+ watch<T extends JsonValue = JsonValue>(key: string, listener: (value: T | null) => void): Disposable;
10
+ }
11
+ export interface ExtensionContext {
12
+ readonly extensionId: string;
13
+ readonly manifest: ExtensionManifest;
14
+ readonly capabilities: readonly ExtensionCapability[];
15
+ readonly host: ExtensionHost;
16
+ readonly environment: HostEnvironment;
17
+ readonly config: ExtensionConfigurationStore;
18
+ registerCommand(command: RegisteredCommand): Disposable;
19
+ registerView(view: RegisteredView): Disposable;
20
+ registerComponent(component: RegisteredComponent): Disposable;
21
+ registerActionRailItem(item: RegisteredActionRailItem): Disposable;
22
+ registerSettingsSection(section: RegisteredSettingsSection): Disposable;
23
+ registerLocaleCatalog(catalog: ExtensionLocaleCatalog): Disposable;
24
+ registerLocaleCatalogLoader(loader: ExtensionLocaleCatalogLoader): Disposable;
25
+ registerService<T>(token: string, service: T): Disposable;
26
+ }
27
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC5B,aAAa,EACb,eAAe,EAChB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACrE,GAAG,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,UAAU,CAAC;CACtG;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;IAE7C,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAAC;IACxD,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAAC;IAC/C,iBAAiB,CAAC,SAAS,EAAE,mBAAmB,GAAG,UAAU,CAAC;IAC9D,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,UAAU,CAAC;IACnE,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,GAAG,UAAU,CAAC;IACxE,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,UAAU,CAAC;IACnE,2BAA2B,CAAC,MAAM,EAAE,4BAA4B,GAAG,UAAU,CAAC;IAC9E,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC;CAC3D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":""}
package/dist/host.d.ts ADDED
@@ -0,0 +1,149 @@
1
+ import type { ActionRailContributionDescriptor, ExtensionCapability, I18nLabel, ViewContributionDescriptor } from "@mdwrk/extension-manifest";
2
+ import type { MarkdownWorkspaceThemeClassName, MarkdownWorkspaceThemeTokenMap, MarkdownWorkspaceThemeTokenName, ThemeBridgeTarget, ThemeBridgeVariableDefinition, ThemeClassDefinition, ThemePreset, ThemeTokenDefinition } from "@mdwrk/theme-contract";
3
+ import type { Disposable, MaybePromise } from "./primitives.js";
4
+ export interface HostCommandApi {
5
+ execute<T = unknown>(id: string, ...args: unknown[]): Promise<T>;
6
+ list(): Promise<readonly string[]>;
7
+ }
8
+ export interface HostViewApi {
9
+ open(id: string, input?: unknown): Promise<void>;
10
+ close(id: string): Promise<void>;
11
+ focus(id: string): Promise<void>;
12
+ list(): Promise<readonly ViewContributionDescriptor[]>;
13
+ }
14
+ export interface HostActionRailApi {
15
+ list(): Promise<readonly ActionRailContributionDescriptor[]>;
16
+ reveal(id: string): Promise<void>;
17
+ setBadge(id: string, value: number | null): Promise<void>;
18
+ }
19
+ export interface HostSettingsApi {
20
+ get<T = unknown>(key: string): Promise<T | null>;
21
+ set<T = unknown>(key: string, value: T): Promise<void>;
22
+ remove(key: string): Promise<void>;
23
+ watch<T = unknown>(key: string, listener: (value: T | null) => void): Disposable;
24
+ }
25
+ export interface HostNotificationOptions {
26
+ readonly title?: string;
27
+ readonly actions?: readonly {
28
+ readonly id: string;
29
+ readonly label: string;
30
+ }[];
31
+ readonly sticky?: boolean;
32
+ }
33
+ export interface HostNotificationApi {
34
+ info(message: I18nLabel | string, options?: HostNotificationOptions): Promise<void>;
35
+ warn(message: I18nLabel | string, options?: HostNotificationOptions): Promise<void>;
36
+ error(message: I18nLabel | string, options?: HostNotificationOptions): Promise<void>;
37
+ }
38
+ export interface HostThemeCssExportOptions {
39
+ readonly selector?: string;
40
+ readonly target?: "host" | ThemeBridgeTarget;
41
+ }
42
+ export interface HostThemeApi {
43
+ getToken(token: MarkdownWorkspaceThemeTokenName): Promise<string | null>;
44
+ getTokenMap(): Promise<MarkdownWorkspaceThemeTokenMap>;
45
+ getTokens(): Promise<readonly ThemeTokenDefinition[]>;
46
+ getClassNames(): Promise<readonly ThemeClassDefinition[]>;
47
+ getThemeBridge(target: ThemeBridgeTarget): Promise<readonly ThemeBridgeVariableDefinition[]>;
48
+ getThemeBridgeVariables(target: ThemeBridgeTarget): Promise<Readonly<Record<`--${string}`, string>>>;
49
+ setDraftToken(token: MarkdownWorkspaceThemeTokenName, value: string): Promise<void>;
50
+ setDraftTokens(tokens: Partial<Record<MarkdownWorkspaceThemeTokenName, string>>): Promise<void>;
51
+ previewTheme(preset: ThemePreset | Partial<Record<MarkdownWorkspaceThemeTokenName, string>>): Promise<void>;
52
+ applyDraft(): Promise<void>;
53
+ discardDraft(): Promise<void>;
54
+ exportTheme(): Promise<ThemePreset>;
55
+ exportThemeCss(options?: HostThemeCssExportOptions): Promise<string>;
56
+ supportsClass(className: MarkdownWorkspaceThemeClassName): Promise<boolean>;
57
+ }
58
+ export interface ActiveDocument {
59
+ readonly uri: string;
60
+ readonly language: string;
61
+ readonly content: string;
62
+ readonly version?: string;
63
+ }
64
+ export interface SelectionRange {
65
+ readonly start: number;
66
+ readonly end: number;
67
+ readonly text?: string;
68
+ }
69
+ export interface HostEditorApi {
70
+ getActiveDocument(): Promise<ActiveDocument | null>;
71
+ getSelections(): Promise<readonly SelectionRange[]>;
72
+ insertText(text: string): Promise<void>;
73
+ replaceSelections(next: string | readonly string[]): Promise<void>;
74
+ setDocumentContent(content: string): Promise<void>;
75
+ }
76
+ export interface WorkspaceProjectSummary {
77
+ readonly id: string;
78
+ readonly name: string;
79
+ readonly path?: string;
80
+ }
81
+ export interface WorkspaceFileSummary {
82
+ readonly id: string;
83
+ readonly name: string;
84
+ readonly path: string;
85
+ readonly kind: "file" | "folder";
86
+ }
87
+ export interface HostWorkspaceApi {
88
+ listProjects(): Promise<readonly WorkspaceProjectSummary[]>;
89
+ getActiveProject(): Promise<WorkspaceProjectSummary | null>;
90
+ getActiveFile(): Promise<WorkspaceFileSummary | null>;
91
+ readFile(path: string): Promise<string>;
92
+ writeFile(path: string, content: string): Promise<void>;
93
+ }
94
+ export interface ExtensionLocaleCatalog {
95
+ readonly locale: string;
96
+ readonly messages: Readonly<Record<string, string>>;
97
+ }
98
+ export interface ExtensionLocaleCatalogLoader {
99
+ readonly defaultLocale?: string;
100
+ readonly fallbackLocale?: string;
101
+ readonly loaders: Readonly<Record<string, () => ExtensionLocaleCatalog | Promise<ExtensionLocaleCatalog>>>;
102
+ }
103
+ export interface HostI18nApi {
104
+ getLocale(): Promise<string>;
105
+ setLocale(locale: string): Promise<void>;
106
+ ensureLocale(locale?: string): Promise<void>;
107
+ format(label: I18nLabel | string): string;
108
+ registerCatalog(extensionId: string, catalog: ExtensionLocaleCatalog): Disposable;
109
+ registerCatalogLoader(extensionId: string, loader: ExtensionLocaleCatalogLoader): Disposable;
110
+ }
111
+ export interface DiagnosticRecord {
112
+ readonly severity: "info" | "warning" | "error";
113
+ readonly code: string;
114
+ readonly message: string;
115
+ readonly detail?: string;
116
+ }
117
+ export interface HostDiagnosticsApi {
118
+ publish(extensionId: string, record: DiagnosticRecord): Promise<void>;
119
+ clear(extensionId: string): Promise<void>;
120
+ }
121
+ export interface HostLoggerApi {
122
+ debug(message: string, context?: unknown): MaybePromise<void>;
123
+ info(message: string, context?: unknown): MaybePromise<void>;
124
+ warn(message: string, context?: unknown): MaybePromise<void>;
125
+ error(message: string, context?: unknown): MaybePromise<void>;
126
+ }
127
+ export interface HostEnvironment {
128
+ readonly platform: "web" | "desktop" | "server";
129
+ readonly mode: "development" | "production" | "test";
130
+ readonly hostVersion: string;
131
+ readonly runtimeVersion: string;
132
+ readonly grantedCapabilities?: readonly ExtensionCapability[];
133
+ }
134
+ export interface ExtensionHost {
135
+ readonly apiVersion: string;
136
+ readonly commands: HostCommandApi;
137
+ readonly views: HostViewApi;
138
+ readonly actionRail: HostActionRailApi;
139
+ readonly settings: HostSettingsApi;
140
+ readonly notifications: HostNotificationApi;
141
+ readonly theme: HostThemeApi;
142
+ readonly editor: HostEditorApi;
143
+ readonly workspace: HostWorkspaceApi;
144
+ readonly i18n: HostI18nApi;
145
+ readonly diagnostics: HostDiagnosticsApi;
146
+ readonly logger: HostLoggerApi;
147
+ readonly environment: HostEnvironment;
148
+ }
149
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
package/dist/host.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export * from "./context.js";
2
+ export * from "./host.js";
3
+ export * from "./lifecycle.js";
4
+ export * from "./primitives.js";
5
+ export * from "./registration.js";
6
+ export * from "./version.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from "./context.js";
2
+ export * from "./host.js";
3
+ export * from "./lifecycle.js";
4
+ export * from "./primitives.js";
5
+ export * from "./registration.js";
6
+ export * from "./version.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ExtensionManifest } from "@mdwrk/extension-manifest";
2
+ import type { ExtensionContext } from "./context.js";
3
+ import type { Disposable, MaybePromise } from "./primitives.js";
4
+ export interface ExtensionActivationResult {
5
+ readonly dispose?: Disposable;
6
+ }
7
+ export type ActivateExtension = (context: ExtensionContext) => MaybePromise<void | Disposable | ExtensionActivationResult>;
8
+ export type DeactivateExtension = (context: ExtensionContext) => MaybePromise<void>;
9
+ export interface MarkdownWorkspaceExtension {
10
+ readonly manifest: ExtensionManifest;
11
+ activate: ActivateExtension;
12
+ deactivate?: DeactivateExtension;
13
+ }
14
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;CAC/B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,YAAY,CAAC,IAAI,GAAG,UAAU,GAAG,yBAAyB,CAAC,CAAC;AAC3H,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;AAEpF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export type MaybePromise<T> = T | Promise<T>;
2
+ export interface Disposable {
3
+ dispose(): void;
4
+ }
5
+ export type Unsubscribe = Disposable;
6
+ export interface JsonObject {
7
+ readonly [key: string]: JsonValue;
8
+ }
9
+ export type JsonValue = string | number | boolean | null | JsonObject | readonly JsonValue[];
10
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,UAAU,GACV,SAAS,SAAS,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import type { ActionRailContributionDescriptor, CommandContributionDescriptor, ComponentContributionDescriptor, SettingsSectionContributionDescriptor, ViewContributionDescriptor } from "@mdwrk/extension-manifest";
2
+ export type ViewRenderer<Props = unknown> = (props: Props) => unknown;
3
+ export type ComponentRenderer<Props = unknown> = (props: Props) => unknown;
4
+ export interface RegisteredCommand extends CommandContributionDescriptor {
5
+ execute: (...args: unknown[]) => unknown | Promise<unknown>;
6
+ }
7
+ export interface RegisteredView extends ViewContributionDescriptor {
8
+ render: ViewRenderer;
9
+ }
10
+ export interface RegisteredComponent extends ComponentContributionDescriptor {
11
+ render: ComponentRenderer;
12
+ }
13
+ export interface RegisteredSettingsSection extends SettingsSectionContributionDescriptor {
14
+ }
15
+ export interface RegisteredActionRailItem extends ActionRailContributionDescriptor {
16
+ }
17
+ //# sourceMappingURL=registration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../src/registration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gCAAgC,EAChC,6BAA6B,EAC7B,+BAA+B,EAC/B,qCAAqC,EACrC,0BAA0B,EAC3B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,YAAY,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;AACtE,MAAM,MAAM,iBAAiB,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;AAE3E,MAAM,WAAW,iBAAkB,SAAQ,6BAA6B;IACtE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,cAAe,SAAQ,0BAA0B;IAChE,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,+BAA+B;IAC1E,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,yBAA0B,SAAQ,qCAAqC;CAAG;AAE3F,MAAM,WAAW,wBAAyB,SAAQ,gCAAgC;CAAG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration.js","sourceRoot":"","sources":["../src/registration.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const EXTENSION_HOST_API_VERSION: "1.0.0";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,EAAG,OAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const EXTENSION_HOST_API_VERSION = "1.0.0";
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAgB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "version": "1.0.1",
3
+ "type": "module",
4
+ "license": "Apache-2.0",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "sideEffects": false,
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
13
+ "engines": {
14
+ "node": ">=20 <23"
15
+ },
16
+ "keywords": [
17
+ "markdown-workspace",
18
+ "contracts",
19
+ "typescript"
20
+ ],
21
+ "name": "@mdwrk/extension-host",
22
+ "description": "Stable host API, lifecycle, and context contracts for Markdown Workspace extensions.",
23
+ "dependencies": {
24
+ "@mdwrk/extension-manifest": "^1.0.0",
25
+ "@mdwrk/theme-contract": "^1.0.0"
26
+ },
27
+ "scripts": {
28
+ "build:deps": "npm run build -w @mdwrk/extension-manifest && npm run build -w @mdwrk/theme-contract",
29
+ "build": "npm run build:deps && tsc -p tsconfig.json",
30
+ "typecheck": "npm run build:deps && tsc --noEmit -p tsconfig.json",
31
+ "lint": "npm run typecheck",
32
+ "test": "npm run typecheck",
33
+ "prepack": "npm run build"
34
+ },
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.ts",
38
+ "import": "./dist/index.js"
39
+ },
40
+ "./version": {
41
+ "types": "./dist/version.d.ts",
42
+ "import": "./dist/version.js"
43
+ },
44
+ "./primitives": {
45
+ "types": "./dist/primitives.d.ts",
46
+ "import": "./dist/primitives.js"
47
+ },
48
+ "./registration": {
49
+ "types": "./dist/registration.d.ts",
50
+ "import": "./dist/registration.js"
51
+ },
52
+ "./host": {
53
+ "types": "./dist/host.d.ts",
54
+ "import": "./dist/host.js"
55
+ },
56
+ "./context": {
57
+ "types": "./dist/context.d.ts",
58
+ "import": "./dist/context.js"
59
+ },
60
+ "./lifecycle": {
61
+ "types": "./dist/lifecycle.d.ts",
62
+ "import": "./dist/lifecycle.js"
63
+ }
64
+ },
65
+ "main": "./dist/index.js",
66
+ "types": "./dist/index.d.ts",
67
+ "author": "Jacob Stewart <jacob@swarmauri.com>",
68
+ "homepage": "https://mdwrk.com"
69
+ }