@d1vij/jassm 0.1.17 → 0.1.18

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
@@ -33,10 +33,10 @@ import react from "@vitejs/plugin-react";
33
33
  import jassm from "@d1vij/jassm/plugin";
34
34
 
35
35
  export default defineConfig({
36
- plugins: [
37
- jassm(), // Put jassm plugin before react's plugin
38
- react(),
39
- ],
36
+ plugins: [
37
+ jassm(), // Put jassm plugin before react's plugin
38
+ react(),
39
+ ],
40
40
  });
41
41
  ```
42
42
 
@@ -56,12 +56,12 @@ echo "# This is a Heading" > sample.mdx
56
56
  import { Registry } from "@d1vij/jassm";
57
57
 
58
58
  export const registry = new Registry({
59
- modules: import.meta.glob("/src/assets/mdx/**/*.mdx"),
60
- source: "/src/assets/mdx",
61
- mountOn: "/root",
62
- records: {
63
- "/sample": "/example.mdx",
64
- },
59
+ modules: import.meta.glob("/src/assets/mdx/**/*.mdx"),
60
+ source: "/src/assets/mdx",
61
+ mountOn: "/root",
62
+ records: {
63
+ "/sample": "/example.mdx",
64
+ },
65
65
  });
66
66
  ```
67
67
 
@@ -75,8 +75,8 @@ import type { StyleClassesMap } from "jassm";
75
75
  import "myStyles.css";
76
76
 
77
77
  export const stylesmap: StyleClassesMap = {
78
- header: "myHeader",
79
- paragraph: "pee",
78
+ header: "myHeader",
79
+ paragraph: "pee",
80
80
  };
81
81
  ```
82
82
 
@@ -88,8 +88,8 @@ import styles from "myStyles.module.css";
88
88
  import type { StyleClassesMap } from "jassm";
89
89
 
90
90
  export const stylesmap: StyleClassesMap = {
91
- header: styles.myHeader,
92
- paragraph: styles.pee,
91
+ header: styles.myHeader,
92
+ paragraph: styles.pee,
93
93
  };
94
94
  ```
95
95
 
@@ -143,17 +143,18 @@ import { stylesmap } from "./stylesmap";
143
143
  import { Suspense } from "react";
144
144
 
145
145
  export default function MyLoader() {
146
- const Component = registry["/root/sample"];
147
-
148
- return (
149
- <div>
150
- <StyleContext styles={stylesmap}>
151
- <Suspense>
152
- <Component components={Elements} />
153
- </Suspense>
154
- </StyleContext>
155
- </div>
156
- );
146
+ const Component = registry["/root/sample"];
147
+
148
+ return (
149
+ <div>
150
+ <StyleContext styles={stylesmap}>
151
+ <Suspense>
152
+ <Component components={Elements} />
153
+ </Suspense>
154
+ </StyleContext>
155
+ </div>
156
+ );
157
157
  }
