@mdwrk/lander-content-contract 0.1.2
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 +55 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +210 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +88 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +49 -0
package/README.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# @mdwrk/lander-content-contract
|
|
2
|
+
|
|
3
|
+
**Portable site and page content types**
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://github.com/groupsum/markdown_workspace/blob/master/packages/lander/lander-content-contract/README.md"><img alt="Hits" src="https://visitor-badge.laobi.icu/badge?page_id=groupsum.markdown_workspace.packages_lander_lander_content_contract_README&left_text=hits" /></a>
|
|
7
|
+
<a href="https://www.npmjs.com/package/@mdwrk/lander-content-contract"><img alt="Downloads" src="https://img.shields.io/npm/dm/%40mdwrk%2Flander-content-contract?label=downloads" /></a>
|
|
8
|
+
<a href="../../../package.json"><img alt="Node" src="https://img.shields.io/badge/node-20.x%20%7C%2021.x%20%7C%2022.x-339933?logo=node.js&logoColor=white" /></a>
|
|
9
|
+
<a href="../../../LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" /></a>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
This package defines the site, page, section, schema, navigation, and FAQ types used by MdWrk lander surfaces.
|
|
13
|
+
|
|
14
|
+
## Why
|
|
15
|
+
Use it when you need a content shape that is portable across compile-time, render-time, and source-content adapters.
|
|
16
|
+
|
|
17
|
+
## What
|
|
18
|
+
- Product, page, section, FAQ, schema, and navigation types.
|
|
19
|
+
- A shared content boundary for the entire lander family.
|
|
20
|
+
- The contract consumed by the compiler, React package, SEO helpers, and markdown adapter.
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
Node.js 20.x through 22.x, matching the workspace engine contract in the root package manifest.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install @mdwrk/lander-content-contract
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
```ts
|
|
31
|
+
import type { HeroSection, LanderSite } from "@mdwrk/lander-content-contract";
|
|
32
|
+
|
|
33
|
+
const hero: HeroSection = {
|
|
34
|
+
id: "hero",
|
|
35
|
+
kind: "hero",
|
|
36
|
+
title: "MdWrk",
|
|
37
|
+
subtitle: "Markdown workspace platform",
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const site: LanderSite = {
|
|
41
|
+
product: {
|
|
42
|
+
name: "MdWrk",
|
|
43
|
+
slug: "mdwrk",
|
|
44
|
+
tagline: "Markdown workspace platform",
|
|
45
|
+
description: "Portable markdown authoring and publishing.",
|
|
46
|
+
category: "DeveloperTool",
|
|
47
|
+
canonicalUrl: "https://mdwrk.com",
|
|
48
|
+
},
|
|
49
|
+
pages: [],
|
|
50
|
+
};
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Related
|
|
54
|
+
- [Packages index](../../README.md) - family and package navigation
|
|
55
|
+
- [Root README](../../../README.md) - repo overview
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
export type PageKind = "home" | "feature" | "use_case" | "answer" | "compare" | "package" | "proof" | "pricing" | "docs_bridge" | "trust";
|
|
2
|
+
export type SectionKind = "hero" | "feature_grid" | "feature_detail" | "comparison" | "proof_matrix" | "package_grid" | "pricing" | "cta" | "faq" | "markdown";
|
|
3
|
+
export interface AssetRef {
|
|
4
|
+
src: string;
|
|
5
|
+
alt?: string;
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface Cta {
|
|
10
|
+
label: string;
|
|
11
|
+
href: string;
|
|
12
|
+
variant?: "primary" | "secondary" | "tertiary";
|
|
13
|
+
}
|
|
14
|
+
export interface NavItem {
|
|
15
|
+
label: string;
|
|
16
|
+
href: string;
|
|
17
|
+
children?: NavItem[];
|
|
18
|
+
}
|
|
19
|
+
export interface NavSpec {
|
|
20
|
+
primary: NavItem[];
|
|
21
|
+
secondary?: NavItem[];
|
|
22
|
+
cta?: Cta;
|
|
23
|
+
}
|
|
24
|
+
export interface FooterSpec {
|
|
25
|
+
links?: NavItem[];
|
|
26
|
+
legal?: NavItem[];
|
|
27
|
+
note?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ThemeSpec {
|
|
30
|
+
id: string;
|
|
31
|
+
label: string;
|
|
32
|
+
mode?: "light" | "dark" | "system";
|
|
33
|
+
tokens?: Record<string, string>;
|
|
34
|
+
}
|
|
35
|
+
export interface SiteSeoSpec {
|
|
36
|
+
titleTemplate?: string;
|
|
37
|
+
defaultTitle?: string;
|
|
38
|
+
defaultDescription?: string;
|
|
39
|
+
defaultImage?: AssetRef;
|
|
40
|
+
}
|
|
41
|
+
export interface AiDiscoverySpec {
|
|
42
|
+
summary?: string;
|
|
43
|
+
llmsTxtTitle?: string;
|
|
44
|
+
coreFacts?: string[];
|
|
45
|
+
}
|
|
46
|
+
export interface ProductIdentity {
|
|
47
|
+
name: string;
|
|
48
|
+
slug: string;
|
|
49
|
+
tagline: string;
|
|
50
|
+
description: string;
|
|
51
|
+
category: string;
|
|
52
|
+
canonicalUrl: string;
|
|
53
|
+
logo?: AssetRef;
|
|
54
|
+
sameAs?: string[];
|
|
55
|
+
}
|
|
56
|
+
export interface PageSeoSpec {
|
|
57
|
+
title?: string;
|
|
58
|
+
description?: string;
|
|
59
|
+
canonical?: string;
|
|
60
|
+
noindex?: boolean;
|
|
61
|
+
keywords?: string[];
|
|
62
|
+
image?: AssetRef;
|
|
63
|
+
}
|
|
64
|
+
export type StructuredDataIntentKind = "AggregateRating" | "Article" | "BlogPosting" | "Book" | "BreadcrumbList" | "ClaimReview" | "Course" | "CourseInstance" | "Dataset" | "DiscussionForumPosting" | "EmployerAggregateRating" | "Event" | "FAQPage" | "HowTo" | "ImageObject" | "ItemList" | "JobPosting" | "LocalBusiness" | "MathSolver" | "MemberProgram" | "MerchantReturnPolicy" | "MonetaryAmountDistribution" | "Movie" | "OfferShippingDetails" | "Organization" | "Product" | "ProductGroup" | "ProfilePage" | "QAPage" | "ReadAction" | "Recipe" | "Review" | "SoftwareApplication" | "SoftwareSourceCode" | "SpeakableSpecification" | "TechArticle" | "VacationRental" | "Vehicle" | "VideoObject" | "WebApplication" | "WebPage" | "WebSite";
|
|
65
|
+
export type ComponentIntentKind = SectionKind | "breadcrumbs" | "page_shell" | "structured_data_graph" | "structured_data_node";
|
|
66
|
+
export interface ComponentIntentSpec {
|
|
67
|
+
id: string;
|
|
68
|
+
kind: ComponentIntentKind;
|
|
69
|
+
sourceId?: string;
|
|
70
|
+
data?: Record<string, unknown>;
|
|
71
|
+
}
|
|
72
|
+
export interface StructuredDataIntentSpec {
|
|
73
|
+
id?: string;
|
|
74
|
+
kind: StructuredDataIntentKind;
|
|
75
|
+
data?: Record<string, unknown>;
|
|
76
|
+
}
|
|
77
|
+
export interface SchemaSpec {
|
|
78
|
+
id?: string;
|
|
79
|
+
kind: StructuredDataIntentKind;
|
|
80
|
+
data?: Record<string, unknown>;
|
|
81
|
+
}
|
|
82
|
+
export interface FaqItem {
|
|
83
|
+
question: string;
|
|
84
|
+
answer: string;
|
|
85
|
+
}
|
|
86
|
+
export interface FeatureCard {
|
|
87
|
+
title: string;
|
|
88
|
+
description: string;
|
|
89
|
+
href?: string;
|
|
90
|
+
icon?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface ComparisonCell {
|
|
93
|
+
label: string;
|
|
94
|
+
value: string;
|
|
95
|
+
tone?: "positive" | "neutral" | "warning";
|
|
96
|
+
}
|
|
97
|
+
export interface ComparisonColumn {
|
|
98
|
+
id: string;
|
|
99
|
+
label: string;
|
|
100
|
+
}
|
|
101
|
+
export interface ComparisonRow {
|
|
102
|
+
id: string;
|
|
103
|
+
label: string;
|
|
104
|
+
cells: Record<string, ComparisonCell | string>;
|
|
105
|
+
}
|
|
106
|
+
export interface ProofItem {
|
|
107
|
+
claim: string;
|
|
108
|
+
status: "planned" | "supported" | "verified" | "not_applicable";
|
|
109
|
+
evidence?: string;
|
|
110
|
+
href?: string;
|
|
111
|
+
}
|
|
112
|
+
export interface PackageCardSpec {
|
|
113
|
+
name: string;
|
|
114
|
+
description: string;
|
|
115
|
+
install?: string;
|
|
116
|
+
href?: string;
|
|
117
|
+
api?: string[];
|
|
118
|
+
}
|
|
119
|
+
export interface BaseSection {
|
|
120
|
+
id: string;
|
|
121
|
+
kind: SectionKind;
|
|
122
|
+
title?: string;
|
|
123
|
+
}
|
|
124
|
+
export interface HeroSection extends BaseSection {
|
|
125
|
+
kind: "hero";
|
|
126
|
+
eyebrow?: string;
|
|
127
|
+
title: string;
|
|
128
|
+
subtitle: string;
|
|
129
|
+
image?: AssetRef;
|
|
130
|
+
primaryCta?: Cta;
|
|
131
|
+
secondaryCta?: Cta;
|
|
132
|
+
}
|
|
133
|
+
export interface FeatureGridSection extends BaseSection {
|
|
134
|
+
kind: "feature_grid";
|
|
135
|
+
title: string;
|
|
136
|
+
items: FeatureCard[];
|
|
137
|
+
}
|
|
138
|
+
export interface FeatureDetailSection extends BaseSection {
|
|
139
|
+
kind: "feature_detail";
|
|
140
|
+
title: string;
|
|
141
|
+
body: string;
|
|
142
|
+
items?: FeatureCard[];
|
|
143
|
+
}
|
|
144
|
+
export interface ComparisonSection extends BaseSection {
|
|
145
|
+
kind: "comparison";
|
|
146
|
+
title: string;
|
|
147
|
+
columns: ComparisonColumn[];
|
|
148
|
+
rows: ComparisonRow[];
|
|
149
|
+
}
|
|
150
|
+
export interface ProofMatrixSection extends BaseSection {
|
|
151
|
+
kind: "proof_matrix";
|
|
152
|
+
title: string;
|
|
153
|
+
items: ProofItem[];
|
|
154
|
+
}
|
|
155
|
+
export interface PackageGridSection extends BaseSection {
|
|
156
|
+
kind: "package_grid";
|
|
157
|
+
title: string;
|
|
158
|
+
packages: PackageCardSpec[];
|
|
159
|
+
}
|
|
160
|
+
export interface PricingSection extends BaseSection {
|
|
161
|
+
kind: "pricing";
|
|
162
|
+
title: string;
|
|
163
|
+
body: string;
|
|
164
|
+
}
|
|
165
|
+
export interface CtaSection extends BaseSection {
|
|
166
|
+
kind: "cta";
|
|
167
|
+
title: string;
|
|
168
|
+
body?: string;
|
|
169
|
+
primaryCta?: Cta;
|
|
170
|
+
secondaryCta?: Cta;
|
|
171
|
+
}
|
|
172
|
+
export interface FaqSection extends BaseSection {
|
|
173
|
+
kind: "faq";
|
|
174
|
+
title?: string;
|
|
175
|
+
items: FaqItem[];
|
|
176
|
+
}
|
|
177
|
+
export interface MarkdownSection extends BaseSection {
|
|
178
|
+
kind: "markdown";
|
|
179
|
+
body: string;
|
|
180
|
+
}
|
|
181
|
+
export type SectionSpec = HeroSection | FeatureGridSection | FeatureDetailSection | ComparisonSection | ProofMatrixSection | PackageGridSection | PricingSection | CtaSection | FaqSection | MarkdownSection;
|
|
182
|
+
export interface PageSpec {
|
|
183
|
+
kind: PageKind;
|
|
184
|
+
slug: string;
|
|
185
|
+
title: string;
|
|
186
|
+
description: string;
|
|
187
|
+
h1: string;
|
|
188
|
+
intro: string;
|
|
189
|
+
sections: SectionSpec[];
|
|
190
|
+
faq?: FaqItem[];
|
|
191
|
+
seo?: PageSeoSpec;
|
|
192
|
+
schema?: SchemaSpec[];
|
|
193
|
+
componentIntents?: ComponentIntentSpec[];
|
|
194
|
+
}
|
|
195
|
+
export interface LanderSite {
|
|
196
|
+
product: ProductIdentity;
|
|
197
|
+
pages: PageSpec[];
|
|
198
|
+
nav?: NavSpec;
|
|
199
|
+
footer?: FooterSpec;
|
|
200
|
+
theme?: ThemeSpec;
|
|
201
|
+
seo?: SiteSeoSpec;
|
|
202
|
+
ai?: AiDiscoverySpec;
|
|
203
|
+
}
|
|
204
|
+
export declare const STRUCTURED_DATA_INTENT_KINDS: readonly ["AggregateRating", "Article", "BlogPosting", "Book", "BreadcrumbList", "ClaimReview", "Course", "CourseInstance", "Dataset", "DiscussionForumPosting", "EmployerAggregateRating", "Event", "FAQPage", "HowTo", "ImageObject", "ItemList", "JobPosting", "LocalBusiness", "MathSolver", "MemberProgram", "MerchantReturnPolicy", "MonetaryAmountDistribution", "Movie", "OfferShippingDetails", "Organization", "Product", "ProductGroup", "ProfilePage", "QAPage", "ReadAction", "Recipe", "Review", "SoftwareApplication", "SoftwareSourceCode", "SpeakableSpecification", "TechArticle", "VacationRental", "Vehicle", "VideoObject", "WebApplication", "WebPage", "WebSite"];
|
|
205
|
+
export declare const COMPONENT_INTENT_KINDS: readonly ["hero", "feature_grid", "feature_detail", "comparison", "proof_matrix", "package_grid", "pricing", "cta", "faq", "markdown", "breadcrumbs", "page_shell", "structured_data_graph", "structured_data_node"];
|
|
206
|
+
export declare function isStructuredDataIntentKind(value: unknown): value is StructuredDataIntentKind;
|
|
207
|
+
export declare function isComponentIntentKind(value: unknown): value is ComponentIntentKind;
|
|
208
|
+
export declare function validateStructuredDataIntent(intent: StructuredDataIntentSpec): string[];
|
|
209
|
+
export declare function validateComponentIntent(intent: ComponentIntentSpec): string[];
|
|
210
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export const STRUCTURED_DATA_INTENT_KINDS = Object.freeze([
|
|
2
|
+
"AggregateRating",
|
|
3
|
+
"Article",
|
|
4
|
+
"BlogPosting",
|
|
5
|
+
"Book",
|
|
6
|
+
"BreadcrumbList",
|
|
7
|
+
"ClaimReview",
|
|
8
|
+
"Course",
|
|
9
|
+
"CourseInstance",
|
|
10
|
+
"Dataset",
|
|
11
|
+
"DiscussionForumPosting",
|
|
12
|
+
"EmployerAggregateRating",
|
|
13
|
+
"Event",
|
|
14
|
+
"FAQPage",
|
|
15
|
+
"HowTo",
|
|
16
|
+
"ImageObject",
|
|
17
|
+
"ItemList",
|
|
18
|
+
"JobPosting",
|
|
19
|
+
"LocalBusiness",
|
|
20
|
+
"MathSolver",
|
|
21
|
+
"MemberProgram",
|
|
22
|
+
"MerchantReturnPolicy",
|
|
23
|
+
"MonetaryAmountDistribution",
|
|
24
|
+
"Movie",
|
|
25
|
+
"OfferShippingDetails",
|
|
26
|
+
"Organization",
|
|
27
|
+
"Product",
|
|
28
|
+
"ProductGroup",
|
|
29
|
+
"ProfilePage",
|
|
30
|
+
"QAPage",
|
|
31
|
+
"ReadAction",
|
|
32
|
+
"Recipe",
|
|
33
|
+
"Review",
|
|
34
|
+
"SoftwareApplication",
|
|
35
|
+
"SoftwareSourceCode",
|
|
36
|
+
"SpeakableSpecification",
|
|
37
|
+
"TechArticle",
|
|
38
|
+
"VacationRental",
|
|
39
|
+
"Vehicle",
|
|
40
|
+
"VideoObject",
|
|
41
|
+
"WebApplication",
|
|
42
|
+
"WebPage",
|
|
43
|
+
"WebSite",
|
|
44
|
+
]);
|
|
45
|
+
export const COMPONENT_INTENT_KINDS = Object.freeze([
|
|
46
|
+
"hero",
|
|
47
|
+
"feature_grid",
|
|
48
|
+
"feature_detail",
|
|
49
|
+
"comparison",
|
|
50
|
+
"proof_matrix",
|
|
51
|
+
"package_grid",
|
|
52
|
+
"pricing",
|
|
53
|
+
"cta",
|
|
54
|
+
"faq",
|
|
55
|
+
"markdown",
|
|
56
|
+
"breadcrumbs",
|
|
57
|
+
"page_shell",
|
|
58
|
+
"structured_data_graph",
|
|
59
|
+
"structured_data_node",
|
|
60
|
+
]);
|
|
61
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
62
|
+
export function isStructuredDataIntentKind(value) {
|
|
63
|
+
return typeof value === "string" && STRUCTURED_DATA_INTENT_KINDS.includes(value);
|
|
64
|
+
}
|
|
65
|
+
export function isComponentIntentKind(value) {
|
|
66
|
+
return typeof value === "string" && COMPONENT_INTENT_KINDS.includes(value);
|
|
67
|
+
}
|
|
68
|
+
export function validateStructuredDataIntent(intent) {
|
|
69
|
+
const failures = [];
|
|
70
|
+
if (intent.id !== undefined && !String(intent.id).trim())
|
|
71
|
+
failures.push("structured-data intent id must be non-empty when provided");
|
|
72
|
+
if (!isStructuredDataIntentKind(intent.kind))
|
|
73
|
+
failures.push(`unsupported structured-data intent kind: ${String(intent.kind)}`);
|
|
74
|
+
if (intent.data !== undefined && !isRecord(intent.data))
|
|
75
|
+
failures.push("structured-data intent data must be an object when provided");
|
|
76
|
+
return failures;
|
|
77
|
+
}
|
|
78
|
+
export function validateComponentIntent(intent) {
|
|
79
|
+
const failures = [];
|
|
80
|
+
if (!String(intent.id ?? "").trim())
|
|
81
|
+
failures.push("component intent id is required");
|
|
82
|
+
if (!isComponentIntentKind(intent.kind))
|
|
83
|
+
failures.push(`unsupported component intent kind: ${String(intent.kind)}`);
|
|
84
|
+
if (intent.data !== undefined && !isRecord(intent.data))
|
|
85
|
+
failures.push("component intent data must be an object when provided");
|
|
86
|
+
return failures;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,UAAU,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,+BAA+B,GAAG,OAAO,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mdwrk/lander-content-contract",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=20 <23"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"sideEffects": false,
|
|
17
|
+
"keywords": [
|
|
18
|
+
"lander",
|
|
19
|
+
"content",
|
|
20
|
+
"contract",
|
|
21
|
+
"portable"
|
|
22
|
+
],
|
|
23
|
+
"description": "Portable content contract types for product landing sites.",
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc -p tsconfig.json",
|
|
26
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
27
|
+
"lint": "npm run typecheck",
|
|
28
|
+
"test": "npm run build && node ./tests/run-smoke.mjs",
|
|
29
|
+
"prepack": "npm run build"
|
|
30
|
+
},
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"import": "./dist/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./version": {
|
|
37
|
+
"types": "./dist/version.d.ts",
|
|
38
|
+
"import": "./dist/version.js"
|
|
39
|
+
},
|
|
40
|
+
"./types": {
|
|
41
|
+
"types": "./dist/types.d.ts",
|
|
42
|
+
"import": "./dist/types.js"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"main": "./dist/index.js",
|
|
46
|
+
"types": "./dist/index.d.ts",
|
|
47
|
+
"author": "Jacob Stewart <jacob@swarmauri.com>",
|
|
48
|
+
"homepage": "https://mdwrk.com"
|
|
49
|
+
}
|