{"id":13282523,"url":"https://github.com/vdelachaux/bag4D","last_synced_at":"2025-03-10T04:31:34.586Z","repository":{"id":143193027,"uuid":"222442548","full_name":"vdelachaux/bag4D","owner":"vdelachaux","description":null,"archived":false,"fork":false,"pushed_at":"2021-08-24T14:26:04.000Z","size":1279,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-07-29T16:17:11.203Z","etag":null,"topics":["4d-code","4d-component","4d-database"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vdelachaux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-18T12:20:26.000Z","updated_at":"2024-07-29T16:17:11.204Z","dependencies_parsed_at":"2023-05-12T20:15:48.149Z","dependency_job_id":null,"html_url":"https://github.com/vdelachaux/bag4D","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vdelachaux%2Fbag4D","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vdelachaux%2Fbag4D/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vdelachaux%2Fbag4D/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vdelachaux%2Fbag4D/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vdelachaux","download_url":"https://codeload.github.com/vdelachaux/bag4D/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242789590,"owners_count":20185492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["4d-code","4d-component","4d-database"],"created_at":"2024-07-29T15:56:14.793Z","updated_at":"2025-03-10T04:31:34.573Z","avatar_url":"https://github.com/vdelachaux.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# bag4D v1.0 (12/2013)\n\nWhen I make my shopping, I buy a pack of six bottles of milk, bread and salt. I put everything in my shopping bag. When arriving at home I retrieves each article in the bag without thinking to how to do more than necessary.  With bag4D you can do the same, in your code.\n\n***bag4D***  is a component which provides a set of commands that lets you create data bags where you can store and retrieve data like you want. You must keep a value? put it in a bag, then another method or a form can test if the element exists and recover the stored value.\n\n* Value bags are inter-process. \n* Value bags are shared between host database and components. \n* Value bags can be exported to or imported from a document. \n* Value bags can be stored as blob allowing to transfer  data, through web-services, to another 4D\n* Value bags are handled by a long integer reference. But you can also name the bag and then you will get the reference associated with this name.\n* Value bags can be embedded in another one and ***bag4D*** will auto-create embedded bags according to the given pathname.\n\n_Example_:\n\n```4d\n$bag := bag_new ( \"parameters\" )\nbag_putBoolean ( $bag ; \"options.general.close window\" ; True )\n```\n\nIn this example, after the call to ***bag\\_putBoolean***, *$bag* contains the embedded bag \"options\", which contains the embedded bag \"general\", which contains the embedded bag \"close window\" that contains the value **True**.\n\n* The elements of a bag​​, shares [properties](#properties) and [methods](#methods) to simplify the code. For example:\n\n```4d\n$bag := bag_new ( \"TEST\" )\nbag_putLong ( $bag ; \"long_1++\")\nbag_putLong ( $bag ; \"long_2\" ; 2 )\n...\nbag_putLong ( $bag ; \"long_9\" ; 9 )\n\nbag ( \"TEST.sum()\" ; -\u003e $sum ) \t//45\nbag ( TEST.max()\" ; -\u003e $max) \t//9\nbag ( \"TEST.min()\" ; -\u003e $min )\t//1\nbag ( \"TEST.squareSum()\" ; -\u003e $squareSum )\t//285\nbag ( \"TEST.average()\" ; -\u003e $average )\t//5\n\nWhile ( bag ( \"TEST.forEach()\" ) )\n\tbag ( \"TEST.this.name\" ; -\u003e $name)  //get the name of the current element\n\tbag ( \"TEST.this.value\" ; -\u003e $value )  //get the value\n\t...\n\tbag ( \"TEST.this.index\" ; -\u003e $i )  //get the index\n\tIf ( ( $i % 2 ) = 0)\n\t\tbag ( \"TEST.this.empty()\" )  //clear the value\n\tEnd if\t\t\nEnd while \n\nbag ( \"TEST.sum()\" ; -\u003e $sum ) \t//25\n\n$result := 0\nWhile ( bag_forEach ( $bag ; -\u003e $value ) )\n\t$result := $result + $value\nEnd while \n```\t\t\n\n## Creation \u0026 Destruction Routines\n\n### **bag\\_new**  {( name )} -\u003e *bagHandle*\n\nCreates a new bag and returns its reference\n\nIf the name is passed, the reference may be retrieved from the name, by the [**bag\\_findByName**](#bag_findbyname--name---baghandles----baghandle) command.\n\n```4d\n$bag := bag_new ( \"myBag\" )\n```\n\n### bag\\_copy ( *bagHandle* {; *name* }) -\u003e *bagHandle*\n\nCreates a copy of the bag bagHandle and returns its reference\n\nIf the name is passed, the reference may be retrieved from the name, by the [**bag\\_findByName**](#bag_findbyname--name---baghandles----baghandle) command.\n\n```4d\n$bag2 := bag_copy ( $bag ; \"myBag\" )\n```\n### **bag\\_clear** {( *bagHandle* {; *elementName* })}\n\nDeletes the element elementName of the bag bagHandle. \n\nIf the second parameter is omitted, it's the entire bag bagHandle that is deleted. If no parameter is passed all bags are deleted.\n\n```d4\nbag_clear ( $bag ; \"element 1\" )\t//delete element 1 form the value bag $Bag\nbag_clear ( $bag  )\t\t\t        //delete the value bag $Bag\nbag_clear \t\t\t\t            //delete all created bags\n```\n\nIf *bagHandle* is not a valid bag reference, a warning assertion* is displayed.\n\n**Note**: By default, assertions are enabled but they may have been disabled using the [**bag\\_SET_OPTION**](#bag_set_option--option--on-) command.\n\n## Put Value Routines\n\nThis set of commands allow to store data in a value bag.\n\nEach of them expect a valid bag handle as first parameter and as second parameter a name or a pathname. If it's a pathname, the embedded bags will be created if necessary.\n\nIf no item in the bag has the given name or pathname, a new item is created.\n\nIf an item with the given name or pathname exists and has the same type, its value is replaced.\n\nIf an item with the given name or pathname exists and has a different type, if the option \"variant types\" is off, the value isn't stored and an error assertion is displayed (if the option \"assertions\" is on).\n\nWhen relevant, the name may refer to an array element by adding the index of the item in square brackets. For example the line below, sets to 100 the tenth element of the array stored in the item \"counter\".\n\n```4d\nbag_putLong ( $bag ; \"counter[10]\" ; 100 )\n```\n\nIf it is an array element, ***bag4D*** ensures, if possible, the conversion of the value before storing. For example the value 1 will be stored as a long in a longint array, as the textual value \"1\" in a text array and as \"true\" in a boolean array.\n\nSome commands accept an operator as suffix. This operator allows  to modify the data stored. For example the first line below, adds the picture passed to the right of the stored picture in the element \"myPicture\". The next line, increments by one the value of the item \"myCounter\".\n\n```4d\nbag_putPicture ( $bag ; \"myPicture+=\" ; $picture ) \nbag_putLong ( $bag ; \"myCounter++\" )\n```\n\n### **bag_putArray** ( *bagHandle* ; *pathname* ; -\u003e *array* {; *internal format* })\n\nThis command allows to store a one-dimensional array pointed to by the third parameter in the bag referenced by the parameter bagHandle.\n\nAll type of arrays are managed except 2-dimensional arrays.\n\nThe fourth optional parameter is a boolean. If the parameter \"internal format\" is **False**, the array is stored so that you can get or set more quickly an element. If this parameter is **True**  (default value), the array is compacted before to be stored. This mode is faster for storage and loading large arrays but will be less rapid to get or set an element. Choose the best mode according to your needs.\n\nThe type of the array, the count of elements and the current element are stored as properties and can be retrieved without loading the array.\n\n### **bag_putLong** ( *bagHandle* ; *pathname* {; *longint* })\n\nThis command allow to store a long integer in the bag referenced by the parameter bagHandle.\n\nThe optional third parameter is the value to store in the bag. If this parameter is missing, the value is set to 0.\n\n```4d\nbag_putLong ( $bag ; \"ID\" ; 123456789 )\n```\n\nThe managed operators for this command are:\n\n| Operators | Actions   [^1]                                                        |\n|:---------:|:--------------------------------------------------------------------------- |\n| ++        |increment by one the current value                                           |\n| --        |decrement by one the current value                                           |\n| +=        |add the passed value to the current value                                    |\n| -=        |subtract the passed value from the current value                             |\n| *=        |multiplie the current value with the value passed                            |\n| /=        |divide the current value with the value passed                               |\n| \\=        |perform a longint division of the current value with the passed value        |\n| %=        |do the remainder of the division of the current value with the passed value  |\n| ^=        |for an exponentiation of the current value with the passed value             |\n| !         |the stored value will be 1 if it was equal to 0 and 0 if not                 |\n| \u0026=        |store a bitwise AND between the stored value and the passed value            |\n| \\|=       |store a bitwise OR (inclusive) between the stored value and the passed value |\n\n[^1]: For increment et decrement, the second parameter is ignored\n\n_Examples_:\n\n```4d\nbag_putLong ( $bag ; \"number\" ; 100 )         //value is 100\nbag_putLong ( $bag ; \"number++\" )\t             // value is 101\nbag_putLong ( $bag ; \"number*=\" ; 2 )         // value is 202\nbag_putLong ( $bag ; \"number%=\" ; 100 )       // value is 0,02\n\nbag_putLong ( $Bag ; \"arrayLong[3]++\")\n```\t\t\n\n### **bag_putReal** ( *bagHandle* ; *pathname* {; *real* })\n\nThis command allow to store a real in the bag referenced by the parameter bagHandle.\n\nThe optional third parameter is the value to store in the bag. If this parameter is missing, the value is set to 0.\n\n```4d\nbag_putReal ( $bag ; \"Pi\" ; 3.141592653589793239 )\n```\n\nThe managed operators for this command are:\n\n| Operators | Actions                                                                    |\n|:---------:|:-------------------------------------------------------------------------- |\n| ++        |increment by one the current value                                          |\n| --        |decrement by one the current value                                          |\n| +=        |add the passed value to the current value                                   |\n| -=        |subtract the passed value from the current value                            |\n| *=        |multiplie the current value with the value passed                           |\n| /=        |divide the current value with the value passed                              |\n| \\=        |perform a longint division of the current value with the passed value       |\n| %=        |do the remainder of the division of the current value with the passed value |\n| ^=        |for an exponentiation of the current value with the passed value            |\n\n\n### **bag_putText** ( *bagHandle* ; *pathname* {; *text* })\n\nThis command allow to store a text in the bag referenced by the parameter bagHandle.\n\nThe optional third parameter is the value to store in the bag. If this parameter is missing, the value is set to \"\".\n\n```4d\nbag_putText ( $bag ; \"welcomeMessage\" ; \"Hello world!\" )\n```\n\nThe concatenation operator is managed as name suffix to modify an existing text element.\n\n```4d\nbag_putText ( $bag ; \"welcomeMessage\" ; \"Hello\" )       //value is Hello\nbag_putText ( $bag ; \"welcomeMessage+=\" ; \" world!\" )   //value is Hello world!\n```\n\n### **bag_putBoolean** ( *bagHandle* ; *pathname* {; *boolean* })\n\nThis command allow to store a boolean in the bag referenced by the parameter bagHandle.\n\nThe optional third parameter is the value to store in the bag. If this parameter is missing, the value is set to false.\n\n\t\tbag_putBolean ( $bag ; \"bag4D is incredible\" ; True )\n\n### **bag_putDate** ( *bagHandle* ; *pathname* {; *date* })\n\nThis command allow to store a date in the bag referenced by the parameter bagHandle.\n\nThe optional third parameter is the value to store in the bag. If this parameter is missing, the value is set to 00/00/00.\n\n```4d\nbag_putDate ( $bag ; \"today\" ; Current date )\n```\n\n### **bag_putTime** ( *bagHandle* ; *pathname* {; *time* })\n\nThis command allow to store a time value in the bag referenced by the parameter bagHandle.\n\nThe optional third parameter is the value to store in the bag. If this parameter is missing, the value is set to 00:00:00.\n\n```4d\nbag_putTime ( $bag ; \"time\" ; Current time )\n```\n\n### **bag_putPicture** ( *bagHandle* ; *pathname* {; *picture* {; *codec*{; *hOffset*{; *vOffset* }}}})\n\nThis command allow to store a picture in the bag referenced by the parameter bagHandle.\n\nThe optional third parameter is the picture to store in the bag. If this parameter is missing, the stored picture will be an empty picture.\n\nThe fourth optional parameter is the codec to use for the stored image. The default value is \".png\"\n\n```4d\nbag_putPicture ( $bag ; \"picture\" ; $picture ; \".tiff\")  // Picture is stored as tiff\nbag_putPicture ( $bag ; \"picture\" ; $picture )           // Picture is stored as png\n```\n\nThe name may be suffixed with an operator that will be used to modify an existing element. The managed operators are:\n\n| Operators | Actions                                                                    |\n|:---------:|:-------------------------------------------------------------------------- |\n| +=        |adds the picture passed to the right of the current picture                 |\n| /=        |adds the picture passed to the bottom of the current picture                |\n| \u0026=        |puts the picture passed over the current picture.                           |\n\nIf the optional hOffset and vOffset parameters are used, a translation is applied to picture passed before superimposition.\n\nThe *codec*, the *width*, the *height* and the *size* of the picture are stored as properties and can be retrieved without loading the picture.\n\n### **bag_putBlob** ( *bagHandle* ; *pathname* ; -\u003e *blob* )\n\nThis command allow to store a blob in the bag referenced by the parameter bagHandle.\n\nThe required third parameter is a pointer to the blob to store in the bag.\n\n```4d\nCONVERT FROM TEXT ( \"Hello world!\" ; \"utf-8\" ; $Blob )\nbag_putBlob ( $bag ; \"myBlob\" ; $Blob )\n```\n\n### **bag_putPointer** ( *bagHandle* ; *pathname* ; -\u003e *something* )\n\nThis command allows to store a pointer in the bag referenced by the parameter bagHandle.\n\nThe required third parameter is the pointer to store in the bag.\n\nThe pointer can point a variable or a field. All pointers are managed except a pointer to a local variable.\n\n```4d\nbag_putPointer ( $bag ; \"myPointer\" ; -\u003e [table] )\n```\n\n### **bag_putVariable** ( *bagHandle* ; *pathname* ; -\u003e *value* )\n\nThis command allows to store the content of the variable or the field pointed to by the third required parameter in the bag referenced by the parameter bagHandle.\n\nThe value type must be in: boolean, integer or longint, real, string, text, time, date, picture, blob.\n\nThe value can either be retrieved with the command bag_getVariable or bag_get(type) according to the original value's type.\n\n```4d\nbag_putVariable ( $bag ; \"myVar\" ;  -\u003e vTest )\n```\n\n### **bag_putBag** ( *bagHandle* ; *pathname* ; *bagHandle* )\n\nThis command allows to embed an existing bag in the bag referenced by the parameter bagHandle.\n\n```4d\nbag_putVariable ( $bag ; \"myVar\" ;  $bag2 )\n```\n\n## Get Value Routines\n\nThis set of commands allow to get the value of an item stored into the value bag.\n\nEach of them expect a valid bag handle as first parameter and a name or a pathname as second parameter. \n\nAn error assertion is displayed if the bag handle is not valid or the item is not found. In these cases an empty value is returned.\n\nIf possible, bag4D performs the conversion between the type of the stored data and the type requested. If it's not possible, a warning assertion is generated.\n\nWhen relevant, the name may refer to an array element by adding the index of the item in square brackets. For example the line below, gets the tenth element of the array stored in the item \"counter\".\n\n```4d\n$count10 := bag_getLong ( $bag ; \"counter[10]\" )\n```\n\n### bag_getLong ( *bagHandle* ; *pathname* ) -\u003e *longint* \n\nThis command gets a longint value from an item stored in the bag referenced by the parameter bagHandle.\n\n### **bag_getReal** ( *bagHandle* ; *pathname* ) -\u003e *real* \n \nThis command gets a real value from an item stored in the bag referenced by the parameter bagHandle.\n\n### bag_getText ( bagHandle ; pathname ) -\u003e text \n\nThis command gets a text value from an item stored in the bag referenced by the parameter bagHandle.\n\n### **bag_getBoolean** ( *bagHandle* ; *pathname* ) -\u003e *boolean* \n\nThis command gets a boolean value from an item stored in the bag referenced by the parameter bagHandle.\n\n### **bag_getDate** ( *bagHandle* ; *pathname* ) -\u003e *date* \n\nThis command gets a date value from an item stored in the bag referenced by the parameter bagHandle.\n\n### **bag_getTime** ( *bagHandle* ; *pathname* ) -\u003e *time* \n\nThis command gets a time value from an item stored in the bag referenced by the parameter bagHandle.\n\n### **bag_getPicture** ( *bagHandle* ; *pathname* {; *codec* }) -\u003e *picture* \n\nThis command gets a real value from an item stored in the bag referenced by the parameter bagHandle. \n\nIf the third parameter is omitted, the codec used will be \".png\".\n\n### **bag_getBlob** ( *bagHandle* ; *pathname* ; -\u003e *blob* )\n\nThis command sets the object pointed to by the 3rd parameter with the blob value from an item stored in the bag referenced by the parameter bagHandle.\n\n### **bag_getPointer** ( *bagHandle* ; *pathname* ) -\u003e *pointer* \n\nThis command gets a pointer value from an item stored in the bag referenced by the parameter bagHandle.\n\n### **bag_getBag** ( *bagHandle* ; *pathname* ) -\u003e *bagHandle* \n\nThis command gets a bagHandle from the embedded bag stored in the bag referenced by the parameter bagHandle.\n\n### **bag_getVariable** ( *bagHandle* ; *pathname* ; -\u003e *blob* )\n\nThis command sets the object pointed to by the 3rd parameter with the value of an item stored in the bag referenced by the parameter bagHandle.\n\nThis command doesn't allow to retrieve the value of an array element.\n\n## Item info routines\n\n### **bag_itemExist** ( *bagHandles*  ; *name* ) -\u003e *boolean*\n\nReturns true if the value bag, referenced by bagHandle, contains an item named name.\n\n### **bag_itemType**( *bagHandles*  ; *name* ) -\u003e *longint*\n\nReturns the type of the data stored in the item name in the value bag bagHandle.\n\nThe types are the values of the corresponding types in 4D plus one: 8858 is returned if the item is an embedded bag.\n\n### **bag_arraySize**( *bagHandles*  ; *name* ) -\u003e *longint*\n\nReturns the size of the array stored in the item name in the value bag bagHandle.\n\n## The command bag\n\nThis command is a shortcut to manage items in a value bag.\n\nThe syntax is very simple: give it, in the first parameter, the name of a bag and an action to perform, it will return true if the action was completed and, where appropriate, a value in the object pointed to by the second parameter. Like this:\n\n```4d\nbag ( 'BAGNAME.action'  ; -\u003e object ) -\u003e boolean\n```\n\nThe first parameter should always start with a name of an existing value bag followed by a dot, optionally followed by a path to an item, then the name of a method or of a property.\n\n```4d\nbag ( 'BAGNAME.level_1.level_2action'  ; -\u003e object ) -\u003e boolean\n```\n\nFor example, after execution of the line below, the variable 'result' will contain the sum of all the top-level items of the bag 'myBag'.\n\n```4d\nbag ( 'myBag.sum()'  ; -\u003e result )\n```\n\n### methods \n\n### **forEach()**\nThis method is used to iterate through each element of an array or of a bag. Exp:\n\n```4d\nWhile (bag ( \"myBag.forEach()\" ))\n\tbag ( \"myBag.this.name\" ; -\u003e$name )\n\tbag ( \"myBag.this.value\" ; -\u003e$value )\nEnd while \n```\n\n### **empty()**\n\n\n### **min()**\n\n\n### **max()**\n\n\n### **sum()**\n\n\n### **squareSum()**\n\n\n### **average()**\n\n\n### **join( {separator} )**\n\n\n### **toJson()**\n\n\n### **items()**\n\n\n### **itemCount()**\n\n\n## properties\n\n**this** refers to the current element in a foreach() loop\n\n**name** returns the name of the current element as a text\n\n**index** returns the index of the current element as a longint\n\n**type** returns the type of the current element as a longint. \n\nThe values ​​are the same as those used in 4D and described in the constant theme \"Field and Variable Types\". One specific value is added for the value bag, it's 8858.\n\n**codec** returns, for an image item, the codec used at the time of the storage. It's a text value.\n\n**width** returns, for an image item, the width of the image. It's a numeric value.\n\n**height** returns, for an image item, the height of the image. It's a numeric value.\n\n**size** fills the result with the size of an array item, or the weight of a picture or a BLOB before the storage. It's a numeric value.\n\nFor a BLOB or an image, if a second pointer is passed as 3rd parameter, the variable pointed to will be filled with the compressed size of the item. This is a numeric value.\n\n**value** the variable pointed to by the second parameter is populated with the data of the stored element. If possible, a data conversion is performed according to the variable pointed.\n\n## Utility Routines\n\n### **bag_findByName** ( *name* {; -\u003e*bagHandles* }) -\u003e *bagHandle*\n\nReturns the reference of the first created bag whose name is equivalent to the string passed in parameter name. If several bags are found, the command can also fill the array passed by pointer in the second parameter with the reference of each bag.\n\n```4d\n$BagHandle := bag_findByName ( \"myBag\" )\n$BagHandle := bag_findByName ( \"myMultipleBags\" ; -\u003e bagHandleArray )\n```\n\nIf you know that there are several bags with the same name, you can retrieve the reference of one of them with this syntax for name : \"name[n]\" where n is the order of creation of the bag named name.\n\n```4d\n$BagHandle_1 := bag_new ( \"options\" )\n$BagHandle_2 := bag_new ( \"options\" )\n$BagHandle_3 := bag_new ( \"options\" )\n…\n$BagHandle := bag_findByName ( \"options[2]\" ) // $BagHandle  = $BagHandle_2\n```\n\n### **bag_forEach** ( *bagHandles* {; -\u003e*itemValue* })\n\nThis command allow to go through all, first level items, of a bag in a \"While…End while\" control flow structure. The command can also fill the second parameter passed by pointer with the value of the item.\n\n```4d\nC_REAL ( $sum ; $value)\nWhile( bag_forEach ( $Lon_bag ; -\u003e $value ))\n\t$sum := $sum + $value\nEnd while\n```\n\t\nSee also the \"forEach()\" method of a bag\n\n### **bag_rename** ( *bagHandles* ; *name* )\n\nRename the bag whose reference is bagHandle with the sting passed in parameter name. \n\n### **bag\\_SET_OPTION** ( *option* {; *on* })\n\nThis command allow to turn on/off some options of the component according to the boolean passed in the second parameter. If the second parameter is omitted, the option is turned off.\n\nOption value can be:\n\n|options         |meaning                                                             |default  |\n|:---------------|:-------------------------------------------------------------------|:--------|\n|\"default\"       |All options are restored to their default value                     |         |\n|\"assertions\"    |to turn on/off assertion [^2]                                       |**True** |\n|\"variant types\" |turns on/off the modification of the type of an element [^3]        |**False**|\n\n\n[^2]: An assertion is a message to inform the developer about something that is (error) or seems to be (warning) an anomaly. When the assertions are turned \"On\", the code isn't completed if it's an error. When the assertions are turned \"Off\", the code is completed if possible without message. Usually, you set assertions \"On\" in development mode or test mode and \"Off\" for the final user.\n\n[^3]: By default, if you try to put a value into an item of a different type, an error is generated. However if you want to change a type of an item you can change the behavior by this option.\n\n \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvdelachaux%2Fbag4D","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvdelachaux%2Fbag4D","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvdelachaux%2Fbag4D/lists"}