158
158
  ```
159
+
159
160
  ---
package/dist/index.d.ts CHANGED
@@ -31,125 +31,196 @@ declare function generateElementsFrom<
31
31
  B extends boolean = true
32
32
  >(elements: E, baseElements?: B): { [K in B extends true ? keyof E | (typeof BaseElementTags)[number] : keyof E] : Element2 };
33
33
  /**
34
- * File extension(s) to accept
34
+ * Utility type that ensures a string starts with `/`
35
35
  */
36
- type MDXFile = `${string}.mdx`;
37
36
  type MustStartWithSlash<T extends string> = T extends `/${string}` ? T : never;
37
+ /**
38
+ * Utility type that ensures a string does NOT end with `/`
39
+ */
38
40
  type MustNotEndWithSlash<T extends string> = T extends `${string}/` ? never : T;
39
41
  /**
40
- * Options passed to {@link generateRegistries}
42
+ * Valid path that:
43
+ * - starts with `/`
44
+ * - does not end with `/`
45
+ */
46
+ type PathCheck<T extends string> = MustStartWithSlash<T> & MustNotEndWithSlash<T>;
47
+ /**
48
+ * Type returned by `import.meta.glob`
49
+ */
50
+ type WrappedUnknownPromise = () => Promise<unknown>;
51
+ /**
52
+ * Shape of glob result
53
+ */
54
+ type GlobResult<T> = Record<string, T>;
55
+ /**
56
+ * Removes `.mdx` extension from a path
57
+ */
58
+ type StripExtension<T extends string> = T extends `${infer Rest}.mdx` ? Rest : T;
59
+ /**
60
+ * Derives the route keys produced by the registry and
61
+ * replace filesystem root with a virtual route prefix
62
+ *
63
+ * Example:
64
+ *
65
+ * `/src/content/foo.mdx`
66
+ * root = `/src/content`
67
+ * virtual = `/blog`
68
+ * Result:
69
+ * `/blog/foo`
70
+ */
71
+ type RouteKey<
72
+ Modules extends Record<string, unknown>,
73
+ Root extends string,
74
+ Virtual extends string
75
+ > = keyof { [K in keyof Modules as K extends `${string}${Root}/${infer Rest}.mdx` ? `${Virtual}/${Rest}` : never] : true } & string;
76
+ /**
77
+ * Options passed to {@link generateRegistry}
41
78
  */
42
79
  type RegistryOptions<
43
- S extends string,
44
- M extends string,
45
- R extends Record<string, string>
80
+ MetaType,
81
+ Modules extends GlobResult<WrappedUnknownPromise>,
82
+ Root extends string,
83
+ Virtual extends string
46
84
  > = {
47
85
  /**
48
- * Module object returned from `import.meta.glob`
49
- * @example import.module.glob("/src/assets/mdx/**\/*.mdx")
86
+ * Module map returned from `import.meta.glob`
50
87
  */
51
- modules: Record<string, () => Promise<unknown>>;
88
+ modulesGlob: Modules;
52
89
  /**
53
- * Directory from which to resolve the source paths in {@link RegistryOptions.records}
90
+ * Metadata extracted from each MDX file
54
91
  */
55
- source: MustNotEndWithSlash<S> & MustStartWithSlash<S>;
92
+ metadataGlob: { [K in keyof Modules as `${StripExtension<Extract<K, string>>}.meta.ts`] : MetaType };
56
93
  /**
57
- * Virtual base path on which to mount the key of {@link RegistryOptions.records}
94
+ * Filesystem root path
58
95
  */
59
- mountOn: MustNotEndWithSlash<M> & MustStartWithSlash<M>;
96
+ root: PathCheck<Root>;
60
97
  /**
61
- * Mappings of virtual path to file paths under {@link RegistryOptions.source}
98
+ * Virtual route mount point
62
99
  */
63
- records: { [K in keyof R] : K extends string ? MustNotEndWithSlash<K> & MustStartWithSlash<K> extends never ? never : R[K] extends MustStartWithSlash<R[K]> & MDXFile ? R[K] : never : never };
100
+ virtual: PathCheck<Virtual>;
64
101
  };
65
- type RegistryKey<
66
- S extends string,
67
- M extends string,
68
- R extends Record<string, string>
69
- > = keyof RegistryOf<unknown, S, M, R>;
70
- /**
71
- * Constructor for any generic registry with keys in the format of `mount-path/virtual-path` for each virual path passed in {@link RegistryOptions.records}
72
- */
73
- type RegistryOf<
74
- T,
75
- S extends string,
76
- M extends string,
77
- R extends Record<string, string>
78
- > = { [K in keyof RegistryOptions<S, M, R>["records"] as `${RegistryOptions<S, M, R>["mountOn"]}${Extract<K, string>}`] : T };
79
- /**
80
- * Registry of react components
81
- */
82
- type ComponentRegistry<
83
- S extends string,
84
- M extends string,
85
- R extends Record<string, string>
86
- > = RegistryOf<React.LazyExoticComponent<React.ComponentType>, S, M, R>;
87
- /**
88
- * Registry of promise objects equivalent to return type of `import(<path>)`
89
- */
90
- type ExportsRegistry<
91
- S extends string,
92
- M extends string,
93
- R extends Record<string, string>
94
- > = RegistryOf<Promise<Record<string, unknown>>, S, M, R>;
95
- /**
96
- * Function to generate Registry mappings, use {@link Registry} class instead of this.
97
- * @param MDXRegistryOptions
98
- * @returns Tuple of [{@link ComponentRegistry}, {@link ExportsRegistry}]
99
- */
100
- declare function generateRegistries<
101
- S extends string,
102
- M extends string,
103
- R extends Record<string, string>
104
- >({ modules, source, mountOn, records }: RegistryOptions<S, M, R>): [ComponentRegistry<S, M, R>, ExportsRegistry<S, M, R>];
105
- /**
106
- * The returned object has the type of {@link React.ComponentType} + whatever user passes
107
- */
108
- type ExportSingleType<T> = Promise<T & {
109
- default: React.ComponentType;
110
- }>;
111
- type ExportAllType<T> = { [K in keyof T] : ExportSingleType<T[K]> };
102
+ /**
103
+ * Internal function used by {@link Registry}.
104
+ *
105
+ * Builds registry mappings for:
106
+ * - keys
107
+ * - metadata
108
+ * - components
109
+ * - exports
110
+ */
111
+ declare function generateRegistry<
112
+ MetaType,
113
+ Modules extends Record<string, WrappedUnknownPromise>,
114
+ Root extends string,
115
+ Virtual extends string
116
+ >({ modulesGlob, metadataGlob, root, virtual }: RegistryOptions<MetaType, Modules, Root, Virtual>): {
117
+ /**
118
+ * List of route keys
119
+ */
120
+ keys: RouteKey<Modules, Root, Virtual>[];
121
+ /**
122
+ * Metadata registry
123
+ */
124
+ metadata: Record<RouteKey<Modules, Root, Virtual>, MetaType>;
125
+ /**
126
+ * React lazy component registry
127
+ */
128
+ components: Record<RouteKey<Modules, Root, Virtual>, React.LazyExoticComponent<React.ComponentType>>;
129
+ /**
130
+ * Raw module registry
131
+ */
132
+ exports: Record<RouteKey<Modules, Root, Virtual>, Promise<Record<string, unknown>>>;
133
+ };
134
+ /**
135
+ * Base class for all registry implementations.
136
+ *
137
+ * Provides type-safe access to:
138
+ * - components
139
+ * - module exports
140
+ * - metadata
141
+ */
112
142
  declare abstract class AbstractRegistry<
113
- C extends Record<string, React.LazyExoticComponent<React.ComponentType>>,
114
- E extends Record<string, unknown>
143
+ Key extends string,
144
+ Components extends Record<Key, React.LazyExoticComponent<React.ComponentType>>,
145
+ Exports extends Record<Key, unknown>,
146
+ Metadata extends Record<Key, unknown>
115
147
  > {
116
- abstract components: C;
117
- abstract exports: E;
118
- getComponent<K extends keyof C>(key: K): C[K];
119
- getComponents(): C;
120
- getExport<
121
- T extends object,
122
- K extends keyof E
123
- >(key: K): ExportSingleType<T>;
124
- getExports<T extends Record<keyof C, object> = Record<keyof C, object>>(): ExportAllType<T>;
148
+ /**
149
+ * List of registry keys
150
+ */
151
+ abstract readonly keys: readonly Key[];
152
+ /**
153
+ * Lazy component registry
154
+ */
155
+ abstract readonly components: Components;
156
+ /**
157
+ * Raw module export registry
158
+ */
159
+ abstract readonly exports: Exports;
160
+ /**
161
+ * Metadata registry
162
+ */
163
+ abstract readonly metadata: Metadata;
164
+ private get;
165
+ /**
166
+ * Retrieve a React component by route key
167
+ */
168
+ getComponent(key: string): Components[keyof Components];
169
+ /**
170
+ * Retrieve raw module exports for a route
171
+ */
172
+ getExport(key: string): Exports[keyof Exports];
173
+ /**
174
+ * Retrieve metadata for a route
175
+ */
176
+ getMetadata(key: string): Metadata[keyof Metadata];
125
177
  }
126
178
  /**
127
- * Wrapper class over {@link generateRegistries}. Provides methods to access components and exports from typesafe keys
179
+ * Primary registry implementation.
180
+ *
181
+ * Wraps {@link generateRegistry} and exposes
182
+ * strongly typed access methods.
128
183
  */
129
184
  declare class Registry<
130
- S extends string,
131
- M extends string,
132
- R extends Record<string, string>
133
- > extends AbstractRegistry<ComponentRegistry<S, M, R>, ExportsRegistry<S, M, R>> {
134
- readonly components: ComponentRegistry<S, M, R>;
135
- readonly exports: ExportsRegistry<S, M, R>;
136
- constructor(registryOpts: RegistryOptions<S, M, R>);
185
+ MetaType,
186
+ Modules extends Record<`${Root}/${string}.mdx`, WrappedUnknownPromise>,
187
+ Root extends string,
188
+ Virtual extends string
189
+ > extends AbstractRegistry<RouteKey<Modules, Root, Virtual>, Record<RouteKey<Modules, Root, Virtual>, React.LazyExoticComponent<React.ComponentType>>, Record<RouteKey<Modules, Root, Virtual>, unknown>, Record<RouteKey<Modules, Root, Virtual>, MetaType>> {
190
+ readonly keys: RouteKey<Modules, Root, Virtual>[];
191
+ readonly components: Record<RouteKey<Modules, Root, Virtual>, React.LazyExoticComponent<React.ComponentType>>;
192
+ readonly exports: Record<RouteKey<Modules, Root, Virtual>, unknown>;
193
+ readonly metadata: Record<RouteKey<Modules, Root, Virtual>, MetaType>;
194
+ constructor(opts: RegistryOptions<MetaType, Modules, Root, Virtual>);
137
195
  }
138
- type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
139
196
  /**
140
- * Registry created by coalesing multiple {@link Registry} instances
197
+ * Utility types used for extracting generics
198
+ * from registry instances.
199
+ */
200
+ type RegistryKeys<R> = R extends AbstractRegistry<infer K, any, any, any> ? K : never;
201
+ type RegistryComponents<R> = R extends AbstractRegistry<any, infer C, any, any> ? C : never;
202
+ type RegistryExports<R> = R extends AbstractRegistry<any, any, infer E, any> ? E : never;
203
+ type RegistryMetadata<R> = R extends AbstractRegistry<any, any, any, infer M> ? M : never;
204
+ /**
205
+ * Registry created by merging multiple {@link Registry}
206
+ * instances into a single unified registry.
207
+ *
208
+ * Useful for combining multiple MDX content directories
209
+ * into one route registry.
141
210
  */
142
- declare class CoalescedRegistry<R extends readonly AbstractRegistry<Record<string, React.LazyExoticComponent<React.ComponentType>>, Record<string, unknown>>[]> extends AbstractRegistry<Record<keyof UnionToIntersection<R[number]["components"]>, React.LazyExoticComponent<React.ComponentType>>, Record<keyof UnionToIntersection<R[number]["exports"]>, unknown>> {
143
- readonly components: Record<keyof UnionToIntersection<R[number]["components"]>, React.LazyExoticComponent<React.ComponentType>>;
144
- readonly exports: Record<keyof UnionToIntersection<R[number]["exports"]>, unknown>;
145
- constructor(...registries: R);
211
+ declare class CoalescedRegistry<Registries extends AbstractRegistry<any, any, any, any>[]> extends AbstractRegistry<RegistryKeys<Registries[number]>, RegistryComponents<Registries[number]>, RegistryExports<Registries[number]>, RegistryMetadata<Registries[number]>> {
212
+ readonly keys: RegistryKeys<Registries[number]>[];
213
+ readonly components: RegistryComponents<Registries[number]>;
214
+ readonly exports: RegistryExports<Registries[number]>;
215
+ readonly metadata: RegistryMetadata<Registries[number]>;
216
+ constructor(...registries: Registries);
146
217
  }
147
218
  /**
148
219
  * List of default style classes
149
220
  */
150
221
  declare const StyleClassesList: readonly ["header", "header_button", "header_1", "header_2", "header_3", "header_4", "header_5", "header_6", "header_icon", "anchor", "button", "bold", "italic", "span", "striked", "paragraph", "code", "preformatted", "blockquote", "horizontal_line", "image", "list", "unordered_list", "ordered_list", "list_item", "table", "table_head", "table_head_cell", "table_body", "table_row", "table_data", "table_container", "table_action_buttons_details", "table_action_buttons_summary", "table_action_button", "table_action_button_html", "table_action_button_csv", "table_action_button_json", "table_action_button_markdown"];
151
222
  type StyleClasses = (typeof StyleClassesList)[number];
152
- type StyleClassesMap = { [K in StyleClasses] : string };
223
+ type StyleClassesMap = Partial<{ [K in StyleClasses] : string }>;
153
224
  /**
154
225
  * Context which defines styles for the loaded component(s)
155
226
  */
@@ -161,7 +232,7 @@ declare const StyleContext: React.Context<StyleClassesMap | null>;
161
232
  declare function useStyles(): StyleClassesMap;
162
233
  type MDXFromComponentProps = {
163
234
  source: React.ComponentType<MDXProps>;
164
- styles: StyleClassesMap;
235
+ styles: Partial<StyleClassesMap>;
165
236
  elements?: MDXComponents2;
166
237
  fallback?: React.ReactNode;
167
238
  };
@@ -169,4 +240,4 @@ type MDXFromComponentProps = {
169
240
  * Simple way to directly load a component from the Registry
170
241
  */
171
242
  declare function MDXFromComponent({ source: SourceComponent, styles, fallback, elements }: MDXFromComponentProps): JSX;
172
- export { useStyles, generateRegistries, generateElementsFrom, StyleContext, StyleClassesMap, StyleClassesList, StyleClasses, RegistryOptions, RegistryOf, RegistryKey, Registry, MDXFromComponentProps, MDXFromComponent, MDXFile, MDXComponent, HeaderLevels, ExportsRegistry, ExportSingleType, ExportAllType, ElementProps, Element2 as Element, ComponentRegistry, CoalescedRegistry, BaseElements, BaseElementTags };
243
+ export { useStyles, generateRegistry, generateElementsFrom, StyleContext, StyleClassesMap, StyleClassesList, StyleClasses, RegistryOptions, Registry, MDXFromComponentProps, MDXFromComponent, MDXComponent, HeaderLevels, ElementProps, Element2 as Element, CoalescedRegistry, BaseElements, BaseElementTags };
package/dist/index.js CHANGED
@@ -505,57 +505,83 @@ function generateElementsFrom(elements, baseElements = true) {
505
505
  }
506
506
  // src/lib/Registry.ts
507
507
  import { lazy } from "react";
508
- function generateRegistries({
509
- modules,
510
- source,
511
- mountOn,
512
- records
508
+ function generateRegistry({
509
+ modulesGlob,
510
+ metadataGlob,
511
+ root,
512
+ virtual
513
513
  }) {
514
- const components = [];
515
- const exports = [];
516
- for (const [virtual, path] of Object.entries(records)) {
517
- const src = `${source}${path}`;
518
- const loader = modules[src];
519
- if (!loader) {
520
- throw new Error(`No such file exsits as ${src}`);
521
- }
522
- components.push([`${mountOn}${virtual}`, lazy(loader)]);
523
- exports.push([`${mountOn}${virtual}`, loader()]);
514
+ const paths = Object.keys(modulesGlob);
515
+ const keys = [];
516
+ const _components = [];
517
+ const _exports = [];
518
+ const _metadata = [];
519
+ console.log(metadataGlob);
520
+ for (const path of paths) {
521
+ const route = path.replace(root, virtual).replace(".mdx", "");
522
+ const loader = modulesGlob[path];
523
+ keys.push(route);
524
+ _components.push([route, lazy(loader)]);
525
+ _exports.push([route, loader()]);
526
+ const metaLoader = metadataGlob[path.replace(".mdx", ".meta.ts")];
527
+ console.log(typeof metaLoader);
528
+ _metadata.push([route, metaLoader]);
524
529
  }
525
- return [Object.fromEntries(components), Object.fromEntries(exports)];
530
+ return {
531
+ keys,
532
+ components: Object.fromEntries(_components),
533
+ exports: Object.fromEntries(_exports),
534
+ metadata: Object.fromEntries(_metadata)
535
+ };
526
536
  }
527
537
 
528
538
  class AbstractRegistry {
529
- getComponent(key) {
530
- return this.components[key];
539
+ get(_from, key) {
540
+ const value = _from[key];
541
+ if (!value) {
542
+ throw new Error(`Invalid key passed ${key.toString()} to access whatever the fuck we were extractign`);
543
+ }
544
+ return value;
531
545
  }
532
- getComponents() {
533
- return this.components;
546
+ getComponent(key) {
547
+ return this.get(this.components, key);
534
548
  }
535
549
  getExport(key) {
536
- return this.exports[key];
550
+ return this.get(this.exports, key);
537
551
  }
538
- getExports() {
539
- return this.exports;
552
+ getMetadata(key) {
553
+ return this.get(this.metadata, key);
540
554
  }
541
555
  }
542
556
 
543
557
  class Registry extends AbstractRegistry {
558
+ keys;
544
559
  components;
545
560
  exports;
546
- constructor(registryOpts) {
561
+ metadata;
562
+ constructor(opts) {
547
563
  super();
548
- [this.components, this.exports] = generateRegistries(registryOpts);
564
+ const result = generateRegistry(opts);
565
+ this.keys = result.keys;
566
+ this.components = result.components;
567
+ this.exports = result.exports;
568
+ this.metadata = result.metadata;
549
569
  }
550
570
  }
551
571
 
552
572
  class CoalescedRegistry extends AbstractRegistry {
553
- components;
554
- exports;
573
+ keys = [];
574
+ components = {};
575
+ exports = {};
576
+ metadata = {};
555
577
  constructor(...registries) {
556
578
  super();
557
- this.components = Object.assign({}, ...registries.map((r) => r.getComponents()));
558
- this.exports = Object.assign({}, ...registries.map((r) => r.getExports()));
579
+ for (const registry of registries) {
580
+ this.keys.push(...registry.keys);
581
+ Object.assign(this.components, registry.components);
582
+ Object.assign(this.exports, registry.exports);
583
+ Object.assign(this.metadata, registry.metadata);
584
+ }
559
585
  }
560
586
  }
561
587
  // src/components/Loader.tsx
@@ -578,7 +604,7 @@ function MDXFromComponent({
578
604
  }
579
605
  export {
580
606
  useStyles,
581
- generateRegistries,
607
+ generateRegistry,
582
608
  generateElementsFrom,
583
609
  StyleContext,
584
610
  StyleClassesList,
package/package.json CHANGED
@@ -1,11 +1,17 @@
1
1
  {
2
2
  "name": "@d1vij/jassm",
3
+ "version": "0.1.18",
3
4
  "description": "Just another static site maker. Create simple content driven sites using MDX and React along with Typescript safety.",
4
- "version": "0.1.17",
5
- "type": "module",
5
+ "homepage": "https://github.com/d1vij/jassm",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/d1vij/jassm.git"
10
+ },
6
11
  "files": [
7
12
  "dist"
8
13
  ],
14
+ "type": "module",
9
15
  "module": "./dist/index.js",
10
16
  "types": "./dist/index.d.ts",
11
17
  "exports": {
@@ -16,24 +22,18 @@
16
22
  }
17
23
  },
18
24
  "./plugin": {
19
- "import": "./dist/vitePlugin.js",
20
- "types": "./dist/vitePlugin.d.ts"
25
+ "types": "./dist/vitePlugin.d.ts",
26
+ "import": "./dist/vitePlugin.js"
21
27
  },
22
28
  "./package.json": "./package.json"
23
29
  },
24
- "repository": {
25
- "type": "git",
26
- "url": "git+https://github.com/d1vij/jassm.git"
27
- },
28
- "homepage": "https://github.com/d1vij/jassm",
29
- "license": "MIT",
30
30
  "publishConfig": {
31
31
  "access": "public"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "bunup",
35
35
  "dev:ui": "cd test/ui && vite",
36
- "dev": "bunup --watch",
36
+ "dev": "vite",
37
37
  "prepare": "bun simple-git-hooks",
38
38
  "type-check": "tsc --noEmit",
39
39
  "prepack": "bun run build",
@@ -41,8 +41,9 @@
41
41
  "lint": "biome check --fix --unsafe && tsc -b",
42
42
  "format": "biome format --write"
43
43
  },
44
+ "dependencies": {},
44
45
  "devDependencies": {
45
- "@biomejs/biome": "^2.4.4",
46
+ "@biomejs/biome": "^2.4.6",
46
47
  "@types/bun": "^1.3.9",
47
48
  "@types/mdx": "^2.0.13",
48
49
  "@types/react": "^19.2.14",
@@ -57,17 +58,13 @@
57
58
  "react": "^19.2.4",
58
59
  "react-dom": "^19.2.4",
59
60
  "remark-gfm": "^4.0.1",
60
- "typescript": ">=4.5.0",
61
- "vite": "^7.3.1"
61
+ "@d1vij/shit-i-always-use": "^0.1.9"
62
62
  },
63
63
  "peerDependenciesMeta": {
64
64
  "typescript": {
65
- "optional": true
65
+ "optional": false
66
66
  }
67
67
  },
68
- "dependencies": {
69
- "@d1vij/shit-i-always-use": "^0.1.3"
70
- },
71
68
  "simple-git-hooks": {
72
69
  "pre-commit": "bun run lint && bun run type-check"
73
70
  }