Files
BreakEscape/scripts/__pycache__/extract_lockpicking_methods.cpython-312.pyc

298 lines
28 KiB
Plaintext
Raw Normal View History

<EFBFBD>
B<><42>h/r<00><00><><00>dZddlZddlZddlZddlmZddlmZmZm Z m
Z
m Z Gd<05>d<06>Z Gd<07>d<08>Z Gd <09>d
<EFBFBD>Zd <0B>Zed k(re<0F>yy) a<>
Extract methods from lockpicking-game-phaser.js into separate modules.
Usage:
python3 extract_lockpicking_methods.py --methods "method1,method2,method3" --output-file "output.js" [--class-name "ClassName"]
Example:
python3 extract_lockpicking_methods.py \
--methods "createLockBackground,createTensionWrench,createHookPick" \
--output-file "lock-graphics.js" \
--class-name "LockGraphics"
<EFBFBD>N)<01>Path)<05>List<73>Dict<63>Tuple<6C>Optional<61>Setc <00><><00>eZdZdZdefd<03>Zddededefd<07>Zdedee e
e
ffd <09>Z dded
edeefd <0B>Z dd e ed
edeeeffd <0A>Zdeeefdeefd<0F>Zededefd<11><04>Zy)<15>MethodExtractorz,Extract methods from JavaScript class files.<2E>
input_filec<00><><00>t|<01>|_|jjd<01><02>|_|jj d<03>|_y)z Initialize with input file path.<2E>utf-8<><01>encoding<6E>
N)rr <00> read_text<78>content<6E>split<69>lines)<02>selfr s <20>_/home/cliffe/Files/Projects/Code/BreakEscape/BreakEscape/scripts/extract_lockpicking_methods.py<70>__init__zMethodExtractor.__init__s=<00><00><1E>z<EFBFBD>*<2A><04><0F><1B><EFBFBD><EFBFBD>0<>0<>'<27>0<>B<><04> <0C><19>\<5C>\<5C>'<27>'<27><04>-<2D><04>
<EFBFBD><00>code<64>use_parent_keyword<72>returnc<00><00>|s|S|jd<01>}g}|D]]}|j<00>jd<02>r|j|<05><00>4|}t j
dd|<06>}|j|<06><00>_dj |<04>S)a<>
Replace 'this' references with 'this.parent' for extracted modules.
This allows extracted methods to access the parent instance state properly.
Uses 'this.parent' so it works within instance methods.
Args:
code: Method code containing 'this' references
use_parent_keyword: If True, replace 'this' with 'this.parent'; if False, leave as-is
Returns:
Modified code with replacements
r<00>//z\bthis\.z this.parent.)r<00>strip<69>
startswith<EFBFBD>append<6E>re<72>sub<75>join)rrrr<00>modified_lines<65>line<6E> modified_lines r<00>replace_this_with_parentz(MethodExtractor.replace_this_with_parents<><00><00>"<22><17>K<EFBFBD><14>
<EFBFBD>
<EFBFBD>4<EFBFBD> <20><05><1B><0E><19> 1<>D<EFBFBD><13>z<EFBFBD>z<EFBFBD>|<7C>&<26>&<26>t<EFBFBD>,<2C><1E>%<25>%<25>d<EFBFBD>+<2B><18> <20>M<EFBFBD><1F>F<EFBFBD>F<EFBFBD>;<3B><0E> <0A>N<>M<EFBFBD> <1A> !<21> !<21>-<2D> 0<> 1<><14>y<EFBFBD>y<EFBFBD><1E>(<28>(r<00> method_namec<00><00>dtj|<01><00>d<02>}d}t|j<00>D]\}}tj||<05>s<01>|}n|<03>y|}t |t |j<00><00>D]}d|j|vs<01>|}nd}d}d} t |t |j<00><00>D]@}|j|}|D]&}
|
dk(r|dz }d}<08>|
d k(s<01>|s<01>|dz}|dk(s<01>$|} n| <09><01>@n| <09>y|| fS)
z<EFBFBD>
Find method definition and return start/end line numbers (0-indexed).
Returns:
Tuple of (start_line, end_line) or None if not found
<20>^\s*<2A>\s*\(N<>{rF<>T<>})r!<00>escape<70> enumerater<00>match<63>range<67>len) rr(<00>method_pattern<72>
start_line<EFBFBD>ir%<00>
brace_line<EFBFBD> brace_count<6E> found_opening<6E>end_line<6E>chars r<00> find_methodzMethodExtractor.find_methodCsA<00><00>!<21><12><19><19>;<3B>!7<> 8<><05>><3E><0E><19>
<EFBFBD> <20><14><1A><1A>,<2C> <16>G<EFBFBD>A<EFBFBD>t<EFBFBD><11>x<EFBFBD>x<EFBFBD><0E><04>-<2D><1E>
<EFBFBD><15> <16>
<16> <1D><17> <20>
<EFBFBD><16>z<EFBFBD>3<EFBFBD>t<EFBFBD>z<EFBFBD>z<EFBFBD>?<3F>3<> <16>A<EFBFBD><12>d<EFBFBD>j<EFBFBD>j<EFBFBD><11>m<EFBFBD>#<23><1E>
<EFBFBD><15> <16> <18> <0B><1D> <0A><17><08><16>z<EFBFBD>3<EFBFBD>t<EFBFBD>z<EFBFBD>z<EFBFBD>?<3F>3<> <16>A<EFBFBD><17>:<3A>:<3A>a<EFBFBD>=<3D>D<EFBFBD><1C> "<22><04><17>3<EFBFBD>;<3B><1F>1<EFBFBD>$<24>K<EFBFBD>$(<28>M<EFBFBD><19>S<EFBFBD>[<5B>$<24>#<23>q<EFBFBD>(<28> <0B>&<26>!<21>+<2B>'(<28>H<EFBFBD>!<21> "<22><18>#<23><15> <16>" <14> <1B><17><1A>H<EFBFBD>%<25>%r<00> replace_thisc<00><><00>|j|<01>}|<03> td|<01>d<03>tj<00><04>y|\}}|j||dz}g}|D]I}|j d<06>r%|j <00>r|j|dd<00><00>9|j|<08><00>Kdj|<07>} |r|j| d <09>
<EFBFBD>} | S) a#
Extract a single method as a string.
Args:
method_name: Name of method to extract
replace_this: If True, replace 'this' with 'parent' for module usage
Returns:
Method code as string, or None if not found
Nu ❌ Method 'z ' not found<6E><01>filer-<00> <20>rT)r)
r<<00>print<6E>sys<79>stderrrrrr r#r')
rr(r=<00>resultr5r:<00> method_lines<65>dedented_linesr%<00> method_codes
r<00>extract_methodzMethodExtractor.extract_methodxs<><00><00><16>!<21>!<21>+<2B>.<2E><06> <11>><3E> <11>L<EFBFBD><1B> <0A>[<5B>9<><03>
<EFBFBD>
<EFBFBD> K<><17>%<25><1C>
<EFBFBD>H<EFBFBD><1B>z<EFBFBD>z<EFBFBD>*<2A>X<EFBFBD>a<EFBFBD>Z<EFBFBD>8<> <0C><1C><0E> <20> ,<2C>D<EFBFBD><13><EFBFBD><EFBFBD>v<EFBFBD>&<26>4<EFBFBD>:<3A>:<3A><<3C><1E>%<25>%<25>d<EFBFBD>1<EFBFBD>2<EFBFBD>h<EFBFBD>/<2F><1E>%<25>%<25>d<EFBFBD>+<2B>  ,<2C> <1B>i<EFBFBD>i<EFBFBD><0E>/<2F> <0B> <17><1E>7<>7<> <0B>X\<5C>7<>]<5D>K<EFBFBD><1A>r<00> method_namesc<00><><00>i}|D]9}|j||<02><01>}|r|||<td|<04><00><02><00>,td|<04><00><02><00>;|S)a
Extract multiple methods.
Args:
method_names: List of method names to extract
replace_this: If True, replace 'this' with 'parent' in extracted code
Returns:
Dict mapping method_name -> method_code
<20>r=u✓ Extracted: u✗ Failed to extract: )rJrC)rrKr=<00> extractedr(rs r<00>extract_methodszMethodExtractor.extract_methods<64>sa<00><00><17> <09>'<27> ?<3F>K<EFBFBD><17>&<26>&<26>{<7B><1C>&<26>N<>D<EFBFBD><13>)-<2D> <09>+<2B>&<26><15><0F> <0B>}<7D>5<>6<><15>/<2F> <0B>}<7D>=<3D>><3E>  ?<3F><19>r<00>methodsc<00>&<00>d}t<00>}t|j<00><00>}|j<00>D]X}tj||<05>}|D];}|j d<02>}|j |<08>r<01>&||vs<01>+|j|<08><00>=<00>Z|S)z<>
Find method dependencies (methods called by extracted methods).
Returns:
Set of method names that are called but not in the extraction list
z(?:this\.|[\w]+\.)?(\w+)\s*\(r-)<08>set<65>keys<79>valuesr!<00>finditer<65>group<75>_is_builtin_or_common<6F>add) rrP<00>method_call_pattern<72> dependencies<65>all_method_namesrI<00>matchesr1<00> called_methods r<00>find_dependenciesz!MethodExtractor.find_dependencies<65>s<><00><00>?<3F><1B><1A>u<EFBFBD> <0C><1E>w<EFBFBD>|<7C>|<7C>~<7E>.<2E><18>"<22>><3E>><3E>+<2B> 8<>K<EFBFBD><18>k<EFBFBD>k<EFBFBD>"5<>{<7B>C<>G<EFBFBD> <20> 8<><05> %<25> <0B> <0B>A<EFBFBD><0E> <0A><1B>1<>1<>-<2D>@<40>$<24>,<<3C><<3C>$<24>(<28>(<28><1D>7<>  8<> 8<><1C>r<00>namec<00><00>hd<01>}||vS)z.Check if name is a builtin or common function.><3E><00>x<>y<>as<61>do<64>if<69>in<69>of<6F>onrX<00>for<6F>get<65>let<65>log<6F>map<61>new<65>off<66>poprR<00>try<72>var<61>Date<74>JSON<4F>Math<74>case<73>draw<61>else<73>emit<69>endX<64>endY<64>fill<6C>find<6E>from<6F>info<66>initr#rS<00>null<6C>once<63>push<73>seal<61>text<78>this<69>time<6D>true<75>warn<72>Array<61>Error<6F>async<6E>await<69>break<61>catch<63>class<73>const<73>debug<75>error<6F>false<73>isNaN<61>scene<6E>shift<66>slicer<00>super<65>throw<6F>while<6C>width<74>yield<6C>Number<65>Object<63>RegExp<78>String<6E>assert<72>assign<67>concat<61>create<74>delete<74>export<72>filter<65>freeze<7A>height<68>import<72>length<74>listen<65>reduce<63>remove<76>renderr<00>splice<63>startX<74>startY<74>static<69>stroke<6B>switch<63>tweens<6E>typeof<6F>updaterT<00>window<6F>console<6C>default<6C>destroy<6F>entries<65>extends<64>finally<6C>forEach<63>indexOf<4F>setTint<6E>timeEnd<6E>unshift<66>contains<6E>continue<75>document<6E>graphics<63>includes<65>parseInt<6E>setAlpha<68>setAngle<6C>setDepth<74>setScale<6C> classList<73> container<65> findIndex<65> innerHTML<4D> prototype<70> setOrigin<69> targetPin<69> undefined<65>
instanceof<EFBFBD>
parseFloat<EFBFBD>
setTimeout<EFBFBD>
setVisible<EFBFBD> appendChild<6C> constructor<6F> removeChild<6C> setInterval<61> setPosition<6F> textContent<6E> clearTimeout<75> getAttribute<74> insertBefore<72> localStorage<67> setAttribute<74> clearInterval<61> createElement<6E> querySelector<6F>defineProperty<74>getElementById<49>setInteractive<76>lastTargetedPin<69>rotationCenterX<72>rotationCenterY<72>addEventListener<65>defineProperties<65>getOwnPropertyNames<65>removeEventListener<65>getOwnPropertyDescriptor<6F>)r_<00>builtinss rrWz%MethodExtractor._is_builtin_or_common<6F>s<00><00>
<EFBFBD><08>8<14>x<EFBFBD><1F>rN<>T)F)<14>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>strr<00>boolr'rr<00>intr<rJrrrOrr^<00> staticmethodrWr<>rrr
r
s<><00><00>6<>.<2E>3<EFBFBD>.<2E> ")<29>S<EFBFBD>")<29>d<EFBFBD>")<29>VY<56>")<29>H3&<26>s<EFBFBD>3&<26>x<EFBFBD><05>c<EFBFBD>3<EFBFBD>h<EFBFBD><0F>/H<>3&<26>j"<1B>#<23>"<1B>T<EFBFBD>"<1B>h<EFBFBD>WZ<57>m<EFBFBD>"<1B>H<19>D<EFBFBD><13>I<EFBFBD><19>T<EFBFBD><19>VZ<56>[^<5E>`c<>[c<>Vd<56><19>,<1C><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E><1C>C<EFBFBD><03>H<EFBFBD><1C>0<12> <20>C<EFBFBD> <20>D<EFBFBD> <20><12> rr
c<00>t<00>eZdZdZdefd<03>Zdeedefd<06>Zdededefd <09>Zd
ededefd <0B>Z deed edefd <0A>Z
y)<0F>MainFileUpdaterz:Update the main lockpicking file to use extracted modules.<2E> main_filec<00><><00>t|<01>|_|jjd<01><02>|_|jj d<03>|_y)zInitialize with main file path.r rrN)rrrrrr)rrs rrzMainFileUpdater.__init__<5F>s<<00><00><1D>i<EFBFBD><1F><04><0E><1B>~<7E>~<7E>/<2F>/<2F><17>/<2F>A<><04> <0C><19>\<5C>\<5C>'<27>'<27><04>-<2D><04>
rrKrc<00><><00>|jj<00>}|D<00>]#}d}t|<02>D]6\}}tjdtj
|<03><00>d<03>|<06>s<01>4|}n|<04>t d|<03>d<05><03><00>\|}t|t|<02><00>D] }d||vs<01> |}nd}d} d}
t|t|<02><00>D]6}||}|D]&} | dk(r|d z }d
} <09>| d k(s<01>| s<01>|d z}|dk(s<01>$|}
n|
<EFBFBD><01>6n|
<EFBFBD><01><>|||
d z<00>=|r2||j<00>d k(r||=|r||j<00>d k(r<01>t d |<03><00><02><00><01>&||_dj|<02>|_ |jS)z<>
Remove method definitions from the main file.
Args:
method_names: List of method names to remove
Returns:
Updated file content
Nr*r+u⚠️ Method 'z' not found in main filer,rFr-Tr.<00>u✓ Removed method: r) r<00>copyr0r!r1r/rCr2r3rr#r) rrK<00> updated_linesr(<00> start_idxr6r%<00> brace_idxr8r9<00>end_idxr;s r<00>remove_methodszMainFileUpdater.remove_methods<64>s<><00><00><1D>
<EFBFBD>
<EFBFBD><0F><0F>)<29> <0A>'<27>0 <<3C>K<EFBFBD><1C>I<EFBFBD>$<24>]<5D>3<> <1A><07><01>4<EFBFBD><15>8<EFBFBD>8<EFBFBD>t<EFBFBD>B<EFBFBD>I<EFBFBD>I<EFBFBD>k<EFBFBD>$:<3A>#;<3B>5<EFBFBD>A<>4<EFBFBD>H<> !<21>I<EFBFBD><19> <1A>
<19> <20><15>(<28><1B> <0A>5M<35>N<>O<><18>"<22>I<EFBFBD><1A>9<EFBFBD>c<EFBFBD>-<2D>&8<>9<> <1A><01><16>-<2D><01>*<2A>*<2A> !<21>I<EFBFBD><19> <1A> <1C>K<EFBFBD>!<21>M<EFBFBD><1A>G<EFBFBD><1A>9<EFBFBD>c<EFBFBD>-<2D>&8<>9<> <1A><01>$<24>Q<EFBFBD>'<27><04> <20> &<26>D<EFBFBD><1B>s<EFBFBD>{<7B>#<23>q<EFBFBD>(<28> <0B>(,<2C> <0A><1D><13><1B>(<28>'<27>1<EFBFBD>,<2C>K<EFBFBD>*<2A>a<EFBFBD>/<2F>*+<2B><07> %<25> &<26><1B>&<26><19> <1A>"<17>"<22>!<21>)<29>G<EFBFBD>A<EFBFBD>I<EFBFBD>"5<>6<>#<23> <0A>i<EFBFBD>(@<40>(F<>(F<>(H<>B<EFBFBD>(N<>%<25>i<EFBFBD>0<>$<24> <0A>i<EFBFBD>(@<40>(F<>(F<>(H<>B<EFBFBD>(N<><16>,<2C>[<5B>M<EFBFBD>:<3A>;<3B>a0 <<3C>f#<23><04>
<EFBFBD><1B>y<EFBFBD>y<EFBFBD><1D>/<2F><04> <0C><13>|<7C>|<7C>r<00>
class_name<EFBFBD> module_pathc<00>p<00>|jjd<01>}d|<01>d|<02>d<04>}|D]}||vs<01>|jcSd}t|<03>D]/\}}|jd<06>r|dz}<06>|jd<08>s<01>/n|j ||<04>dj |<03>|_||_|jS) a,
Add import statement at the top of the file.
Args:
class_name: Name of class/object being imported
module_path: Relative path to module (e.g., './lock-configuration.js')
Returns:
Updated content with import added
rz import { z } from 'z';rzimport r-z export class)rrr0r<00>insertr#r)rr r r<00> import_stmtr%<00>
insert_idxr6s r<00>
add_importzMainFileUpdater.add_import8s<><00><00><15> <0C> <0C>"<22>"<22>4<EFBFBD>(<28><05>#<23>:<3A>,<2C>j<EFBFBD><1B> <0A>R<EFBFBD>H<> <0B><19> $<24>D<EFBFBD><1A>d<EFBFBD>"<22><1B>|<7C>|<7C>#<23> $<24> <17>
<EFBFBD> <20><15>'<27> <16>G<EFBFBD>A<EFBFBD>t<EFBFBD><13><EFBFBD><EFBFBD>y<EFBFBD>)<29><1E><11>U<EFBFBD>
<EFBFBD><15><1F><1F><1E>0<><15>  <16> <0E> <0C> <0C>Z<EFBFBD><1B>-<2D><1C>y<EFBFBD>y<EFBFBD><15>'<27><04> <0C><1A><04>
<EFBFBD><13>|<7C>|<7C>r<00> instance_namec <00>"<00>d|<01>d|<02>d<03>}||jvrtd|<01>d<05><03>|jS|jjd<06>}d}t|<04>D] \}}d|vs<01> |}n|<05>td <09>|jS|d
z}t |t |d zt |<04><00><00>D]U}||}|j<00>r)|j<00>jd <0C>s
d |vr|d
z}<08>A|j<00>dk(s<01>Unt |t |dzt |<04><00><00>D]}||j<00>dk(s<01>|}nd|<02>d<11>} | d|<01>d|<02>d<13>z } |j|| <09>||_
dj|<04>|_|jS)a'
Add module initialization in constructor.
Args:
instance_name: Name for the instance (e.g., 'lockConfig')
class_name: Class name (e.g., 'LockConfiguration')
Returns:
Updated content with initialization added
<20>this.z = new z(this)u Initialization for z already exists, skippingrNz constructor(u⚠️ Constructor not foundr-<00>2r<00>=r.<00>
z
// Initialize z modulez
this.z(this);) rrCrr0r2<00>minr3rrrrr#)
rrr <00> init_patternr<00>constructor_idxr6r%<00>init_idx<64> init_stmts
r<00>add_module_initializationz)MainFileUpdater.add_module_initialization\s<><00><00><1F>}<7D>o<EFBFBD>W<EFBFBD>Z<EFBFBD>L<EFBFBD><06>G<> <0C> <17>4<EFBFBD><<3C><<3C> '<27> <11>/<2F> <0A><EFBFBD>>W<>X<> Y<><17><<3C><<3C> <1F><14> <0C> <0C>"<22>"<22>4<EFBFBD>(<28><05><1F><0F> <20><15>'<27> <16>G<EFBFBD>A<EFBFBD>t<EFBFBD><1D><14>%<25>"#<23><0F><15> <16>
<1B> "<22> <11>1<> 2<><17><<3C><<3C> <1F>#<23>Q<EFBFBD>&<26><08><16><EFBFBD><03>O<EFBFBD>b<EFBFBD>,@<40>#<23>e<EFBFBD>*<2A>(M<>N<> <16>A<EFBFBD><18><11>8<EFBFBD>D<EFBFBD><14>z<EFBFBD>z<EFBFBD>|<7C>D<EFBFBD>J<EFBFBD>J<EFBFBD>L<EFBFBD>$;<3B>$;<3B>D<EFBFBD>$A<>c<EFBFBD>T<EFBFBD>k<EFBFBD><1C>q<EFBFBD>5<EFBFBD><08><15><1A><1A><1C><13>$<24><15> <16><17>x<EFBFBD><13>X<EFBFBD><02>]<5D>C<EFBFBD><05>J<EFBFBD>!?<3F>@<40> <16>A<EFBFBD><14>Q<EFBFBD>x<EFBFBD>~<7E>~<7E><1F>3<EFBFBD>&<26><1C><08><15> <16> 7<>z<EFBFBD>l<EFBFBD>'<27>J<> <09><11><EFBFBD>}<7D>o<EFBFBD>W<EFBFBD>Z<EFBFBD>L<EFBFBD><07>P<>P<> <09> <0A> <0C> <0C>X<EFBFBD>y<EFBFBD>)<29><1B><04>
<EFBFBD><1B>y<EFBFBD>y<EFBFBD><15>'<27><04> <0C><13>|<7C>|<7C>r<00>module_instancec<00><><00>|j}|D]N}d|<04>d<02>}d|<02>d|<04>d<05>}tj|||<03>}d|<04>d<02>}d|<02>d|<04>d<05>}tj|||<03>}<03>P||_|S)a$
Replace method calls in the main file.
Args:
method_names: Methods that were extracted
module_instance: Name of the module instance (e.g., 'lockConfig')
Returns:
Updated content with method calls replaced
zthis\.z\(r<00>.<2E>(zself\.zself.)rr!r") rrKr<00>updatedr(<00> pattern_this<69>replacement_this<69> pattern_self<6C>replacement_selfs r<00>replace_method_callsz$MainFileUpdater.replace_method_calls<6C>s<><00><00><17>,<2C>,<2C><07>'<27>
F<01>K<EFBFBD>$<24>[<5B>M<EFBFBD><12>4<>L<EFBFBD>!&<26><EFBFBD>&7<>q<EFBFBD><1B> <0A>Q<EFBFBD>G<> <1C><18>f<EFBFBD>f<EFBFBD>\<5C>+;<3B>W<EFBFBD>E<>G<EFBFBD>%<25>[<5B>M<EFBFBD><12>4<>L<EFBFBD>!&<26><EFBFBD>&7<>q<EFBFBD><1B> <0A>Q<EFBFBD>G<> <1C><18>f<EFBFBD>f<EFBFBD>\<5C>+;<3B>W<EFBFBD>E<>G<EFBFBD>
F<01><1F><04> <0C><16>rN) r<>r<>r<>r<>r<>rrr rrr(r<>rrrr<00>s<><00><00>D<>.<2E>#<23>.<2E> A<1C>4<EFBFBD><03>9<EFBFBD>A<1C><13>A<1C>F"<1C>S<EFBFBD>"<1C>s<EFBFBD>"<1C>s<EFBFBD>"<1C>H9<1C>s<EFBFBD>9<1C><03>9<1C>PS<50>9<1C>v<17><14>c<EFBFBD><19><17>S<EFBFBD><17>UX<55>rrc<00><><00>eZdZdZddeefd<04>Z ddeeefdededeed ee ed
ed efd <0C>Z
e ddeeefdedeed ed
ed ef d<0E><05>Z e ddeeefded ed
ed ef
d<10><05>Z y)<14>ModuleGeneratorz!Generate JavaScript module files.N<>import_statementsc<00><00>|xsd|_y)z+Initialize with optional import statements.rN)r+)rr+s rrzModuleGenerator.__init__<5F>s<00><00>!2<>!8<>b<EFBFBD><04>rrPr <00>export_as_classr<73><00>additional_imports<74>use_parent_instancerc<00><><00>g}|r|j|<05>|rdj|<07>dznd}|r|j|||||<06>} | S|j||||<06>} | S)a
Generate a complete JavaScript module.
Args:
methods: Dict of method_name -> method_code
class_name: Name of the exported class/object
export_as_class: If True, export as class; if False, as object
extends: Class to extend (e.g., "MinigameScene")
additional_imports: List of import statements
use_parent_instance: If True, generate with parent instance pattern
Returns:
Complete module code as string
rr)<04>extendr#<00>_generate_class<73>_generate_object)
rrPr r-r<>r.r/<00>imports<74>imports_sectionrs
r<00>generate_modulezModuleGenerator.generate_module<6C>ss<00><00>0<15><07> <1D> <13>N<EFBFBD>N<EFBFBD>-<2D> .<2E>7><3E>$<24>)<29>)<29>G<EFBFBD>,<2C>t<EFBFBD>3<>B<EFBFBD><0F> <1B><17>'<27>'<27><07><1A>W<EFBFBD>o<EFBFBD>Wj<57>k<>D<EFBFBD><14> <0B><18>(<28>(<28><17>*<2A>o<EFBFBD>Ob<4F>c<>D<EFBFBD><13> rr5c <00><><00>|rd|<02><00>nd}dj|j<00><00>}djd<05>|jd<04>D<00><00>}|r
d}|dz|z}|<03>d|<01>d|<01>d |<01>|<05>d
|<07>d <0B> } | S) zGenerate a class module.z extends r<00>
rc3<00>JK<00>|]}|j<00>rd|zn|<01><01><00>y<01>w<01>rAN<>r<00><02>.0r%s r<00> <genexpr>z2ModuleGenerator._generate_class.<locals>.<genexpr><3E><00>+<00><00><><00>%K<01>)-<2D>7;<3B>j<EFBFBD>j<EFBFBD>l<EFBFBD>V<EFBFBD>d<EFBFBD>]<5D><04>%L<>%K<01><><00>!#z= constructor(parent) {
this.parent = parent;
}<7D>
/**
* zK
*
* Extracted from lockpicking-game-phaser.js
* Instantiate with: new a&(this)
*
* All 'this' references replaced with 'this.parent' to access parent instance state:
* - this.parent.pins (array of pin objects)
* - this.parent.scene (Phaser scene)
* - this.parent.lockId (lock identifier)
* - this.parent.lockState (lock state object)
* etc.
*/
export class z {
z
}
<EFBFBD>r#rTr)
rPr r<>r5r/<00> extends_str<74> methods_code<64>indented_methodsr<73>rs
rr2zModuleGenerator._generate_class<73>s<><00><00>07<30> <09>'<27><19>+<2B>B<EFBFBD> <0B>
<1E>{<7B>{<7B>7<EFBFBD>><3E>><3E>#3<>4<> <0C> <20>9<EFBFBD>9<EFBFBD>%K<01>1=<3D>1C<31>1C<31>D<EFBFBD>1I<31>%K<01>K<01><18>
<1F> <09>K<EFBFBD> +<2B>V<EFBFBD>3<>6F<36>F<> <1C>#<23>$<24>%<04><0E><<3C><1A>%<25><1C> &<0E><19>\<5C>+<2B><1D>'<01><11><12><01>!<04><04>(<14> r<00> object_namec
<00><><00>dj|j<00><00>}djd<03>|jd<02>D<00><00>}|r
d}|dz|z}|<02>d|<01>d|<01>d|<01>d|<05>d <09>
}|S)
z$Generate an object/namespace module.r8rc3<00>JK<00>|]}|j<00>rd|zn|<01><01><00>y<01>wr:r;r<s rr>z3ModuleGenerator._generate_object.<locals>.<genexpr>!r?r@zO init(parent) {
return {
parent: parent
};
}rAz<
*
* Extracted from lockpicking-game-phaser.js
* Usage: a#.methodName(parent, ...args)
*
* All 'this' references replaced with 'parent' to access parent instance state:
* - parent.pins (array of pin objects)
* - parent.scene (Phaser scene)
* - parent.lockId (lock identifier)
* - parent.lockState (lock state object)
* etc.
*/
export const z
= {
z
};
rB)rPrFr5r/rDrE<00> init_funcrs rr3z ModuleGenerator._generate_objects<><00><00><1E>{<7B>{<7B>7<EFBFBD>><3E>><3E>#3<>4<> <0C> <20>9<EFBFBD>9<EFBFBD>%K<01>1=<3D>1C<31>1C<31>D<EFBFBD>1I<31>%K<01>K<01><18>
<1F> <09>I<EFBFBD>
)<29>6<EFBFBD>1<>4D<34>D<> <1C>#<23>$<24>%<04><0F>=<3D> <0B> <17>-<2D> <0E><1A>]<5D><01><11><12><01>!<04><04>(<14> r<00>N)TNNTr<54>)r<>r<>r<>r<>rr<>rrr<>rr6r<>r2r3r<>rrr*r*<00>s/<00><00>+<2B>9<>(<28>3<EFBFBD>-<2D>9<>!%<25>!%<25>26<32>$(<28>$<14><15>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>$<14><18>$<14><1E> $<14>
<1A>#<23><1D> $<14> %<25>T<EFBFBD>#<23>Y<EFBFBD>/<2F> $<14>"<22>$<14>
<0A>$<14>L<12> %)<29> /<14><15>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>/<14><17>/<14><1A>#<23><1D>/<14><1D> /<14>
"<22> /<14>
<0A> /<14><12>/<14>b<12>
%)<29> -<14><15>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>-<14><18>-<14><1D>-<14>"<22> -<14>
<0A> -<14><12>-rr*c
<00><> <00>tjdtjd<02><03>}|jddd<06><07>|jdd d
<EFBFBD> <0B>|jd d d <0A> <0B>|jdd<0F><10>|jdd<12><10>|jddd<15><16>|jddd<18><16>|jdd<1A><10>|jddd<1C><16>|jdd<1E><10>|jdd <20><10>|jd!dd"<22><16>|j <00>}|j
j d#<23>D<00>cgc]}|j<00><00><02>}}g}|jr6|jj d#<23>D<00>cgc]}|j<00><00><02>}}|j}|sHt|j<00>j}|j d$<24>}d%jd&<26>|D<00><00>} td'|j<00><00><02>t!|j<00>} td(t#|<03><00>d)<29><03>| j%||j&<00>*<2A>}
|
s0td+t(j*<00>,<2C>t)j,d-<2D>|j.rH| j1|
<EFBFBD>} | r*td.<2E>t3| <0B>D]} td/| <0C><00><02><00>n td0<64>td1|<06><00><02>t5<00>} | j7|
||j8 |j:||j&<00>2<EFBFBD>}t|j<00>}|j<j?d d <09>3<EFBFBD>|jA|d4<64>5<EFBFBD>td6|j<00><00><02>td7t#|j tCd8<64><00><00><00><00><02>|jD<00>r{td9|jD<00><00><02>tG|jD<00>}|jHxs|d:jK<00>|d-d;z}|jLr<>td<<3C>t|j<00>jN}|jQ|d=|<12><00><02>td><3E>|jS||<06>td?<3F> |jU|<03>td@t#|<03><00>dA<64><03> |jY||<11>tdC|<11><00><02> t|jD<00>}|jA|jZd4<64>5<EFBFBD>tdE|jD<00><00><02>tdF|<11><00><02>tdG|<06>dH<64><03>y;y;cc}wcc}w#tV$r}tdB|<13><00><02>Yd;}~<13><>d;}~wwxYw#tV$r}tdD|<13><00><02>Yd;}~<13><>d;}~wwxYw#tV$r(}tdI|<13><00>t(j*<00>,<2C>Yd;}~y;d;}~wwxYw#t\$r=}tdJ|<13><00>t(j*<00>,<2C>t)j,d-<2D>Yd;}~y;d;}~wtV$rQ}tdK|<13><00>t(j*<00>,<2C>d:d;l/}|ja<00>t)j,d-<2D>Yd;}~y;d;}~wwxYw)LzMain entry point.z/Extract methods from lockpicking-game-phaser.jsa

Examples:
# Extract lock graphics methods
python3 extract_lockpicking_methods.py \
--methods "createLockBackground,createTensionWrench,createHookPick" \
--output-file "lock-graphics.js" \
--class-name "LockGraphics" \
--extends "LockpickingComponent"
# Extract lock configuration methods as object
python3 extract_lockpicking_methods.py \
--methods "saveLockConfiguration,loadLockConfiguration,clearLockConfiguration" \
--output-file "lock-configuration.js" \
--object-mode
)<03> description<6F>formatter_class<73>epilogz --input-filez3js/minigames/lockpicking/lockpicking-game-phaser.jsz4Path to input JavaScript file (default: %(default)s))r<><00>helpz --methodsTz/Comma-separated list of method names to extract)<02>requiredrOz --output-filezPath to output JavaScript filez --class-namez?Name for exported class (default: auto-generated from filename))rOz --extendszParent class to extendz --object-mode<64>
store_truez!Export as object instead of class)<02>actionrOz--show-dependenciesz*Show method dependencies before extractionz --importsz0Comma-separated list of import statements to addz--replace-thiszCReplace "this" with "parent" in extracted methods for state sharingz--update-main-filez9Path to main file to update with imports and method callsz--module-instance-namez:Name for module instance in main file (e.g., "lockConfig")z--auto-integratezYAutomatically remove methods from main file and add imports (requires --update-main-file)<29>,<2C>-rc3<00><K<00>|]}|j<00><00><01><00>y<00>wrJ)<01>
capitalize)r=<00>words rr>zmain.<locals>.<genexpr><3E>s<00><00><><00>A<>4<EFBFBD>T<EFBFBD>_<EFBFBD>_<EFBFBD>.<2E>A<>s<00>u📂 Reading: u
📋 Extracting z methods...rMu❌ No methods extracted!r?r-u9
⚠️ Dependencies (methods called but not extracted):z - u#
✓ No external dependencies foundu
🔨 Generating module: )rPr r-r<>r.r/)<02>parents<74>exist_okr ru
✅ Success! Created: z Lines of code: ru
📝 Updating main file: rNu
🔧 Auto-integrating...z./u ✓ Added import statementu1 ✓ Added module initialization in constructoru ✓ Removed z methods from main fileu# ⚠️ Error removing methods: u( ✓ Updated method calls to use this.u! ⚠️ Error updating calls: u
✅ Updated: z Instance name: this.z Usage: new z(this) in constructoru❌ Error writing main file: u❌ File not found: u ❌ Error: )1<>argparse<73>ArgumentParser<65>RawDescriptionHelpFormatter<65> add_argument<6E>
parse_argsrPrrr4r r<00> output_file<6C>stemr#rCr r
r3rOr=rDrE<00>exit<69>show_dependenciesr^<00>sortedr*r6<00> object_moder<65><00>parent<6E>mkdir<69>
write_text<EFBFBD>chr<68>update_main_filer<00>module_instance_name<6D>lower<65>auto_integrater_rrr <00> Exceptionr(r<00>FileNotFoundError<6F> traceback<63> print_exc)<16>parser<65>args<67>mrKr.r6r <00>filename<6D>parts<74> extractorrP<00>deps<70>dep<65> generator<6F> module_code<64> output_path<74> main_updaterrj<00> import_path<74>e<> main_pathros r<00>mainr<6E>EsK<00><00> <15> $<24> $<24>E<> <20><<3C><<3C> <0C><06>F<EFBFBD>( <0B><17><17><16>E<> C<><18><06>  <0B><17><17><13><15> ><3E><18><06>  <0B><17><17><17><15> -<2D><18><06>  <0B><17><17><16> N<><18><06>
 <0B><17><17><13> %<25><18><06>
 <0B><17><17><17><1B> 0<><18><06>  <0B><17><17><1D><1B> 9<><18><06>  <0B><17><17><13> ?<3F><18><06>
 <0B><17><17><18><1B> R<><18><06>  <0B><17><17><1C> H<><18><06>
 <0B><17><17> <20> I<><18><06>
 <0B><17><17><1A><1B> h<><18><06> <12> <1C> <1C> <1E>D<EFBFBD>(,<2C>|<7C>|<7C>'9<>'9<>#<23>'><3E>?<3F>!<21>A<EFBFBD>G<EFBFBD>G<EFBFBD>I<EFBFBD>?<3F>L<EFBFBD>?<3F><1C><16> <0B>|<7C>|<7C>15<31><1C><1C>1C<31>1C<31>C<EFBFBD>1H<31>I<>A<EFBFBD>a<EFBFBD>g<EFBFBD>g<EFBFBD>i<EFBFBD>I<><1A>I<><16><1F><1F>J<EFBFBD> <15><17><04>(<28>(<28>)<29>.<2E>.<2E><08><18><0E><0E>s<EFBFBD>#<23><05><17>W<EFBFBD>W<EFBFBD>A<>5<EFBFBD>A<>A<>
<EFBFBD>]<14> <0A><0E>t<EFBFBD><EFBFBD><EFBFBD>/<2F>0<>1<>#<23>D<EFBFBD>O<EFBFBD>O<EFBFBD>4<> <09> <0A>"<22>3<EFBFBD>|<7C>#4<>"5<>[<5B>A<>B<><1B>+<2B>+<2B>L<EFBFBD>t<EFBFBD>GX<47>GX<47>+<2B>Y<><07><16> <11>-<2D>C<EFBFBD>J<EFBFBD>J<EFBFBD> ?<3F> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD> <10> !<21> !<21><1C>.<2E>.<2E>w<EFBFBD>7<>D<EFBFBD><13><15>R<>T<>!<21>$<24><<3C>)<29>C<EFBFBD><19>E<EFBFBD>#<23><15>-<2D>(<28>)<29><16><<3C>><3E> <0E>*<2A>:<3A>,<2C>7<>8<>#<23>%<25> <09><1F>/<2F>/<2F><1B>!<21> $<24> 0<> 0<>0<><18>L<EFBFBD>L<EFBFBD>1<> $<24> 1<> 1<> 0<>
<EFBFBD> <0B><1B>4<EFBFBD>+<2B>+<2B>,<2C> <0B><13><1A><1A> <20> <20><14><04> <20>=<3D><13><1E><1E>{<7B>W<EFBFBD><1E>=<3D> <0A>(<28><14>)9<>)9<>(:<3A>;<3B><<3C> <0A>"<22>3<EFBFBD>{<7B>'8<>'8<><13>R<EFBFBD><17>'A<>#B<>"C<>D<>E<> <10> <20> <20> <11>/<2F><04>0E<30>0E<30>/F<>G<> H<>*<2A>4<EFBFBD>+@<40>+@<40>A<>L<EFBFBD>#'<27>#<<3C>#<<3C>#f<>
<EFBFBD>1<EFBFBD> <0A>@S<>@S<>@U<>Xb<58>cd<63>ce<63>Xf<58>@f<> <20><13>"<22>"<22><15>5<>7<>#<23>4<EFBFBD>#3<>#3<>4<>9<>9<> <0B><1C>'<27>'<27>
<EFBFBD>b<EFBFBD><1B> <0A>4F<34>G<><15>5<>7<><1D>6<>6<>7K<37>Z<EFBFBD>X<><15>I<>K<>E<01> <20>/<2F>/<2F> <0C>=<3D><19>O<EFBFBD>C<EFBFBD> <0C>,=<3D>+><3E>>U<>V<>W<>
C<01> <20>5<>5<>l<EFBFBD>DX<44>Y<><19>D<>EY<45>DZ<44>[<5B>\<5C>
 L<01> <20><14>!6<>!6<>7<> <09><19>$<24>$<24>\<5C>%9<>%9<>G<EFBFBD>$<24>L<><15><0F><04>(=<3D>(=<3D>'><3E>?<3F>@<40><15>/<2F>0D<30>/E<>F<>G<><15><0E>z<EFBFBD>l<EFBFBD>2G<32>H<>I<>M !<21><>w@<01><>
J<01><>X!<21>E<01><19>?<3F><01>s<EFBFBD>C<>D<>D<><44>E<01><>!<21>C<01><19>=<3D>a<EFBFBD>S<EFBFBD>A<>B<>B<><42>C<01><><1D> L<01><15>5<>a<EFBFBD>S<EFBFBD>9<><03>
<EFBFBD>
<EFBFBD>K<>K<><4B> L<01><> <1D><14> <0A>$<24>Q<EFBFBD>C<EFBFBD>(<28>s<EFBFBD>z<EFBFBD>z<EFBFBD>:<3A> <0B><08><08><11> <0B> <0B><> <14><14> <0A> <0B>A<EFBFBD>3<EFBFBD><1F>c<EFBFBD>j<EFBFBD>j<EFBFBD>1<><18><11><1B><1B><1D> <0B><08><08><11> <0B> <0B><> <14>s<EFBFBD><00>?T><04>U<04>3JW<00>
)U<00>4 U,<00>A'V<00> U)<03>U$<03>W<00>$U)<03>)W<00>, V <03>5V<03>W<00>V <03> W<00> W<03>V<<03>7W<00><W<03>W<00> Y"<03> 3X<03> Y"<03>AY<03>Y"<03>__main__)r<>rZr!rD<00>pathlibr<00>typingrrrrrr
rr*r<>r<>r<>rr<00><module>r<>s`<00><01> <04><10> <09>
<EFBFBD><18>3<>3<>S <20>S <20>lF<17>F<17>RM<14>M<14>`H<14>V <0C>z<EFBFBD><19><08>F<EFBFBD>r