@dominikcz/greg 0.9.27

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 (183) hide show
  1. package/README.md +397 -0
  2. package/bin/greg.js +241 -0
  3. package/bin/init.js +351 -0
  4. package/bin/templates/docs/getting-started.md +47 -0
  5. package/bin/templates/docs/index.md +11 -0
  6. package/bin/templates/greg.config.js +39 -0
  7. package/bin/templates/greg.config.ts +38 -0
  8. package/bin/templates/index.html +16 -0
  9. package/bin/templates/src/App.svelte +5 -0
  10. package/bin/templates/src/app.css +20 -0
  11. package/bin/templates/src/main.js +9 -0
  12. package/bin/templates/svelte.config.js +1 -0
  13. package/bin/templates/tsconfig.json +21 -0
  14. package/bin/templates/vite.config.js +23 -0
  15. package/docs/__partials/markdown/examples/basic.md +4 -0
  16. package/docs/__partials/markdown/examples/diff.md +10 -0
  17. package/docs/__partials/markdown/examples/focus.md +5 -0
  18. package/docs/__partials/markdown/examples/language-title.md +3 -0
  19. package/docs/__partials/markdown/examples/line-highlighting.md +5 -0
  20. package/docs/__partials/markdown/examples/line-numbers.md +5 -0
  21. package/docs/__partials/note.md +4 -0
  22. package/docs/guide/__shared-warning.md +4 -0
  23. package/docs/guide/asset-handling.md +88 -0
  24. package/docs/guide/deploying.md +162 -0
  25. package/docs/guide/getting-started.md +334 -0
  26. package/docs/guide/index.md +23 -0
  27. package/docs/guide/localization.md +290 -0
  28. package/docs/guide/markdown/code.md +95 -0
  29. package/docs/guide/markdown/components-and-mermaid.md +43 -0
  30. package/docs/guide/markdown/containers.md +110 -0
  31. package/docs/guide/markdown/header-anchors.md +34 -0
  32. package/docs/guide/markdown/includes.md +84 -0
  33. package/docs/guide/markdown/index.md +20 -0
  34. package/docs/guide/markdown/inline-attributes.md +21 -0
  35. package/docs/guide/markdown/links-and-toc.md +64 -0
  36. package/docs/guide/markdown/math.md +54 -0
  37. package/docs/guide/markdown/syntax-highlighting.md +75 -0
  38. package/docs/guide/routing.md +150 -0
  39. package/docs/guide/using-svelte.md +88 -0
  40. package/docs/guide/versioning.md +281 -0
  41. package/docs/incompatibilities.md +48 -0
  42. package/docs/index.md +43 -0
  43. package/docs/reference/badge.md +100 -0
  44. package/docs/reference/carbon-ads.md +46 -0
  45. package/docs/reference/code-group.md +126 -0
  46. package/docs/reference/home-page.md +232 -0
  47. package/docs/reference/index.md +18 -0
  48. package/docs/reference/markdowndocs.md +275 -0
  49. package/docs/reference/outline.md +79 -0
  50. package/docs/reference/search.md +263 -0
  51. package/docs/reference/steps.md +200 -0
  52. package/docs/reference/team-page.md +189 -0
  53. package/docs/reference/theme.md +150 -0
  54. package/fakeDocsGenerator/generate_docs.js +310 -0
  55. package/package.json +92 -0
  56. package/scripts/build-versions.js +609 -0
  57. package/scripts/generate-static.js +79 -0
  58. package/scripts/render-markdown.js +420 -0
  59. package/src/lib/MarkdownDocs/AiChat.svelte +936 -0
  60. package/src/lib/MarkdownDocs/BackToTop.svelte +68 -0
  61. package/src/lib/MarkdownDocs/Breadcrumb.svelte +68 -0
  62. package/src/lib/MarkdownDocs/DocsNavigation.svelte +149 -0
  63. package/src/lib/MarkdownDocs/DocsSiteHeader.svelte +758 -0
  64. package/src/lib/MarkdownDocs/DocsVersionSwitcher.svelte +103 -0
  65. package/src/lib/MarkdownDocs/MarkdownDocs.svelte +2115 -0
  66. package/src/lib/MarkdownDocs/MarkdownRenderer.svelte +487 -0
  67. package/src/lib/MarkdownDocs/Outline.svelte +238 -0
  68. package/src/lib/MarkdownDocs/PrevNext.svelte +115 -0
  69. package/src/lib/MarkdownDocs/SearchModal.svelte +1241 -0
  70. package/src/lib/MarkdownDocs/TreeView.svelte +32 -0
  71. package/src/lib/MarkdownDocs/TreeViewItem.svelte +219 -0
  72. package/src/lib/MarkdownDocs/VersionOutdatedNotice.svelte +72 -0
  73. package/src/lib/MarkdownDocs/__tests__/codeDirectives.test.js +54 -0
  74. package/src/lib/MarkdownDocs/__tests__/common.test.js +41 -0
  75. package/src/lib/MarkdownDocs/__tests__/docsExamplesLint.test.js +77 -0
  76. package/src/lib/MarkdownDocs/__tests__/fixtures/docs/markdown/__partial-basic.md +3 -0
  77. package/src/lib/MarkdownDocs/__tests__/fixtures/docs/markdown/snippet.js +9 -0
  78. package/src/lib/MarkdownDocs/__tests__/fixtures/includes/part.md +11 -0
  79. package/src/lib/MarkdownDocs/__tests__/fixtures/includes/wrapper.md +5 -0
  80. package/src/lib/MarkdownDocs/__tests__/fixtures/snippets/sample.js +8 -0
  81. package/src/lib/MarkdownDocs/__tests__/fixtures/snippets/sample.md +5 -0
  82. package/src/lib/MarkdownDocs/__tests__/helpers.js +67 -0
  83. package/src/lib/MarkdownDocs/__tests__/localeUtils.test.js +204 -0
  84. package/src/lib/MarkdownDocs/__tests__/markdown.test.js +704 -0
  85. package/src/lib/MarkdownDocs/__tests__/markdownRendererRuntime.test.js +65 -0
  86. package/src/lib/MarkdownDocs/__tests__/searchIndexBuilder.test.js +117 -0
  87. package/src/lib/MarkdownDocs/__tests__/sqliteStore.test.js +202 -0
  88. package/src/lib/MarkdownDocs/__tests__/useRouter.test.js +16 -0
  89. package/src/lib/MarkdownDocs/ai/adapters/customAdapter.js +14 -0
  90. package/src/lib/MarkdownDocs/ai/adapters/customAdapter.ts +43 -0
  91. package/src/lib/MarkdownDocs/ai/adapters/ollamaAdapter.js +81 -0
  92. package/src/lib/MarkdownDocs/ai/adapters/ollamaAdapter.ts +116 -0
  93. package/src/lib/MarkdownDocs/ai/adapters/openaiAdapter.js +92 -0
  94. package/src/lib/MarkdownDocs/ai/adapters/openaiAdapter.ts +137 -0
  95. package/src/lib/MarkdownDocs/ai/aiProvider.ts +31 -0
  96. package/src/lib/MarkdownDocs/ai/characters.js +52 -0
  97. package/src/lib/MarkdownDocs/ai/characters.ts +69 -0
  98. package/src/lib/MarkdownDocs/ai/chunkStore.ts +25 -0
  99. package/src/lib/MarkdownDocs/ai/chunker.js +85 -0
  100. package/src/lib/MarkdownDocs/ai/chunker.ts +135 -0
  101. package/src/lib/MarkdownDocs/ai/docLinker.js +26 -0
  102. package/src/lib/MarkdownDocs/ai/docLinker.ts +36 -0
  103. package/src/lib/MarkdownDocs/ai/promptBuilder.js +33 -0
  104. package/src/lib/MarkdownDocs/ai/promptBuilder.ts +53 -0
  105. package/src/lib/MarkdownDocs/ai/ragPipeline.js +54 -0
  106. package/src/lib/MarkdownDocs/ai/ragPipeline.ts +106 -0
  107. package/src/lib/MarkdownDocs/ai/stores/memoryStore.js +88 -0
  108. package/src/lib/MarkdownDocs/ai/stores/memoryStore.ts +112 -0
  109. package/src/lib/MarkdownDocs/ai/stores/sqliteStore.ts +372 -0
  110. package/src/lib/MarkdownDocs/ai/types.ts +71 -0
  111. package/src/lib/MarkdownDocs/aiServer.js +288 -0
  112. package/src/lib/MarkdownDocs/codeDirectives.js +191 -0
  113. package/src/lib/MarkdownDocs/codeFenceInfo.js +45 -0
  114. package/src/lib/MarkdownDocs/codeGroup.ts +46 -0
  115. package/src/lib/MarkdownDocs/common.ts +47 -0
  116. package/src/lib/MarkdownDocs/docsUtils.js +281 -0
  117. package/src/lib/MarkdownDocs/index.plugins.js +22 -0
  118. package/src/lib/MarkdownDocs/layouts/LayoutDoc.svelte +8 -0
  119. package/src/lib/MarkdownDocs/layouts/LayoutHome.svelte +58 -0
  120. package/src/lib/MarkdownDocs/layouts/LayoutPage.svelte +9 -0
  121. package/src/lib/MarkdownDocs/loadGregConfig.js +82 -0
  122. package/src/lib/MarkdownDocs/localeUtils.ts +682 -0
  123. package/src/lib/MarkdownDocs/markdownRendererRuntime.ts +314 -0
  124. package/src/lib/MarkdownDocs/mermaidThemes.js +319 -0
  125. package/src/lib/MarkdownDocs/navigationUtils.js +22 -0
  126. package/src/lib/MarkdownDocs/rehypeCodeGroup.js +326 -0
  127. package/src/lib/MarkdownDocs/rehypeCodeTitle.js +96 -0
  128. package/src/lib/MarkdownDocs/rehypeToc.js +170 -0
  129. package/src/lib/MarkdownDocs/remarkCodeMeta.js +22 -0
  130. package/src/lib/MarkdownDocs/remarkContainers.js +329 -0
  131. package/src/lib/MarkdownDocs/remarkCustomAnchors.js +42 -0
  132. package/src/lib/MarkdownDocs/remarkEscapeSvelte.js +33 -0
  133. package/src/lib/MarkdownDocs/remarkGlobalComponents.js +65 -0
  134. package/src/lib/MarkdownDocs/remarkImports.js +461 -0
  135. package/src/lib/MarkdownDocs/remarkImportsBrowser.js +349 -0
  136. package/src/lib/MarkdownDocs/remarkInlineAttrs.js +95 -0
  137. package/src/lib/MarkdownDocs/remarkMathToHtml.js +138 -0
  138. package/src/lib/MarkdownDocs/searchIndexBuilder.js +497 -0
  139. package/src/lib/MarkdownDocs/searchServer.js +263 -0
  140. package/src/lib/MarkdownDocs/treeViewTypes.ts +11 -0
  141. package/src/lib/MarkdownDocs/useRouter.svelte.ts +114 -0
  142. package/src/lib/MarkdownDocs/useSplitter.svelte.ts +33 -0
  143. package/src/lib/MarkdownDocs/versioningDefaults.js +20 -0
  144. package/src/lib/MarkdownDocs/vitePluginAiServer.js +204 -0
  145. package/src/lib/MarkdownDocs/vitePluginCopyDocs.js +153 -0
  146. package/src/lib/MarkdownDocs/vitePluginFrontmatter.js +109 -0
  147. package/src/lib/MarkdownDocs/vitePluginGregConfig.js +108 -0
  148. package/src/lib/MarkdownDocs/vitePluginSearchIndex.js +57 -0
  149. package/src/lib/MarkdownDocs/vitePluginSearchServer.js +190 -0
  150. package/src/lib/components/Badge.svelte +59 -0
  151. package/src/lib/components/Button.svelte +138 -0
  152. package/src/lib/components/CarbonAds.svelte +99 -0
  153. package/src/lib/components/CodeGroup.svelte +102 -0
  154. package/src/lib/components/Feature.svelte +209 -0
  155. package/src/lib/components/Features.svelte +123 -0
  156. package/src/lib/components/Hero.svelte +399 -0
  157. package/src/lib/components/Image.svelte +128 -0
  158. package/src/lib/components/Link.svelte +105 -0
  159. package/src/lib/components/SocialLink.svelte +84 -0
  160. package/src/lib/components/SocialLinks.svelte +33 -0
  161. package/src/lib/components/Steps.svelte +143 -0
  162. package/src/lib/components/TeamMember.svelte +273 -0
  163. package/src/lib/components/TeamMembers.svelte +81 -0
  164. package/src/lib/components/TeamPage.svelte +65 -0
  165. package/src/lib/components/TeamPageSection.svelte +108 -0
  166. package/src/lib/components/TeamPageTitle.svelte +89 -0
  167. package/src/lib/components/index.js +24 -0
  168. package/src/lib/portal/context.js +12 -0
  169. package/src/lib/portal/index.js +3 -0
  170. package/src/lib/portal/portal.svelte +14 -0
  171. package/src/lib/portal/slot.svelte +8 -0
  172. package/src/lib/scss/__code.scss +128 -0
  173. package/src/lib/scss/__containers.scss +99 -0
  174. package/src/lib/scss/__markdown.scss +447 -0
  175. package/src/lib/scss/__scrollbar.scss +60 -0
  176. package/src/lib/scss/__steps.scss +100 -0
  177. package/src/lib/scss/__theme.scss +238 -0
  178. package/src/lib/scss/__toc.scss +55 -0
  179. package/src/lib/scss/__utilities.scss +7 -0
  180. package/src/lib/scss/greg.scss +9 -0
  181. package/src/lib/spinner/spinner.svelte +42 -0
  182. package/svelte.config.js +146 -0
  183. package/types/index.d.ts +456 -0
