@xyd-js/uniform 0.1.0-xyd.8 → 0.1.0-xyd.98

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/dist/index.js CHANGED
@@ -1,21 +1,69 @@
1
+ // src/types.ts
2
+ var DEFINED_DEFINITION_PROPERTY_TYPE = /* @__PURE__ */ ((DEFINED_DEFINITION_PROPERTY_TYPE2) => {
3
+ DEFINED_DEFINITION_PROPERTY_TYPE2["UNION"] = "$$union";
4
+ DEFINED_DEFINITION_PROPERTY_TYPE2["XOR"] = "$$xor";
5
+ DEFINED_DEFINITION_PROPERTY_TYPE2["ARRAY"] = "$$array";
6
+ DEFINED_DEFINITION_PROPERTY_TYPE2["ENUM"] = "$$enum";
7
+ return DEFINED_DEFINITION_PROPERTY_TYPE2;
8
+ })(DEFINED_DEFINITION_PROPERTY_TYPE || {});
9
+ var ReferenceCategory = /* @__PURE__ */ ((ReferenceCategory2) => {
10
+ ReferenceCategory2["COMPONENTS"] = "components";
11
+ ReferenceCategory2["HOOKS"] = "hooks";
12
+ ReferenceCategory2["REST"] = "rest";
13
+ ReferenceCategory2["GRAPHQL"] = "graphql";
14
+ ReferenceCategory2["FUNCTIONS"] = "functions";
15
+ return ReferenceCategory2;
16
+ })(ReferenceCategory || {});
17
+ var ReferenceType = /* @__PURE__ */ ((ReferenceType2) => {
18
+ ReferenceType2["COMPONENT"] = "component";
19
+ ReferenceType2["HOOK"] = "hook";
20
+ ReferenceType2["REST_HTTP_GET"] = "rest_get";
21
+ ReferenceType2["REST_HTTP_POST"] = "rest_post";
22
+ ReferenceType2["REST_HTTP_PUT"] = "rest_put";
23
+ ReferenceType2["REST_HTTP_PATCH"] = "rest_patch";
24
+ ReferenceType2["REST_HTTP_DELETE"] = "rest_delete";
25
+ ReferenceType2["REST_HTTP_OPTIONS"] = "rest_options";
26
+ ReferenceType2["REST_HTTP_HEAD"] = "rest_head";
27
+ ReferenceType2["REST_HTTP_TRACE"] = "rest_trace";
28
+ ReferenceType2["REST_COMPONENT_SCHEMA"] = "rest_component_schema";
29
+ ReferenceType2["GRAPHQL_QUERY"] = "graphql_query";
30
+ ReferenceType2["GRAPHQL_MUTATION"] = "graphql_mutation";
31
+ ReferenceType2["GRAPHQL_SUBSCRIPTION"] = "graphql_subscription";
32
+ ReferenceType2["GRAPHQL_SCALAR"] = "graphql_scalar";
33
+ ReferenceType2["GRAPHQL_OBJECT"] = "graphql_object";
34
+ ReferenceType2["GRAPHQL_INTERFACE"] = "graphql_interface";
35
+ ReferenceType2["GRAPHQL_UNION"] = "graphql_union";
36
+ ReferenceType2["GRAPHQL_ENUM"] = "graphql_enum";
37
+ ReferenceType2["GRAPHQL_INPUT"] = "graphql_input";
38
+ ReferenceType2["FUNCTION_JS"] = "function_js";
39
+ return ReferenceType2;
40
+ })(ReferenceType || {});
41
+
1
42
  // src/index.ts
