@openuji/speculator 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.
Files changed (66) hide show
  1. package/README.md +38 -0
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +17 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/markdown/index.d.ts +5 -0
  7. package/dist/markdown/index.d.ts.map +1 -0
  8. package/dist/markdown/index.js +70 -0
  9. package/dist/markdown/index.js.map +1 -0
  10. package/dist/markdown/plugins/cite.d.ts +3 -0
  11. package/dist/markdown/plugins/cite.d.ts.map +1 -0
  12. package/dist/markdown/plugins/cite.js +36 -0
  13. package/dist/markdown/plugins/cite.js.map +1 -0
  14. package/dist/markdown/plugins/concept.d.ts +3 -0
  15. package/dist/markdown/plugins/concept.d.ts.map +1 -0
  16. package/dist/markdown/plugins/concept.js +30 -0
  17. package/dist/markdown/plugins/concept.js.map +1 -0
  18. package/dist/markdown/plugins/idl.d.ts +3 -0
  19. package/dist/markdown/plugins/idl.d.ts.map +1 -0
  20. package/dist/markdown/plugins/idl.js +28 -0
  21. package/dist/markdown/plugins/idl.js.map +1 -0
  22. package/dist/pipeline/passes/boilerplate.d.ts +3 -0
  23. package/dist/pipeline/passes/boilerplate.d.ts.map +1 -0
  24. package/dist/pipeline/passes/boilerplate.js +59 -0
  25. package/dist/pipeline/passes/boilerplate.js.map +1 -0
  26. package/dist/pipeline/passes/diagnostics.d.ts +3 -0
  27. package/dist/pipeline/passes/diagnostics.d.ts.map +1 -0
  28. package/dist/pipeline/passes/diagnostics.js +43 -0
  29. package/dist/pipeline/passes/diagnostics.js.map +1 -0
  30. package/dist/pipeline/passes/idl.d.ts +4 -0
  31. package/dist/pipeline/passes/idl.d.ts.map +1 -0
  32. package/dist/pipeline/passes/idl.js +188 -0
  33. package/dist/pipeline/passes/idl.js.map +1 -0
  34. package/dist/pipeline/passes/references.d.ts +3 -0
  35. package/dist/pipeline/passes/references.d.ts.map +1 -0
  36. package/dist/pipeline/passes/references.js +99 -0
  37. package/dist/pipeline/passes/references.js.map +1 -0
  38. package/dist/pipeline/passes/toc.d.ts +3 -0
  39. package/dist/pipeline/passes/toc.d.ts.map +1 -0
  40. package/dist/pipeline/passes/toc.js +30 -0
  41. package/dist/pipeline/passes/toc.js.map +1 -0
  42. package/dist/pipeline/passes/xref.d.ts +3 -0
  43. package/dist/pipeline/passes/xref.d.ts.map +1 -0
  44. package/dist/pipeline/passes/xref.js +132 -0
  45. package/dist/pipeline/passes/xref.js.map +1 -0
  46. package/dist/pipeline/postprocess.d.ts +6 -0
  47. package/dist/pipeline/postprocess.d.ts.map +1 -0
  48. package/dist/pipeline/postprocess.js +26 -0
  49. package/dist/pipeline/postprocess.js.map +1 -0
  50. package/dist/speculator.d.ts +40 -0
  51. package/dist/speculator.d.ts.map +1 -0
  52. package/dist/speculator.js +188 -0
  53. package/dist/speculator.js.map +1 -0
  54. package/dist/types.d.ts +146 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +16 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/utils/file-loader.d.ts +18 -0
  59. package/dist/utils/file-loader.d.ts.map +1 -0
  60. package/dist/utils/file-loader.js +100 -0
  61. package/dist/utils/file-loader.js.map +1 -0
  62. package/dist/utils/strip-ident.d.ts +2 -0
  63. package/dist/utils/strip-ident.d.ts.map +1 -0
  64. package/dist/utils/strip-ident.js +15 -0
  65. package/dist/utils/strip-ident.js.map +1 -0
  66. package/package.json +68 -0
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Configuration options for Speculator
3
+ */
4
+ export interface SpeculatorOptions {
5
+ /** Base URL for resolving relative file paths */
6
+ baseUrl?: string;
7
+ /** Custom file loader function */
8
+ fileLoader?: FileLoader;
9
+ /** Markdown parsing options */
10
+ markdownOptions?: MarkdownOptions;
11
+ postprocess?: PostprocessOptions;
12
+ }
13
+ /**
14
+ * File loader function type
15
+ */
16
+ export type FileLoader = (path: string) => Promise<string>;
17
+ /**
18
+ * Markdown parsing options
19
+ */
20
+ export interface MarkdownOptions {
21
+ /** Enable GitHub Flavored Markdown */
22
+ gfm?: boolean;
23
+ /** Enable line breaks */
24
+ breaks?: boolean;
25
+ /** Enable smart typography */
26
+ smartypants?: boolean;
27
+ /** Generate header IDs */
28
+ headerIds?: boolean;
29
+ /** Custom renderer extensions */
30
+ extensions?: unknown[];
31
+ }
32
+ /**
33
+ * Processing result for a single element
34
+ */
35
+ export interface ProcessingResult {
36
+ /** The processed HTML element */
37
+ element: Element;
38
+ /** Any warnings encountered during processing */
39
+ warnings: string[];
40
+ /** Processing statistics */
41
+ stats: ProcessingStats;
42
+ }
43
+ /**
44
+ * Processing statistics
45
+ */
46
+ export interface ProcessingStats {
47
+ /** Number of elements processed */
48
+ elementsProcessed: number;
49
+ /** Number of files included */
50
+ filesIncluded: number;
51
+ /** Number of markdown blocks converted */
52
+ markdownBlocks: number;
53
+ /** Processing time in milliseconds */
54
+ processingTime: number;
55
+ }
56
+ /**
57
+ * Supported data formats
58
+ */
59
+ export type DataFormat = 'markdown' | 'text' | 'html';
60
+ /**
61
+ * Error thrown during rendering
62
+ */
63
+ export declare class SpeculatorError extends Error {
64
+ readonly element?: Element | undefined;
65
+ readonly path?: string | undefined;
66
+ constructor(message: string, element?: Element | undefined, path?: string | undefined);
67
+ }
68
+ export type XrefQuery = {
69
+ term: string;
70
+ context?: string;
71
+ };
72
+ export type XrefResult = {
73
+ href: string;
74
+ text?: string;
75
+ cite?: string;
76
+ };
77
+ export interface XrefResolver {
78
+ resolveBatch(queries: XrefQuery[], specs?: string[]): Promise<Map<string, XrefResult>>;
79
+ }
80
+ export interface XrefOptions {
81
+ specs?: string[];
82
+ resolver?: XrefResolver;
83
+ }
84
+ export interface BiblioEntry {
85
+ id: string;
86
+ title?: string;
87
+ href?: string;
88
+ publisher?: string;
89
+ date?: string;
90
+ status?: string;
91
+ }
92
+ export interface BiblioOptions {
93
+ /** Optional local entries (used in later steps). */
94
+ entries?: Record<string, BiblioEntry>;
95
+ }
96
+ export interface IdlOptions {
97
+ enable?: boolean;
98
+ }
99
+ export interface TocOptions {
100
+ /** CSS selector for the ToC mount point (default: '#toc'). */
101
+ selector?: string;
102
+ enabled?: boolean;
103
+ }
104
+ export interface DiagnosticsOptions {
105
+ /** Suppress link warnings within elements having this class. */
106
+ suppressClass?: string;
107
+ }
108
+ export interface PostprocessOptions {
109
+ xref?: XrefOptions;
110
+ biblio?: BiblioOptions;
111
+ idl?: IdlOptions;
112
+ toc?: TocOptions;
113
+ diagnostics?: DiagnosticsOptions;
114
+ }
115
+ export interface BoilerplateOptions {
116
+ conformance?: boolean | {
117
+ title?: string;
118
+ id?: string;
119
+ content?: string;
120
+ };
121
+ security?: boolean | {
122
+ title?: string;
123
+ id?: string;
124
+ content?: string;
125
+ };
126
+ privacy?: boolean | {
127
+ title?: string;
128
+ id?: string;
129
+ content?: string;
130
+ };
131
+ mount?: 'end' | 'before-references' | 'after-toc';
132
+ }
133
+ export interface DiagnosticsOptions {
134
+ suppressClass?: string;
135
+ /** Enable duplicate-id and missing-href checks (default true). */
136
+ idsAndLinks?: boolean;
137
+ }
138
+ export interface PostprocessOptions {
139
+ xref?: XrefOptions;
140
+ biblio?: BiblioOptions;
141
+ idl?: IdlOptions;
142
+ toc?: TocOptions;
143
+ diagnostics?: DiagnosticsOptions;
144
+ boilerplate?: BoilerplateOptions;
145
+ }
146
+ //# 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,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpeculatorError = void 0;
4
+ /**
5
+ * Error thrown during rendering
6
+ */
7
+ class SpeculatorError extends Error {
8
+ constructor(message, element, path) {
9
+ super(message);
10
+ this.element = element;
11
+ this.path = path;
12
+ this.name = 'SpeculatorError';
13
+ }
14
+ }
15
+ exports.SpeculatorError = SpeculatorError;
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAkEA;;GAEG;AACH,MAAa,eAAgB,SAAQ,KAAK;IACxC,YACE,OAAe,EACC,OAAiB,EACjB,IAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,YAAO,GAAP,OAAO,CAAU;QACjB,SAAI,GAAJ,IAAI,CAAS;QAG7B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AATD,0CASC"}
@@ -0,0 +1,18 @@
1
+ import type { FileLoader } from '../types';
2
+ /**
3
+ * Default file loader for Node.js environments
4
+ */
5
+ export declare const nodeFileLoader: FileLoader;
6
+ /**
7
+ * Default file loader for browser environments
8
+ */
9
+ export declare const browserFileLoader: FileLoader;
10
+ /**
11
+ * Creates a file loader that tries multiple loaders in sequence
12
+ */
13
+ export declare function createFallbackFileLoader(loaders: FileLoader[]): FileLoader;
14
+ /**
15
+ * Auto-detects the appropriate file loader for the current environment
16
+ */
17
+ export declare function getDefaultFileLoader(): FileLoader;
18
+ //# sourceMappingURL=file-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-loader.d.ts","sourceRoot":"","sources":["../../src/utils/file-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,UAO5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,UAU/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,CAe1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,CAQjD"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.browserFileLoader = exports.nodeFileLoader = void 0;
37
+ exports.createFallbackFileLoader = createFallbackFileLoader;
38
+ exports.getDefaultFileLoader = getDefaultFileLoader;
39
+ /**
40
+ * Default file loader for Node.js environments
41
+ */
42
+ const nodeFileLoader = async (path) => {
43
+ const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
44
+ try {
45
+ return await fs.readFile(path, 'utf-8');
46
+ }
47
+ catch (error) {
48
+ throw new Error(`Failed to load file: ${path}. ${error instanceof Error ? error.message : 'Unknown error'}`);
49
+ }
50
+ };
51
+ exports.nodeFileLoader = nodeFileLoader;
52
+ /**
53
+ * Default file loader for browser environments
54
+ */
55
+ const browserFileLoader = async (path) => {
56
+ try {
57
+ const response = await fetch(path);
58
+ if (!response.ok) {
59
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
60
+ }
61
+ return await response.text();
62
+ }
63
+ catch (error) {
64
+ throw new Error(`Failed to fetch file: ${path}. ${error instanceof Error ? error.message : 'Network error'}`);
65
+ }
66
+ };
67
+ exports.browserFileLoader = browserFileLoader;
68
+ /**
69
+ * Creates a file loader that tries multiple loaders in sequence
70
+ */
71
+ function createFallbackFileLoader(loaders) {
72
+ return async (path) => {
73
+ let lastError;
74
+ for (const loader of loaders) {
75
+ try {
76
+ return await loader(path);
77
+ }
78
+ catch (error) {
79
+ lastError = error instanceof Error ? error : new Error(String(error));
80
+ continue;
81
+ }
82
+ }
83
+ throw lastError || new Error(`All file loaders failed for: ${path}`);
84
+ };
85
+ }
86
+ /**
87
+ * Auto-detects the appropriate file loader for the current environment
88
+ */
89
+ function getDefaultFileLoader() {
90
+ if (typeof window !== 'undefined' && typeof fetch !== 'undefined') {
91
+ return exports.browserFileLoader;
92
+ }
93
+ else if (typeof process !== 'undefined' && process.versions?.node) {
94
+ return exports.nodeFileLoader;
95
+ }
96
+ else {
97
+ throw new Error('Unable to detect environment for file loading. Please provide a custom fileLoader.');
98
+ }
99
+ }
100
+ //# sourceMappingURL=file-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-loader.js","sourceRoot":"","sources":["../../src/utils/file-loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,4DAeC;AAKD,oDAQC;AA1DD;;GAEG;AACI,MAAM,cAAc,GAAe,KAAK,EAAE,IAAY,EAAmB,EAAE;IAChF,MAAM,EAAE,GAAG,wDAAa,aAAa,GAAC,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAC/G,CAAC;AACH,CAAC,CAAC;AAPW,QAAA,cAAc,kBAOzB;AAEF;;GAEG;AACI,MAAM,iBAAiB,GAAe,KAAK,EAAE,IAAY,EAAmB,EAAE;IACnF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAChH,CAAC;AACH,CAAC,CAAC;AAVW,QAAA,iBAAiB,qBAU5B;AAEF;;GAEG;AACH,SAAgB,wBAAwB,CAAC,OAAqB;IAC5D,OAAO,KAAK,EAAE,IAAY,EAAmB,EAAE;QAC7C,IAAI,SAA4B,CAAC;QAEjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;QAClE,OAAO,yBAAiB,CAAC;IAC3B,CAAC;SAAM,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACpE,OAAO,sBAAc,CAAC;IACxB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;IACxG,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function stripIndent(content: string): string;
2
+ //# sourceMappingURL=strip-ident.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-ident.d.ts","sourceRoot":"","sources":["../../src/utils/strip-ident.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUnD"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripIndent = stripIndent;
4
+ function stripIndent(content) {
5
+ // Normalize line endings
6
+ const lines = content.replace(/\r\n?/g, '\n').split('\n');
7
+ // Determine smallest indentation from non-empty lines
8
+ const indents = lines
9
+ .filter(line => line.trim().length > 0)
10
+ .map(line => line.match(/^\s*/)?.[0].length || 0);
11
+ const minIndent = indents.length > 0 ? Math.min(...indents) : 0;
12
+ // Remove that indentation from all lines
13
+ return lines.map(line => line.slice(minIndent)).join('\n');
14
+ }
15
+ //# sourceMappingURL=strip-ident.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-ident.js","sourceRoot":"","sources":["../../src/utils/strip-ident.ts"],"names":[],"mappings":";;AAAA,kCAUC;AAVD,SAAgB,WAAW,CAAC,OAAe;IACzC,yBAAyB;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,sDAAsD;IACtD,MAAM,OAAO,GAAG,KAAK;SAClB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SACtC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,yCAAyC;IACzC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC"}
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@openuji/speculator",
3
+ "version": "0.1.0",
4
+ "description": "A TypeScript library for processing ReSpec-like markup with markdown support",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "LICENSE"
11
+ ],
12
+ "keywords": [
13
+ "speculator",
14
+ "respec",
15
+ "markdown",
16
+ "documentation",
17
+ "html",
18
+ "typescript",
19
+ "web-standards",
20
+ "w3c"
21
+ ],
22
+ "author": "Seva Dolgopolov https://linked.in/in/seva_dolgopolov",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/openuji/speculator.git"
27
+ },
28
+ "bugs": {
29
+ "url": "https://github.com/openuji/speculator/issues"
30
+ },
31
+ "homepage": "https://github.com/openuji/speculator#readme",
32
+ "devDependencies": {
33
+ "@jest/globals": "^30.0.5",
34
+ "@types/jest": "^29.5.14",
35
+ "@types/markdown-it": "^14.1.2",
36
+ "@types/node": "^20.9.0",
37
+ "@types/webidl2": "^24.4.3",
38
+ "@typescript-eslint/eslint-plugin": "^6.11.0",
39
+ "@typescript-eslint/parser": "^6.11.0",
40
+ "concurrently": "^8.2.2",
41
+ "eslint": "^8.53.0",
42
+ "jest": "^29.7.0",
43
+ "jest-environment-jsdom": "^30.0.5",
44
+ "jsdom": "^22.1.0",
45
+ "ts-jest": "^29.1.1",
46
+ "typescript": "^5.2.2"
47
+ },
48
+ "peerDependencies": {
49
+ "typescript": ">=5.0.0"
50
+ },
51
+ "engines": {
52
+ "node": ">=20.0.0"
53
+ },
54
+ "dependencies": {
55
+ "markdown-it": "^14.1.0",
56
+ "webidl2": "^24.5.0"
57
+ },
58
+ "scripts": {
59
+ "build": "tsc",
60
+ "build:watch": "tsc --watch",
61
+ "test": "jest",
62
+ "test:watch": "jest --watch",
63
+ "test:coverage": "jest --coverage",
64
+ "lint": "eslint src/**/*.ts",
65
+ "lint:fix": "eslint src/**/*.ts --fix",
66
+ "dev": "concurrently \"npm run build:watch\" \"npm run test:watch\""
67
+ }
68
+ }