github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/modules/cmd-new.mx (about)

     1  MOD.ERR_ABORT = "New package creation has been aborted."
     2  
     3  trypipe {
     4      read \
     5          --prompt   "What do you want to call this package? " \
     6          --variable PACKAGE_NAME \
     7          --default  my-first-package \
     8          --datatype str
     9      
    10      switch {
    11          if { $PACKAGE_NAME =~ '/' } {
    12              err "Package names cannot contain '/'"
    13              err $MOD.ERR_ABORT
    14              return 1 }
    15  
    16          if { $PACKAGE_NAME =~ '[\r\n]' } {
    17              err "Package names shouldn't include carriage returns, '\\r', nor new lines, '\\n'"
    18              err $MOD.ERR_ABORT
    19              return 1 }
    20  
    21          if { $PACKAGE_NAME =~ '^\s+$' } {
    22              err "Package names cannot be empty"
    23              err $MOD.ERR_ABORT
    24              return 1 }
    25  
    26          if { g $MUREX_MODULE_PATH/$PACKAGE_NAME } {
    27              err "A package already exists called '$PACKAGE_NAME'"
    28              err $MOD.ERR_ABORT
    29              return 1 }
    30  
    31          default {
    32              out "{GREEN}Package name '{BOLD}$PACKAGE_NAME{RESET}{GREEN}'{RESET}"
    33          }
    34      }
    35  
    36      read \
    37          --prompt   "What do you want to call your first module in package '$PACKAGE_NAME'? " \
    38          --variable MODULE_NAME \
    39          --default  my-first-module \
    40          --datatype str
    41  
    42      switch {
    43          if { $MODULE_NAME =~ '/' } {
    44              err "Module names cannot contain '/'"
    45              err $MOD.ERR_ABORT
    46              return 1 }
    47  
    48          if { $MODULE_NAME =~ '[\r\n]' } {
    49              err "Module names shouldn't include carriage returns, '\\r', nor new lines, '\\n'"
    50              err $MOD.ERR_ABORT
    51              return 1 }
    52  
    53          if { $MODULE_NAME =~ '^\s+$' } {
    54              err "Module names cannot be empty"
    55              err $MOD.ERR_ABORT
    56              return 1 }
    57  
    58          default {
    59              out "{GREEN}Module name '{BOLD}$MODULE_NAME{RESET}{GREEN}'{RESET}"
    60          }
    61      }
    62  
    63      read \
    64          --prompt   "Write a short summary about your package/module: " \
    65          --variable SUMMARY \
    66          --default  "This is a placeholder summary for both the package and module" \
    67          --datatype str
    68  
    69      out "{GREEN}Summary: {BOLD}$SUMMARY{RESET}{RESET}"
    70  
    71      mkdir $(MUREX_MODULE_PATH)/$(PACKAGE_NAME)
    72  
    73      %{
    74          Name: $PACKAGE_NAME
    75          Version: "1.0"
    76          ChangeLog: {
    77              "1.0": "New package"
    78          }
    79          Dependencies: {
    80              MurexVersion: ">= ${version --short}"
    81          }
    82      } -> pretty |> $(MUREX_MODULE_PATH)/$(PACKAGE_NAME)/package.json
    83  
    84      %[
    85          {
    86              Name: $MODULE_NAME
    87              Summary: $SUMMARY
    88              Version: "1.0"
    89              Source: "$(MODULE_NAME).mx"
    90              Dependencies: {
    91                  Optional: []
    92                  Required: []
    93                  Platform: [ any ]
    94                  MurexVersion: ">= ${version --short}"
    95              }
    96          }
    97      ] -> pretty |> $(MUREX_MODULE_PATH)/$(PACKAGE_NAME)/module.json
    98  
    99      %(function ${esccli $MODULE_NAME} {
   100      out "hello world"
   101  }) |> $(MUREX_MODULE_PATH)/$(PACKAGE_NAME)/$(MODULE_NAME).mx
   102  
   103      out "{GREEN}"
   104      git <!null> init $(MUREX_MODULE_PATH)/$(PACKAGE_NAME)
   105      out "{RESET}"
   106  
   107      PACKAGES_JSON = open($(MUREX_MODULE_PATH)/packages.json)
   108      PACKAGES_JSON <~ %[{
   109          Protocol: git
   110          URI: $(MUREX_MODULE_PATH)/$(PACKAGE_NAME)/.git
   111          Package: $(PACKAGE_NAME)
   112      }]
   113      $PACKAGES_JSON -> pretty |> $(MUREX_MODULE_PATH)/packages.json
   114  
   115      out "A new package has been created at: $(MUREX_MODULE_PATH)/$(PACKAGE_NAME)"
   116      return
   117  }
   118  catch {
   119      err $MOD.ERR_ABORT
   120      return 1
   121  }