@directive-run/core 0.1.1 → 0.2.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.
@@ -1,25 +1,25 @@
1
- 'use strict';function m(e){let t={},s={},i={};for(let[n,a]of Object.entries(e.initialState))t[n]=p(a);for(let n of Object.keys(e.reducers))n.includes("By")||n.includes("Set")||n.includes("With")?(s[n]={payload:"t.any()"},i[n]=`(facts, { payload }) => {
1
+ 'use strict';function m(e){let t={},s={},i={};for(let[n,c]of Object.entries(e.initialState))t[n]=p(c);for(let n of Object.keys(e.reducers))n.includes("By")||n.includes("Set")||n.includes("With")?(s[n]={payload:"t.object()"},i[n]=`(facts, { payload }) => {
2
2
  // TODO: Implement ${n}
3
3
  }`):(s[n]={},i[n]=`(facts) => {
4
4
  // TODO: Implement ${n}
5
- }`);let c=`(facts) => {
6
- ${Object.entries(e.initialState).map(([n,a])=>` facts.${n} = ${JSON.stringify(a)};`).join(`
5
+ }`);let a=`(facts) => {
6
+ ${Object.entries(e.initialState).map(([n,c])=>` facts.${n} = ${JSON.stringify(c)};`).join(`
7
7
  `)}
8
- }`;return {name:e.name,facts:t,derivations:{},events:s,requirements:{},initCode:c,deriveCode:{},eventsCode:i}}function h(e){let t={},s={},i={};for(let[n,a]of Object.entries(e.state))t[n]=p(a);for(let n of Object.keys(e.actions))s[n]={},i[n]=`(facts) => {
8
+ }`;return {name:e.name,facts:t,derivations:{},events:s,requirements:{},initCode:a,deriveCode:{},eventsCode:i}}function h(e){let t={},s={},i={};for(let[n,c]of Object.entries(e.state))t[n]=p(c);for(let n of Object.keys(e.actions))s[n]={},i[n]=`(facts) => {
9
9
  // TODO: Implement ${n}
10
- }`;let c=`(facts) => {
11
- ${Object.entries(e.state).map(([n,a])=>` facts.${n} = ${JSON.stringify(a)};`).join(`
10
+ }`;let a=`(facts) => {
11
+ ${Object.entries(e.state).map(([n,c])=>` facts.${n} = ${JSON.stringify(c)};`).join(`
12
12
  `)}
13
- }`;return {name:"store",facts:t,derivations:{},events:s,requirements:{},initCode:c,deriveCode:{},eventsCode:i}}function y(e){let t={state:`t.string<${Object.keys(e.states).map(r=>`'${r}'`).join(" | ")}>()`},s={},i={},f={},c={};if(e.context)for(let[r,o]of Object.entries(e.context))t[r]=p(o);for(let r of Object.keys(e.states)){let o=`is${l(r)}`;s[o]="t.boolean()",i[o]=`(facts) => facts.state === '${r}'`;}let n=new Map;for(let[r,o]of Object.entries(e.states))if(o.on)for(let[d,u]of Object.entries(o.on)){n.has(d)||n.set(d,new Map);let g=typeof u=="string"?u:u.target;n.get(d).set(r,g);}for(let[r,o]of n)if(f[r]={},o.size===1){let d=[...o.entries()][0],u=d?d[1]:"unknown";c[r]=`(facts) => {
13
+ }`;return {name:"store",facts:t,derivations:{},events:s,requirements:{},initCode:a,deriveCode:{},eventsCode:i}}function C(e){let t={state:`t.string<${Object.keys(e.states).map(r=>`'${r}'`).join(" | ")}>()`},s={},i={},f={},a={};if(e.context)for(let[r,o]of Object.entries(e.context))t[r]=p(o);for(let r of Object.keys(e.states)){let o=`is${l(r)}`;s[o]="t.boolean()",i[o]=`(facts) => facts.state === '${r}'`;}let n=new Map;for(let[r,o]of Object.entries(e.states))if(o.on)for(let[d,u]of Object.entries(o.on)){n.has(d)||n.set(d,new Map);let g=typeof u=="string"?u:u.target;n.get(d).set(r,g);}for(let[r,o]of n)if(f[r]={},o.size===1){let d=[...o.entries()][0],u=d?d[1]:"unknown";a[r]=`(facts) => {
14
14
  facts.state = '${u}';
15
15
  }`;}else {let d=[...o.entries()].map(([u,g])=>` case '${u}': facts.state = '${g}'; break;`).join(`
16
- `);c[r]=`(facts) => {
16
+ `);a[r]=`(facts) => {
17
17
  switch (facts.state) {
18
18
  ${d}
19
19
  }
20
- }`;}let a=[` facts.state = '${e.initial}';`];if(e.context)for(let[r,o]of Object.entries(e.context))a.push(` facts.${r} = ${JSON.stringify(o)};`);let v=`(facts) => {
21
- ${a.join(`
20
+ }`;}let c=[` facts.state = '${e.initial}';`];if(e.context)for(let[r,o]of Object.entries(e.context))c.push(` facts.${r} = ${JSON.stringify(o)};`);let v=`(facts) => {
21
+ ${c.join(`
22
22
  `)}
23
- }`;return {name:e.id,facts:t,derivations:s,events:f,requirements:{},initCode:v,deriveCode:i,eventsCode:c}}function C(e){let t=["import { createModule, t } from '@directive-run/core';","",`const ${e.name}Module = createModule('${e.name}', {`," schema: {"," facts: {"];for(let[s,i]of Object.entries(e.facts))t.push(` ${s}: ${i},`);t.push(" },"),t.push(" derivations: {");for(let[s,i]of Object.entries(e.derivations))t.push(` ${s}: ${i},`);t.push(" },"),t.push(" events: {");for(let[s,i]of Object.entries(e.events)){let f=Object.entries(i).map(([c,n])=>`${c}: ${n}`).join(", ");t.push(` ${s}: { ${f} },`);}if(t.push(" },"),t.push(" requirements: {},"),t.push(" },"),t.push(` init: ${e.initCode},`),Object.keys(e.deriveCode).length>0){t.push(" derive: {");for(let[s,i]of Object.entries(e.deriveCode))t.push(` ${s}: ${i},`);t.push(" },");}t.push(" events: {");for(let[s,i]of Object.entries(e.eventsCode))t.push(` ${s}: ${i},`);return t.push(" },"),t.push("});"),t.push(""),t.push(`export { ${e.name}Module };`),t.join(`
24
- `)}function p(e){if(e===null)return "t.any().nullable()";if(e===void 0)return "t.any().optional()";switch(typeof e){case "number":return "t.number()";case "string":return "t.string()";case "boolean":return "t.boolean()";case "object":return Array.isArray(e)?"t.array(t.any())":"t.object()";default:return "t.any()"}}function l(e){return e.charAt(0).toUpperCase()+e.slice(1)}function $(e){let t=["[ ] Install directive: pnpm add directive","[ ] Create module file(s) for your state","[ ] Define schema with facts, derivations, events","[ ] Implement init function for initial state","[ ] Implement event handlers","[ ] Update imports in consuming code","[ ] Test the new implementation","[ ] Remove old state management code"];return [...{redux:["[ ] Convert reducers to event handlers","[ ] Convert selectors to derivations","[ ] Convert thunks to constraints + resolvers","[ ] Update useSelector to useDerived","[ ] Update useDispatch to system.dispatch"],zustand:["[ ] Convert store state to facts","[ ] Convert store actions to events","[ ] Convert computed getters to derivations","[ ] Update useStore hooks to useDirective hooks"],xstate:["[ ] Convert machine states to a 'state' fact","[ ] Convert state checks to derivations (isActive, etc.)","[ ] Convert events to Directive events","[ ] Convert guards to constraint 'when' conditions","[ ] Convert services/actors to constraints + resolvers","[ ] Update useMachine to useDirective hooks"]}[e]??[],...t]}exports.analyzeReduxSlice=m;exports.analyzeXStateMachine=y;exports.analyzeZustandStore=h;exports.generateMigrationChecklist=$;exports.generateModuleCode=C;//# sourceMappingURL=migration.cjs.map
23
+ }`;return {name:e.id,facts:t,derivations:s,events:f,requirements:{},initCode:v,deriveCode:i,eventsCode:a}}function y(e){let t=["import { createModule, t } from '@directive-run/core';","",`const ${e.name}Module = createModule('${e.name}', {`," schema: {"," facts: {"];for(let[s,i]of Object.entries(e.facts))t.push(` ${s}: ${i},`);t.push(" },"),t.push(" derivations: {");for(let[s,i]of Object.entries(e.derivations))t.push(` ${s}: ${i},`);t.push(" },"),t.push(" events: {");for(let[s,i]of Object.entries(e.events)){let f=Object.entries(i).map(([a,n])=>`${a}: ${n}`).join(", ");t.push(` ${s}: { ${f} },`);}if(t.push(" },"),t.push(" requirements: {},"),t.push(" },"),t.push(` init: ${e.initCode},`),Object.keys(e.deriveCode).length>0){t.push(" derive: {");for(let[s,i]of Object.entries(e.deriveCode))t.push(` ${s}: ${i},`);t.push(" },");}t.push(" events: {");for(let[s,i]of Object.entries(e.eventsCode))t.push(` ${s}: ${i},`);return t.push(" },"),t.push("});"),t.push(""),t.push(`export { ${e.name}Module };`),t.join(`
24
+ `)}function p(e){if(e===null)return "t.object().nullable()";if(e===void 0)return "t.object().optional()";switch(typeof e){case "number":return "t.number()";case "string":return "t.string()";case "boolean":return "t.boolean()";case "object":return Array.isArray(e)?"t.array(t.object())":"t.object()";default:return "t.object()"}}function l(e){return e.charAt(0).toUpperCase()+e.slice(1)}function $(e){let t=["[ ] Install directive: pnpm add directive","[ ] Create module file(s) for your state","[ ] Define schema with facts, derivations, events","[ ] Implement init function for initial state","[ ] Implement event handlers","[ ] Update imports in consuming code","[ ] Test the new implementation","[ ] Remove old state management code"];return [...{redux:["[ ] Convert reducers to event handlers","[ ] Convert selectors to derivations","[ ] Convert thunks to constraints + resolvers","[ ] Update useSelector to useDerived","[ ] Update useDispatch to system.dispatch"],zustand:["[ ] Convert store state to facts","[ ] Convert store actions to events","[ ] Convert computed getters to derivations","[ ] Update useStore hooks to useDirective hooks"],xstate:["[ ] Convert machine states to a 'state' fact","[ ] Convert state checks to derivations (isActive, etc.)","[ ] Convert events to Directive events","[ ] Convert guards to constraint 'when' conditions","[ ] Convert services/actors to constraints + resolvers","[ ] Update useMachine to useDirective hooks"]}[e]??[],...t]}exports.analyzeReduxSlice=m;exports.analyzeXStateMachine=C;exports.analyzeZustandStore=h;exports.generateMigrationChecklist=$;exports.generateModuleCode=y;//# sourceMappingURL=migration.cjs.map
25
25
  //# sourceMappingURL=migration.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/migration.ts"],"names":["analyzeReduxSlice","config","facts","events","eventsCode","key","value","inferTypeString","reducerName","initCode","analyzeZustandStore","actionName","analyzeXStateMachine","s","derivations","deriveCode","stateName","derivationName","capitalize","eventTransitions","stateConfig","eventName","target","targetState","transitions","firstEntry","toState","cases","from","to","initLines","generateModuleCode","structure","lines","type","schema","schemaStr","k","v","code","str","generateMigrationChecklist","source","common"],"mappings":"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","file":"migration.cjs","sourcesContent":["/**\n * Migration Utilities for Directive\n *\n * Helpers for migrating from Redux, Zustand, or XState to Directive.\n * These utilities help you understand your existing state management\n * and generate equivalent Directive module structures.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Redux slice configuration (simplified) */\nexport interface ReduxSliceConfig {\n\tname: string;\n\tinitialState: Record<string, unknown>;\n\treducers: Record<string, (state: unknown, action?: { payload?: unknown }) => void>;\n}\n\n/** Zustand store configuration (simplified) */\nexport interface ZustandStoreConfig {\n\tstate: Record<string, unknown>;\n\tactions: Record<string, (...args: unknown[]) => void>;\n}\n\n/** XState machine configuration (simplified) */\nexport interface XStateMachineConfig {\n\tid: string;\n\tinitial: string;\n\tstates: Record<string, { on?: Record<string, string | { target: string }> }>;\n\tcontext?: Record<string, unknown>;\n}\n\n/** Generated Directive module structure */\nexport interface DirectiveModuleStructure {\n\tname: string;\n\tfacts: Record<string, string>;\n\tderivations: Record<string, string>;\n\tevents: Record<string, Record<string, string>>;\n\trequirements: Record<string, unknown>;\n\tinitCode: string;\n\tderiveCode: Record<string, string>;\n\teventsCode: Record<string, string>;\n}\n\n// ============================================================================\n// Redux Migration\n// ============================================================================\n\n/**\n * Analyze a Redux slice and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const reduxConfig = {\n * name: 'counter',\n * initialState: { value: 0, status: 'idle' },\n * reducers: {\n * increment: (state) => { state.value += 1; },\n * decrement: (state) => { state.value -= 1; },\n * },\n * };\n *\n * const structure = analyzeReduxSlice(reduxConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeReduxSlice(config: ReduxSliceConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Analyze initial state to generate facts\n\tfor (const [key, value] of Object.entries(config.initialState)) {\n\t\tfacts[key] = inferTypeString(value);\n\t}\n\n\t// Analyze reducers to generate events\n\tfor (const reducerName of Object.keys(config.reducers)) {\n\t\t// Simple heuristic: if reducer name suggests payload, add it\n\t\tconst hasPayload = reducerName.includes(\"By\") || reducerName.includes(\"Set\") || reducerName.includes(\"With\");\n\t\tif (hasPayload) {\n\t\t\tevents[reducerName] = { payload: \"t.any()\" };\n\t\t\teventsCode[reducerName] = `(facts, { payload }) => {\\n // TODO: Implement ${reducerName}\\n }`;\n\t\t} else {\n\t\t\tevents[reducerName] = {};\n\t\t\teventsCode[reducerName] = `(facts) => {\\n // TODO: Implement ${reducerName}\\n }`;\n\t\t}\n\t}\n\n\t// Generate init code\n\tconst initLines = Object.entries(config.initialState)\n\t\t.map(([key, value]) => ` facts.${key} = ${JSON.stringify(value)};`)\n\t\t.join(\"\\n\");\n\tconst initCode = `(facts) => {\\n${initLines}\\n }`;\n\n\treturn {\n\t\tname: config.name,\n\t\tfacts,\n\t\tderivations: {},\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode: {},\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// Zustand Migration\n// ============================================================================\n\n/**\n * Analyze a Zustand store and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const zustandConfig = {\n * state: { count: 0, loading: false },\n * actions: {\n * increment: () => {},\n * decrement: () => {},\n * setLoading: (loading: boolean) => {},\n * },\n * };\n *\n * const structure = analyzeZustandStore(zustandConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeZustandStore(config: ZustandStoreConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Analyze state\n\tfor (const [key, value] of Object.entries(config.state)) {\n\t\tfacts[key] = inferTypeString(value);\n\t}\n\n\t// Analyze actions\n\tfor (const actionName of Object.keys(config.actions)) {\n\t\tevents[actionName] = {};\n\t\teventsCode[actionName] = `(facts) => {\\n // TODO: Implement ${actionName}\\n }`;\n\t}\n\n\t// Generate init code\n\tconst initLines = Object.entries(config.state)\n\t\t.map(([key, value]) => ` facts.${key} = ${JSON.stringify(value)};`)\n\t\t.join(\"\\n\");\n\tconst initCode = `(facts) => {\\n${initLines}\\n }`;\n\n\treturn {\n\t\tname: \"store\",\n\t\tfacts,\n\t\tderivations: {},\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode: {},\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// XState Migration\n// ============================================================================\n\n/**\n * Analyze an XState machine and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const xstateConfig = {\n * id: 'toggle',\n * initial: 'inactive',\n * states: {\n * inactive: { on: { TOGGLE: 'active' } },\n * active: { on: { TOGGLE: 'inactive' } },\n * },\n * };\n *\n * const structure = analyzeXStateMachine(xstateConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeXStateMachine(config: XStateMachineConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {\n\t\tstate: `t.string<${Object.keys(config.states).map(s => `'${s}'`).join(\" | \")}>()`,\n\t};\n\tconst derivations: Record<string, string> = {};\n\tconst deriveCode: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Add context to facts\n\tif (config.context) {\n\t\tfor (const [key, value] of Object.entries(config.context)) {\n\t\t\tfacts[key] = inferTypeString(value);\n\t\t}\n\t}\n\n\t// Generate state derivations (isActive, isInactive, etc.)\n\tfor (const stateName of Object.keys(config.states)) {\n\t\tconst derivationName = `is${capitalize(stateName)}`;\n\t\tderivations[derivationName] = \"t.boolean()\";\n\t\tderiveCode[derivationName] = `(facts) => facts.state === '${stateName}'`;\n\t}\n\n\t// Collect all events and their transitions\n\tconst eventTransitions = new Map<string, Map<string, string>>();\n\tfor (const [stateName, stateConfig] of Object.entries(config.states)) {\n\t\tif (!stateConfig.on) continue;\n\t\tfor (const [eventName, target] of Object.entries(stateConfig.on)) {\n\t\t\tif (!eventTransitions.has(eventName)) {\n\t\t\t\teventTransitions.set(eventName, new Map());\n\t\t\t}\n\t\t\tconst targetState = typeof target === \"string\" ? target : target.target;\n\t\t\teventTransitions.get(eventName)!.set(stateName, targetState);\n\t\t}\n\t}\n\n\t// Generate events and handlers\n\tfor (const [eventName, transitions] of eventTransitions) {\n\t\tevents[eventName] = {};\n\n\t\tif (transitions.size === 1) {\n\t\t\tconst firstEntry = [...transitions.entries()][0];\n\t\t\tconst toState = firstEntry ? firstEntry[1] : \"unknown\";\n\t\t\teventsCode[eventName] = `(facts) => {\\n facts.state = '${toState}';\\n }`;\n\t\t} else {\n\t\t\tconst cases = [...transitions.entries()]\n\t\t\t\t.map(([from, to]) => ` case '${from}': facts.state = '${to}'; break;`)\n\t\t\t\t.join(\"\\n\");\n\t\t\teventsCode[eventName] = `(facts) => {\\n switch (facts.state) {\\n${cases}\\n }\\n }`;\n\t\t}\n\t}\n\n\t// Generate init code\n\tconst initLines = [` facts.state = '${config.initial}';`];\n\tif (config.context) {\n\t\tfor (const [key, value] of Object.entries(config.context)) {\n\t\t\tinitLines.push(` facts.${key} = ${JSON.stringify(value)};`);\n\t\t}\n\t}\n\tconst initCode = `(facts) => {\\n${initLines.join(\"\\n\")}\\n }`;\n\n\treturn {\n\t\tname: config.id,\n\t\tfacts,\n\t\tderivations,\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode,\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// Code Generation\n// ============================================================================\n\n/**\n * Generate Directive module code from a structure.\n */\nexport function generateModuleCode(structure: DirectiveModuleStructure): string {\n\tconst lines: string[] = [\n\t\t`import { createModule, t } from '@directive-run/core';`,\n\t\t``,\n\t\t`const ${structure.name}Module = createModule('${structure.name}', {`,\n\t\t` schema: {`,\n\t\t` facts: {`,\n\t];\n\n\t// Facts\n\tfor (const [key, type] of Object.entries(structure.facts)) {\n\t\tlines.push(` ${key}: ${type},`);\n\t}\n\tlines.push(` },`);\n\n\t// Derivations\n\tlines.push(` derivations: {`);\n\tfor (const [key, type] of Object.entries(structure.derivations)) {\n\t\tlines.push(` ${key}: ${type},`);\n\t}\n\tlines.push(` },`);\n\n\t// Events\n\tlines.push(` events: {`);\n\tfor (const [key, schema] of Object.entries(structure.events)) {\n\t\tconst schemaStr = Object.entries(schema)\n\t\t\t.map(([k, v]) => `${k}: ${v}`)\n\t\t\t.join(\", \");\n\t\tlines.push(` ${key}: { ${schemaStr} },`);\n\t}\n\tlines.push(` },`);\n\n\t// Requirements\n\tlines.push(` requirements: {},`);\n\tlines.push(` },`);\n\n\t// Init\n\tlines.push(` init: ${structure.initCode},`);\n\n\t// Derive\n\tif (Object.keys(structure.deriveCode).length > 0) {\n\t\tlines.push(` derive: {`);\n\t\tfor (const [key, code] of Object.entries(structure.deriveCode)) {\n\t\t\tlines.push(` ${key}: ${code},`);\n\t\t}\n\t\tlines.push(` },`);\n\t}\n\n\t// Events handlers\n\tlines.push(` events: {`);\n\tfor (const [key, code] of Object.entries(structure.eventsCode)) {\n\t\tlines.push(` ${key}: ${code},`);\n\t}\n\tlines.push(` },`);\n\n\tlines.push(`});`);\n\tlines.push(``);\n\tlines.push(`export { ${structure.name}Module };`);\n\n\treturn lines.join(\"\\n\");\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Infer a t.* type string from a JavaScript value.\n */\nfunction inferTypeString(value: unknown): string {\n\tif (value === null) return \"t.any().nullable()\";\n\tif (value === undefined) return \"t.any().optional()\";\n\n\tswitch (typeof value) {\n\t\tcase \"number\":\n\t\t\treturn \"t.number()\";\n\t\tcase \"string\":\n\t\t\treturn \"t.string()\";\n\t\tcase \"boolean\":\n\t\t\treturn \"t.boolean()\";\n\t\tcase \"object\":\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn \"t.array(t.any())\";\n\t\t\t}\n\t\t\treturn \"t.object()\";\n\t\tdefault:\n\t\t\treturn \"t.any()\";\n\t}\n}\n\n/**\n * Capitalize first letter.\n */\nfunction capitalize(str: string): string {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// ============================================================================\n// Migration Checklist Generator\n// ============================================================================\n\n/**\n * Generate a migration checklist for a given state management pattern.\n */\nexport function generateMigrationChecklist(\n\tsource: \"redux\" | \"zustand\" | \"xstate\",\n): string[] {\n\tconst common = [\n\t\t\"[ ] Install directive: pnpm add directive\",\n\t\t\"[ ] Create module file(s) for your state\",\n\t\t\"[ ] Define schema with facts, derivations, events\",\n\t\t\"[ ] Implement init function for initial state\",\n\t\t\"[ ] Implement event handlers\",\n\t\t\"[ ] Update imports in consuming code\",\n\t\t\"[ ] Test the new implementation\",\n\t\t\"[ ] Remove old state management code\",\n\t];\n\n\tconst sourceSpecific: Record<string, string[]> = {\n\t\tredux: [\n\t\t\t\"[ ] Convert reducers to event handlers\",\n\t\t\t\"[ ] Convert selectors to derivations\",\n\t\t\t\"[ ] Convert thunks to constraints + resolvers\",\n\t\t\t\"[ ] Update useSelector to useDerived\",\n\t\t\t\"[ ] Update useDispatch to system.dispatch\",\n\t\t],\n\t\tzustand: [\n\t\t\t\"[ ] Convert store state to facts\",\n\t\t\t\"[ ] Convert store actions to events\",\n\t\t\t\"[ ] Convert computed getters to derivations\",\n\t\t\t\"[ ] Update useStore hooks to useDirective hooks\",\n\t\t],\n\t\txstate: [\n\t\t\t\"[ ] Convert machine states to a 'state' fact\",\n\t\t\t\"[ ] Convert state checks to derivations (isActive, etc.)\",\n\t\t\t\"[ ] Convert events to Directive events\",\n\t\t\t\"[ ] Convert guards to constraint 'when' conditions\",\n\t\t\t\"[ ] Convert services/actors to constraints + resolvers\",\n\t\t\t\"[ ] Update useMachine to useDirective hooks\",\n\t\t],\n\t};\n\n\tconst specific = sourceSpecific[source] ?? [];\n\treturn [...specific, ...common];\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/migration.ts"],"names":["analyzeReduxSlice","config","facts","events","eventsCode","key","value","inferTypeString","reducerName","initCode","analyzeZustandStore","actionName","analyzeXStateMachine","s","derivations","deriveCode","stateName","derivationName","capitalize","eventTransitions","stateConfig","eventName","target","targetState","transitions","firstEntry","toState","cases","from","to","initLines","generateModuleCode","structure","lines","type","schema","schemaStr","k","v","code","str","generateMigrationChecklist","source","common"],"mappings":"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","file":"migration.cjs","sourcesContent":["/**\n * Migration Utilities for Directive\n *\n * Helpers for migrating from Redux, Zustand, or XState to Directive.\n * These utilities help you understand your existing state management\n * and generate equivalent Directive module structures.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Redux slice configuration (simplified) */\nexport interface ReduxSliceConfig {\n\tname: string;\n\tinitialState: Record<string, unknown>;\n\treducers: Record<string, (state: unknown, action?: { payload?: unknown }) => void>;\n}\n\n/** Zustand store configuration (simplified) */\nexport interface ZustandStoreConfig {\n\tstate: Record<string, unknown>;\n\tactions: Record<string, (...args: unknown[]) => void>;\n}\n\n/** XState machine configuration (simplified) */\nexport interface XStateMachineConfig {\n\tid: string;\n\tinitial: string;\n\tstates: Record<string, { on?: Record<string, string | { target: string }> }>;\n\tcontext?: Record<string, unknown>;\n}\n\n/** Generated Directive module structure */\nexport interface DirectiveModuleStructure {\n\tname: string;\n\tfacts: Record<string, string>;\n\tderivations: Record<string, string>;\n\tevents: Record<string, Record<string, string>>;\n\trequirements: Record<string, unknown>;\n\tinitCode: string;\n\tderiveCode: Record<string, string>;\n\teventsCode: Record<string, string>;\n}\n\n// ============================================================================\n// Redux Migration\n// ============================================================================\n\n/**\n * Analyze a Redux slice and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const reduxConfig = {\n * name: 'counter',\n * initialState: { value: 0, status: 'idle' },\n * reducers: {\n * increment: (state) => { state.value += 1; },\n * decrement: (state) => { state.value -= 1; },\n * },\n * };\n *\n * const structure = analyzeReduxSlice(reduxConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeReduxSlice(config: ReduxSliceConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Analyze initial state to generate facts\n\tfor (const [key, value] of Object.entries(config.initialState)) {\n\t\tfacts[key] = inferTypeString(value);\n\t}\n\n\t// Analyze reducers to generate events\n\tfor (const reducerName of Object.keys(config.reducers)) {\n\t\t// Simple heuristic: if reducer name suggests payload, add it\n\t\tconst hasPayload = reducerName.includes(\"By\") || reducerName.includes(\"Set\") || reducerName.includes(\"With\");\n\t\tif (hasPayload) {\n\t\t\tevents[reducerName] = { payload: \"t.object()\" };\n\t\t\teventsCode[reducerName] = `(facts, { payload }) => {\\n // TODO: Implement ${reducerName}\\n }`;\n\t\t} else {\n\t\t\tevents[reducerName] = {};\n\t\t\teventsCode[reducerName] = `(facts) => {\\n // TODO: Implement ${reducerName}\\n }`;\n\t\t}\n\t}\n\n\t// Generate init code\n\tconst initLines = Object.entries(config.initialState)\n\t\t.map(([key, value]) => ` facts.${key} = ${JSON.stringify(value)};`)\n\t\t.join(\"\\n\");\n\tconst initCode = `(facts) => {\\n${initLines}\\n }`;\n\n\treturn {\n\t\tname: config.name,\n\t\tfacts,\n\t\tderivations: {},\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode: {},\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// Zustand Migration\n// ============================================================================\n\n/**\n * Analyze a Zustand store and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const zustandConfig = {\n * state: { count: 0, loading: false },\n * actions: {\n * increment: () => {},\n * decrement: () => {},\n * setLoading: (loading: boolean) => {},\n * },\n * };\n *\n * const structure = analyzeZustandStore(zustandConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeZustandStore(config: ZustandStoreConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Analyze state\n\tfor (const [key, value] of Object.entries(config.state)) {\n\t\tfacts[key] = inferTypeString(value);\n\t}\n\n\t// Analyze actions\n\tfor (const actionName of Object.keys(config.actions)) {\n\t\tevents[actionName] = {};\n\t\teventsCode[actionName] = `(facts) => {\\n // TODO: Implement ${actionName}\\n }`;\n\t}\n\n\t// Generate init code\n\tconst initLines = Object.entries(config.state)\n\t\t.map(([key, value]) => ` facts.${key} = ${JSON.stringify(value)};`)\n\t\t.join(\"\\n\");\n\tconst initCode = `(facts) => {\\n${initLines}\\n }`;\n\n\treturn {\n\t\tname: \"store\",\n\t\tfacts,\n\t\tderivations: {},\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode: {},\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// XState Migration\n// ============================================================================\n\n/**\n * Analyze an XState machine and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const xstateConfig = {\n * id: 'toggle',\n * initial: 'inactive',\n * states: {\n * inactive: { on: { TOGGLE: 'active' } },\n * active: { on: { TOGGLE: 'inactive' } },\n * },\n * };\n *\n * const structure = analyzeXStateMachine(xstateConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeXStateMachine(config: XStateMachineConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {\n\t\tstate: `t.string<${Object.keys(config.states).map(s => `'${s}'`).join(\" | \")}>()`,\n\t};\n\tconst derivations: Record<string, string> = {};\n\tconst deriveCode: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Add context to facts\n\tif (config.context) {\n\t\tfor (const [key, value] of Object.entries(config.context)) {\n\t\t\tfacts[key] = inferTypeString(value);\n\t\t}\n\t}\n\n\t// Generate state derivations (isActive, isInactive, etc.)\n\tfor (const stateName of Object.keys(config.states)) {\n\t\tconst derivationName = `is${capitalize(stateName)}`;\n\t\tderivations[derivationName] = \"t.boolean()\";\n\t\tderiveCode[derivationName] = `(facts) => facts.state === '${stateName}'`;\n\t}\n\n\t// Collect all events and their transitions\n\tconst eventTransitions = new Map<string, Map<string, string>>();\n\tfor (const [stateName, stateConfig] of Object.entries(config.states)) {\n\t\tif (!stateConfig.on) continue;\n\t\tfor (const [eventName, target] of Object.entries(stateConfig.on)) {\n\t\t\tif (!eventTransitions.has(eventName)) {\n\t\t\t\teventTransitions.set(eventName, new Map());\n\t\t\t}\n\t\t\tconst targetState = typeof target === \"string\" ? target : target.target;\n\t\t\teventTransitions.get(eventName)!.set(stateName, targetState);\n\t\t}\n\t}\n\n\t// Generate events and handlers\n\tfor (const [eventName, transitions] of eventTransitions) {\n\t\tevents[eventName] = {};\n\n\t\tif (transitions.size === 1) {\n\t\t\tconst firstEntry = [...transitions.entries()][0];\n\t\t\tconst toState = firstEntry ? firstEntry[1] : \"unknown\";\n\t\t\teventsCode[eventName] = `(facts) => {\\n facts.state = '${toState}';\\n }`;\n\t\t} else {\n\t\t\tconst cases = [...transitions.entries()]\n\t\t\t\t.map(([from, to]) => ` case '${from}': facts.state = '${to}'; break;`)\n\t\t\t\t.join(\"\\n\");\n\t\t\teventsCode[eventName] = `(facts) => {\\n switch (facts.state) {\\n${cases}\\n }\\n }`;\n\t\t}\n\t}\n\n\t// Generate init code\n\tconst initLines = [` facts.state = '${config.initial}';`];\n\tif (config.context) {\n\t\tfor (const [key, value] of Object.entries(config.context)) {\n\t\t\tinitLines.push(` facts.${key} = ${JSON.stringify(value)};`);\n\t\t}\n\t}\n\tconst initCode = `(facts) => {\\n${initLines.join(\"\\n\")}\\n }`;\n\n\treturn {\n\t\tname: config.id,\n\t\tfacts,\n\t\tderivations,\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode,\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// Code Generation\n// ============================================================================\n\n/**\n * Generate Directive module code from a structure.\n */\nexport function generateModuleCode(structure: DirectiveModuleStructure): string {\n\tconst lines: string[] = [\n\t\t`import { createModule, t } from '@directive-run/core';`,\n\t\t``,\n\t\t`const ${structure.name}Module = createModule('${structure.name}', {`,\n\t\t` schema: {`,\n\t\t` facts: {`,\n\t];\n\n\t// Facts\n\tfor (const [key, type] of Object.entries(structure.facts)) {\n\t\tlines.push(` ${key}: ${type},`);\n\t}\n\tlines.push(` },`);\n\n\t// Derivations\n\tlines.push(` derivations: {`);\n\tfor (const [key, type] of Object.entries(structure.derivations)) {\n\t\tlines.push(` ${key}: ${type},`);\n\t}\n\tlines.push(` },`);\n\n\t// Events\n\tlines.push(` events: {`);\n\tfor (const [key, schema] of Object.entries(structure.events)) {\n\t\tconst schemaStr = Object.entries(schema)\n\t\t\t.map(([k, v]) => `${k}: ${v}`)\n\t\t\t.join(\", \");\n\t\tlines.push(` ${key}: { ${schemaStr} },`);\n\t}\n\tlines.push(` },`);\n\n\t// Requirements\n\tlines.push(` requirements: {},`);\n\tlines.push(` },`);\n\n\t// Init\n\tlines.push(` init: ${structure.initCode},`);\n\n\t// Derive\n\tif (Object.keys(structure.deriveCode).length > 0) {\n\t\tlines.push(` derive: {`);\n\t\tfor (const [key, code] of Object.entries(structure.deriveCode)) {\n\t\t\tlines.push(` ${key}: ${code},`);\n\t\t}\n\t\tlines.push(` },`);\n\t}\n\n\t// Events handlers\n\tlines.push(` events: {`);\n\tfor (const [key, code] of Object.entries(structure.eventsCode)) {\n\t\tlines.push(` ${key}: ${code},`);\n\t}\n\tlines.push(` },`);\n\n\tlines.push(`});`);\n\tlines.push(``);\n\tlines.push(`export { ${structure.name}Module };`);\n\n\treturn lines.join(\"\\n\");\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Infer a t.* type string from a JavaScript value.\n */\nfunction inferTypeString(value: unknown): string {\n\tif (value === null) return \"t.object().nullable()\";\n\tif (value === undefined) return \"t.object().optional()\";\n\n\tswitch (typeof value) {\n\t\tcase \"number\":\n\t\t\treturn \"t.number()\";\n\t\tcase \"string\":\n\t\t\treturn \"t.string()\";\n\t\tcase \"boolean\":\n\t\t\treturn \"t.boolean()\";\n\t\tcase \"object\":\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn \"t.array(t.object())\";\n\t\t\t}\n\t\t\treturn \"t.object()\";\n\t\tdefault:\n\t\t\treturn \"t.object()\";\n\t}\n}\n\n/**\n * Capitalize first letter.\n */\nfunction capitalize(str: string): string {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// ============================================================================\n// Migration Checklist Generator\n// ============================================================================\n\n/**\n * Generate a migration checklist for a given state management pattern.\n */\nexport function generateMigrationChecklist(\n\tsource: \"redux\" | \"zustand\" | \"xstate\",\n): string[] {\n\tconst common = [\n\t\t\"[ ] Install directive: pnpm add directive\",\n\t\t\"[ ] Create module file(s) for your state\",\n\t\t\"[ ] Define schema with facts, derivations, events\",\n\t\t\"[ ] Implement init function for initial state\",\n\t\t\"[ ] Implement event handlers\",\n\t\t\"[ ] Update imports in consuming code\",\n\t\t\"[ ] Test the new implementation\",\n\t\t\"[ ] Remove old state management code\",\n\t];\n\n\tconst sourceSpecific: Record<string, string[]> = {\n\t\tredux: [\n\t\t\t\"[ ] Convert reducers to event handlers\",\n\t\t\t\"[ ] Convert selectors to derivations\",\n\t\t\t\"[ ] Convert thunks to constraints + resolvers\",\n\t\t\t\"[ ] Update useSelector to useDerived\",\n\t\t\t\"[ ] Update useDispatch to system.dispatch\",\n\t\t],\n\t\tzustand: [\n\t\t\t\"[ ] Convert store state to facts\",\n\t\t\t\"[ ] Convert store actions to events\",\n\t\t\t\"[ ] Convert computed getters to derivations\",\n\t\t\t\"[ ] Update useStore hooks to useDirective hooks\",\n\t\t],\n\t\txstate: [\n\t\t\t\"[ ] Convert machine states to a 'state' fact\",\n\t\t\t\"[ ] Convert state checks to derivations (isActive, etc.)\",\n\t\t\t\"[ ] Convert events to Directive events\",\n\t\t\t\"[ ] Convert guards to constraint 'when' conditions\",\n\t\t\t\"[ ] Convert services/actors to constraints + resolvers\",\n\t\t\t\"[ ] Update useMachine to useDirective hooks\",\n\t\t],\n\t};\n\n\tconst specific = sourceSpecific[source] ?? [];\n\treturn [...specific, ...common];\n}\n"]}
package/dist/migration.js CHANGED
@@ -1,25 +1,25 @@
1
- function m(e){let t={},s={},i={};for(let[n,a]of Object.entries(e.initialState))t[n]=p(a);for(let n of Object.keys(e.reducers))n.includes("By")||n.includes("Set")||n.includes("With")?(s[n]={payload:"t.any()"},i[n]=`(facts, { payload }) => {
1
+ function m(e){let t={},s={},i={};for(let[n,c]of Object.entries(e.initialState))t[n]=p(c);for(let n of Object.keys(e.reducers))n.includes("By")||n.includes("Set")||n.includes("With")?(s[n]={payload:"t.object()"},i[n]=`(facts, { payload }) => {
2
2
  // TODO: Implement ${n}
3
3
  }`):(s[n]={},i[n]=`(facts) => {
4
4
  // TODO: Implement ${n}
5
- }`);let c=`(facts) => {
6
- ${Object.entries(e.initialState).map(([n,a])=>` facts.${n} = ${JSON.stringify(a)};`).join(`
5
+ }`);let a=`(facts) => {
6
+ ${Object.entries(e.initialState).map(([n,c])=>` facts.${n} = ${JSON.stringify(c)};`).join(`
7
7
  `)}
8
- }`;return {name:e.name,facts:t,derivations:{},events:s,requirements:{},initCode:c,deriveCode:{},eventsCode:i}}function h(e){let t={},s={},i={};for(let[n,a]of Object.entries(e.state))t[n]=p(a);for(let n of Object.keys(e.actions))s[n]={},i[n]=`(facts) => {
8
+ }`;return {name:e.name,facts:t,derivations:{},events:s,requirements:{},initCode:a,deriveCode:{},eventsCode:i}}function h(e){let t={},s={},i={};for(let[n,c]of Object.entries(e.state))t[n]=p(c);for(let n of Object.keys(e.actions))s[n]={},i[n]=`(facts) => {
9
9
  // TODO: Implement ${n}
10
- }`;let c=`(facts) => {
11
- ${Object.entries(e.state).map(([n,a])=>` facts.${n} = ${JSON.stringify(a)};`).join(`
10
+ }`;let a=`(facts) => {
11
+ ${Object.entries(e.state).map(([n,c])=>` facts.${n} = ${JSON.stringify(c)};`).join(`
12
12
  `)}
13
- }`;return {name:"store",facts:t,derivations:{},events:s,requirements:{},initCode:c,deriveCode:{},eventsCode:i}}function y(e){let t={state:`t.string<${Object.keys(e.states).map(r=>`'${r}'`).join(" | ")}>()`},s={},i={},f={},c={};if(e.context)for(let[r,o]of Object.entries(e.context))t[r]=p(o);for(let r of Object.keys(e.states)){let o=`is${l(r)}`;s[o]="t.boolean()",i[o]=`(facts) => facts.state === '${r}'`;}let n=new Map;for(let[r,o]of Object.entries(e.states))if(o.on)for(let[d,u]of Object.entries(o.on)){n.has(d)||n.set(d,new Map);let g=typeof u=="string"?u:u.target;n.get(d).set(r,g);}for(let[r,o]of n)if(f[r]={},o.size===1){let d=[...o.entries()][0],u=d?d[1]:"unknown";c[r]=`(facts) => {
13
+ }`;return {name:"store",facts:t,derivations:{},events:s,requirements:{},initCode:a,deriveCode:{},eventsCode:i}}function C(e){let t={state:`t.string<${Object.keys(e.states).map(r=>`'${r}'`).join(" | ")}>()`},s={},i={},f={},a={};if(e.context)for(let[r,o]of Object.entries(e.context))t[r]=p(o);for(let r of Object.keys(e.states)){let o=`is${l(r)}`;s[o]="t.boolean()",i[o]=`(facts) => facts.state === '${r}'`;}let n=new Map;for(let[r,o]of Object.entries(e.states))if(o.on)for(let[d,u]of Object.entries(o.on)){n.has(d)||n.set(d,new Map);let g=typeof u=="string"?u:u.target;n.get(d).set(r,g);}for(let[r,o]of n)if(f[r]={},o.size===1){let d=[...o.entries()][0],u=d?d[1]:"unknown";a[r]=`(facts) => {
14
14
  facts.state = '${u}';
15
15
  }`;}else {let d=[...o.entries()].map(([u,g])=>` case '${u}': facts.state = '${g}'; break;`).join(`
16
- `);c[r]=`(facts) => {
16
+ `);a[r]=`(facts) => {
17
17
  switch (facts.state) {
18
18
  ${d}
19
19
  }
20
- }`;}let a=[` facts.state = '${e.initial}';`];if(e.context)for(let[r,o]of Object.entries(e.context))a.push(` facts.${r} = ${JSON.stringify(o)};`);let v=`(facts) => {
21
- ${a.join(`
20
+ }`;}let c=[` facts.state = '${e.initial}';`];if(e.context)for(let[r,o]of Object.entries(e.context))c.push(` facts.${r} = ${JSON.stringify(o)};`);let v=`(facts) => {
21
+ ${c.join(`
22
22
  `)}
23
- }`;return {name:e.id,facts:t,derivations:s,events:f,requirements:{},initCode:v,deriveCode:i,eventsCode:c}}function C(e){let t=["import { createModule, t } from '@directive-run/core';","",`const ${e.name}Module = createModule('${e.name}', {`," schema: {"," facts: {"];for(let[s,i]of Object.entries(e.facts))t.push(` ${s}: ${i},`);t.push(" },"),t.push(" derivations: {");for(let[s,i]of Object.entries(e.derivations))t.push(` ${s}: ${i},`);t.push(" },"),t.push(" events: {");for(let[s,i]of Object.entries(e.events)){let f=Object.entries(i).map(([c,n])=>`${c}: ${n}`).join(", ");t.push(` ${s}: { ${f} },`);}if(t.push(" },"),t.push(" requirements: {},"),t.push(" },"),t.push(` init: ${e.initCode},`),Object.keys(e.deriveCode).length>0){t.push(" derive: {");for(let[s,i]of Object.entries(e.deriveCode))t.push(` ${s}: ${i},`);t.push(" },");}t.push(" events: {");for(let[s,i]of Object.entries(e.eventsCode))t.push(` ${s}: ${i},`);return t.push(" },"),t.push("});"),t.push(""),t.push(`export { ${e.name}Module };`),t.join(`
24
- `)}function p(e){if(e===null)return "t.any().nullable()";if(e===void 0)return "t.any().optional()";switch(typeof e){case "number":return "t.number()";case "string":return "t.string()";case "boolean":return "t.boolean()";case "object":return Array.isArray(e)?"t.array(t.any())":"t.object()";default:return "t.any()"}}function l(e){return e.charAt(0).toUpperCase()+e.slice(1)}function $(e){let t=["[ ] Install directive: pnpm add directive","[ ] Create module file(s) for your state","[ ] Define schema with facts, derivations, events","[ ] Implement init function for initial state","[ ] Implement event handlers","[ ] Update imports in consuming code","[ ] Test the new implementation","[ ] Remove old state management code"];return [...{redux:["[ ] Convert reducers to event handlers","[ ] Convert selectors to derivations","[ ] Convert thunks to constraints + resolvers","[ ] Update useSelector to useDerived","[ ] Update useDispatch to system.dispatch"],zustand:["[ ] Convert store state to facts","[ ] Convert store actions to events","[ ] Convert computed getters to derivations","[ ] Update useStore hooks to useDirective hooks"],xstate:["[ ] Convert machine states to a 'state' fact","[ ] Convert state checks to derivations (isActive, etc.)","[ ] Convert events to Directive events","[ ] Convert guards to constraint 'when' conditions","[ ] Convert services/actors to constraints + resolvers","[ ] Update useMachine to useDirective hooks"]}[e]??[],...t]}export{m as analyzeReduxSlice,y as analyzeXStateMachine,h as analyzeZustandStore,$ as generateMigrationChecklist,C as generateModuleCode};//# sourceMappingURL=migration.js.map
23
+ }`;return {name:e.id,facts:t,derivations:s,events:f,requirements:{},initCode:v,deriveCode:i,eventsCode:a}}function y(e){let t=["import { createModule, t } from '@directive-run/core';","",`const ${e.name}Module = createModule('${e.name}', {`," schema: {"," facts: {"];for(let[s,i]of Object.entries(e.facts))t.push(` ${s}: ${i},`);t.push(" },"),t.push(" derivations: {");for(let[s,i]of Object.entries(e.derivations))t.push(` ${s}: ${i},`);t.push(" },"),t.push(" events: {");for(let[s,i]of Object.entries(e.events)){let f=Object.entries(i).map(([a,n])=>`${a}: ${n}`).join(", ");t.push(` ${s}: { ${f} },`);}if(t.push(" },"),t.push(" requirements: {},"),t.push(" },"),t.push(` init: ${e.initCode},`),Object.keys(e.deriveCode).length>0){t.push(" derive: {");for(let[s,i]of Object.entries(e.deriveCode))t.push(` ${s}: ${i},`);t.push(" },");}t.push(" events: {");for(let[s,i]of Object.entries(e.eventsCode))t.push(` ${s}: ${i},`);return t.push(" },"),t.push("});"),t.push(""),t.push(`export { ${e.name}Module };`),t.join(`
24
+ `)}function p(e){if(e===null)return "t.object().nullable()";if(e===void 0)return "t.object().optional()";switch(typeof e){case "number":return "t.number()";case "string":return "t.string()";case "boolean":return "t.boolean()";case "object":return Array.isArray(e)?"t.array(t.object())":"t.object()";default:return "t.object()"}}function l(e){return e.charAt(0).toUpperCase()+e.slice(1)}function $(e){let t=["[ ] Install directive: pnpm add directive","[ ] Create module file(s) for your state","[ ] Define schema with facts, derivations, events","[ ] Implement init function for initial state","[ ] Implement event handlers","[ ] Update imports in consuming code","[ ] Test the new implementation","[ ] Remove old state management code"];return [...{redux:["[ ] Convert reducers to event handlers","[ ] Convert selectors to derivations","[ ] Convert thunks to constraints + resolvers","[ ] Update useSelector to useDerived","[ ] Update useDispatch to system.dispatch"],zustand:["[ ] Convert store state to facts","[ ] Convert store actions to events","[ ] Convert computed getters to derivations","[ ] Update useStore hooks to useDirective hooks"],xstate:["[ ] Convert machine states to a 'state' fact","[ ] Convert state checks to derivations (isActive, etc.)","[ ] Convert events to Directive events","[ ] Convert guards to constraint 'when' conditions","[ ] Convert services/actors to constraints + resolvers","[ ] Update useMachine to useDirective hooks"]}[e]??[],...t]}export{m as analyzeReduxSlice,C as analyzeXStateMachine,h as analyzeZustandStore,$ as generateMigrationChecklist,y as generateModuleCode};//# sourceMappingURL=migration.js.map
25
25
  //# sourceMappingURL=migration.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/migration.ts"],"names":["analyzeReduxSlice","config","facts","events","eventsCode","key","value","inferTypeString","reducerName","initCode","analyzeZustandStore","actionName","analyzeXStateMachine","s","derivations","deriveCode","stateName","derivationName","capitalize","eventTransitions","stateConfig","eventName","target","targetState","transitions","firstEntry","toState","cases","from","to","initLines","generateModuleCode","structure","lines","type","schema","schemaStr","k","v","code","str","generateMigrationChecklist","source","common"],"mappings":"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","file":"migration.js","sourcesContent":["/**\n * Migration Utilities for Directive\n *\n * Helpers for migrating from Redux, Zustand, or XState to Directive.\n * These utilities help you understand your existing state management\n * and generate equivalent Directive module structures.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Redux slice configuration (simplified) */\nexport interface ReduxSliceConfig {\n\tname: string;\n\tinitialState: Record<string, unknown>;\n\treducers: Record<string, (state: unknown, action?: { payload?: unknown }) => void>;\n}\n\n/** Zustand store configuration (simplified) */\nexport interface ZustandStoreConfig {\n\tstate: Record<string, unknown>;\n\tactions: Record<string, (...args: unknown[]) => void>;\n}\n\n/** XState machine configuration (simplified) */\nexport interface XStateMachineConfig {\n\tid: string;\n\tinitial: string;\n\tstates: Record<string, { on?: Record<string, string | { target: string }> }>;\n\tcontext?: Record<string, unknown>;\n}\n\n/** Generated Directive module structure */\nexport interface DirectiveModuleStructure {\n\tname: string;\n\tfacts: Record<string, string>;\n\tderivations: Record<string, string>;\n\tevents: Record<string, Record<string, string>>;\n\trequirements: Record<string, unknown>;\n\tinitCode: string;\n\tderiveCode: Record<string, string>;\n\teventsCode: Record<string, string>;\n}\n\n// ============================================================================\n// Redux Migration\n// ============================================================================\n\n/**\n * Analyze a Redux slice and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const reduxConfig = {\n * name: 'counter',\n * initialState: { value: 0, status: 'idle' },\n * reducers: {\n * increment: (state) => { state.value += 1; },\n * decrement: (state) => { state.value -= 1; },\n * },\n * };\n *\n * const structure = analyzeReduxSlice(reduxConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeReduxSlice(config: ReduxSliceConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Analyze initial state to generate facts\n\tfor (const [key, value] of Object.entries(config.initialState)) {\n\t\tfacts[key] = inferTypeString(value);\n\t}\n\n\t// Analyze reducers to generate events\n\tfor (const reducerName of Object.keys(config.reducers)) {\n\t\t// Simple heuristic: if reducer name suggests payload, add it\n\t\tconst hasPayload = reducerName.includes(\"By\") || reducerName.includes(\"Set\") || reducerName.includes(\"With\");\n\t\tif (hasPayload) {\n\t\t\tevents[reducerName] = { payload: \"t.any()\" };\n\t\t\teventsCode[reducerName] = `(facts, { payload }) => {\\n // TODO: Implement ${reducerName}\\n }`;\n\t\t} else {\n\t\t\tevents[reducerName] = {};\n\t\t\teventsCode[reducerName] = `(facts) => {\\n // TODO: Implement ${reducerName}\\n }`;\n\t\t}\n\t}\n\n\t// Generate init code\n\tconst initLines = Object.entries(config.initialState)\n\t\t.map(([key, value]) => ` facts.${key} = ${JSON.stringify(value)};`)\n\t\t.join(\"\\n\");\n\tconst initCode = `(facts) => {\\n${initLines}\\n }`;\n\n\treturn {\n\t\tname: config.name,\n\t\tfacts,\n\t\tderivations: {},\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode: {},\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// Zustand Migration\n// ============================================================================\n\n/**\n * Analyze a Zustand store and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const zustandConfig = {\n * state: { count: 0, loading: false },\n * actions: {\n * increment: () => {},\n * decrement: () => {},\n * setLoading: (loading: boolean) => {},\n * },\n * };\n *\n * const structure = analyzeZustandStore(zustandConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeZustandStore(config: ZustandStoreConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Analyze state\n\tfor (const [key, value] of Object.entries(config.state)) {\n\t\tfacts[key] = inferTypeString(value);\n\t}\n\n\t// Analyze actions\n\tfor (const actionName of Object.keys(config.actions)) {\n\t\tevents[actionName] = {};\n\t\teventsCode[actionName] = `(facts) => {\\n // TODO: Implement ${actionName}\\n }`;\n\t}\n\n\t// Generate init code\n\tconst initLines = Object.entries(config.state)\n\t\t.map(([key, value]) => ` facts.${key} = ${JSON.stringify(value)};`)\n\t\t.join(\"\\n\");\n\tconst initCode = `(facts) => {\\n${initLines}\\n }`;\n\n\treturn {\n\t\tname: \"store\",\n\t\tfacts,\n\t\tderivations: {},\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode: {},\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// XState Migration\n// ============================================================================\n\n/**\n * Analyze an XState machine and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const xstateConfig = {\n * id: 'toggle',\n * initial: 'inactive',\n * states: {\n * inactive: { on: { TOGGLE: 'active' } },\n * active: { on: { TOGGLE: 'inactive' } },\n * },\n * };\n *\n * const structure = analyzeXStateMachine(xstateConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeXStateMachine(config: XStateMachineConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {\n\t\tstate: `t.string<${Object.keys(config.states).map(s => `'${s}'`).join(\" | \")}>()`,\n\t};\n\tconst derivations: Record<string, string> = {};\n\tconst deriveCode: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Add context to facts\n\tif (config.context) {\n\t\tfor (const [key, value] of Object.entries(config.context)) {\n\t\t\tfacts[key] = inferTypeString(value);\n\t\t}\n\t}\n\n\t// Generate state derivations (isActive, isInactive, etc.)\n\tfor (const stateName of Object.keys(config.states)) {\n\t\tconst derivationName = `is${capitalize(stateName)}`;\n\t\tderivations[derivationName] = \"t.boolean()\";\n\t\tderiveCode[derivationName] = `(facts) => facts.state === '${stateName}'`;\n\t}\n\n\t// Collect all events and their transitions\n\tconst eventTransitions = new Map<string, Map<string, string>>();\n\tfor (const [stateName, stateConfig] of Object.entries(config.states)) {\n\t\tif (!stateConfig.on) continue;\n\t\tfor (const [eventName, target] of Object.entries(stateConfig.on)) {\n\t\t\tif (!eventTransitions.has(eventName)) {\n\t\t\t\teventTransitions.set(eventName, new Map());\n\t\t\t}\n\t\t\tconst targetState = typeof target === \"string\" ? target : target.target;\n\t\t\teventTransitions.get(eventName)!.set(stateName, targetState);\n\t\t}\n\t}\n\n\t// Generate events and handlers\n\tfor (const [eventName, transitions] of eventTransitions) {\n\t\tevents[eventName] = {};\n\n\t\tif (transitions.size === 1) {\n\t\t\tconst firstEntry = [...transitions.entries()][0];\n\t\t\tconst toState = firstEntry ? firstEntry[1] : \"unknown\";\n\t\t\teventsCode[eventName] = `(facts) => {\\n facts.state = '${toState}';\\n }`;\n\t\t} else {\n\t\t\tconst cases = [...transitions.entries()]\n\t\t\t\t.map(([from, to]) => ` case '${from}': facts.state = '${to}'; break;`)\n\t\t\t\t.join(\"\\n\");\n\t\t\teventsCode[eventName] = `(facts) => {\\n switch (facts.state) {\\n${cases}\\n }\\n }`;\n\t\t}\n\t}\n\n\t// Generate init code\n\tconst initLines = [` facts.state = '${config.initial}';`];\n\tif (config.context) {\n\t\tfor (const [key, value] of Object.entries(config.context)) {\n\t\t\tinitLines.push(` facts.${key} = ${JSON.stringify(value)};`);\n\t\t}\n\t}\n\tconst initCode = `(facts) => {\\n${initLines.join(\"\\n\")}\\n }`;\n\n\treturn {\n\t\tname: config.id,\n\t\tfacts,\n\t\tderivations,\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode,\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// Code Generation\n// ============================================================================\n\n/**\n * Generate Directive module code from a structure.\n */\nexport function generateModuleCode(structure: DirectiveModuleStructure): string {\n\tconst lines: string[] = [\n\t\t`import { createModule, t } from '@directive-run/core';`,\n\t\t``,\n\t\t`const ${structure.name}Module = createModule('${structure.name}', {`,\n\t\t` schema: {`,\n\t\t` facts: {`,\n\t];\n\n\t// Facts\n\tfor (const [key, type] of Object.entries(structure.facts)) {\n\t\tlines.push(` ${key}: ${type},`);\n\t}\n\tlines.push(` },`);\n\n\t// Derivations\n\tlines.push(` derivations: {`);\n\tfor (const [key, type] of Object.entries(structure.derivations)) {\n\t\tlines.push(` ${key}: ${type},`);\n\t}\n\tlines.push(` },`);\n\n\t// Events\n\tlines.push(` events: {`);\n\tfor (const [key, schema] of Object.entries(structure.events)) {\n\t\tconst schemaStr = Object.entries(schema)\n\t\t\t.map(([k, v]) => `${k}: ${v}`)\n\t\t\t.join(\", \");\n\t\tlines.push(` ${key}: { ${schemaStr} },`);\n\t}\n\tlines.push(` },`);\n\n\t// Requirements\n\tlines.push(` requirements: {},`);\n\tlines.push(` },`);\n\n\t// Init\n\tlines.push(` init: ${structure.initCode},`);\n\n\t// Derive\n\tif (Object.keys(structure.deriveCode).length > 0) {\n\t\tlines.push(` derive: {`);\n\t\tfor (const [key, code] of Object.entries(structure.deriveCode)) {\n\t\t\tlines.push(` ${key}: ${code},`);\n\t\t}\n\t\tlines.push(` },`);\n\t}\n\n\t// Events handlers\n\tlines.push(` events: {`);\n\tfor (const [key, code] of Object.entries(structure.eventsCode)) {\n\t\tlines.push(` ${key}: ${code},`);\n\t}\n\tlines.push(` },`);\n\n\tlines.push(`});`);\n\tlines.push(``);\n\tlines.push(`export { ${structure.name}Module };`);\n\n\treturn lines.join(\"\\n\");\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Infer a t.* type string from a JavaScript value.\n */\nfunction inferTypeString(value: unknown): string {\n\tif (value === null) return \"t.any().nullable()\";\n\tif (value === undefined) return \"t.any().optional()\";\n\n\tswitch (typeof value) {\n\t\tcase \"number\":\n\t\t\treturn \"t.number()\";\n\t\tcase \"string\":\n\t\t\treturn \"t.string()\";\n\t\tcase \"boolean\":\n\t\t\treturn \"t.boolean()\";\n\t\tcase \"object\":\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn \"t.array(t.any())\";\n\t\t\t}\n\t\t\treturn \"t.object()\";\n\t\tdefault:\n\t\t\treturn \"t.any()\";\n\t}\n}\n\n/**\n * Capitalize first letter.\n */\nfunction capitalize(str: string): string {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// ============================================================================\n// Migration Checklist Generator\n// ============================================================================\n\n/**\n * Generate a migration checklist for a given state management pattern.\n */\nexport function generateMigrationChecklist(\n\tsource: \"redux\" | \"zustand\" | \"xstate\",\n): string[] {\n\tconst common = [\n\t\t\"[ ] Install directive: pnpm add directive\",\n\t\t\"[ ] Create module file(s) for your state\",\n\t\t\"[ ] Define schema with facts, derivations, events\",\n\t\t\"[ ] Implement init function for initial state\",\n\t\t\"[ ] Implement event handlers\",\n\t\t\"[ ] Update imports in consuming code\",\n\t\t\"[ ] Test the new implementation\",\n\t\t\"[ ] Remove old state management code\",\n\t];\n\n\tconst sourceSpecific: Record<string, string[]> = {\n\t\tredux: [\n\t\t\t\"[ ] Convert reducers to event handlers\",\n\t\t\t\"[ ] Convert selectors to derivations\",\n\t\t\t\"[ ] Convert thunks to constraints + resolvers\",\n\t\t\t\"[ ] Update useSelector to useDerived\",\n\t\t\t\"[ ] Update useDispatch to system.dispatch\",\n\t\t],\n\t\tzustand: [\n\t\t\t\"[ ] Convert store state to facts\",\n\t\t\t\"[ ] Convert store actions to events\",\n\t\t\t\"[ ] Convert computed getters to derivations\",\n\t\t\t\"[ ] Update useStore hooks to useDirective hooks\",\n\t\t],\n\t\txstate: [\n\t\t\t\"[ ] Convert machine states to a 'state' fact\",\n\t\t\t\"[ ] Convert state checks to derivations (isActive, etc.)\",\n\t\t\t\"[ ] Convert events to Directive events\",\n\t\t\t\"[ ] Convert guards to constraint 'when' conditions\",\n\t\t\t\"[ ] Convert services/actors to constraints + resolvers\",\n\t\t\t\"[ ] Update useMachine to useDirective hooks\",\n\t\t],\n\t};\n\n\tconst specific = sourceSpecific[source] ?? [];\n\treturn [...specific, ...common];\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/migration.ts"],"names":["analyzeReduxSlice","config","facts","events","eventsCode","key","value","inferTypeString","reducerName","initCode","analyzeZustandStore","actionName","analyzeXStateMachine","s","derivations","deriveCode","stateName","derivationName","capitalize","eventTransitions","stateConfig","eventName","target","targetState","transitions","firstEntry","toState","cases","from","to","initLines","generateModuleCode","structure","lines","type","schema","schemaStr","k","v","code","str","generateMigrationChecklist","source","common"],"mappings":"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","file":"migration.js","sourcesContent":["/**\n * Migration Utilities for Directive\n *\n * Helpers for migrating from Redux, Zustand, or XState to Directive.\n * These utilities help you understand your existing state management\n * and generate equivalent Directive module structures.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Redux slice configuration (simplified) */\nexport interface ReduxSliceConfig {\n\tname: string;\n\tinitialState: Record<string, unknown>;\n\treducers: Record<string, (state: unknown, action?: { payload?: unknown }) => void>;\n}\n\n/** Zustand store configuration (simplified) */\nexport interface ZustandStoreConfig {\n\tstate: Record<string, unknown>;\n\tactions: Record<string, (...args: unknown[]) => void>;\n}\n\n/** XState machine configuration (simplified) */\nexport interface XStateMachineConfig {\n\tid: string;\n\tinitial: string;\n\tstates: Record<string, { on?: Record<string, string | { target: string }> }>;\n\tcontext?: Record<string, unknown>;\n}\n\n/** Generated Directive module structure */\nexport interface DirectiveModuleStructure {\n\tname: string;\n\tfacts: Record<string, string>;\n\tderivations: Record<string, string>;\n\tevents: Record<string, Record<string, string>>;\n\trequirements: Record<string, unknown>;\n\tinitCode: string;\n\tderiveCode: Record<string, string>;\n\teventsCode: Record<string, string>;\n}\n\n// ============================================================================\n// Redux Migration\n// ============================================================================\n\n/**\n * Analyze a Redux slice and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const reduxConfig = {\n * name: 'counter',\n * initialState: { value: 0, status: 'idle' },\n * reducers: {\n * increment: (state) => { state.value += 1; },\n * decrement: (state) => { state.value -= 1; },\n * },\n * };\n *\n * const structure = analyzeReduxSlice(reduxConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeReduxSlice(config: ReduxSliceConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Analyze initial state to generate facts\n\tfor (const [key, value] of Object.entries(config.initialState)) {\n\t\tfacts[key] = inferTypeString(value);\n\t}\n\n\t// Analyze reducers to generate events\n\tfor (const reducerName of Object.keys(config.reducers)) {\n\t\t// Simple heuristic: if reducer name suggests payload, add it\n\t\tconst hasPayload = reducerName.includes(\"By\") || reducerName.includes(\"Set\") || reducerName.includes(\"With\");\n\t\tif (hasPayload) {\n\t\t\tevents[reducerName] = { payload: \"t.object()\" };\n\t\t\teventsCode[reducerName] = `(facts, { payload }) => {\\n // TODO: Implement ${reducerName}\\n }`;\n\t\t} else {\n\t\t\tevents[reducerName] = {};\n\t\t\teventsCode[reducerName] = `(facts) => {\\n // TODO: Implement ${reducerName}\\n }`;\n\t\t}\n\t}\n\n\t// Generate init code\n\tconst initLines = Object.entries(config.initialState)\n\t\t.map(([key, value]) => ` facts.${key} = ${JSON.stringify(value)};`)\n\t\t.join(\"\\n\");\n\tconst initCode = `(facts) => {\\n${initLines}\\n }`;\n\n\treturn {\n\t\tname: config.name,\n\t\tfacts,\n\t\tderivations: {},\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode: {},\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// Zustand Migration\n// ============================================================================\n\n/**\n * Analyze a Zustand store and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const zustandConfig = {\n * state: { count: 0, loading: false },\n * actions: {\n * increment: () => {},\n * decrement: () => {},\n * setLoading: (loading: boolean) => {},\n * },\n * };\n *\n * const structure = analyzeZustandStore(zustandConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeZustandStore(config: ZustandStoreConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Analyze state\n\tfor (const [key, value] of Object.entries(config.state)) {\n\t\tfacts[key] = inferTypeString(value);\n\t}\n\n\t// Analyze actions\n\tfor (const actionName of Object.keys(config.actions)) {\n\t\tevents[actionName] = {};\n\t\teventsCode[actionName] = `(facts) => {\\n // TODO: Implement ${actionName}\\n }`;\n\t}\n\n\t// Generate init code\n\tconst initLines = Object.entries(config.state)\n\t\t.map(([key, value]) => ` facts.${key} = ${JSON.stringify(value)};`)\n\t\t.join(\"\\n\");\n\tconst initCode = `(facts) => {\\n${initLines}\\n }`;\n\n\treturn {\n\t\tname: \"store\",\n\t\tfacts,\n\t\tderivations: {},\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode: {},\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// XState Migration\n// ============================================================================\n\n/**\n * Analyze an XState machine and generate a Directive module structure.\n *\n * @example\n * ```typescript\n * const xstateConfig = {\n * id: 'toggle',\n * initial: 'inactive',\n * states: {\n * inactive: { on: { TOGGLE: 'active' } },\n * active: { on: { TOGGLE: 'inactive' } },\n * },\n * };\n *\n * const structure = analyzeXStateMachine(xstateConfig);\n * console.log(generateModuleCode(structure));\n * ```\n */\nexport function analyzeXStateMachine(config: XStateMachineConfig): DirectiveModuleStructure {\n\tconst facts: Record<string, string> = {\n\t\tstate: `t.string<${Object.keys(config.states).map(s => `'${s}'`).join(\" | \")}>()`,\n\t};\n\tconst derivations: Record<string, string> = {};\n\tconst deriveCode: Record<string, string> = {};\n\tconst events: Record<string, Record<string, string>> = {};\n\tconst eventsCode: Record<string, string> = {};\n\n\t// Add context to facts\n\tif (config.context) {\n\t\tfor (const [key, value] of Object.entries(config.context)) {\n\t\t\tfacts[key] = inferTypeString(value);\n\t\t}\n\t}\n\n\t// Generate state derivations (isActive, isInactive, etc.)\n\tfor (const stateName of Object.keys(config.states)) {\n\t\tconst derivationName = `is${capitalize(stateName)}`;\n\t\tderivations[derivationName] = \"t.boolean()\";\n\t\tderiveCode[derivationName] = `(facts) => facts.state === '${stateName}'`;\n\t}\n\n\t// Collect all events and their transitions\n\tconst eventTransitions = new Map<string, Map<string, string>>();\n\tfor (const [stateName, stateConfig] of Object.entries(config.states)) {\n\t\tif (!stateConfig.on) continue;\n\t\tfor (const [eventName, target] of Object.entries(stateConfig.on)) {\n\t\t\tif (!eventTransitions.has(eventName)) {\n\t\t\t\teventTransitions.set(eventName, new Map());\n\t\t\t}\n\t\t\tconst targetState = typeof target === \"string\" ? target : target.target;\n\t\t\teventTransitions.get(eventName)!.set(stateName, targetState);\n\t\t}\n\t}\n\n\t// Generate events and handlers\n\tfor (const [eventName, transitions] of eventTransitions) {\n\t\tevents[eventName] = {};\n\n\t\tif (transitions.size === 1) {\n\t\t\tconst firstEntry = [...transitions.entries()][0];\n\t\t\tconst toState = firstEntry ? firstEntry[1] : \"unknown\";\n\t\t\teventsCode[eventName] = `(facts) => {\\n facts.state = '${toState}';\\n }`;\n\t\t} else {\n\t\t\tconst cases = [...transitions.entries()]\n\t\t\t\t.map(([from, to]) => ` case '${from}': facts.state = '${to}'; break;`)\n\t\t\t\t.join(\"\\n\");\n\t\t\teventsCode[eventName] = `(facts) => {\\n switch (facts.state) {\\n${cases}\\n }\\n }`;\n\t\t}\n\t}\n\n\t// Generate init code\n\tconst initLines = [` facts.state = '${config.initial}';`];\n\tif (config.context) {\n\t\tfor (const [key, value] of Object.entries(config.context)) {\n\t\t\tinitLines.push(` facts.${key} = ${JSON.stringify(value)};`);\n\t\t}\n\t}\n\tconst initCode = `(facts) => {\\n${initLines.join(\"\\n\")}\\n }`;\n\n\treturn {\n\t\tname: config.id,\n\t\tfacts,\n\t\tderivations,\n\t\tevents,\n\t\trequirements: {},\n\t\tinitCode,\n\t\tderiveCode,\n\t\teventsCode,\n\t};\n}\n\n// ============================================================================\n// Code Generation\n// ============================================================================\n\n/**\n * Generate Directive module code from a structure.\n */\nexport function generateModuleCode(structure: DirectiveModuleStructure): string {\n\tconst lines: string[] = [\n\t\t`import { createModule, t } from '@directive-run/core';`,\n\t\t``,\n\t\t`const ${structure.name}Module = createModule('${structure.name}', {`,\n\t\t` schema: {`,\n\t\t` facts: {`,\n\t];\n\n\t// Facts\n\tfor (const [key, type] of Object.entries(structure.facts)) {\n\t\tlines.push(` ${key}: ${type},`);\n\t}\n\tlines.push(` },`);\n\n\t// Derivations\n\tlines.push(` derivations: {`);\n\tfor (const [key, type] of Object.entries(structure.derivations)) {\n\t\tlines.push(` ${key}: ${type},`);\n\t}\n\tlines.push(` },`);\n\n\t// Events\n\tlines.push(` events: {`);\n\tfor (const [key, schema] of Object.entries(structure.events)) {\n\t\tconst schemaStr = Object.entries(schema)\n\t\t\t.map(([k, v]) => `${k}: ${v}`)\n\t\t\t.join(\", \");\n\t\tlines.push(` ${key}: { ${schemaStr} },`);\n\t}\n\tlines.push(` },`);\n\n\t// Requirements\n\tlines.push(` requirements: {},`);\n\tlines.push(` },`);\n\n\t// Init\n\tlines.push(` init: ${structure.initCode},`);\n\n\t// Derive\n\tif (Object.keys(structure.deriveCode).length > 0) {\n\t\tlines.push(` derive: {`);\n\t\tfor (const [key, code] of Object.entries(structure.deriveCode)) {\n\t\t\tlines.push(` ${key}: ${code},`);\n\t\t}\n\t\tlines.push(` },`);\n\t}\n\n\t// Events handlers\n\tlines.push(` events: {`);\n\tfor (const [key, code] of Object.entries(structure.eventsCode)) {\n\t\tlines.push(` ${key}: ${code},`);\n\t}\n\tlines.push(` },`);\n\n\tlines.push(`});`);\n\tlines.push(``);\n\tlines.push(`export { ${structure.name}Module };`);\n\n\treturn lines.join(\"\\n\");\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Infer a t.* type string from a JavaScript value.\n */\nfunction inferTypeString(value: unknown): string {\n\tif (value === null) return \"t.object().nullable()\";\n\tif (value === undefined) return \"t.object().optional()\";\n\n\tswitch (typeof value) {\n\t\tcase \"number\":\n\t\t\treturn \"t.number()\";\n\t\tcase \"string\":\n\t\t\treturn \"t.string()\";\n\t\tcase \"boolean\":\n\t\t\treturn \"t.boolean()\";\n\t\tcase \"object\":\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn \"t.array(t.object())\";\n\t\t\t}\n\t\t\treturn \"t.object()\";\n\t\tdefault:\n\t\t\treturn \"t.object()\";\n\t}\n}\n\n/**\n * Capitalize first letter.\n */\nfunction capitalize(str: string): string {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// ============================================================================\n// Migration Checklist Generator\n// ============================================================================\n\n/**\n * Generate a migration checklist for a given state management pattern.\n */\nexport function generateMigrationChecklist(\n\tsource: \"redux\" | \"zustand\" | \"xstate\",\n): string[] {\n\tconst common = [\n\t\t\"[ ] Install directive: pnpm add directive\",\n\t\t\"[ ] Create module file(s) for your state\",\n\t\t\"[ ] Define schema with facts, derivations, events\",\n\t\t\"[ ] Implement init function for initial state\",\n\t\t\"[ ] Implement event handlers\",\n\t\t\"[ ] Update imports in consuming code\",\n\t\t\"[ ] Test the new implementation\",\n\t\t\"[ ] Remove old state management code\",\n\t];\n\n\tconst sourceSpecific: Record<string, string[]> = {\n\t\tredux: [\n\t\t\t\"[ ] Convert reducers to event handlers\",\n\t\t\t\"[ ] Convert selectors to derivations\",\n\t\t\t\"[ ] Convert thunks to constraints + resolvers\",\n\t\t\t\"[ ] Update useSelector to useDerived\",\n\t\t\t\"[ ] Update useDispatch to system.dispatch\",\n\t\t],\n\t\tzustand: [\n\t\t\t\"[ ] Convert store state to facts\",\n\t\t\t\"[ ] Convert store actions to events\",\n\t\t\t\"[ ] Convert computed getters to derivations\",\n\t\t\t\"[ ] Update useStore hooks to useDirective hooks\",\n\t\t],\n\t\txstate: [\n\t\t\t\"[ ] Convert machine states to a 'state' fact\",\n\t\t\t\"[ ] Convert state checks to derivations (isActive, etc.)\",\n\t\t\t\"[ ] Convert events to Directive events\",\n\t\t\t\"[ ] Convert guards to constraint 'when' conditions\",\n\t\t\t\"[ ] Convert services/actors to constraints + resolvers\",\n\t\t\t\"[ ] Update useMachine to useDirective hooks\",\n\t\t],\n\t};\n\n\tconst specific = sourceSpecific[source] ?? [];\n\treturn [...specific, ...common];\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { M as ModuleSchema, P as Plugin, J as System } from '../plugins-CcwEXXMS.cjs';
1
+ import { M as ModuleSchema, P as Plugin, J as System } from '../plugins-KKRG7lDP.cjs';
2
2
 
3
3
  /**
4
4
  * Logging Plugin - Console logging for Directive events
@@ -1,4 +1,4 @@
1
- import { M as ModuleSchema, P as Plugin, J as System } from '../plugins-CcwEXXMS.js';
1
+ import { M as ModuleSchema, P as Plugin, J as System } from '../plugins-KKRG7lDP.js';
2
2
 
3
3
  /**
4
4
  * Logging Plugin - Console logging for Directive events
@@ -1357,6 +1357,12 @@ interface ModuleDef<M extends ModuleSchema = ModuleSchema> {
1357
1357
  constraints?: TypedConstraintsDef<M>;
1358
1358
  resolvers?: TypedResolversDef<M>;
1359
1359
  hooks?: ModuleHooks<M>;
1360
+ /**
1361
+ * Events that create time-travel snapshots.
1362
+ * If omitted, ALL events create snapshots (default).
1363
+ * If provided, only listed events create snapshots for undo/redo.
1364
+ */
1365
+ snapshotEvents?: Array<keyof GetEventsSchema<M> & string>;
1360
1366
  /**
1361
1367
  * Cross-module dependencies (runtime marker).
1362
1368
  * When present, constraints/effects receive `facts.self.*` + `facts.{dep}.*`.
@@ -1401,6 +1407,8 @@ type EventsAccessor<M extends ModuleSchema> = EventsAccessorFromSchema<M>;
1401
1407
  interface DebugConfig {
1402
1408
  timeTravel?: boolean;
1403
1409
  maxSnapshots?: number;
1410
+ /** Only snapshot events from these modules. Omit to snapshot all modules. Multi-module only. */
1411
+ snapshotModules?: string[];
1404
1412
  }
1405
1413
  /** Time-travel API */
1406
1414
  interface TimeTravelAPI {
@@ -1511,7 +1519,9 @@ interface DistributableSnapshotOptions {
1511
1519
  *
1512
1520
  * // Later, in an API route (no Directive runtime needed)
1513
1521
  * const cached = JSON.parse(await redis.get(`entitlements:${userId}`));
1514
- * if (!cached.data.canUseFeature.api) throw new ForbiddenError();
1522
+ * if (!cached.data.canUseFeature.api) {
1523
+ * throw new ForbiddenError();
1524
+ * }
1515
1525
  * ```
1516
1526
  */
1517
1527
  interface DistributableSnapshot<T = Record<string, unknown>> {
@@ -1357,6 +1357,12 @@ interface ModuleDef<M extends ModuleSchema = ModuleSchema> {
1357
1357
  constraints?: TypedConstraintsDef<M>;
1358
1358
  resolvers?: TypedResolversDef<M>;
1359
1359
  hooks?: ModuleHooks<M>;
1360
+ /**
1361
+ * Events that create time-travel snapshots.
1362
+ * If omitted, ALL events create snapshots (default).
1363
+ * If provided, only listed events create snapshots for undo/redo.
1364
+ */
1365
+ snapshotEvents?: Array<keyof GetEventsSchema<M> & string>;
1360
1366
  /**
1361
1367
  * Cross-module dependencies (runtime marker).
1362
1368
  * When present, constraints/effects receive `facts.self.*` + `facts.{dep}.*`.
@@ -1401,6 +1407,8 @@ type EventsAccessor<M extends ModuleSchema> = EventsAccessorFromSchema<M>;
1401
1407
  interface DebugConfig {
1402
1408
  timeTravel?: boolean;
1403
1409
  maxSnapshots?: number;
1410
+ /** Only snapshot events from these modules. Omit to snapshot all modules. Multi-module only. */
1411
+ snapshotModules?: string[];
1404
1412
  }
1405
1413
  /** Time-travel API */
1406
1414
  interface TimeTravelAPI {
@@ -1511,7 +1519,9 @@ interface DistributableSnapshotOptions {
1511
1519
  *
1512
1520
  * // Later, in an API route (no Directive runtime needed)
1513
1521
  * const cached = JSON.parse(await redis.get(`entitlements:${userId}`));
1514
- * if (!cached.data.canUseFeature.api) throw new ForbiddenError();
1522
+ * if (!cached.data.canUseFeature.api) {
1523
+ * throw new ForbiddenError();
1524
+ * }
1515
1525
  * ```
1516
1526
  */
1517
1527
  interface DistributableSnapshot<T = Record<string, unknown>> {