@markii/stdlib 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/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/contracts.d.ts +72 -0
- package/dist/contracts.js +240 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +45 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 sadigaxund
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# @markii/stdlib
|
|
2
|
+
|
|
3
|
+
The neutral, framework-agnostic definition of [Mark](https://github.com/sadigaxund/markii)'s standard directive contracts (callout, kbd, rating, and the rest of the built-in set): component kind, attribute schemas, and lookup by name. No React, zero dependencies — the seam every renderer implements against, not an implementation itself.
|
|
4
|
+
|
|
5
|
+
See the [repository](https://github.com/sadigaxund/markii) for the format spec and the reference library as a whole.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The neutral, framework-agnostic definition of Mark's standard component
|
|
3
|
+
* *contracts* (DESIGN.md §13.3/§13.6): name + kind + attribute schema +
|
|
4
|
+
* semantics, as pure data — zero React, zero dependency on any other
|
|
5
|
+
* `@markii/*` package. A renderer (today `@markii/react`, tomorrow a
|
|
6
|
+
* hypothetical `@markii/gnome`) implements these same contracts against its
|
|
7
|
+
* own component framework; this module is the seam that makes "one format,
|
|
8
|
+
* many renderers" a checkable fact rather than a hope.
|
|
9
|
+
*
|
|
10
|
+
* A contract never describes markup, styling, or a component
|
|
11
|
+
* implementation — only what a directive named `name` means: how it is
|
|
12
|
+
* written (`kind`, matching the three directive forms from DESIGN.md §2/§13:
|
|
13
|
+
* `inline` -> `:name[...]`, `leaf` -> `::name{...}`, `container` ->
|
|
14
|
+
* `:::name{...} ... :::`) and what attributes it accepts.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Which of the three directive forms a component is written as. Matches
|
|
18
|
+
* `remark-directive`'s three node types one-to-one:
|
|
19
|
+
* - `inline` — text directive, `:name[...]`
|
|
20
|
+
* - `leaf` — leaf directive, `::name{...}` (no body)
|
|
21
|
+
* - `container` — container directive, `:::name{...} ... :::` (block body)
|
|
22
|
+
*/
|
|
23
|
+
export type ComponentKind = 'inline' | 'leaf' | 'container';
|
|
24
|
+
/**
|
|
25
|
+
* Schema for one directive attribute. All directive attributes arrive as
|
|
26
|
+
* raw strings (or `null` for a bare attribute) — DESIGN.md never gives
|
|
27
|
+
* directives a typed attribute grammar (Architecture rule 5: "no
|
|
28
|
+
* expressions, conditionals, or loops in attributes"). `type` is kept as an
|
|
29
|
+
* explicit field, rather than assumed, so the schema has somewhere to grow
|
|
30
|
+
* if a future spec revision adds a second attribute kind; today it is
|
|
31
|
+
* always `'string'`.
|
|
32
|
+
*/
|
|
33
|
+
export interface AttributeSchema {
|
|
34
|
+
type: 'string';
|
|
35
|
+
/** Whether the directive is invalid/incomplete without this attribute. Absent or `false` means optional. */
|
|
36
|
+
required?: boolean;
|
|
37
|
+
/** The exact set of allowed string values, if the attribute is a closed enum. Absent means any string is accepted. */
|
|
38
|
+
enum?: readonly string[];
|
|
39
|
+
/** Human-readable semantics: what the attribute controls, and its default/fallback behavior when absent or invalid. */
|
|
40
|
+
description: string;
|
|
41
|
+
}
|
|
42
|
+
/** One standard component's full contract: name, directive form, attribute schema, and semantics. */
|
|
43
|
+
export interface ComponentContract {
|
|
44
|
+
name: string;
|
|
45
|
+
kind: ComponentKind;
|
|
46
|
+
attributes: Record<string, AttributeSchema>;
|
|
47
|
+
description: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The standard component set, seeded from the components that ship with
|
|
51
|
+
* `@markii/react` today (`packages/platforms/markii-react/src/components/
|
|
52
|
+
* {callout,kbd,rating,details,card,badge,figure,tabs,tab}.tsx`). Each
|
|
53
|
+
* contract was written by reading the real implementation — `kind` from how
|
|
54
|
+
* the component is registered in `defaultRegistry`, `attributes` from
|
|
55
|
+
* exactly the props the component reads (no invented attributes).
|
|
56
|
+
*
|
|
57
|
+
* Keyed by directive name, matching `defaultRegistry`'s shape so a renderer
|
|
58
|
+
* can iterate `Object.entries(STANDARD_COMPONENTS)` the same way it iterates
|
|
59
|
+
* its own registry.
|
|
60
|
+
*/
|
|
61
|
+
export declare const STANDARD_COMPONENTS: Record<string, ComponentContract>;
|
|
62
|
+
/**
|
|
63
|
+
* Looks `name` up in `STANDARD_COMPONENTS`, returning `undefined` if it
|
|
64
|
+
* isn't a standard component. Guards against `name` being `'__proto__'`,
|
|
65
|
+
* `'constructor'`, `'toString'`, `'hasOwnProperty'`, etc. resolving through
|
|
66
|
+
* the prototype chain to an inherited `Object.prototype` member instead of
|
|
67
|
+
* correctly reporting "not found" — the same defense `@markii/react`'s
|
|
68
|
+
* registry (`createRegistry`/lookup in `render.tsx`) and `@markii/runtime`'s
|
|
69
|
+
* `ValueStore` already apply, via `Object.hasOwn` rather than `in`/bracket
|
|
70
|
+
* access alone.
|
|
71
|
+
*/
|
|
72
|
+
export declare function getContract(name: string): ComponentContract | undefined;
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The neutral, framework-agnostic definition of Mark's standard component
|
|
3
|
+
* *contracts* (DESIGN.md §13.3/§13.6): name + kind + attribute schema +
|
|
4
|
+
* semantics, as pure data — zero React, zero dependency on any other
|
|
5
|
+
* `@markii/*` package. A renderer (today `@markii/react`, tomorrow a
|
|
6
|
+
* hypothetical `@markii/gnome`) implements these same contracts against its
|
|
7
|
+
* own component framework; this module is the seam that makes "one format,
|
|
8
|
+
* many renderers" a checkable fact rather than a hope.
|
|
9
|
+
*
|
|
10
|
+
* A contract never describes markup, styling, or a component
|
|
11
|
+
* implementation — only what a directive named `name` means: how it is
|
|
12
|
+
* written (`kind`, matching the three directive forms from DESIGN.md §2/§13:
|
|
13
|
+
* `inline` -> `:name[...]`, `leaf` -> `::name{...}`, `container` ->
|
|
14
|
+
* `:::name{...} ... :::`) and what attributes it accepts.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* The standard component set, seeded from the components that ship with
|
|
18
|
+
* `@markii/react` today (`packages/platforms/markii-react/src/components/
|
|
19
|
+
* {callout,kbd,rating,details,card,badge,figure,tabs,tab}.tsx`). Each
|
|
20
|
+
* contract was written by reading the real implementation — `kind` from how
|
|
21
|
+
* the component is registered in `defaultRegistry`, `attributes` from
|
|
22
|
+
* exactly the props the component reads (no invented attributes).
|
|
23
|
+
*
|
|
24
|
+
* Keyed by directive name, matching `defaultRegistry`'s shape so a renderer
|
|
25
|
+
* can iterate `Object.entries(STANDARD_COMPONENTS)` the same way it iterates
|
|
26
|
+
* its own registry.
|
|
27
|
+
*/
|
|
28
|
+
export const STANDARD_COMPONENTS = {
|
|
29
|
+
callout: {
|
|
30
|
+
name: 'callout',
|
|
31
|
+
kind: 'container',
|
|
32
|
+
attributes: {
|
|
33
|
+
type: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
required: false,
|
|
36
|
+
enum: ['info', 'warning', 'danger'],
|
|
37
|
+
description: 'Visual/semantic variant, selecting the icon and color. Defaults to `info` when absent or not one of the allowed values.',
|
|
38
|
+
},
|
|
39
|
+
title: {
|
|
40
|
+
type: 'string',
|
|
41
|
+
required: false,
|
|
42
|
+
description: 'Optional header text shown above the body. Absent means no header line is rendered.',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
description: "A colored box for an aside, warning, or danger note. Body is the directive's inner markdown, rendered as-is.",
|
|
46
|
+
},
|
|
47
|
+
kbd: {
|
|
48
|
+
name: 'kbd',
|
|
49
|
+
kind: 'inline',
|
|
50
|
+
attributes: {},
|
|
51
|
+
description: 'A styled keycap for an inline text directive, e.g. `:kbd[Ctrl+S]`. Takes no attributes; its inner content is the key label.',
|
|
52
|
+
},
|
|
53
|
+
rating: {
|
|
54
|
+
name: 'rating',
|
|
55
|
+
kind: 'leaf',
|
|
56
|
+
attributes: {
|
|
57
|
+
value: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
required: false,
|
|
60
|
+
description: 'Number of filled stars, as a numeric string. Defaults to `0`; non-numeric input falls back to the default; the effective value is clamped to `[0, max]`.',
|
|
61
|
+
},
|
|
62
|
+
max: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
required: false,
|
|
65
|
+
description: 'Total number of stars, as a numeric string. Defaults to `5`; non-numeric input falls back to the default; the effective value is clamped to `[1, 20]`.',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
description: 'A leaf directive rendering a row of stars, e.g. `::rating{value=3 max=5}`. Has no body — both attributes are optional and degrade gracefully rather than throwing.',
|
|
69
|
+
},
|
|
70
|
+
details: {
|
|
71
|
+
name: 'details',
|
|
72
|
+
kind: 'container',
|
|
73
|
+
attributes: {
|
|
74
|
+
title: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
required: false,
|
|
77
|
+
description: 'Summary text shown on the always-visible header. Defaults to `Details` when absent.',
|
|
78
|
+
},
|
|
79
|
+
open: {
|
|
80
|
+
type: 'string',
|
|
81
|
+
required: false,
|
|
82
|
+
description: 'Bare attribute (e.g. `{open}`). When present, the disclosure starts expanded; absent means it starts folded.',
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
description: 'A collapsible disclosure, e.g. `:::details{title="More"} ... :::`. Body is the directive\'s inner markdown, hidden until expanded.',
|
|
86
|
+
},
|
|
87
|
+
card: {
|
|
88
|
+
name: 'card',
|
|
89
|
+
kind: 'container',
|
|
90
|
+
attributes: {
|
|
91
|
+
title: {
|
|
92
|
+
type: 'string',
|
|
93
|
+
required: false,
|
|
94
|
+
description: 'Optional header text shown above the body. Absent means no title line is rendered.',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
description: 'A titled panel, e.g. `:::card{title="Notes"} ... :::`. Body is the directive\'s inner markdown, rendered as-is.',
|
|
98
|
+
},
|
|
99
|
+
badge: {
|
|
100
|
+
name: 'badge',
|
|
101
|
+
kind: 'inline',
|
|
102
|
+
attributes: {
|
|
103
|
+
variant: {
|
|
104
|
+
type: 'string',
|
|
105
|
+
required: false,
|
|
106
|
+
enum: ['neutral', 'info', 'success', 'warning', 'danger'],
|
|
107
|
+
description: 'Visual/semantic variant, selecting the pill color. Defaults to `neutral` when absent or not one of the allowed values.',
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
description: 'A status pill for an inline text directive, e.g. `:badge[New]{variant=success}`. Its inner content is the label text.',
|
|
111
|
+
},
|
|
112
|
+
figure: {
|
|
113
|
+
name: 'figure',
|
|
114
|
+
kind: 'container',
|
|
115
|
+
attributes: {
|
|
116
|
+
src: {
|
|
117
|
+
type: 'string',
|
|
118
|
+
required: true,
|
|
119
|
+
description: 'Image URL. Required; an unsafe scheme (e.g. `javascript:`) is dropped and no image is rendered.',
|
|
120
|
+
},
|
|
121
|
+
alt: {
|
|
122
|
+
type: 'string',
|
|
123
|
+
required: false,
|
|
124
|
+
description: 'Image alt text. Defaults to the empty string when absent.',
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
description: 'An image with a rich caption, e.g. `:::figure{src="cat.png" alt="A cat"} A cat, napping. ::: `. Body is the directive\'s inner markdown, rendered as the caption.',
|
|
128
|
+
},
|
|
129
|
+
tabs: {
|
|
130
|
+
name: 'tabs',
|
|
131
|
+
kind: 'container',
|
|
132
|
+
attributes: {},
|
|
133
|
+
description: 'A tabbed panel switcher, e.g. `::::tabs :::tab{label="A"} ... ::: :::tab{label="B"} ... ::: ::::`. Takes no attributes of its own; its body is a sequence of `tab` containers, one per panel, and it shows only the active one. The enclosing fence must use MORE colons than its `tab` children (directive container nesting rule), hence `::::tabs` wrapping `:::tab`.',
|
|
134
|
+
},
|
|
135
|
+
tab: {
|
|
136
|
+
name: 'tab',
|
|
137
|
+
kind: 'container',
|
|
138
|
+
attributes: {
|
|
139
|
+
label: {
|
|
140
|
+
type: 'string',
|
|
141
|
+
required: false,
|
|
142
|
+
description: 'Tab button text, read by the enclosing `tabs` component. Defaults to `Tab` when absent.',
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
description: 'One panel of a `tabs` component, e.g. `:::tab{label="A"} ... :::`. Body is the directive\'s inner markdown, shown only while this tab is active. Rendered standalone (outside a `tabs` parent) it simply shows its panel.',
|
|
146
|
+
},
|
|
147
|
+
stat: {
|
|
148
|
+
name: 'stat',
|
|
149
|
+
kind: 'leaf',
|
|
150
|
+
attributes: {
|
|
151
|
+
value: {
|
|
152
|
+
type: 'string',
|
|
153
|
+
required: false,
|
|
154
|
+
description: "The headline value, shown large. Overridden by a bound `data=` value/object's own `value` field when both are present. Absent value (from either source) renders `—`.",
|
|
155
|
+
},
|
|
156
|
+
label: {
|
|
157
|
+
type: 'string',
|
|
158
|
+
required: false,
|
|
159
|
+
description: "Caption shown under the value. Overridden by a bound `data=` object's `label` field when both are present. Absent means no caption line is rendered.",
|
|
160
|
+
},
|
|
161
|
+
delta: {
|
|
162
|
+
type: 'string',
|
|
163
|
+
required: false,
|
|
164
|
+
description: "Optional secondary text (e.g. a change amount) shown next to the value. Overridden by a bound `data=` object's `delta` field when both are present.",
|
|
165
|
+
},
|
|
166
|
+
trend: {
|
|
167
|
+
type: 'string',
|
|
168
|
+
required: false,
|
|
169
|
+
enum: ['up', 'down', 'flat'],
|
|
170
|
+
description: "Colors/annotates `delta` as an increase, decrease, or no change. Overridden by a bound `data=` object's `trend` field when both are present; absent/invalid means no trend styling.",
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
description: 'A leaf directive rendering a big value plus label, e.g. `::stat{value=42 label="stars" trend=up}`. Data binding (§8): `data=name` resolves against the value store — a number/string value supplies `value` directly; an object may supply `value`/`label`/`delta`/`trend` fields (explicit attributes on the directive always take precedence over the bound object\'s fields). Degrades to `—` when both the attribute and the bound value are absent — never throws.',
|
|
174
|
+
},
|
|
175
|
+
progress: {
|
|
176
|
+
name: 'progress',
|
|
177
|
+
kind: 'leaf',
|
|
178
|
+
attributes: {
|
|
179
|
+
value: {
|
|
180
|
+
type: 'string',
|
|
181
|
+
required: false,
|
|
182
|
+
description: "Current amount, as a numeric string. Overridden by a bound `data=` number, or a bound object's `value` field, when present. Non-numeric/NaN/Infinity input is treated as `0`; the effective value is clamped to `[0, max]`.",
|
|
183
|
+
},
|
|
184
|
+
max: {
|
|
185
|
+
type: 'string',
|
|
186
|
+
required: false,
|
|
187
|
+
description: "The amount `value` is measured against, as a numeric string. Defaults to `1`. Overridden by a bound object's `max` field when present. Non-numeric/NaN/Infinity/non-positive input falls back to the default.",
|
|
188
|
+
},
|
|
189
|
+
label: {
|
|
190
|
+
type: 'string',
|
|
191
|
+
required: false,
|
|
192
|
+
description: 'Optional caption shown above/alongside the bar. Absent means no caption line is rendered.',
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
description: 'A leaf directive rendering a meter bar, e.g. `::progress{value=3 max=5 label="tasks"}`. Data binding (§8): `data=name` resolves against the value store — a bare number supplies `value` directly; an object may supply `value`/`max` fields (explicit attributes take precedence). Parses defensively and clamps rather than throwing; missing/invalid input renders an empty (0%) bar.',
|
|
196
|
+
},
|
|
197
|
+
chart: {
|
|
198
|
+
name: 'chart',
|
|
199
|
+
kind: 'leaf',
|
|
200
|
+
attributes: {
|
|
201
|
+
kind: {
|
|
202
|
+
type: 'string',
|
|
203
|
+
required: false,
|
|
204
|
+
enum: ['line', 'bar'],
|
|
205
|
+
description: 'Chart form: a connected line through the points, or a bar per point. Defaults to `line` when absent or not one of the allowed values.',
|
|
206
|
+
},
|
|
207
|
+
values: {
|
|
208
|
+
type: 'string',
|
|
209
|
+
required: false,
|
|
210
|
+
description: 'Comma-separated numbers for static authoring, e.g. `values="1,3,2,5"`. Ignored in favor of a bound `data=` array when both are present. Non-numeric entries are dropped.',
|
|
211
|
+
},
|
|
212
|
+
height: {
|
|
213
|
+
type: 'string',
|
|
214
|
+
required: false,
|
|
215
|
+
description: 'SVG viewport height in pixels, as a numeric string. Defaults to a sane built-in size; non-numeric/non-positive input falls back to the default.',
|
|
216
|
+
},
|
|
217
|
+
width: {
|
|
218
|
+
type: 'string',
|
|
219
|
+
required: false,
|
|
220
|
+
description: 'SVG viewport width in pixels, as a numeric string. Defaults to a sane built-in size; non-numeric/non-positive input falls back to the default.',
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
description: 'A leaf directive rendering a minimal hand-rolled inline SVG chart, e.g. `::chart{kind=line values="1,3,2,5"}`. Data binding (§8): `data=name` resolves against the value store — expects an array of numbers (typically a Lua script returning a table), or an array of `{value}` objects. Non-finite/non-numeric entries are filtered out and the point count is capped; an empty or all-invalid series renders a small neutral empty state rather than a broken chart. Never throws, and never places unescaped text into the emitted SVG markup.',
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* Looks `name` up in `STANDARD_COMPONENTS`, returning `undefined` if it
|
|
228
|
+
* isn't a standard component. Guards against `name` being `'__proto__'`,
|
|
229
|
+
* `'constructor'`, `'toString'`, `'hasOwnProperty'`, etc. resolving through
|
|
230
|
+
* the prototype chain to an inherited `Object.prototype` member instead of
|
|
231
|
+
* correctly reporting "not found" — the same defense `@markii/react`'s
|
|
232
|
+
* registry (`createRegistry`/lookup in `render.tsx`) and `@markii/runtime`'s
|
|
233
|
+
* `ValueStore` already apply, via `Object.hasOwn` rather than `in`/bracket
|
|
234
|
+
* access alone.
|
|
235
|
+
*/
|
|
236
|
+
export function getContract(name) {
|
|
237
|
+
return Object.hasOwn(STANDARD_COMPONENTS, name)
|
|
238
|
+
? STANDARD_COMPONENTS[name]
|
|
239
|
+
: undefined;
|
|
240
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getContract, STANDARD_COMPONENTS, type AttributeSchema, type ComponentContract, type ComponentKind, } from './contracts.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getContract, STANDARD_COMPONENTS, } from './contracts.js';
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@markii/stdlib",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Neutral, framework-agnostic standard component contracts for Mark (.mk.md) — the kind/attribute-schema seam every renderer (e.g. @markii/react) implements against. No React, zero dependencies.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"markdown",
|
|
7
|
+
"mark",
|
|
8
|
+
"mk.md",
|
|
9
|
+
"stdlib",
|
|
10
|
+
"contracts",
|
|
11
|
+
"directive"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"author": "sadigaxund",
|
|
15
|
+
"homepage": "https://github.com/sadigaxund/markii#readme",
|
|
16
|
+
"bugs": "https://github.com/sadigaxund/markii/issues",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/sadigaxund/markii.git",
|
|
20
|
+
"directory": "packages/markii-stdlib"
|
|
21
|
+
},
|
|
22
|
+
"type": "module",
|
|
23
|
+
"main": "./dist/index.js",
|
|
24
|
+
"module": "./dist/index.js",
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"import": "./dist/index.js",
|
|
30
|
+
"default": "./dist/index.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist"
|
|
35
|
+
],
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"test": "vitest run",
|
|
41
|
+
"build": "tsc --noEmit -p tsconfig.json",
|
|
42
|
+
"build:dist": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
43
|
+
"lint": "eslint ."
|
|
44
|
+
}
|
|
45
|
+
}
|