2
43
  function uniform(references, config) {
3
44
  const response = {
4
45
  references,
5
46
  out: {}
6
47
  };
7
- const finishCallbacks = /* @__PURE__ */ new Set();
8
48
  config.plugins.forEach((plugin) => {
9
- const call = plugin((cb) => {
10
- finishCallbacks.add(cb);
49
+ let defer = void 0;
50
+ const call = plugin({
51
+ references,
52
+ defer: (cb) => {
53
+ if (typeof cb === "function") {
54
+ defer = cb;
55
+ }
56
+ }
57
+ // visit: (pattern, callback) => {
58
+ // }
11
59
  });
12
- references.forEach((ref) => {
13
- call(ref);
60
+ references.map((ref, i) => {
61
+ call(ref, {
62
+ index: i
63
+ });
14
64
  });
15
- });
16
- finishCallbacks.forEach((cb) => {
17
- if (typeof cb === "function") {
18
- const resp = cb();
65
+ if (typeof defer === "function") {
66
+ const resp = defer();
19
67
  if (typeof resp !== "object") {
20
68
  throw new Error(`Invalid callback return type: ${typeof resp}`);
21
69
  }
@@ -23,112 +71,124 @@ function uniform(references, config) {
23
71
  ...response.out,
24
72
  ...resp
25
73
  };
26
- } else {
27
- throw new Error(`Invalid callback type: ${typeof cb}`);
28
74
  }
29
75
  });
30
76
  return response;
31
77
  }
32
78
 
33
- // src/utils.ts
79
+ // src/plugins/pluginJsonView.ts
80
+ function pluginJsonView(options) {
81
+ return function pluginJsonViewInner({
82
+ defer
83
+ }) {
84
+ const jsonViews = [];
85
+ defer(() => ({
86
+ jsonViews
87
+ }));
88
+ return (ref) => {
89
+ const lines = [];
90
+ lines.push("{");
91
+ ref.definitions.forEach((def) => {
92
+ def.properties.forEach((prop, index) => {
93
+ var _a;
94
+ const value = (((_a = prop.examples) == null ? void 0 : _a[0]) || "").replace(/^"|"$|[^a-zA-Z0-9\s\-_.,:/@#=;+()]/g, "");
95
+ const comment = prop.examples && prop.examples.length > 1 ? ` // or "${prop.examples[1].replace(/^"|"$|[^a-zA-Z0-9\s\-_.,:/@#=;+()]/g, "")}"` : "";
96
+ const isLast = index === def.properties.length - 1;
97
+ lines.push(` "${prop.name}": "${value}"${isLast ? "" : ","}${comment}`);
98
+ });
99
+ });
100
+ lines.push("}");
101
+ jsonViews.push(lines.join("\n"));
102
+ };
103
+ };
104
+ }
105
+
106
+ // src/plugins/pluginNavigation.ts
34
107
  import path from "path";
35
- import matter from "gray-matter";
36
- function pluginNavigation(options) {
108
+ var DEFAULT_VIRTUAL_FOLDER = ".xyd/.cache/.content";
109
+ var DEFAULT_GROUP_NAME = "API Reference";
110
+ function pluginNavigation(settings, options) {
37
111
  if (!options.urlPrefix) {
38
112
  throw new Error("urlPrefix is required");
39
113
  }
40
- return function pluginNavigationInner(cb) {
114
+ return function pluginNavigationInner({
115
+ defer
116
+ }) {
41
117
  const pageFrontMatter = {};
42
118
  const groupMaps = {};
43
- cb(() => {
44
- return {
45
- pageFrontMatter,
46
- sidebar: convertGroupMapsToNavigations(groupMaps)
47
- };
48
- });
119
+ defer(() => ({
120
+ pageFrontMatter,
121
+ sidebar: convertGroupMapsToSidebar(settings, groupMaps)
122
+ }));
49
123
  return (ref) => {
50
- var _a;
51
- const content = matter(ref.description || "");
52
- if (content.data) {
53
- const data = content.data;
54
- const pagePath = path.join(options.urlPrefix, ref.canonical);
55
- if (data.title) {
56
- pageFrontMatter[pagePath] = {
57
- title: data.title
124
+ const dataCtx = ref.context;
125
+ const pagePath = path.join(options.urlPrefix, ref.canonical);
126
+ let group = (dataCtx == null ? void 0 : dataCtx.group) || [];
127
+ let title = ref.title;
128
+ if (pageFrontMatter[pagePath]) {
129
+ console.error("(pluginNavigation): pageFrontMatter[pagePath] already exists", pagePath);
130
+ }
131
+ if (!group) {
132
+ group = [options.defaultGroup || DEFAULT_GROUP_NAME];
133
+ }
134
+ pageFrontMatter[pagePath] = {
135
+ title
136
+ };
137
+ if (typeof group === "string") {
138
+ throw new Error("group as string is not supported yet");
139
+ }
140
+ group.reduce((groups, groupName, i) => {
141
+ if (!groups[groupName]) {
142
+ groups[groupName] = {
143
+ __groups: {},
144
+ pages: /* @__PURE__ */ new Set()
58
145
  };
59
146
  }
60
- if (data.group) {
61
- if (typeof ((_a = content == null ? void 0 : content.data) == null ? void 0 : _a.group) === "string") {
62
- throw new Error("group as string is not supported yet");
63
- }
64
- content.data.group.reduce((groups, group, i) => {
65
- if (!groups[group]) {
66
- groups[group] = {
67
- __groups: {},
68
- pages: /* @__PURE__ */ new Set()
69
- };
70
- }
71
- if (i === content.data.group.length - 1) {
72
- groups[group].pages.add(pagePath);
73
- }
74
- return groups[group].__groups;
75
- }, groupMaps);
147
+ if (i === group.length - 1) {
148
+ groups[groupName].pages.add(pagePath);
76
149
  }
77
- ref.description = content.content;
78
- }
150
+ return groups[groupName].__groups;
151
+ }, groupMaps);
79
152
  };
80
153
  };
81
154
  }
82
- function convertGroupMapsToNavigations(groupMaps) {
155
+ function convertGroupMapsToSidebar(settings, groupMaps) {
83
156
  const nav = [];
84
157
  Object.keys(groupMaps).map((groupName) => {
85
158
  const current = groupMaps[groupName];
86
159
  const pages = [];
87
160
  current.pages.forEach((page) => {
88
- pages.push(page);
161
+ var _a, _b;
162
+ if ((_b = (_a = settings == null ? void 0 : settings.engine) == null ? void 0 : _a.uniform) == null ? void 0 : _b.store) {
163
+ pages.push(page);
164
+ return;
165
+ }
166
+ pages.push({
167
+ virtual: path.join(DEFAULT_VIRTUAL_FOLDER, page),
168
+ page
169
+ });
89
170
  });
90
171
  if (Object.keys(current.__groups).length) {
91
172
  const subNav = {
92
173
  group: groupName,
93
- pages: convertGroupMapsToNavigations(current.__groups)
174
+ pages: convertGroupMapsToSidebar(settings, current.__groups)
94
175
  };
95
176
  nav.push(subNav);
96
- } else {
97
- nav.push({
98
- group: groupName,
99
- pages
100
- });
177
+ return;
101
178
  }
179
+ nav.push({
180
+ group: groupName,
181
+ pages
182
+ });
102
183
  });
103
184
  return nav;
104
185
  }
105
-
106
- // src/types.ts
107
- var ReferenceCategory = /* @__PURE__ */ ((ReferenceCategory2) => {
108
- ReferenceCategory2["COMPONENTS"] = "components";
109
- ReferenceCategory2["HOOKS"] = "hooks";
110
- ReferenceCategory2["REST"] = "rest";
111
- ReferenceCategory2["GRAPHQL"] = "graphql";
112
- ReferenceCategory2["FUNCTIONS"] = "functions";
113
- return ReferenceCategory2;
114
- })(ReferenceCategory || {});
115
- var ReferenceType = /* @__PURE__ */ ((ReferenceType2) => {
116
- ReferenceType2["COMPONENT"] = "component";
117
- ReferenceType2["HOOK"] = "hook";
118
- ReferenceType2["REST_HTTP_GET"] = "rest_get";
119
- ReferenceType2["REST_HTTP_POST"] = "rest_post";
120
- ReferenceType2["REST_HTTP_PUT"] = "rest_put";
121
- ReferenceType2["REST_HTTP_PATCH"] = "rest_patch";
122
- ReferenceType2["REST_HTTP_DELETE"] = "rest_delete";
123
- ReferenceType2["GRAPHQL_QUERY"] = "graphql_query";
124
- ReferenceType2["GRAPHQL_MUTATION"] = "graphql_mutation";
125
- ReferenceType2["FUNCTION_JS"] = "function_js";
126
- return ReferenceType2;
127
- })(ReferenceType || {});
128
186
  export {
187
+ DEFINED_DEFINITION_PROPERTY_TYPE,
129
188
  ReferenceCategory,
130
189
  ReferenceType,
131
190
  uniform as default,
191
+ pluginJsonView,
132
192
  pluginNavigation
133
193
  };
134
194
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/types.ts"],"sourcesContent":["// Define the new PluginV type with a callback function that returns another function\nimport {Reference} from \"./types\";\n\n// Define the new PluginV type with a callback function that returns another function\nexport type UniformPlugin<T> = (cb: (cb: () => T) => void) => (ref: Reference) => void;\n\n// Utility type to infer if a type is an array and avoid wrapping it into an array twice\ntype NormalizeArray<T> = T extends Array<infer U> ? U[] : T;\n\n// Infer the return type of the plugin callback properly and normalize array types\ntype PluginResult<T extends UniformPlugin<any>> = T extends UniformPlugin<infer R> ? R : never;\n\n// Merge all plugin return types into a single object and normalize arrays\ntype MergePluginResults<T extends UniformPlugin<any>[]> = {\n [K in keyof UnionToIntersection<PluginResult<T[number]>>]: NormalizeArray<UnionToIntersection<PluginResult<T[number]>>[K]>\n};\n\n// Utility type to handle intersection to an object type\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n// Implement the uniform function\nexport default function uniform<T extends UniformPlugin<any>[]>(\n references: Reference[],\n config: { plugins: T }\n) {\n // Infer the merged result type from all plugins\n type ResultType = MergePluginResults<T>;\n\n // Initialize the response with a type-safe out object\n const response: {\n references: Reference[]\n out: { [K in keyof ResultType]: ResultType[K] }\n } = {\n references,\n out: {} as { [K in keyof ResultType]: ResultType[K] }\n };\n\n\n const finishCallbacks = new Set();\n\n config.plugins.forEach((plugin) => {\n const call = plugin(cb => {\n finishCallbacks.add(cb);\n })\n\n references.forEach((ref) => {\n call(ref)\n });\n })\n\n finishCallbacks.forEach(cb => {\n if (typeof cb === \"function\") {\n const resp = cb()\n if (typeof resp !== \"object\") {\n throw new Error(`Invalid callback return type: ${typeof resp}`)\n }\n\n response.out = {\n ...response.out,\n ...resp\n }\n } else {\n throw new Error(`Invalid callback type: ${typeof cb}`)\n }\n });\n\n return response;\n}\n\n// Example usage\n// const examplePlugin: UniformPlugin<{ value: boolean }> = (cb) => {\n// return (ref: Reference) => {\n// };\n// };\n// function examplePlugin(cb: (cb: () => { value: boolean }) => void) {\n// cb(() => ({\n// value: true,\n// }));\n//\n// return (ref: Reference) => {\n//\n// };\n// }\n// const response = uniform([/* references */], {\n// plugins: [examplePlugin],\n// });\n// response.out\n","import path from 'path';\nimport matter from 'gray-matter';\nimport {Sidebar, FrontMatter, PageFrontMatter} from \"@xyd-js/core\";\n\nimport {Reference} from \"./types\";\nimport uniform from \"./index\";\n\n// interface UniformFrontMatter extends FrontMatter { // TODO: it's concept only\n// scopes?: string\n// }\n\ntype GroupMap = {\n [key: string]: {\n __groups: GroupMap\n pages: Set<string>\n }\n}\n\nexport interface pluginNavigationOptions {\n urlPrefix: string\n}\n\nexport function pluginNavigation(options: pluginNavigationOptions) {\n if (!options.urlPrefix) {\n throw new Error(\"urlPrefix is required\")\n }\n\n return function pluginNavigationInner(cb: (cb: () => {\n pageFrontMatter: PageFrontMatter\n sidebar: Sidebar[]\n }) => void) {\n const pageFrontMatter: PageFrontMatter = {}\n const groupMaps: GroupMap = {}\n\n cb(() => {\n return {\n pageFrontMatter: pageFrontMatter,\n sidebar: convertGroupMapsToNavigations(groupMaps) as Sidebar[]\n }\n })\n\n return (ref: Reference) => {\n const content = matter(ref.description || \"\") // TODO: pluginMatter before?\n\n if (content.data) {\n const data = content.data as FrontMatter\n\n const pagePath = path.join(options.urlPrefix, ref.canonical)\n\n if (data.title) {\n pageFrontMatter[pagePath] = {\n title: data.title,\n }\n }\n\n if (data.group) {\n if (typeof content?.data?.group === \"string\") {\n // TODO: seek nested group (it's not always from 0)\n throw new Error(\"group as string is not supported yet\")\n }\n\n content.data.group.reduce((groups: GroupMap, group: string, i: number) => {\n if (!groups[group]) {\n groups[group] = {\n __groups: {},\n pages: new Set()\n }\n }\n\n if (i === content.data.group.length - 1) {\n groups[group].pages.add(pagePath)\n }\n\n return groups[group].__groups\n }, groupMaps)\n }\n\n // back description to original without frontmatter\n ref.description = content.content\n }\n }\n }\n}\n\n\nfunction convertGroupMapsToNavigations(groupMaps: GroupMap): Sidebar[] {\n const nav: Sidebar[] = []\n\n Object.keys(groupMaps).map((groupName) => {\n const current = groupMaps[groupName]\n\n const pages: string[] | Sidebar[] = []\n\n current.pages.forEach((page: string) => {\n pages.push(page)\n })\n\n if (Object.keys(current.__groups).length) {\n const subNav: Sidebar = {\n group: groupName,\n pages: convertGroupMapsToNavigations(current.__groups)\n }\n\n nav.push(subNav)\n } else {\n nav.push({\n group: groupName,\n pages,\n })\n }\n })\n\n return nav\n}\n\n// example usage:\n// const response = uniform([/* references */], {\n// plugins: [pluginNavigation({\n// urlPrefix: \"/docs\"\n// })],\n// });\n\n\n","// TODO: concept only\nexport enum ReferenceCategory {\n // for React\n COMPONENTS = \"components\",\n HOOKS = \"hooks\",\n // end for React\n\n // for API\n REST = \"rest\",\n GRAPHQL = \"graphql\",\n // end for API\n\n // for code\n FUNCTIONS = \"functions\",\n //\n}\n\n// TODO: concept only\nexport enum ReferenceType {\n // for React\n COMPONENT = \"component\",\n HOOK = \"hook\",\n // end for React\n\n // for API\n REST_HTTP_GET = \"rest_get\",\n REST_HTTP_POST = \"rest_post\",\n REST_HTTP_PUT = \"rest_put\",\n REST_HTTP_PATCH = \"rest_patch\",\n REST_HTTP_DELETE = \"rest_delete\",\n // ---\n GRAPHQL_QUERY = \"graphql_query\",\n GRAPHQL_MUTATION = \"graphql_mutation\",\n // end for API\n\n // for code\n FUNCTION_JS = \"function_js\",\n // end for code\n}\n\nexport interface GraphQLReferenceContext {\n}\n\n// TODO: custom value?\nexport interface OpenAPIReferenceContext {\n method: string;\n\n path: string;\n}\n\nexport type ReferenceContext = GraphQLReferenceContext | OpenAPIReferenceContext;\n\nexport interface ExampleRoot {\n groups: ExampleGroup[];\n}\n\nexport interface ExampleGroup {\n description?: string;\n\n examples: Example[];\n}\n\nexport interface Example {\n description?: string; // TODO: replace with title ?\n\n codeblock: CodeBlock;\n}\n\nexport interface CodeBlock {\n title?: string;\n\n tabs: CodeBlockTab[];\n}\n\nexport interface GraphQLExampleContext {\n schema?: any; // TODO:\n}\n\nexport interface OpenAPIExampleContext {\n status?: number;\n\n content?: string;\n}\n\nexport type ExampleContext = GraphQLExampleContext | OpenAPIExampleContext;\n\nexport interface CodeBlockTab {\n // title of the tab e.g \"JavaScript\"\n title: string;\n\n // code in the tab e.g \"console.log('Hello World')\"\n code: string\n \n // language of the code e.g \"js\"\n language: string;\n\n // context of the generation method e.g openapi or graphql\n context?: ExampleContext;\n}\n\nexport interface Reference {\n title: string;\n description: string;\n canonical: string;\n\n definitions: Definition[]\n examples: ExampleRoot\n\n category?: ReferenceCategory; // TODO: do we need that?\n type?: ReferenceType; // TODO: do we need that?\n context?: ReferenceContext;\n}\n\nexport interface Definition {\n title: string;\n\n properties: DefinitionProperty[];\n\n\n type?: string;\n\n id?: string;\n\n description?: string;\n}\n\nexport interface DefinitionProperty {\n name: string;\n\n type: string;\n\n description: string;\n\n context?: any // TODO: better type\n\n properties?: DefinitionProperty[];\n}"],"mappings":"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","names":["ReferenceCategory","ReferenceType"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/index.ts","../src/plugins/pluginJsonView.ts","../src/plugins/pluginNavigation.ts"],"sourcesContent":["import React from \"react\";\nimport {HighlightedCode} from \"codehike/code\";\n\n// TODO: type, and category also as generic?\nexport interface Reference<\n C = ReferenceContext,\n M extends DefinitionMeta = DefinitionMeta,\n VM extends DefinitionVariantMeta = DefinitionVariantMeta\n> {\n title: string;\n description: string | React.ReactNode;\n canonical: string;\n\n definitions: Definition<M, VM>[] // TODO: in the future from generic?\n examples: ExampleRoot\n\n\n category?: ReferenceCategory; // TODO: do we need that?\n\n type?: ReferenceType; // TODO: do we need that?\n\n context?: C;\n\n /**\n * TODO: !!!! BETTER !!!!\n * @internal\n */\n __UNSAFE_selector?: (selector: string) => any;\n}\n\nexport type DefinitionOpenAPIMeta = Meta<\"contentType\" | \"required\" | \"definitionDescription\">;\nexport type DefinitionTypeDocMeta = Meta<\"type\">;\nexport type DefinitionGraphqlMeta = Meta<\"type\" | \"graphqlName\">;\n\nexport type DefinitionMeta = DefinitionOpenAPIMeta | DefinitionTypeDocMeta | DefinitionGraphqlMeta\n\nexport type SymbolDef = {\n id?: string | string[];\n\n canonical?: string | string[];\n}\n\nexport interface Definition<\n M extends DefinitionMeta = DefinitionMeta,\n VM extends DefinitionVariantMeta = DefinitionVariantMeta\n> {\n title: string;\n\n properties: DefinitionProperty[];\n\n rootProperty?: DefinitionProperty\n\n variants?: DefinitionVariant<VM>[];\n\n description?: string | React.ReactNode;\n\n meta?: M[];\n\n /**\n * @internal\n */\n symbolDef?: SymbolDef;\n\n /**\n * @internal\n */\n id?: string;\n\n /**\n * @internal\n */\n type?: string;\n}\n\nexport type DefinitionVariantOpenAPIMeta = Meta<\"status\" | \"contentType\" | \"definitionDescription\" | \"required\">;\nexport type CommonDefinitionVariantMeta = Meta<\"symbolName\">;\n\nexport type DefinitionVariantMeta = CommonDefinitionVariantMeta | DefinitionVariantOpenAPIMeta\n\nexport interface DefinitionVariant<\n M extends DefinitionVariantMeta = DefinitionVariantMeta\n> {\n title: string;\n\n properties: DefinitionProperty[];\n\n rootProperty?: DefinitionProperty\n\n description?: string | React.ReactNode;\n\n symbolDef?: SymbolDef;\n\n meta?: M[];\n}\n\nexport interface Meta<T = string> {\n name: T;\n\n value?: unknown; // TODO: better type?\n}\n\nexport type DefinitionPropertyMeta = Meta<\"required\" | \"deprecated\" | \"internal\" | \"defaults\" | \"nullable\" | \"example\" | \"examples\" | \"minimum\" | \"maximum\" | \"enum-type\"> // TODO: better solution than enum-type?\n\nexport enum DEFINED_DEFINITION_PROPERTY_TYPE {\n UNION = \"$$union\",\n\n XOR = \"$$xor\",\n\n ARRAY = \"$$array\",\n\n ENUM = \"$$enum\",\n\n // TYPE = \"$$type\", TODO: good idea?\n}\n\nexport interface DefinitionProperty {\n name: string;\n\n type: string | DEFINED_DEFINITION_PROPERTY_TYPE\n\n description: string | React.ReactNode;\n\n // TODO: in the future more advanced examples?\n examples?: string | string[];\n\n symbolDef?: SymbolDef;\n\n meta?: DefinitionPropertyMeta[];\n\n context?: any // TODO: better type\n\n properties?: DefinitionProperty[];\n\n ofProperty?: DefinitionProperty;\n}\n\nexport interface ExampleRoot {\n groups: ExampleGroup[];\n}\n\nexport interface ExampleGroup {\n description?: string;\n\n examples: Example[];\n}\n\nexport interface Example {\n description?: string; // TODO: replace with title ?\n\n codeblock: CodeBlock;\n}\n\nexport interface CodeBlock {\n title?: string;\n\n tabs: CodeBlockTab[];\n}\n\nexport interface CodeBlockTab {\n // title of the tab e.g \"JavaScript\"\n title: string;\n\n // code in the tab e.g \"console.log('Hello World')\"\n code: string\n\n // language of the code e.g \"js\"\n language: string;\n\n // context of the generation method e.g openapi or graphql\n context?: ExampleContext;\n\n // TODO: highlighted code\n highlighted?: HighlightedCode;\n}\n\nexport type ExampleContext = GraphQLExampleContext | OpenAPIExampleContext;\n\n// TODO: concept only\nexport enum ReferenceCategory {\n // for React\n COMPONENTS = \"components\",\n HOOKS = \"hooks\",\n // end for React\n\n // for API\n REST = \"rest\",\n GRAPHQL = \"graphql\",\n // end for API\n\n // for code\n FUNCTIONS = \"functions\",\n //\n}\n\n// TODO: concept only\nexport enum ReferenceType {\n // for React\n COMPONENT = \"component\",\n HOOK = \"hook\",\n // end for React\n\n // for API\n // TODO: better type system for specific api typesl like gql or rest\n REST_HTTP_GET = \"rest_get\",\n REST_HTTP_POST = \"rest_post\",\n REST_HTTP_PUT = \"rest_put\",\n REST_HTTP_PATCH = \"rest_patch\",\n REST_HTTP_DELETE = \"rest_delete\",\n REST_HTTP_OPTIONS = \"rest_options\",\n REST_HTTP_HEAD = \"rest_head\",\n REST_HTTP_TRACE = \"rest_trace\",\n\n REST_COMPONENT_SCHEMA = \"rest_component_schema\",\n // ---\n GRAPHQL_QUERY = \"graphql_query\",\n GRAPHQL_MUTATION = \"graphql_mutation\",\n GRAPHQL_SUBSCRIPTION = \"graphql_subscription\",\n\n GRAPHQL_SCALAR = \"graphql_scalar\",\n GRAPHQL_OBJECT = \"graphql_object\",\n GRAPHQL_INTERFACE = \"graphql_interface\",\n GRAPHQL_UNION = \"graphql_union\",\n GRAPHQL_ENUM = \"graphql_enum\",\n GRAPHQL_INPUT = \"graphql_input\",\n // end for API\n\n // for code\n FUNCTION_JS = \"function_js\",\n // end for code\n}\n\nexport interface BaseReferenceContext {\n group?: string[];\n\n scopes?: string[];\n}\n\nexport interface GraphQLReferenceContext extends BaseReferenceContext {\n /**\n * @internal\n */\n graphqlTypeShort: string;\n\n graphqlName: string;\n}\n\n// TODO: custom value?\nexport interface OpenAPIReferenceContext extends BaseReferenceContext {\n method?: string;\n\n path?: string;\n\n fullPath?: string;\n\n componentSchema?: string\n}\n\nexport type TypeDocReferenceContextMeta = Meta<\"internal\">\n\n// Add TypeDocReferenceContext to the union type\nexport interface TypeDocReferenceContext extends BaseReferenceContext {\n symbolId: string;\n symbolName: string;\n symbolKind: number;\n packageName: string;\n fileName: string;\n fileFullPath: string;\n line: number;\n col: number;\n signatureText: {\n code: string;\n lang: string;\n };\n sourcecode: {\n code: string;\n lang: string;\n };\n category?: string;\n meta?: TypeDocReferenceContextMeta[]\n}\n\nexport type ReferenceContext = GraphQLReferenceContext | OpenAPIReferenceContext | TypeDocReferenceContext\n\nexport interface GraphQLExampleContext {\n schema?: any; // TODO:\n}\n\nexport interface OpenAPIExampleContext {\n status?: number;\n\n content?: string;\n}\n\n\n","// Define the new PluginV type with a callback function that returns another function\nimport {Reference} from \"./types\";\n\nexport * from \"./types\";\n\n// Define the new PluginV type with a callback function that returns another function\nexport type UniformPluginArgs = {\n references: Reference[] | Reference,\n defer: (defer: () => any) => void;\n\n // TODO: maybe in the future\n // visit: (selector: string | \"[method] [path]\", callback: (...args: any[]) => void) => void;\n}\n\n\nexport type UniformPluginRestArgs = {\n index: number;\n}\nexport type UniformPlugin<T> = (args: UniformPluginArgs) => (ref: Reference, restArgs: UniformPluginRestArgs) => void;\n\n// Utility type to infer if a type is an array and avoid wrapping it into an array twice\ntype NormalizeArray<T> = T extends Array<infer U> ? U[] : T;\n\n// Infer the return type of the plugin callback properly and normalize array types\ntype PluginResult<T extends UniformPlugin<any>> = T extends UniformPlugin<infer R> ? R : never;\n\n// Merge all plugin return types into a single object and normalize arrays\ntype MergePluginResults<T extends UniformPlugin<any>[]> = {\n [K in keyof UnionToIntersection<PluginResult<T[number]>>]: NormalizeArray<UnionToIntersection<PluginResult<T[number]>>[K]>\n};\n\n// Utility type to handle intersection to an object type\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n// Implement the uniform function\nexport default function uniform<T extends UniformPlugin<any>[]>(\n references: Reference[],\n config: { plugins: T }\n) {\n // Infer the merged result type from all plugins\n type ResultType = MergePluginResults<T>;\n\n // Initialize the response with a type-safe out object\n const response: {\n references: Reference[]\n out: { [K in keyof ResultType]: ResultType[K] }\n } = {\n references,\n out: {} as { [K in keyof ResultType]: ResultType[K] }\n };\n\n config.plugins.forEach((plugin) => {\n let defer: any = undefined; // fix any\n\n const call = plugin({\n references: references,\n defer: (cb) => {\n if (typeof cb === \"function\") {\n defer = cb\n }\n },\n // visit: (pattern, callback) => {\n // }\n })\n\n references.map((ref, i) => {\n call(ref, {\n index: i,\n })\n });\n\n if (typeof defer === \"function\") {\n const resp = defer()\n if (typeof resp !== \"object\") {\n throw new Error(`Invalid callback return type: ${typeof resp}`)\n }\n\n response.out = {\n ...response.out,\n ...resp\n }\n }\n })\n\n return response;\n}\n\n// Example usage\n// const examplePlugin: UniformPlugin<{ value: boolean }> = (cb) => {\n// return (ref: Reference) => {\n// };\n// };\n// function examplePlugin(defer: (defer: () => { value: boolean }) => void) {\n// defer(() => ({\n// value: true,\n// }));\n//\n// return (ref: Reference) => {\n//\n// };\n// }\n// const response = uniform([/* references */], {\n// plugins: [examplePlugin],\n// });\n// response.out\n","import type { UniformPluginArgs, UniformPlugin } from \"../index\";\nimport { Reference } from \"../types\";\n\nexport interface pluginJsonViewOptions {\n}\n\ntype pluginJsonViewOutput = {\n jsonViews: string;\n}\n\nexport function pluginJsonView(\n options?: pluginJsonViewOptions\n): UniformPlugin<pluginJsonViewOutput> {\n\n return function pluginJsonViewInner({\n defer,\n }: UniformPluginArgs) {\n const jsonViews: string[] = [];\n\n defer(() => ({\n jsonViews\n }))\n\n return (ref: Reference) => {\n // Build the output string manually to ensure exact format\n const lines: string[] = [];\n lines.push('{');\n \n ref.definitions.forEach(def => {\n def.properties.forEach((prop, index) => {\n // Remove any quotes and trailing characters from the value\n const value = (prop.examples?.[0] || '').replace(/^\"|\"$|[^a-zA-Z0-9\\s\\-_.,:/@#=;+()]/g, '');\n const comment = prop.examples && prop.examples.length > 1 \n ? ` // or \"${(prop.examples as string[])[1].replace(/^\"|\"$|[^a-zA-Z0-9\\s\\-_.,:/@#=;+()]/g, '')}\"`\n : '';\n const isLast = index === def.properties.length - 1;\n // Add comma after the value but before the comment\n lines.push(` \"${prop.name}\": \"${value}\"${isLast ? '' : ','}${comment}`);\n });\n });\n \n lines.push('}');\n \n jsonViews.push(lines.join('\\n'));\n }\n }\n}\n\n// example usage:\n// const response = uniform([/* references */], {\n// plugins: [pluginJsonView({\n// \n// })],\n// });\n","import path from 'node:path';\n\nimport type { Sidebar, Metadata, MetadataMap, Settings, PageURL } from \"@xyd-js/core\";\n\nimport type { UniformPluginArgs, UniformPlugin } from \"../index\";\nimport { CodeBlockTab, Example, ExampleGroup, Reference } from \"../types\";\n\nconst DEFAULT_VIRTUAL_FOLDER = \".xyd/.cache/.content\" // TODO: share this + .xyd/.build/.content for build\n\nconst DEFAULT_GROUP_NAME = \"API Reference\" // TODO: configurable\n\ntype GroupMap = {\n [key: string]: {\n __groups: GroupMap\n pages: Set<string>\n }\n}\n\nexport interface pluginNavigationOptions {\n urlPrefix: string\n defaultGroup?: string\n}\n\ntype pluginNavigationOutput = {\n pageFrontMatter: MetadataMap;\n sidebar: Sidebar[];\n}\n\nexport function pluginNavigation(\n settings: Settings,\n options: pluginNavigationOptions\n): UniformPlugin<pluginNavigationOutput> {\n if (!options.urlPrefix) {\n throw new Error(\"urlPrefix is required\")\n }\n\n return function pluginNavigationInner({\n defer,\n }: UniformPluginArgs) {\n const pageFrontMatter: MetadataMap = {}\n const groupMaps: GroupMap = {}\n\n defer(() => ({\n pageFrontMatter,\n sidebar: convertGroupMapsToSidebar(settings, groupMaps) as Sidebar[]\n }))\n\n return (ref: Reference) => {\n const dataCtx = ref.context\n const pagePath = path.join(options.urlPrefix, ref.canonical)\n\n let group = dataCtx?.group || []\n let title = ref.title\n\n if (pageFrontMatter[pagePath]) {\n console.error(\"(pluginNavigation): pageFrontMatter[pagePath] already exists\", pagePath)\n }\n\n if (!group) {\n group = [options.defaultGroup || DEFAULT_GROUP_NAME]\n }\n\n pageFrontMatter[pagePath] = {\n title,\n }\n\n if (typeof group === \"string\") {\n // TODO: seek nested group (it's not always from 0)\n throw new Error(\"group as string is not supported yet\")\n }\n\n group.reduce((groups: GroupMap, groupName: string, i: number) => {\n if (!groups[groupName]) {\n groups[groupName] = {\n __groups: {},\n pages: new Set()\n }\n }\n\n if (i === group.length - 1) {\n groups[groupName].pages.add(pagePath)\n }\n\n return groups[groupName].__groups\n }, groupMaps)\n }\n }\n}\n\nfunction convertGroupMapsToSidebar(settings: Settings, groupMaps: GroupMap): Sidebar[] {\n const nav: Sidebar[] = []\n\n Object.keys(groupMaps).map((groupName) => {\n const current = groupMaps[groupName]\n\n const pages: PageURL[] = []\n\n current.pages.forEach((page: string) => {\n if (settings?.engine?.uniform?.store) {\n pages.push(page)\n return\n }\n pages.push({\n virtual: path.join(DEFAULT_VIRTUAL_FOLDER, page),\n page: page,\n })\n })\n\n if (Object.keys(current.__groups).length) {\n const subNav: Sidebar = {\n group: groupName,\n pages: convertGroupMapsToSidebar(settings, current.__groups)\n }\n\n nav.push(subNav)\n\n return\n }\n\n nav.push({\n group: groupName,\n pages,\n })\n })\n\n return nav\n}\n\n// TODO: in the future xyd settings must be removed cuz uniform will be part of opendocs\n// example usage:\n// const response = uniform([/* references */], {\n// plugins: [pluginNavigation({}, {\n// urlPrefix: \"/docs\"\n// })],\n// });\n"],"mappings":"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","names":["DEFINED_DEFINITION_PROPERTY_TYPE","ReferenceCategory","ReferenceType"]}
package/dist/markdown.cjs CHANGED
@@ -91,12 +91,19 @@ function heading(title, canonical, description, refCategory, refType, refContext
91
91
  ]
92
92
  ));
93
93
  for (const [key, value] of Object.entries(refContext)) {
94
+ if (typeof value === "object") {
95
+ if (value.code) {
96
+ uContext.push(
97
+ (0, import_unist_builder.u)("heading", { depth: uContext[0].depth + 1 }, [(0, import_unist_builder.u)("text", `!${key}`)])
98
+ );
99
+ uContext.push(
100
+ (0, import_unist_builder.u)("code", { lang: value.lang }, value.code)
101
+ );
102
+ continue;
103
+ }
104
+ }
94
105
  uContext.push(
95
- (0, import_unist_builder.u)(
96
- "heading",
97
- { depth: uContext[0].depth + 1 },
98
- [(0, import_unist_builder.u)("text", `!${key} ${value}`)]
99
- )
106
+ (0, import_unist_builder.u)("heading", { depth: uContext[0].depth + 1 }, [(0, import_unist_builder.u)("text", `!${key} ${value.toString()}`)])
100
107
  );
101
108
  }
102
109
  }
@@ -259,7 +266,7 @@ function referenceAST(ref) {
259
266
  const mdHeading = heading(
260
267
  ref.title,
261
268
  ref.canonical,
262
- ref.description,
269
+ typeof ref.description === "string" ? ref.description : "",
263
270
  ref.category,
264
271
  ref.type,
265
272
  ref.context
@@ -1 +1 @@
1
- {"version":3,"sources":["../markdown.ts","../src/markdown/index.ts","../src/markdown/utils.ts"],"sourcesContent":["export * from \"./src/markdown/index\";\n","import {remark} from \"remark\";\nimport remarkStringify from \"remark-stringify\";\n\nimport {Reference} from \"../types\";\n\nimport {definitions, examples, heading, root} from \"./utils\";\n\n// TODO: any\nexport function compile(ast: any) {\n return remark()\n // .use(unlimitedHeadings)\n .use(remarkStringify, {\n bullet: '-',\n fences: true,\n listItemIndent: 'one',\n incrementListMarker: false,\n handlers: {\n heading(node) {\n return `${\"#\".repeat(node.depth)} ${node.children[0].value}`;\n },\n },\n })\n .stringify(root(ast));\n}\n\nexport function referenceAST(ref: Reference) {\n const md = []\n\n const mdHeading = heading(\n ref.title,\n ref.canonical,\n ref.description,\n ref.category,\n ref.type,\n ref.context\n )\n\n md.push(\n mdHeading.title,\n )\n\n if (mdHeading?.description?.length) {\n md.push(...mdHeading.description)\n }\n\n md.push(\n mdHeading.canonical,\n )\n\n if (mdHeading.category) {\n md.push(mdHeading.category)\n }\n\n if (mdHeading.type) {\n md.push(mdHeading.type)\n }\n\n if (mdHeading?.context?.length) {\n md.push(...mdHeading.context)\n }\n\n const mdExamples = examples(ref.examples)\n const mdDefinitions = definitions(ref.definitions)\n md.push(...mdExamples, ...mdDefinitions)\n\n return md;\n}\n","import { fromMarkdown } from \"mdast-util-from-markdown\";\nimport {u} from \"unist-builder\";\n\nimport {\n ExampleRoot,\n Definition,\n ReferenceCategory,\n ReferenceContext,\n ReferenceType,\n DefinitionProperty\n} from \"../types\";\n\n// START_DEPTH_LEVEL is the start depth level for the markdown AST\n// starts from 2 because 1 is reserved for the title\nconst START_DEPTH_LEVEL = 2\n\n// TODO: fix any\nexport function root(ast: any) {\n return u('root', ast);\n}\n\nexport function heading(\n title: string,\n canonical: string,\n description: string,\n refCategory?: ReferenceCategory,\n refType?: ReferenceType,\n refContext?: ReferenceContext\n) {\n const uTitle = u(\n 'heading',\n {depth: START_DEPTH_LEVEL},\n [u('text', `!!references ${title}`)]\n )\n\n const uCanonical = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!canonical ${canonical}`)]\n )\n\n let uDesc = [\n u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!description`),]\n ),\n u('paragraph', [u('text', description)])\n ]\n\n let uRefCategory\n if (refCategory) {\n uRefCategory = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!category ${refCategory}`)]\n )\n }\n\n let uRefType\n if (refType) {\n uRefType = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!type ${refType}`)]\n )\n }\n\n let uContext = []\n\n if (refContext && Object.keys(refContext)) {\n uContext.push(u(\n 'heading',\n {depth: uTitle.depth + 1},\n [\n u('text', `!context`),\n ]\n ))\n\n\n for (const [key, value] of Object.entries(refContext)) {\n uContext.push(u(\n 'heading',\n {depth: uContext[0].depth + 1},\n [u('text', `!${key} ${value}`)]\n )\n )\n }\n }\n\n return {\n title: uTitle,\n canonical: uCanonical,\n description: uDesc,\n category: uRefCategory || null,\n type: uRefType || null,\n context: uContext || null\n }\n}\n\nexport function examples(examples: ExampleRoot) {\n const md = []\n\n const uExampleRoot = u(\n 'heading',\n {depth: START_DEPTH_LEVEL + 1},\n [u('text', `!examples`)]\n )\n md.push(uExampleRoot)\n\n examples.groups.forEach(group => {\n const uExampleGroups = u(\n 'heading',\n {depth: uExampleRoot.depth + 1},\n [u('text', `!!groups`)]\n )\n md.push(uExampleGroups)\n\n const uGroupDescription = u(\n 'heading',\n {depth: uExampleGroups.depth + 1},\n [u('text', `!description ${group.description}`)]\n )\n md.push(uGroupDescription)\n\n group.examples.forEach(example => {\n const uExamples = u(\n 'heading',\n {depth: uExampleGroups.depth + 1},\n [u('text', `!!examples`)]\n )\n md.push(uExamples)\n\n const codeBlock = u(\n 'heading',\n {depth: uExamples.depth + 1},\n [u('text', `!codeblock`)]\n )\n md.push(codeBlock)\n\n const codeBlockTitle = u(\n 'heading',\n {depth: codeBlock.depth + 1},\n [u('text', `!title ${example.codeblock.title}`)]\n )\n md.push(codeBlockTitle)\n\n const tabs = u(\n 'heading',\n {depth: codeBlock.depth + 1},\n [u('text', `!!tabs`)]\n )\n md.push(tabs)\n\n example.codeblock.tabs.forEach(tab => {\n const code = u('code', {\n lang: tab.language,\n meta: `!code ${tab.title}`\n }, tab.code);\n\n md.push(code)\n })\n\n })\n })\n\n return md\n}\n\nexport function definitions(definitions: Definition[]) {\n const md: any[] = []\n\n definitions.forEach(definition => {\n const uDefinition = u(\n 'heading',\n {depth: START_DEPTH_LEVEL + 1},\n [u('text', `!!definitions`)]\n )\n md.push(uDefinition)\n\n md.push(u(\n 'heading',\n {depth: uDefinition.depth + 1},\n [u('text', `!title ${definition.title}`)]\n ))\n\n definition.properties.forEach(prop => {\n properties(\n uDefinition.depth + 1,\n {\n name: prop.name,\n type: prop.type,\n description: prop.description,\n context: prop.context,\n properties: prop.properties // TODO: fix ts\n },\n md,\n )\n })\n })\n\n return md\n}\n\n// TODO: any[]\nexport function properties(\n depth: number,\n props: DefinitionProperty,\n output: any[] = []\n) {\n const paramName = props.name;\n\n const propTitle = `!!properties ${paramName}`; // TODO: check if `!!properties is enough`\n const uPropTitle = u('heading', {depth}, [u('text', propTitle)]);\n const uPropName = u('paragraph', {depth}, [u('text', `!name ${paramName}`)]);\n const uPropType = u('paragraph', {depth}, [u('text', `!type ${props.type}`)]);\n const markdownAst = fromMarkdown(props.description || '');\n const uPropDesc = u(\"paragraph\", { depth }, markdownAst.children);\n const uContext = []\n\n if (props.context && Object.keys(props.context)) {\n uContext.push(u(\n 'heading',\n {depth: depth + 1},\n [\n u('text', `!context`),\n ]\n ))\n\n for (const [key, value] of Object.entries(props.context)) {\n uContext.push(u(\n 'heading',\n {depth: uContext[0].depth + 1},\n [u('text', `!${key} ${value}`)]\n )\n )\n }\n }\n\n output.push(\n uPropTitle,\n uPropName,\n uPropType,\n uPropDesc,\n ...uContext\n );\n\n if (props.properties) {\n const deepDepth = depth + 1\n\n for (const prop of props.properties) {\n properties(deepDepth, prop, output)\n }\n }\n}\n\n\n\n"],"mappings":"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","names":["examples","definitions","remarkStringify"]}
1
+ {"version":3,"sources":["../markdown.ts","../src/markdown/index.ts","../src/markdown/utils.ts"],"sourcesContent":["export * from \"./src/markdown/index\";\n","import {remark} from \"remark\";\nimport remarkStringify from \"remark-stringify\";\n\nimport {Reference} from \"../types\";\n\nimport {definitions, examples, heading, root} from \"./utils\";\n\n// TODO: any\nexport function compile(ast: any) {\n return remark()\n // .use(unlimitedHeadings)\n .use(remarkStringify, {\n bullet: '-',\n fences: true,\n listItemIndent: 'one',\n incrementListMarker: false,\n handlers: {\n heading(node) {\n return `${\"#\".repeat(node.depth)} ${node.children[0].value}`;\n },\n },\n })\n .stringify(root(ast));\n}\n\nexport function referenceAST(ref: Reference) {\n const md = []\n\n const mdHeading = heading(\n ref.title,\n ref.canonical,\n typeof ref.description === \"string\" ? ref.description : \"\",\n ref.category,\n ref.type,\n ref.context\n )\n\n md.push(\n mdHeading.title,\n )\n\n if (mdHeading?.description?.length) {\n md.push(...mdHeading.description)\n }\n\n md.push(\n mdHeading.canonical,\n )\n\n if (mdHeading.category) {\n md.push(mdHeading.category)\n }\n\n if (mdHeading.type) {\n md.push(mdHeading.type)\n }\n\n if (mdHeading?.context?.length) {\n md.push(...mdHeading.context)\n }\n\n const mdExamples = examples(ref.examples)\n const mdDefinitions = definitions(ref.definitions)\n md.push(...mdExamples, ...mdDefinitions)\n\n return md;\n}\n","import { fromMarkdown } from \"mdast-util-from-markdown\";\nimport {u} from \"unist-builder\";\n\nimport {\n ExampleRoot,\n Definition,\n ReferenceCategory,\n ReferenceContext,\n ReferenceType,\n DefinitionProperty\n} from \"../types\";\n\n// START_DEPTH_LEVEL is the start depth level for the markdown AST\n// starts from 2 because 1 is reserved for the title\nconst START_DEPTH_LEVEL = 2\n\n// TODO: fix any\nexport function root(ast: any) {\n return u('root', ast);\n}\n\nexport function heading(\n title: string,\n canonical: string,\n description: string,\n refCategory?: ReferenceCategory,\n refType?: ReferenceType,\n refContext?: ReferenceContext\n) {\n const uTitle = u(\n 'heading',\n {depth: START_DEPTH_LEVEL},\n [u('text', `!!references ${title}`)]\n )\n\n const uCanonical = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!canonical ${canonical}`)]\n )\n\n let uDesc = [\n u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!description`),]\n ),\n u('paragraph', [u('text', description)])\n ]\n\n let uRefCategory\n if (refCategory) {\n uRefCategory = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!category ${refCategory}`)]\n )\n }\n\n let uRefType\n if (refType) {\n uRefType = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!type ${refType}`)]\n )\n }\n\n let uContext = []\n\n if (refContext && Object.keys(refContext)) {\n uContext.push(u(\n 'heading',\n {depth: uTitle.depth + 1},\n [\n u('text', `!context`),\n ]\n ))\n\n\n for (const [key, value] of Object.entries(refContext)) {\n if (typeof value === \"object\") {\n // TODO: support ```<lang> ??\n if (value.code) {\n uContext.push(\n u('heading', {depth: uContext[0].depth + 1}, [u('text', `!${key}`)])\n );\n\n uContext.push(\n u('code', {lang: value.lang}, value.code)\n );\n\n continue;\n }\n }\n\n uContext.push(\n u('heading', {depth: uContext[0].depth + 1}, [u('text', `!${key} ${value.toString()}`)])\n );\n }\n }\n\n return {\n title: uTitle,\n canonical: uCanonical,\n description: uDesc,\n category: uRefCategory || null,\n type: uRefType || null,\n context: uContext || null\n }\n}\n\nexport function examples(examples: ExampleRoot) {\n const md = []\n\n const uExampleRoot = u(\n 'heading',\n {depth: START_DEPTH_LEVEL + 1},\n [u('text', `!examples`)]\n )\n md.push(uExampleRoot)\n\n examples.groups.forEach(group => {\n const uExampleGroups = u(\n 'heading',\n {depth: uExampleRoot.depth + 1},\n [u('text', `!!groups`)]\n )\n md.push(uExampleGroups)\n\n const uGroupDescription = u(\n 'heading',\n {depth: uExampleGroups.depth + 1},\n [u('text', `!description ${group.description}`)]\n )\n md.push(uGroupDescription)\n\n group.examples.forEach(example => {\n const uExamples = u(\n 'heading',\n {depth: uExampleGroups.depth + 1},\n [u('text', `!!examples`)]\n )\n md.push(uExamples)\n\n const codeBlock = u(\n 'heading',\n {depth: uExamples.depth + 1},\n [u('text', `!codeblock`)]\n )\n md.push(codeBlock)\n\n const codeBlockTitle = u(\n 'heading',\n {depth: codeBlock.depth + 1},\n [u('text', `!title ${example.codeblock.title}`)]\n )\n md.push(codeBlockTitle)\n\n const tabs = u(\n 'heading',\n {depth: codeBlock.depth + 1},\n [u('text', `!!tabs`)]\n )\n md.push(tabs)\n\n example.codeblock.tabs.forEach(tab => {\n const code = u('code', {\n lang: tab.language,\n meta: `!code ${tab.title}`\n }, tab.code);\n\n md.push(code)\n })\n\n })\n })\n\n return md\n}\n\nexport function definitions(definitions: Definition[]) {\n const md: any[] = []\n\n definitions.forEach(definition => {\n const uDefinition = u(\n 'heading',\n {depth: START_DEPTH_LEVEL + 1},\n [u('text', `!!definitions`)]\n )\n md.push(uDefinition)\n\n md.push(u(\n 'heading',\n {depth: uDefinition.depth + 1},\n [u('text', `!title ${definition.title}`)]\n ))\n\n definition.properties.forEach(prop => {\n properties(\n uDefinition.depth + 1,\n {\n name: prop.name,\n type: prop.type,\n description: prop.description,\n context: prop.context,\n properties: prop.properties // TODO: fix ts\n },\n md,\n )\n })\n })\n\n return md\n}\n\n// TODO: any[]\nexport function properties(\n depth: number,\n props: DefinitionProperty,\n output: any[] = []\n) {\n const paramName = props.name;\n\n const propTitle = `!!properties ${paramName}`; // TODO: check if `!!properties is enough`\n const uPropTitle = u('heading', {depth}, [u('text', propTitle)]);\n const uPropName = u('paragraph', {depth}, [u('text', `!name ${paramName}`)]);\n const uPropType = u('paragraph', {depth}, [u('text', `!type ${props.type}`)]);\n const markdownAst = fromMarkdown(props.description || '');\n const uPropDesc = u(\"paragraph\", { depth }, markdownAst.children);\n const uContext = []\n\n if (props.context && Object.keys(props.context)) {\n uContext.push(u(\n 'heading',\n {depth: depth + 1},\n [\n u('text', `!context`),\n ]\n ))\n\n for (const [key, value] of Object.entries(props.context)) {\n uContext.push(u(\n 'heading',\n {depth: uContext[0].depth + 1},\n [u('text', `!${key} ${value}`)]\n )\n )\n }\n }\n\n output.push(\n uPropTitle,\n uPropName,\n uPropType,\n uPropDesc,\n ...uContext\n );\n\n if (props.properties) {\n const deepDepth = depth + 1\n\n for (const prop of props.properties) {\n properties(deepDepth, prop, output)\n }\n }\n}\n\n\n\n"],"mappings":"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","names":["examples","definitions","remarkStringify"]}
@@ -1,4 +1,6 @@
1
- import { R as Reference } from './types-CbDJSEtC.cjs';
1
+ import { R as Reference } from './types-BiglsETJ.cjs';
2
+ import 'react';
3
+ import 'codehike/code';
2
4
 
3
5
  declare function compile(ast: any): string;
4
6
  declare function referenceAST(ref: Reference): any[];
@@ -1,4 +1,6 @@
1
- import { R as Reference } from './types-CbDJSEtC.js';
1
+ import { R as Reference } from './types-BiglsETJ.js';
2
+ import 'react';
3
+ import 'codehike/code';
2
4
 
3
5
  declare function compile(ast: any): string;
4
6
  declare function referenceAST(ref: Reference): any[];
package/dist/markdown.js CHANGED
@@ -54,12 +54,19 @@ function heading(title, canonical, description, refCategory, refType, refContext
54
54
  ]
55
55
  ));
56
56
  for (const [key, value] of Object.entries(refContext)) {
57
+ if (typeof value === "object") {
58
+ if (value.code) {
59
+ uContext.push(
60
+ u("heading", { depth: uContext[0].depth + 1 }, [u("text", `!${key}`)])
61
+ );
62
+ uContext.push(
63
+ u("code", { lang: value.lang }, value.code)
64
+ );
65
+ continue;
66
+ }
67
+ }
57
68
  uContext.push(
58
- u(
59
- "heading",
60
- { depth: uContext[0].depth + 1 },
61
- [u("text", `!${key} ${value}`)]
62
- )
69
+ u("heading", { depth: uContext[0].depth + 1 }, [u("text", `!${key} ${value.toString()}`)])
63
70
  );
64
71
  }
65
72
  }
@@ -222,7 +229,7 @@ function referenceAST(ref) {
222
229
  const mdHeading = heading(
223
230
  ref.title,
224
231
  ref.canonical,
225
- ref.description,
232
+ typeof ref.description === "string" ? ref.description : "",
226
233
  ref.category,
227
234
  ref.type,
228
235
  ref.context
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/markdown/index.ts","../src/markdown/utils.ts"],"sourcesContent":["import {remark} from \"remark\";\nimport remarkStringify from \"remark-stringify\";\n\nimport {Reference} from \"../types\";\n\nimport {definitions, examples, heading, root} from \"./utils\";\n\n// TODO: any\nexport function compile(ast: any) {\n return remark()\n // .use(unlimitedHeadings)\n .use(remarkStringify, {\n bullet: '-',\n fences: true,\n listItemIndent: 'one',\n incrementListMarker: false,\n handlers: {\n heading(node) {\n return `${\"#\".repeat(node.depth)} ${node.children[0].value}`;\n },\n },\n })\n .stringify(root(ast));\n}\n\nexport function referenceAST(ref: Reference) {\n const md = []\n\n const mdHeading = heading(\n ref.title,\n ref.canonical,\n ref.description,\n ref.category,\n ref.type,\n ref.context\n )\n\n md.push(\n mdHeading.title,\n )\n\n if (mdHeading?.description?.length) {\n md.push(...mdHeading.description)\n }\n\n md.push(\n mdHeading.canonical,\n )\n\n if (mdHeading.category) {\n md.push(mdHeading.category)\n }\n\n if (mdHeading.type) {\n md.push(mdHeading.type)\n }\n\n if (mdHeading?.context?.length) {\n md.push(...mdHeading.context)\n }\n\n const mdExamples = examples(ref.examples)\n const mdDefinitions = definitions(ref.definitions)\n md.push(...mdExamples, ...mdDefinitions)\n\n return md;\n}\n","import { fromMarkdown } from \"mdast-util-from-markdown\";\nimport {u} from \"unist-builder\";\n\nimport {\n ExampleRoot,\n Definition,\n ReferenceCategory,\n ReferenceContext,\n ReferenceType,\n DefinitionProperty\n} from \"../types\";\n\n// START_DEPTH_LEVEL is the start depth level for the markdown AST\n// starts from 2 because 1 is reserved for the title\nconst START_DEPTH_LEVEL = 2\n\n// TODO: fix any\nexport function root(ast: any) {\n return u('root', ast);\n}\n\nexport function heading(\n title: string,\n canonical: string,\n description: string,\n refCategory?: ReferenceCategory,\n refType?: ReferenceType,\n refContext?: ReferenceContext\n) {\n const uTitle = u(\n 'heading',\n {depth: START_DEPTH_LEVEL},\n [u('text', `!!references ${title}`)]\n )\n\n const uCanonical = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!canonical ${canonical}`)]\n )\n\n let uDesc = [\n u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!description`),]\n ),\n u('paragraph', [u('text', description)])\n ]\n\n let uRefCategory\n if (refCategory) {\n uRefCategory = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!category ${refCategory}`)]\n )\n }\n\n let uRefType\n if (refType) {\n uRefType = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!type ${refType}`)]\n )\n }\n\n let uContext = []\n\n if (refContext && Object.keys(refContext)) {\n uContext.push(u(\n 'heading',\n {depth: uTitle.depth + 1},\n [\n u('text', `!context`),\n ]\n ))\n\n\n for (const [key, value] of Object.entries(refContext)) {\n uContext.push(u(\n 'heading',\n {depth: uContext[0].depth + 1},\n [u('text', `!${key} ${value}`)]\n )\n )\n }\n }\n\n return {\n title: uTitle,\n canonical: uCanonical,\n description: uDesc,\n category: uRefCategory || null,\n type: uRefType || null,\n context: uContext || null\n }\n}\n\nexport function examples(examples: ExampleRoot) {\n const md = []\n\n const uExampleRoot = u(\n 'heading',\n {depth: START_DEPTH_LEVEL + 1},\n [u('text', `!examples`)]\n )\n md.push(uExampleRoot)\n\n examples.groups.forEach(group => {\n const uExampleGroups = u(\n 'heading',\n {depth: uExampleRoot.depth + 1},\n [u('text', `!!groups`)]\n )\n md.push(uExampleGroups)\n\n const uGroupDescription = u(\n 'heading',\n {depth: uExampleGroups.depth + 1},\n [u('text', `!description ${group.description}`)]\n )\n md.push(uGroupDescription)\n\n group.examples.forEach(example => {\n const uExamples = u(\n 'heading',\n {depth: uExampleGroups.depth + 1},\n [u('text', `!!examples`)]\n )\n md.push(uExamples)\n\n const codeBlock = u(\n 'heading',\n {depth: uExamples.depth + 1},\n [u('text', `!codeblock`)]\n )\n md.push(codeBlock)\n\n const codeBlockTitle = u(\n 'heading',\n {depth: codeBlock.depth + 1},\n [u('text', `!title ${example.codeblock.title}`)]\n )\n md.push(codeBlockTitle)\n\n const tabs = u(\n 'heading',\n {depth: codeBlock.depth + 1},\n [u('text', `!!tabs`)]\n )\n md.push(tabs)\n\n example.codeblock.tabs.forEach(tab => {\n const code = u('code', {\n lang: tab.language,\n meta: `!code ${tab.title}`\n }, tab.code);\n\n md.push(code)\n })\n\n })\n })\n\n return md\n}\n\nexport function definitions(definitions: Definition[]) {\n const md: any[] = []\n\n definitions.forEach(definition => {\n const uDefinition = u(\n 'heading',\n {depth: START_DEPTH_LEVEL + 1},\n [u('text', `!!definitions`)]\n )\n md.push(uDefinition)\n\n md.push(u(\n 'heading',\n {depth: uDefinition.depth + 1},\n [u('text', `!title ${definition.title}`)]\n ))\n\n definition.properties.forEach(prop => {\n properties(\n uDefinition.depth + 1,\n {\n name: prop.name,\n type: prop.type,\n description: prop.description,\n context: prop.context,\n properties: prop.properties // TODO: fix ts\n },\n md,\n )\n })\n })\n\n return md\n}\n\n// TODO: any[]\nexport function properties(\n depth: number,\n props: DefinitionProperty,\n output: any[] = []\n) {\n const paramName = props.name;\n\n const propTitle = `!!properties ${paramName}`; // TODO: check if `!!properties is enough`\n const uPropTitle = u('heading', {depth}, [u('text', propTitle)]);\n const uPropName = u('paragraph', {depth}, [u('text', `!name ${paramName}`)]);\n const uPropType = u('paragraph', {depth}, [u('text', `!type ${props.type}`)]);\n const markdownAst = fromMarkdown(props.description || '');\n const uPropDesc = u(\"paragraph\", { depth }, markdownAst.children);\n const uContext = []\n\n if (props.context && Object.keys(props.context)) {\n uContext.push(u(\n 'heading',\n {depth: depth + 1},\n [\n u('text', `!context`),\n ]\n ))\n\n for (const [key, value] of Object.entries(props.context)) {\n uContext.push(u(\n 'heading',\n {depth: uContext[0].depth + 1},\n [u('text', `!${key} ${value}`)]\n )\n )\n }\n }\n\n output.push(\n uPropTitle,\n uPropName,\n uPropType,\n uPropDesc,\n ...uContext\n );\n\n if (props.properties) {\n const deepDepth = depth + 1\n\n for (const prop of props.properties) {\n properties(deepDepth, prop, output)\n }\n }\n}\n\n\n\n"],"mappings":"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","names":["examples","definitions"]}
1
+ {"version":3,"sources":["../src/markdown/index.ts","../src/markdown/utils.ts"],"sourcesContent":["import {remark} from \"remark\";\nimport remarkStringify from \"remark-stringify\";\n\nimport {Reference} from \"../types\";\n\nimport {definitions, examples, heading, root} from \"./utils\";\n\n// TODO: any\nexport function compile(ast: any) {\n return remark()\n // .use(unlimitedHeadings)\n .use(remarkStringify, {\n bullet: '-',\n fences: true,\n listItemIndent: 'one',\n incrementListMarker: false,\n handlers: {\n heading(node) {\n return `${\"#\".repeat(node.depth)} ${node.children[0].value}`;\n },\n },\n })\n .stringify(root(ast));\n}\n\nexport function referenceAST(ref: Reference) {\n const md = []\n\n const mdHeading = heading(\n ref.title,\n ref.canonical,\n typeof ref.description === \"string\" ? ref.description : \"\",\n ref.category,\n ref.type,\n ref.context\n )\n\n md.push(\n mdHeading.title,\n )\n\n if (mdHeading?.description?.length) {\n md.push(...mdHeading.description)\n }\n\n md.push(\n mdHeading.canonical,\n )\n\n if (mdHeading.category) {\n md.push(mdHeading.category)\n }\n\n if (mdHeading.type) {\n md.push(mdHeading.type)\n }\n\n if (mdHeading?.context?.length) {\n md.push(...mdHeading.context)\n }\n\n const mdExamples = examples(ref.examples)\n const mdDefinitions = definitions(ref.definitions)\n md.push(...mdExamples, ...mdDefinitions)\n\n return md;\n}\n","import { fromMarkdown } from \"mdast-util-from-markdown\";\nimport {u} from \"unist-builder\";\n\nimport {\n ExampleRoot,\n Definition,\n ReferenceCategory,\n ReferenceContext,\n ReferenceType,\n DefinitionProperty\n} from \"../types\";\n\n// START_DEPTH_LEVEL is the start depth level for the markdown AST\n// starts from 2 because 1 is reserved for the title\nconst START_DEPTH_LEVEL = 2\n\n// TODO: fix any\nexport function root(ast: any) {\n return u('root', ast);\n}\n\nexport function heading(\n title: string,\n canonical: string,\n description: string,\n refCategory?: ReferenceCategory,\n refType?: ReferenceType,\n refContext?: ReferenceContext\n) {\n const uTitle = u(\n 'heading',\n {depth: START_DEPTH_LEVEL},\n [u('text', `!!references ${title}`)]\n )\n\n const uCanonical = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!canonical ${canonical}`)]\n )\n\n let uDesc = [\n u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!description`),]\n ),\n u('paragraph', [u('text', description)])\n ]\n\n let uRefCategory\n if (refCategory) {\n uRefCategory = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!category ${refCategory}`)]\n )\n }\n\n let uRefType\n if (refType) {\n uRefType = u(\n 'heading',\n {depth: uTitle.depth + 1},\n [u('text', `!type ${refType}`)]\n )\n }\n\n let uContext = []\n\n if (refContext && Object.keys(refContext)) {\n uContext.push(u(\n 'heading',\n {depth: uTitle.depth + 1},\n [\n u('text', `!context`),\n ]\n ))\n\n\n for (const [key, value] of Object.entries(refContext)) {\n if (typeof value === \"object\") {\n // TODO: support ```<lang> ??\n if (value.code) {\n uContext.push(\n u('heading', {depth: uContext[0].depth + 1}, [u('text', `!${key}`)])\n );\n\n uContext.push(\n u('code', {lang: value.lang}, value.code)\n );\n\n continue;\n }\n }\n\n uContext.push(\n u('heading', {depth: uContext[0].depth + 1}, [u('text', `!${key} ${value.toString()}`)])\n );\n }\n }\n\n return {\n title: uTitle,\n canonical: uCanonical,\n description: uDesc,\n category: uRefCategory || null,\n type: uRefType || null,\n context: uContext || null\n }\n}\n\nexport function examples(examples: ExampleRoot) {\n const md = []\n\n const uExampleRoot = u(\n 'heading',\n {depth: START_DEPTH_LEVEL + 1},\n [u('text', `!examples`)]\n )\n md.push(uExampleRoot)\n\n examples.groups.forEach(group => {\n const uExampleGroups = u(\n 'heading',\n {depth: uExampleRoot.depth + 1},\n [u('text', `!!groups`)]\n )\n md.push(uExampleGroups)\n\n const uGroupDescription = u(\n 'heading',\n {depth: uExampleGroups.depth + 1},\n [u('text', `!description ${group.description}`)]\n )\n md.push(uGroupDescription)\n\n group.examples.forEach(example => {\n const uExamples = u(\n 'heading',\n {depth: uExampleGroups.depth + 1},\n [u('text', `!!examples`)]\n )\n md.push(uExamples)\n\n const codeBlock = u(\n 'heading',\n {depth: uExamples.depth + 1},\n [u('text', `!codeblock`)]\n )\n md.push(codeBlock)\n\n const codeBlockTitle = u(\n 'heading',\n {depth: codeBlock.depth + 1},\n [u('text', `!title ${example.codeblock.title}`)]\n )\n md.push(codeBlockTitle)\n\n const tabs = u(\n 'heading',\n {depth: codeBlock.depth + 1},\n [u('text', `!!tabs`)]\n )\n md.push(tabs)\n\n example.codeblock.tabs.forEach(tab => {\n const code = u('code', {\n lang: tab.language,\n meta: `!code ${tab.title}`\n }, tab.code);\n\n md.push(code)\n })\n\n })\n })\n\n return md\n}\n\nexport function definitions(definitions: Definition[]) {\n const md: any[] = []\n\n definitions.forEach(definition => {\n const uDefinition = u(\n 'heading',\n {depth: START_DEPTH_LEVEL + 1},\n [u('text', `!!definitions`)]\n )\n md.push(uDefinition)\n\n md.push(u(\n 'heading',\n {depth: uDefinition.depth + 1},\n [u('text', `!title ${definition.title}`)]\n ))\n\n definition.properties.forEach(prop => {\n properties(\n uDefinition.depth + 1,\n {\n name: prop.name,\n type: prop.type,\n description: prop.description,\n context: prop.context,\n properties: prop.properties // TODO: fix ts\n },\n md,\n )\n })\n })\n\n return md\n}\n\n// TODO: any[]\nexport function properties(\n depth: number,\n props: DefinitionProperty,\n output: any[] = []\n) {\n const paramName = props.name;\n\n const propTitle = `!!properties ${paramName}`; // TODO: check if `!!properties is enough`\n const uPropTitle = u('heading', {depth}, [u('text', propTitle)]);\n const uPropName = u('paragraph', {depth}, [u('text', `!name ${paramName}`)]);\n const uPropType = u('paragraph', {depth}, [u('text', `!type ${props.type}`)]);\n const markdownAst = fromMarkdown(props.description || '');\n const uPropDesc = u(\"paragraph\", { depth }, markdownAst.children);\n const uContext = []\n\n if (props.context && Object.keys(props.context)) {\n uContext.push(u(\n 'heading',\n {depth: depth + 1},\n [\n u('text', `!context`),\n ]\n ))\n\n for (const [key, value] of Object.entries(props.context)) {\n uContext.push(u(\n 'heading',\n {depth: uContext[0].depth + 1},\n [u('text', `!${key} ${value}`)]\n )\n )\n }\n }\n\n output.push(\n uPropTitle,\n uPropName,\n uPropType,\n uPropDesc,\n ...uContext\n );\n\n if (props.properties) {\n const deepDepth = depth + 1\n\n for (const prop of props.properties) {\n properties(deepDepth, prop, output)\n }\n }\n}\n\n\n\n"],"mappings":"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","names":["examples","definitions"]}