@poveste/shared 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 (59) hide show
  1. package/LICENSE +22 -0
  2. package/dist/codegen/const.d.ts +2 -0
  3. package/dist/codegen/const.d.ts.map +1 -0
  4. package/dist/codegen/const.js +17 -0
  5. package/dist/codegen/index.d.ts +4 -0
  6. package/dist/codegen/index.d.ts.map +1 -0
  7. package/dist/codegen/index.js +3 -0
  8. package/dist/codegen/serialize-js.d.ts +2 -0
  9. package/dist/codegen/serialize-js.d.ts.map +1 -0
  10. package/dist/codegen/serialize-js.js +126 -0
  11. package/dist/codegen/util.d.ts +11 -0
  12. package/dist/codegen/util.d.ts.map +1 -0
  13. package/dist/codegen/util.js +69 -0
  14. package/dist/index.d.ts +6 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +5 -0
  17. package/dist/state.d.ts +4 -0
  18. package/dist/state.d.ts.map +1 -0
  19. package/dist/state.js +40 -0
  20. package/dist/story.d.ts +2 -0
  21. package/dist/story.d.ts.map +1 -0
  22. package/dist/story.js +10 -0
  23. package/dist/type-utils.d.ts +2 -0
  24. package/dist/type-utils.d.ts.map +1 -0
  25. package/dist/type-utils.js +1 -0
  26. package/dist/types/command.d.ts +36 -0
  27. package/dist/types/command.d.ts.map +1 -0
  28. package/dist/types/command.js +1 -0
  29. package/dist/types/config.d.ts +242 -0
  30. package/dist/types/config.d.ts.map +1 -0
  31. package/dist/types/config.js +1 -0
  32. package/dist/types/index.d.ts +6 -0
  33. package/dist/types/index.d.ts.map +1 -0
  34. package/dist/types/index.js +5 -0
  35. package/dist/types/plugin.d.ts +117 -0
  36. package/dist/types/plugin.d.ts.map +1 -0
  37. package/dist/types/plugin.js +1 -0
  38. package/dist/types/prompt.d.ts +20 -0
  39. package/dist/types/prompt.d.ts.map +1 -0
  40. package/dist/types/prompt.js +1 -0
  41. package/dist/types/story.d.ts +189 -0
  42. package/dist/types/story.d.ts.map +1 -0
  43. package/dist/types/story.js +1 -0
  44. package/package.json +46 -0
  45. package/src/codegen/const.ts +17 -0
  46. package/src/codegen/index.ts +3 -0
  47. package/src/codegen/serialize-js.ts +143 -0
  48. package/src/codegen/util.ts +77 -0
  49. package/src/index.ts +5 -0
  50. package/src/state.ts +42 -0
  51. package/src/story.ts +10 -0
  52. package/src/type-utils.ts +1 -0
  53. package/src/types/command.ts +38 -0
  54. package/src/types/config.ts +252 -0
  55. package/src/types/index.ts +5 -0
  56. package/src/types/plugin.ts +135 -0
  57. package/src/types/prompt.ts +22 -0
  58. package/src/types/story.ts +204 -0
  59. package/tsconfig.json +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EACV,UAAU,IAAI,UAAU,EACxB,SAAS,IAAI,aAAa,EAC3B,MAAM,MAAM,CAAA;AACb,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,CAAA;AACnD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;AACpG,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAA;CAC5C;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,CAAA;AAE1C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;OAEG;IACH,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB;;OAEG;IACH,YAAY,EAAE,mBAAmB,EAAE,CAAA;IACnC;;OAEG;IACH,IAAI,EAAE;QACJ;;;;WAIG;QACH,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,cAAc,KAAK,MAAM,EAAE,CAAC,CAAA;QAC9D,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,CAAA;QAClD,MAAM,CAAC,EAAE,eAAe,EAAE,CAAA;KAC3B,CAAA;IACD;;OAEG;IACH,KAAK,EAAE;QACL;;WAEG;QACH,KAAK,CAAC,EAAE,MAAM,CAAA;QACd;;;;WAIG;QACH,IAAI,CAAC,EAAE;YACL;;eAEG;YACH,MAAM,CAAC,EAAE,MAAM,CAAA;YACf;;eAEG;YACH,KAAK,CAAC,EAAE,MAAM,CAAA;YACd;;eAEG;YACH,IAAI,CAAC,EAAE,MAAM,CAAA;SACd,CAAA;QACD;;;;WAIG;QACH,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB;;;;;;WAMG;QACH,MAAM,CAAC,EAAE;aACN,GAAG,IAAI,kBAAkB,CAAC,CAAC,EAAE,GAAG,SAAS,MAAM,GAAG;iBAChD,GAAG,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM;aAChC,GAAG;iBACD,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM;aAC5B;SACF,CAAA;QACD;;WAEG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB;;WAEG;QACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;QAC9C;;WAEG;QACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;QAC/B;;WAEG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG;QACnB;;WAEG;QACH,OAAO,EAAE,MAAM,CAAA;KAChB,GAAG;QACF;;WAEG;QACH,MAAM,EAAE,MAAM,CAAA;KACf,GAAG;QACF;;WAEG;QACH,OAAO,EAAE,MAAM,CAAA;QACf;;WAEG;QACH,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACtC;;OAEG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACtC;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAA;IAC5E;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/D;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC/B;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,KAAK,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAA;IAChH;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACxC;;OAEG;IACH,qBAAqB,CAAC,EAAE;QACtB;;;;;WAKG;QACH,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;QACd;;;;;;WAMG;QACH,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;KACf,CAAA;IACD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE;QACN;;;WAGG;QACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAC9C,CAAA;CACF;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,KAAK,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export * from './command.js';
