code: @Procedure(value = "apoc.custom.asProcedure",mode = Mode.WRITE)
      @Description("apoc.custom.asProcedure(name, statement, mode, outputs, inputs, description) - register a custom cypher procedure")
      public void asProcedure(@Name("name") String name, @Name("statement") String statement,
                              @Name(value = "mode",defaultValue = "read") String mode,
                              @Name(value= "outputs", defaultValue = "null") List<List<String>> outputs,
                              @Name(value= "inputs", defaultValue = "null") List<List<String>> inputs,
                              @Name(value= "description", defaultValue = "null") String description
      ) throws ProcedureException {
          debug(name,"before", ktx);
  
          CustomStatementRegistry registry = new CustomStatementRegistry(api, log);
          if (!registry.registerProcedure(name, statement, mode, outputs, inputs, description)) {
              throw new IllegalStateException("Error registering procedure "+name+", see log.");
          }
          CustomProcedureStorage.storeProcedure(api, name, statement, mode, outputs, inputs, description);
          debug(name, "after", ktx);
      }
docs: /*
  store in graph properties, load at startup
  allow to register proper params as procedure-params
  allow to register proper return columns
  allow to register mode