-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.mjs
More file actions
114 lines (107 loc) · 8.86 KB
/
Copy pathbuild.mjs
File metadata and controls
114 lines (107 loc) · 8.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/env node
import { build } from 'vite'
import { readFileSync, existsSync, copyFileSync } from 'fs'
import { resolve } from 'path'
const manifest = JSON.parse(readFileSync('./manifest.json', 'utf8'))
const pluginId = manifest.id
const entry = existsSync('./src/plugin.ts') ? './src/plugin.ts' : './src/index.ts'
// Minimal shims — react and SDK modules come from the host app at runtime
const STATIC_SHIMS = {
'react': `const _s=window.__voiden_shims__['react'];export default _s;export const {useState,useEffect,useCallback,useMemo,useRef,useContext,createContext,forwardRef,memo,Fragment,createElement,cloneElement,Children,StrictMode,Suspense,lazy,isValidElement,Component,PureComponent,createRef,startTransition,useReducer,useLayoutEffect,useImperativeHandle,useDebugValue,useTransition,useDeferredValue,useId}=_s;`,
'react/jsx-runtime': `const _s=window.__voiden_shims__['react/jsx-runtime'];export const jsx=_s.jsx;export const jsxs=_s.jsxs;export const Fragment=_s.Fragment;`,
'react-dom': `const _s=window.__voiden_shims__['react-dom'];export default _s;export const {createPortal,flushSync,render,unmountComponentAtNode}=_s;`,
'react-dom/client': `const _s=window.__voiden_shims__['react-dom/client'];export default _s;export const {createRoot,hydrateRoot}=_s;`,
'@tanstack/react-query': `const _s=window.__voiden_shims__['@tanstack/react-query'];export default _s;export const {useQuery,useMutation,useQueryClient,useInfiniteQuery,QueryClient,QueryClientProvider,QueryCache,MutationCache,useIsFetching,useIsMutating,useSuspenseQuery,useSuspenseInfiniteQuery,useSuspenseQueries,useQueries,HydrationBoundary,dehydrate,hydrate,focusManager,onlineManager,replaceEqualDeep,hashKey}=_s;`,
'@tiptap/react': `const _s=window.__voiden_shims__['@tiptap/react'];export default _s;export const {ReactNodeViewRenderer,NodeViewWrapper,NodeViewContent,useEditor,EditorContent,ReactRenderer,FloatingMenu,BubbleMenu,useReactNodeView,useCurrentEditor}=_s;`,
'@codemirror/state': `const _s=window.__voiden_shims__['@codemirror/state'];export default _s;export const {Extension,RangeSetBuilder,StateField,EditorState,Prec,Annotation,AnnotationType,ChangeDesc,ChangeSet,Compartment,EditorSelection,Facet,Line,MapMode,Range,RangeSet,RangeValue,SelectionRange,StateEffect,StateEffectType,Text,Transaction,combineConfig,countColumn,findClusterBreak,findColumn}=_s;`,
'@codemirror/view': `const _s=window.__voiden_shims__['@codemirror/view'];export default _s;export const {keymap,EditorView,Decoration,DecorationSet,WidgetType,ViewPlugin,ViewUpdate,MatchDecorator,GutterMarker,drawSelection,dropCursor,highlightActiveLine,highlightSpecialChars,lineNumbers,rectangularSelection,scrollPastEnd}=_s;`,
'@codemirror/autocomplete': `const _s=window.__voiden_shims__['@codemirror/autocomplete'];export default _s;export const {CompletionContext,CompletionResult,autocompletion,completeAnyWord,closeBrackets,closeBracketsKeymap,completionKeymap,ifIn,ifNotIn,snippetCompletion}=_s;`,
}
// Additional runtime shims for host-provided packages
const ADDITIONAL_SHIMS = {
'@tiptap/core': "const _s=window.__voiden_shims__['@tiptap/core']||{};export default _s;export const {Editor,Extension,Node,NodeViewProps,Range,JSONContent,generateJSON,mergeAttributes,getSchema}=_s;",
'@tiptap/pm/model': "const _s=window.__voiden_shims__['@tiptap/pm/model']||{};export default _s;export const {DOMParser,Fragment,Node,Slice}=_s;",
'@tiptap/pm/state': "const _s=window.__voiden_shims__['@tiptap/pm/state']||{};export default _s;export const {EditorState,Plugin,PluginKey}=_s;",
'@tiptap/pm/tables': "const _s=window.__voiden_shims__['@tiptap/pm/tables']||{};export default _s;export const {CellSelection}=_s;",
'@tiptap/pm/view': "const _s=window.__voiden_shims__['@tiptap/pm/view']||{};export default _s;export const {EditorView}=_s;",
'@tiptap/suggestion': "const _s=window.__voiden_shims__['@tiptap/suggestion']||{};export default _s;",
'lucide-react': "const _s=window.__voiden_shims__['lucide-react']||{};export default _s;export const {AlertCircle,ArrowDown,ArrowDownLeft,ArrowLeft,ArrowLeftRight,ArrowRight,ArrowUp,ArrowUpRight,BookOpen,Check,CheckCheck,ChevronDown,ChevronRight,ChevronsDownUp,ChevronsUpDown,Circle,CircleAlert,CircleX,Clock,Copy,CornerDownLeft,CornerDownRight,Download,ExternalLink,Eye,FileDown,FileText,Folder,FolderOpen,History,Info,Link,Loader,Loader2,Mouse,Pen,Pencil,Play,Plus,Radio,Rows,Search,SkipForward,Sparkles,Square,Trash2,Unlink,Wifi,WifiOff,WrapText,X,XCircle}=_s;",
'zustand': "const _s=window.__voiden_shims__['zustand']||{};export default _s;export const {create}=_s;",
'@voiden/sdk': "const _s=window.__voiden_shims__['@voiden/sdk']||{};export default _s;export const {PipelineStage,PluginContext,RequestCompilationContext,SlashCommandGroup,UIExtension}=_s;",
'@voiden/sdk/shared': "const _s=window.__voiden_shims__['@voiden/sdk/shared']||{};export default _s;export const {Request,RequestParam,parseCookies}=_s;",
'tippy.js': "const _s=window.__voiden_shims__['tippy.js']||{};export default _s;",
'react-markdown': "const _s=window.__voiden_shims__['react-markdown']||{};export default _s?.default??_s;",
'remark-gfm': "const _s=window.__voiden_shims__['remark-gfm']||{};export default _s?.default??_s;",
'buffer': "export const Buffer=globalThis.Buffer;export default{Buffer:globalThis.Buffer};",
}
Object.assign(STATIC_SHIMS, ADDITIONAL_SHIMS)
// Core host modules
const CORE_EXPORTS = {
'@voiden/sdk/ui': ['PluginContext','CorePluginContext','Plugin','SlashCommand','SlashCommandGroup','Tab','EditorAction','StatusBarItem','PluginHelpers','BlockPasteHandler','BlockExtension','PatternHandler'],
'@/core/file-system/hooks/useFileSystem': ['prosemirrorToMarkdown'],
'@/core/editors/voiden/extensions': ['voidenExtensions'],
'@/core/editors/voiden/VoidenEditor': ['useEditorStore','useVoidenEditorStore','proseClasses'],
'@/core/editors/voiden/utils/expandLinkedBlocks': ['expandLinkedBlocksInDoc'],
'@/core/editors/voiden/markdownConverter': ['parseMarkdown'],
'@/core/request-engine/getRequestFromJson': ['getTable','parseAuthNode','buildHeadersWithCookies','findNode','findNodes','createNewRequestObject','getRequest'],
'@/core/request-engine/stores/responseStore': ['useResponseStore'],
'@/core/request-engine/requestOrchestrator': ['requestOrchestrator'],
'@/core/request-engine/runtimeVariables': ['replaceProcessVariablesInText'],
'@/core/request-engine/pipeline': ['hookRegistry','PipelineStage'],
'@/core/history/adapterRegistry': ['historyAdapterRegistry'],
'@/core/stores/panelStore': ['usePanelStore'],
'@/core/stores/responsePanelPosition': ['getResponsePanelPosition'],
'@/core/environment/hooks': ['useActiveEnvironment','useEnvironments'],
'@/plugins': ['useEditorEnhancementStore','usePluginStore'],
'@/main': ['getQueryClient'],
}
function shimPlugin() {
return {
name: 'voiden-shims',
enforce: 'pre',
resolveId(id) {
// syntheticNamedExports:'default' lets Rollup resolve ANY named import from the shim
// by falling back to the default export's properties — no need to enumerate every icon/export.
if (id in STATIC_SHIMS) return { id: `\0shim:${id}`, syntheticNamedExports: 'default' }
if (id in CORE_EXPORTS) return `\0shim:${id}`
return null
},
load(id) {
if (!id.startsWith('\0shim:')) return null
const mod = id.slice('\0shim:'.length)
if (mod in STATIC_SHIMS) return STATIC_SHIMS[mod]
const exports = CORE_EXPORTS[mod] || []
const key = JSON.stringify(mod)
const named = exports.map(n => `export const ${n}=_s.${n};`).join('\n')
return `const _s=(window.__voiden_shims__||{})[${key}]||{};export default _s;\n${named}`
},
renderChunk(code) {
const mfStr = JSON.stringify(manifest)
return { code: `globalThis["__voiden_bundle_version__"]=2;\nexport const __voiden_bundle_version__=2;\nexport const __voiden_manifest__=${mfStr};\n${code}`, map: null }
}
}
}
await build({
configFile: false,
plugins: [
shimPlugin(),
{ name:'skip-css', resolveId(id){if(id.endsWith('.css'))return'\0empty'},load(id){if(id==='\0empty')return'export default {}'} },
{ name:'node-buffer',enforce:'pre',resolveId(id){if(id==='buffer')return'\0buf'},load(id){if(id==='\0buf')return'export const Buffer=globalThis.Buffer;export default{Buffer:globalThis.Buffer}'} },
],
esbuild: { jsx: 'automatic' },
build: {
lib: { entry, formats: ['es'], fileName: () => `${pluginId}.js` },
outDir: 'dist',
emptyOutDir: true,
minify: true,
sourcemap: false,
rollupOptions: {
onwarn(w,warn){if(w.code==='MODULE_LEVEL_DIRECTIVE'||w.code==='UNRESOLVED_IMPORT')return;warn(w)},
output: { inlineDynamicImports: true }
}
},
logLevel: 'info'
})
// Copy release assets into dist/ so the package is self-contained
if (existsSync('./manifest.json')) copyFileSync('./manifest.json', './dist/manifest.json')
if (existsSync('./changelog.json')) copyFileSync('./changelog.json', './dist/changelog.json')