@@ -0,0 +1,204 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import {
3
+ getLocaleEntries,
4
+ getLocaleSwitchItems,
5
+ resolveLocaleForPath,
6
+ } from '../localeUtils';
7
+
8
+ describe('localeUtils', () => {
9
+ const locales = {
10
+ '/': {
11
+ lang: 'en-US',
12
+ title: 'Docs',
13
+ themeConfig: {
14
+ nav: [{ text: 'Guide', link: '/docs/guide' }],
15
+ sidebar: [{ text: 'Guide', auto: '/guide' }],
16
+ },
17
+ },
18
+ '/pl/': {
19
+ lang: 'pl-PL',
20
+ label: 'Polski',
21
+ title: 'Dokumentacja',
22
+ themeConfig: {
23
+ nav: [{ text: 'Przewodnik', link: '/docs/pl/guide' }],
24
+ sidebar: [{ text: 'Przewodnik', auto: '/pl/guide' }],
25
+ lastUpdatedText: 'Zaktualizowano:',
26
+ sidebarMenuLabel: 'Menu',
27
+ skipToContentLabel: 'Przejdz do tresci',
28
+ siteTitle: 'Greg PL',
29
+ logo: { light: '/logo-pl-light.svg', dark: '/logo-pl-dark.svg', alt: 'Greg PL' },
30
+ socialLinks: [{ icon: 'github', link: 'https://github.com/example' }],
31
+ editLink: {
32
+ pattern: 'https://github.com/example/repo/edit/main/docs/:path',
33
+ text: 'Edytuj strone',
34
+ },
35
+ footer: { message: 'Licencja MIT', copyright: 'Copyright' },
36
+ aside: /** @type {'left'} */ ('left'),
37
+ lastUpdated: { text: 'Aktualizacja', formatOptions: { dateStyle: /** @type {'short'} */ ('short') } },
38
+ },
39
+ },
40
+ };
41
+
42
+ const defaults = {
43
+ mainTitle: 'Greg',
44
+ nav: [],
45
+ sidebar: /** @type {'auto'} */ ('auto'),
46
+ outline: /** @type {[number, number]} */ ([2, 3]),
47
+ langMenuLabel: 'Change language',
48
+ returnToTopLabel: 'Back to top',
49
+ darkModeSwitchLabel: 'Appearance',
50
+ lightModeSwitchTitle: 'Switch to light theme',
51
+ darkModeSwitchTitle: 'Switch to dark theme',
52
+ docFooter: { prev: 'Previous', next: 'Next' },
53
+ siteTitle: 'Greg',
54
+ logo: '/logo.svg',
55
+ socialLinks: [],
56
+ aside: true,
57
+ };
58
+
59
+ it('builds locale roots under configured srcDir', () => {
60
+ expect(getLocaleEntries('/docs', locales)).toEqual([
61
+ expect.objectContaining({ key: '/', srcDir: '/docs' }),
62
+ expect.objectContaining({ key: '/pl/', srcDir: '/docs/pl' }),
63
+ ]);
64
+ });
65
+
66
+ it('resolves the most specific locale and returns locale theme overrides', () => {
67
+ const resolved = resolveLocaleForPath('/docs/pl/guide', '/docs', locales, defaults);
68
+ expect(resolved.key).toBe('/pl/');
69
+ expect(resolved.srcDir).toBe('/docs/pl');
70
+ expect(resolved.mainTitle).toBe('Dokumentacja');
71
+ expect(resolved.lastUpdatedText).toBe('Zaktualizowano:');
72
+ expect(resolved.nav).toEqual([{ text: 'Przewodnik', link: '/docs/pl/guide' }]);
73
+ expect(resolved.langMenuLabel).toBe('Zmień język');
74
+ expect(resolved.sidebarMenuLabel).toBe('Menu');
75
+ expect(resolved.skipToContentLabel).toBe('Przejdz do tresci');
76
+ expect(resolved.siteTitle).toBe('Greg PL');
77
+ expect(resolved.logo).toEqual({ light: '/logo-pl-light.svg', dark: '/logo-pl-dark.svg', alt: 'Greg PL' });
78
+ expect(resolved.socialLinks).toEqual([{ icon: 'github', link: 'https://github.com/example' }]);
79
+ expect(resolved.editLink).toEqual({
80
+ pattern: 'https://github.com/example/repo/edit/main/docs/:path',
81
+ text: 'Edytuj strone',
82
+ });
83
+ expect(resolved.footer).toEqual({ message: 'Licencja MIT', copyright: 'Copyright' });
84
+ expect(resolved.aside).toBe('left');
85
+ expect(resolved.lastUpdated).toEqual({ text: 'Aktualizacja', formatOptions: { dateStyle: 'short' } });
86
+ });
87
+
88
+ it('maps the active path to another locale and falls back to locale root when missing', () => {
89
+ const entries = getLocaleEntries('/docs', locales);
90
+ const frontmatters = {
91
+ '/docs/guide/index.md': {},
92
+ '/docs/pl/index.md': {},
93
+ '/docs/pl/guide/index.md': {},
94
+ };
95
+
96
+ const fromPlGuide = getLocaleSwitchItems({
97
+ entries,
98
+ activePath: '/docs/pl/guide',
99
+ activeSrcDir: '/docs/pl',
100
+ activeLocaleKey: '/pl/',
101
+ frontmatters,
102
+ });
103
+ expect(fromPlGuide).toEqual([
104
+ expect.objectContaining({ key: '/', link: '/docs/guide', active: false }),
105
+ expect.objectContaining({ key: '/pl/', link: '/pl/guide', active: true }),
106
+ ]);
107
+
108
+ const fromPlReference = getLocaleSwitchItems({
109
+ entries,
110
+ activePath: '/docs/pl/reference',
111
+ activeSrcDir: '/docs/pl',
112
+ activeLocaleKey: '/pl/',
113
+ frontmatters,
114
+ });
115
+ expect(fromPlReference).toEqual([
116
+ expect.objectContaining({ key: '/', link: '/docs', active: false }),
117
+ expect.objectContaining({ key: '/pl/', link: '/pl', active: true }),
118
+ ]);
119
+ });
120
+
121
+ it('supports disabling relative locale mapping (i18nRouting=false style)', () => {
122
+ const entries = getLocaleEntries('/docs', locales);
123
+ const frontmatters = {
124
+ '/docs/guide/index.md': {},
125
+ '/docs/pl/index.md': {},
126
+ '/docs/pl/guide/index.md': {},
127
+ };
128
+
129
+ const switched = getLocaleSwitchItems({
130
+ entries,
131
+ activePath: '/docs/pl/guide',
132
+ activeSrcDir: '/docs/pl',
133
+ activeLocaleKey: '/pl/',
134
+ frontmatters,
135
+ preservePath: false,
136
+ });
137
+
138
+ expect(switched).toEqual([
139
+ expect.objectContaining({ key: '/', link: '/docs', active: false }),
140
+ expect.objectContaining({ key: '/pl/', link: '/pl', active: true }),
141
+ ]);
142
+ });
143
+
144
+ it('preserves nested path when switching from root locale to /pl locale', () => {
145
+ const entries = getLocaleEntries('/', {
146
+ '/': { label: 'English' },
147
+ '/pl/': { label: 'Polski' },
148
+ });
149
+
150
+ const switched = getLocaleSwitchItems({
151
+ entries,
152
+ activePath: '/guide/versioning',
153
+ activeSrcDir: '/',
154
+ activeLocaleKey: '/',
155
+ frontmatters: {
156
+ '/guide/versioning.md': {},
157
+ '/pl/guide/versioning.md': {},
158
+ },
159
+ preservePath: true,
160
+ });
161
+
162
+ expect(switched).toEqual([
163
+ expect.objectContaining({ key: '/', link: '/guide/versioning', active: true }),
164
+ expect.objectContaining({ key: '/pl/', link: '/pl/guide/versioning', active: false }),
165
+ ]);
166
+ });
167
+
168
+ it('uses locales[].link when provided (internal and external)', () => {
169
+ const entries = getLocaleEntries('/docs', {
170
+ '/': {
171
+ label: 'English',
172
+ link: '/docs/custom-home',
173
+ },
174
+ '/pl/': {
175
+ label: 'Polski',
176
+ link: 'https://example.com/pl/docs',
177
+ },
178
+ });
179
+
180
+ const switched = getLocaleSwitchItems({
181
+ entries,
182
+ activePath: '/docs/guide',
183
+ activeSrcDir: '/docs',
184
+ activeLocaleKey: '/',
185
+ frontmatters: {
186
+ '/docs/guide/index.md': {},
187
+ },
188
+ preservePath: true,
189
+ });
190
+
191
+ expect(switched).toEqual([
192
+ expect.objectContaining({
193
+ key: '/',
194
+ link: '/docs/custom-home',
195
+ active: true,
196
+ }),
197
+ expect.objectContaining({
198
+ key: '/pl/',
199
+ link: 'https://example.com/pl/docs',
200
+ active: false,
201
+ }),
202
+ ]);
203
+ });
204
+ });