2
+ export * from './config.js';
3
+ export * from './plugin.js';
4
+ export * from './prompt.js';
5
+ export * from './story.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './command.js';
2
+ export * from './config.js';
3
+ export * from './plugin.js';
4
+ export * from './prompt.js';
5
+ export * from './story.js';
@@ -0,0 +1,117 @@
1
+ import type chokidar from 'chokidar';
2
+ import type fs from 'fs-extra';
3
+ import type path from 'pathe';
4
+ import type pc from 'picocolors';
5
+ import type { InlineConfig as ViteInlineConfig, Plugin as VitePlugin } from 'vite';
6
+ import type { Awaitable } from '../type-utils.js';
7
+ import type { PluginCommand } from './command.js';
8
+ import type { ConfigMode, PovesteConfig } from './config.js';
9
+ import type { ServerStory, ServerStoryFile, ServerVariant } from './story.js';
10
+ export interface SupportPlugin {
11
+ id: string;
12
+ moduleName: string;
13
+ setupFn: string | string[];
14
+ importStoriesPrepend?: string;
15
+ importStoryComponent: (file: ServerStoryFile, index: number) => string;
16
+ }
17
+ export interface FinalSupportPlugin extends SupportPlugin {
18
+ }
19
+ export interface ModuleLoader {
20
+ clearCache: () => void;
21
+ loadModule: (file: string) => Promise<any>;
22
+ destroy: () => void;
23
+ }
24
+ export interface PluginApiBase {
25
+ colors: typeof pc;
26
+ path: typeof path;
27
+ fs: typeof fs;
28
+ moduleLoader: ModuleLoader;
29
+ readonly pluginTempDir: string;
30
+ log: (...msg: any[]) => void;
31
+ warn: (...msg: any[]) => void;
32
+ error: (...msg: any[]) => void;
33
+ getStories: () => ServerStory[];
34
+ addStoryFile: (file: string) => void;
35
+ getConfig: () => PovesteConfig;
36
+ }
37
+ export interface PluginApiDev extends PluginApiBase {
38
+ watcher: typeof chokidar;
39
+ }
40
+ export type ChangeViteConfigCallback = (config: ViteInlineConfig) => Awaitable<void>;
41
+ export type BuildEndCallback = () => Awaitable<void>;
42
+ export type PreviewStoryCallback = (payload: {
43
+ file: string;
44
+ story: ServerStory;
45
+ variant: ServerVariant;
46
+ url: string;
47
+ }) => Awaitable<void>;
48
+ export interface PluginApiBuild extends PluginApiBase {
49
+ changeViteConfigCallbacks: ChangeViteConfigCallback[];
50
+ buildEndCallbacks: BuildEndCallback[];
51
+ previewStoryCallbacks: PreviewStoryCallback[];
52
+ changeViteConfig: (cb: ChangeViteConfigCallback) => void;
53
+ onBuildEnd: (cb: BuildEndCallback) => void;
54
+ onPreviewStory: (cb: PreviewStoryCallback) => void;
55
+ }
56
+ export interface PluginApiDevEvent extends PluginApiBase {
57
+ event: string;
58
+ payload: any;
59
+ }
60
+ export interface Plugin {
61
+ /**
62
+ * Name of the plugin
63
+ */
64
+ name: string;
65
+ /**
66
+ * Modify histoire default config. The hook can either mutate the passed config or
67
+ * return a partial config object that will be deeply merged into the existing
68
+ * config. User config will have higher priority than default config.
69
+ *
70
+ * Note: User plugins are resolved before running this hook so injecting other
71
+ * plugins inside the `config` hook will have no effect.
72
+ */
73
+ defaultConfig?: (defaultConfig: PovesteConfig, mode: ConfigMode) => Partial<PovesteConfig> | null | void | Promise<Partial<PovesteConfig> | null | void>;
74
+ /**
75
+ * Modify histoire config. The hook can either mutate the passed config or
76
+ * return a partial config object that will be deeply merged into the existing
77
+ * config.
78
+ *
79
+ * Note: User plugins are resolved before running this hook so injecting other
80
+ * plugins inside the `config` hook will have no effect.
81
+ */
82
+ config?: (config: PovesteConfig, mode: ConfigMode) => Partial<PovesteConfig> | null | void | Promise<Partial<PovesteConfig> | null | void>;
83
+ /**
84
+ * Use this hook to read and store the final resolved histoire config.
85
+ */
86
+ configResolved?: (config: PovesteConfig) => Awaitable<void>;
87
+ /**
88
+ * Use this hook to do processing during development. The `onCleanup` hook
89
+ * should handle cleanup tasks when development server is closed.
90
+ */
91
+ onDev?: (api: PluginApiDev, onCleanup: (cb: () => Awaitable<void>) => void) => Awaitable<void>;
92
+ /**
93
+ * Use this hook to do processing during production build.
94
+ */
95
+ onBuild?: (api: PluginApiBuild) => Awaitable<void>;
96
+ /**
97
+ * Use this hook to do processing when preview is started.
98
+ */
99
+ onPreview?: () => Awaitable<void>;
100
+ /**
101
+ * This plugin exposes a support plugin (example: Vue, Svelte, etc.)
102
+ */
103
+ supportPlugin?: SupportPlugin;
104
+ /**
105
+ * This plugin exposes commands that can be executed from the search bar in development mode.
106
+ */
107
+ commands?: PluginCommand[];
108
+ /**
109
+ * Handle a custom event from the client in development mode.
110
+ */
111
+ onDevEvent?: (api: PluginApiDevEvent) => Awaitable<any>;
112
+ /**
113
+ * Use this hook to manipulate Vite plugins before they are passed to Vite.
114
+ */
115
+ vitePlugins?: (plugins: VitePlugin[]) => Awaitable<void>;
116
+ }
117
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/types/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ import type { Awaitable } from '../type-utils.js';
2
+ export interface PromptBase<TValue> {
3
+ field: string;
4
+ label: string;
5
+ required?: boolean;
6
+ defaultValue?: TValue | ((answers: Record<string, any>) => TValue);
7
+ }
8
+ export interface TextPrompt extends PromptBase<string> {
9
+ type: 'text';
10
+ }
11
+ export type SelectPromptOption = string | {
12
+ value: string;
13
+ label: string;
14
+ };
15
+ export interface SelectPrompt extends PromptBase<string> {
16
+ type: 'select';
17
+ options: SelectPromptOption[] | ((search: string, answers: Record<string, any>) => Awaitable<SelectPromptOption[]>);
18
+ }
19
+ export type Prompt<TValue = any> = TextPrompt | SelectPrompt;
20
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/types/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,WAAW,UAAU,CAAC,MAAM;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU,CAAC,MAAM,CAAC;IACpD,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1E,MAAM,WAAW,YAAa,SAAQ,UAAU,CAAC,MAAM,CAAC;IACtD,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAA;CACpH;AAED,MAAM,MAAM,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,UAAU,GACzC,YAAY,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,189 @@
1
+ export interface StoryFile {
2
+ id: string;
3
+ supportPluginId: string;
4
+ component: any;
5
+ story: Story;
6
+ path: string[];
7
+ filePath: string;
8
+ docsFilePath?: string;
9
+ source: () => Promise<{
10
+ default: string;
11
+ }>;
12
+ }
13
+ export type StoryLayout = {
14
+ type: 'single';
15
+ iframe?: boolean;
16
+ } | {
17
+ type: 'grid';
18
+ width?: number | string;
19
+ };
20
+ export interface CommonProps {
21
+ id?: string;
22
+ title?: string;
23
+ icon?: string;
24
+ iconColor?: string;
25
+ }
26
+ export interface InheritedProps {
27
+ setupApp?: (payload: any) => unknown;
28
+ source?: string;
29
+ responsiveDisabled?: boolean;
30
+ autoPropsDisabled?: boolean;
31
+ }
32
+ export interface VariantProps extends CommonProps, InheritedProps {
33
+ }
34
+ export interface StoryProps extends CommonProps, InheritedProps {
35
+ group?: string;
36
+ layout?: StoryLayout;
37
+ docsOnly?: boolean;
38
+ }
39
+ export interface CommonMeta {
40
+ }
41
+ export interface StoryMeta extends CommonMeta {
42
+ }
43
+ export interface Story {
44
+ id: string;
45
+ title: string;
46
+ group?: string;
47
+ variants: Variant[];
48
+ layout?: StoryLayout;
49
+ icon?: string;
50
+ iconColor?: string;
51
+ docsOnly?: boolean;
52
+ file?: StoryFile;
53
+ lastSelectedVariant?: Variant;
54
+ slots?: () => any;
55
+ meta?: StoryMeta;
56
+ }
57
+ export interface VariantMeta extends CommonMeta {
58
+ }
59
+ export interface Variant {
60
+ id: string;
61
+ title: string;
62
+ icon?: string;
63
+ iconColor?: string;
64
+ setupApp?: (payload: any) => unknown;
65
+ slots?: () => {
66
+ default: any;
67
+ controls: any;
68
+ source: any;
69
+ };
70
+ state: any;
71
+ source?: string;
72
+ responsiveDisabled?: boolean;
73
+ autoPropsDisabled?: boolean;
74
+ configReady?: boolean;
75
+ previewReady?: boolean;
76
+ meta?: VariantMeta;
77
+ }
78
+ export interface PropDefinition {
79
+ name: string;
80
+ types?: string[];
81
+ required?: boolean;
82
+ default?: any;
83
+ }
84
+ export interface AutoPropComponentDefinition {
85
+ name: string;
86
+ index: number;
87
+ props: PropDefinition[];
88
+ }
89
+ export interface ServerStoryFile {
90
+ id: string;
91
+ /**
92
+ * Absolute path
93
+ */
94
+ path: string;
95
+ /**
96
+ * Relative path
97
+ */
98
+ relativePath: string;
99
+ /**
100
+ * File name without extension
101
+ */
102
+ fileName: string;
103
+ /**
104
+ * Support plugin (Vue, Svelte, etc.)
105
+ */
106
+ supportPluginId: string;
107
+ /**
108
+ * Generated path for tree UI
109
+ */
110
+ treePath?: string[];
111
+ /**
112
+ * Use the module id in imports to allow HMR
113
+ */
114
+ moduleId: string;
115
+ /**
116
+ * Resolved story data from story file execution
117
+ */
118
+ story?: ServerStory;
119
+ /**
120
+ * Data sent to user tree config functions
121
+ */
122
+ treeFile?: ServerTreeFile;
123
+ /**
124
+ * Is virtual module
125
+ */
126
+ virtual?: boolean;
127
+ /**
128
+ * Virtual module code
129
+ */
130
+ moduleCode?: string;
131
+ /**
132
+ * Related markdown docs
133
+ */
134
+ markdownFile?: ServerMarkdownFile;
135
+ }
136
+ export interface ServerMarkdownFile {
137
+ id: string;
138
+ relativePath: string;
139
+ absolutePath: string;
140
+ isRelatedToStory: boolean;
141
+ frontmatter?: any;
142
+ html?: string;
143
+ content?: string;
144
+ storyFile?: ServerStoryFile;
145
+ }
146
+ export interface ServerStory {
147
+ id: string;
148
+ title: string;
149
+ group?: string;
150
+ variants: ServerVariant[];
151
+ layout?: StoryLayout;
152
+ icon?: string;
153
+ iconColor?: string;
154
+ docsOnly?: boolean;
155
+ docsText?: string;
156
+ meta?: StoryMeta;
157
+ }
158
+ export interface ServerVariant {
159
+ id: string;
160
+ title: string;
161
+ icon?: string;
162
+ iconColor?: string;
163
+ meta?: VariantMeta;
164
+ }
165
+ export interface ServerTreeFile {
166
+ title: string;
167
+ path: string;
168
+ }
169
+ export interface ServerTreeLeaf {
170
+ title: string;
171
+ index: number;
172
+ }
173
+ export interface ServerTreeFolder {
174
+ title: string;
175
+ children: (ServerTreeFolder | ServerTreeLeaf)[];
176
+ }
177
+ export interface ServerTreeGroup {
178
+ group: true;
179
+ id: string;
180
+ title: string;
181
+ children: (ServerTreeFolder | ServerTreeLeaf)[];
182
+ }
183
+ export type ServerTree = (ServerTreeGroup | ServerTreeFolder | ServerTreeLeaf)[];
184
+ export interface ServerRunPayload {
185
+ file: ServerStoryFile;
186
+ storyData: ServerStory[];
187
+ el: HTMLElement;
188
+ }
189
+ //# sourceMappingURL=story.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story.d.ts","sourceRoot":"","sources":["../../src/types/story.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@poveste/shared",
3
+ "type": "module",
4
+ "version": "0.1.0",
5
+ "description": "Shared utilities for Poveste",
6
+ "author": {
7
+ "name": "Sorin Gitlan"
8
+ },
9
+ "license": "MIT",
10
+ "repository": {
11
+ "url": "https://github.com/poveste-dev/poveste.git",
12
+ "type": "git",
13
+ "directory": "packages/poveste-shared"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "sideEffects": false,
19
+ "exports": {
20
+ ".": "./dist/index.js",
21
+ "./*": "./*",
22
+ "./client-node": "./dist/client/server/run.js"
23
+ },
24
+ "main": "./dist/index.js",
25
+ "module": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "peerDependencies": {
28
+ "vite": "^7.0.0 || ^8.0.0"
29
+ },
30
+ "dependencies": {
31
+ "@types/fs-extra": "^11.0.4",
32
+ "@types/markdown-it": "^14.1.2",
33
+ "chokidar": "^4.0.1",
34
+ "pathe": "^1.1.2",
35
+ "picocolors": "^1.1.1",
36
+ "@poveste/vendors": "^0.1.0"
37
+ },
38
+ "devDependencies": {
39
+ "typescript": "5.6.3",
40
+ "vite": "^7.3.0"
41
+ },
42
+ "scripts": {
43
+ "build": "rimraf dist && tsc",
44
+ "watch": "tsc -w --sourceMap"
45
+ }
46
+ }
@@ -0,0 +1,17 @@
1
+ export const voidElements = [
2
+ 'area',
3
+ 'base',
4
+ 'br',
5
+ 'col',
6
+ 'embed',
7
+ 'hr',
8
+ 'img',
9
+ 'input',
10
+ 'keygen',
11
+ 'link',
12
+ 'meta',
13
+ 'param',
14
+ 'source',
15
+ 'track',
16
+ 'wbr',
17
+ ]
@@ -0,0 +1,3 @@
1
+ export * from './const.js'
2
+ export * from './serialize-js.js'
3
+ export * from './util.js'
@@ -0,0 +1,143 @@
1
+ const KEY_ESCAPE_REG = /[\s\-.:|#@$£*%]/
2
+ const MAX_SINGLE_LINE_ARRAY_LENGTH = 3
3
+
4
+ interface Line {
5
+ spaces: number
6
+ line: string
7
+ }
8
+
9
+ export function serializeJs(value: any): string {
10
+ const seen = new Set()
11
+
12
+ if (value === undefined) {
13
+ return 'undefined'
14
+ }
15
+ if (value === null) {
16
+ return 'null'
17
+ }
18
+ if (typeof value === 'string') {
19
+ return `'${value}'`
20
+ }
21
+ if (typeof value === 'boolean') {
22
+ return value ? 'true' : 'false'
23
+ }
24
+ if (Array.isArray(value)) {
25
+ return printLines(arrayToSourceLines(value, seen))
26
+ }
27
+ if (typeof value === 'object') {
28
+ return printLines(objectToSourceLines(value, seen))
29
+ }
30
+ if (value?.__autoBuildingObject) {
31
+ return value
32
+ }
33
+ if (typeof value === 'function' && value.name) {
34
+ return value.name
35
+ }
36
+ return value.toString()
37
+ }
38
+
39
+ function printLines(lines: Line[]) {
40
+ return lines.map(line => ' '.repeat(line.spaces) + line.line).join('\n')
41
+ }
42
+
43
+ function objectToSourceLines(object, seen: Set<unknown>, indentCount = 0) {
44
+ if (seen.has(object)) {
45
+ object = {}
46
+ }
47
+ else {
48
+ seen.add(object)
49
+ }
50
+
51
+ return createLines(indentCount, (lines) => {
52
+ lines.push('{')
53
+ lines.push(...createLines(1, (lines) => {
54
+ for (const key in object) {
55
+ const value = object[key]
56
+
57
+ let printedKey = key
58
+ if (KEY_ESCAPE_REG.test(key)) {
59
+ printedKey = `'${printedKey}'`
60
+ }
61
+
62
+ addLinesFromValue(lines, value, `${printedKey}: `, ',', seen)
63
+ }
64
+ }))
65
+ lines.push('}')
66
+ })
67
+ }
68
+
69
+ function arrayToSourceLines(array: any[], seen: Set<unknown>, indentCount = 0): Array<Line> {
70
+ if (seen.has(array)) {
71
+ array = []
72
+ }
73
+ else {
74
+ seen.add(array)
75
+ }
76
+
77
+ return createLines(indentCount, (lines) => {
78
+ const contentLines = createLines(1, (lines) => {
79
+ for (const value of array) {
80
+ addLinesFromValue(lines, value, '', ',', seen)
81
+ }
82
+ })
83
+ if (contentLines.length === 0) {
84
+ lines.push('[]')
85
+ }
86
+ else if (contentLines.length <= MAX_SINGLE_LINE_ARRAY_LENGTH && !contentLines.some(line => line.spaces > 1)) {
87
+ const [first] = contentLines
88
+ first.line = contentLines.map(({ line }) => line.substring(0, line.length - 1)).join(', ')
89
+ first.line = `[${first.line}]`
90
+ first.spaces--
91
+ lines.push(first)
92
+ }
93
+ else {
94
+ lines.push('[', ...contentLines, ']')
95
+ }
96
+ })
97
+ }
98
+
99
+ function createLines(indentCount: number, handler: (lines: any[]) => unknown): Array<Line> {
100
+ const lines: any[] = []
101
+ handler(lines)
102
+ return lines.map((line) => {
103
+ if (line.spaces != null) {
104
+ line.spaces += indentCount
105
+ return line
106
+ }
107
+ return { spaces: indentCount, line }
108
+ })
109
+ }
110
+
111
+ function addLinesFromValue(lines: Line[], value, before, after, seen) {
112
+ let result
113
+ if (Array.isArray(value)) {
114
+ lines.push(...wrap(arrayToSourceLines(value, seen), before, after))
115
+ return
116
+ }
117
+ else if (value && typeof value === 'object') {
118
+ lines.push(...wrap(objectToSourceLines(value, seen), before, after))
119
+ return
120
+ }
121
+ else if (typeof value === 'string') {
122
+ result = value.includes('\'') ? `\`${value}\`` : `'${value}'`
123
+ }
124
+ else if (typeof value === 'undefined') {
125
+ result = 'undefined'
126
+ }
127
+ else if (value === null) {
128
+ result = 'null'
129
+ }
130
+ else if (typeof value === 'boolean') {
131
+ result = value ? 'true' : 'false'
132
+ }
133
+ else {
134
+ result = value
135
+ }
136
+ lines.push(before + result + after)
137
+ }
138
+
139
+ function wrap(lines: Line[], before: string, after: string) {
140
+ lines[0].line = before + lines[0].line
141
+ lines[lines.length - 1].line += after
142
+ return lines
143
+ }
@@ -0,0 +1,77 @@
1
+ export function indent(lines: string[], count = 1) {
2
+ return lines.map(line => `${' '.repeat(count)}${line}`)
3
+ }
4
+
5
+ export function unindent(code: string) {
6
+ const lines = code.split('\n')
7
+ let indentLevel = -1
8
+ let indentText: string
9
+ const linesToAnalyze = lines.filter(line => line.trim().length > 0)
10
+ for (const line of linesToAnalyze) {
11
+ const match = /^\s*/.exec(line)
12
+ if (match && (indentLevel === -1 || indentLevel > match[0].length)) {
13
+ indentLevel = match[0].length
14
+ indentText = match[0]
15
+ }
16
+ }
17
+ const result: string[] = []
18
+ for (const line of lines) {
19
+ result.push(line.replace(indentText, ''))
20
+ }
21
+ return result.join('\n').trim()
22
+ }
23
+
24
+ interface AutoBuildingOject {
25
+ key: string
26
+ cache: Record<string | symbol, AutoBuildingOject>
27
+ target: any
28
+ proxy: any
29
+ }
30
+
31
+ export function createAutoBuildingObject(format?: (key: string) => string, specialKeysHandler?: (target: any, p: string | symbol) => (() => unknown) | null, key = '', depth = 0): AutoBuildingOject {
32
+ const cache: Record<string | symbol, AutoBuildingOject> = {}
33
+ if (depth > 32) return { key, cache, target: {}, proxy: () => key }
34
+ const target: any = () => {
35
+ const k = `${key}()`
36
+ return format ? format(k) : k
37
+ }
38
+ const proxy = new Proxy(target, {
39
+ get(_, p) {
40
+ if (p === '__autoBuildingObject') {
41
+ return true
42
+ }
43
+ if (p === '__autoBuildingObjectGetKey') {
44
+ return key
45
+ }
46
+ if (specialKeysHandler) {
47
+ const fn = specialKeysHandler(target, p)
48
+ if (fn) {
49
+ return fn()
50
+ }
51
+ }
52
+ if (p === 'toString') {
53
+ const k = `${key}.toString()`
54
+ return () => format ? format(k) : k
55
+ }
56
+ if (p === Symbol.toPrimitive) {
57
+ return () => format ? format(key) : key
58
+ }
59
+ if (!cache[p]) {
60
+ const childKey = key ? `${key}.${p.toString()}` : p.toString()
61
+ const child = createAutoBuildingObject(format, specialKeysHandler, childKey, depth + 1)
62
+ cache[p] = { key: childKey, ...child }
63
+ }
64
+ return cache[p].proxy
65
+ },
66
+ apply(_, thisArg, args) {
67
+ const k = `${key}(${args.join(', ')})`
68
+ return format ? format(k) : k
69
+ },
70
+ })
71
+ return {
72
+ key,
73
+ cache,
74
+ target,
75
+ proxy,
76
+ }
77
+ }