{"id":22475526,"url":"https://github.com/philips/godee","last_synced_at":"2025-10-09T14:27:21.216Z","repository":{"id":6455079,"uuid":"7694744","full_name":"philips/godee","owner":"philips","description":"Simple pragmatic doc framework for human writers and readers","archived":false,"fork":false,"pushed_at":"2013-01-23T18:31:01.000Z","size":1272,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T17:27:35.869Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/philips.png","metadata":{"files":{"readme":"README.html","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}},"created_at":"2013-01-18T21:28:14.000Z","updated_at":"2014-02-04T02:20:43.000Z","dependencies_parsed_at":"2022-08-02T22:30:35.247Z","dependency_job_id":null,"html_url":"https://github.com/philips/godee","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/philips/godee","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips%2Fgodee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips%2Fgodee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips%2Fgodee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips%2Fgodee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/philips","download_url":"https://codeload.github.com/philips/godee/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips%2Fgodee/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001534,"owners_count":26083119,"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","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-12-06T13:18:20.941Z","updated_at":"2025-10-09T14:27:21.180Z","avatar_url":"https://github.com/philips.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 id=\"Builtin Modules2\"\u003e\u003ca href=\"#Builtin Modules2\"\u003eBuiltin Modules2\u003c/a\u003e\u003c/h1\u003e\n\u003ch2 id=\"uv\"\u003e\u003ca href=\"#uv\"\u003euv\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eInherits from \u003ccode\u003ecore.Object\u003c/code\u003e\n\n\u003c/p\u003e\n\u003ch3\u003euv.Handle\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003eEmitter\u003c/code\u003e\n\n\u003c/p\u003e\n\u003cp\u003eThis class is never used directly, but is the inheritance chain of all libuv\nobjects.\n\n\u003c/p\u003e\n\u003ch4\u003eHandle:addHandlerType(name)\u003c/h4\u003e\n\u003cp\u003eThis is used by Emitters to register with native events when the first listener\nis added.\n\n\u003c/p\u003e\n\u003ch3\u003euv.Pipe\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003euv.Stream\u003c/code\u003e\n\n\u003c/p\u003e\n\u003ch4\u003ePipe:initialize(ipc)\u003c/h4\u003e\n\u003ch3\u003euv.Process\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003euv.Handle\u003c/code\u003e\n\n\u003c/p\u003e\n\u003ch4\u003eProcess:initialize(command, args, options)\u003c/h4\u003e\n\u003ch3\u003euv.Stream\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003euv.Handle\u003c/code\u003e\n\n\u003c/p\u003e\n\u003cp\u003eThis is never used directly.  If you want to create a pure Lua stream, subclass\nor instantiate \u003ccode\u003ecore.iStream\u003c/code\u003e.\n\n\u003c/p\u003e\n\u003ch3\u003euv.Tcp\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003euv.Stream\u003c/code\u003e\n\n\u003c/p\u003e\n\u003ch4\u003eTcp:initialize()\u003c/h4\u003e\n\u003ch3\u003euv.Timer\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003euv.Handle\u003c/code\u003e\n\n\u003c/p\u003e\n\u003ch4\u003eTimer:initialize()\u003c/h4\u003e\n\u003ch3\u003euv.Tty\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003euv.Stream\u003c/code\u003e\n\n\u003c/p\u003e\n\u003ch4\u003eTty:initialize(fd, readable)\u003c/h4\u003e\n\u003ch3\u003euv.Udp\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003euv.Handle\u003c/code\u003e\n\n\u003c/p\u003e\n\u003ch4\u003eUdp:initialize()\u003c/h4\u003e\n\u003ch3\u003euv.Watcher\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003euv.Handle\u003c/code\u003e\n\n\u003c/p\u003e\n\u003ch4\u003eWatcher:initialize(path)\u003c/h4\u003e\n\u003cp\u003eistening\u0026#39;` event has been emitted.\n\n\u003c/p\u003e\n\u003ch4\u003eServer:close()\u003c/h4\u003e\n\u003cp\u003eStops the server from accepting new connections. This function is\nasynchronous, the server is finally closed when the server emits a \u003ccode\u003e\u0026#39;close\u0026#39;\u003c/code\u003e\nevent.\n\n\u003c/p\u003e\n\u003ch4\u003eServer:listen(port, host, listeningListener)\u003c/h4\u003e\n\u003cp\u003eBegin accepting connections on the specified \u003ccode\u003eport\u003c/code\u003e and \u003ccode\u003ehost\u003c/code\u003e.  If the\n\u003ccode\u003ehost\u003c/code\u003e is omitted, the server will accept connections directed to any\nIPv4 address (\u003ccode\u003eINADDR_ANY\u003c/code\u003e). A port value of zero will assign a random port.\n\n\u003c/p\u003e\n\u003cp\u003eThis function is asynchronous.  When the server has been bound,\n\u003ca href=\"#event_listening_\"\u003e\u0026#39;listening\u0026#39;\u003c/a\u003e event will be emitted.\nthe last parameter \u003ccode\u003elisteningListener\u003c/code\u003e will be added as an listener for the\n\u003ca href=\"#event_listening_\"\u003e\u0026#39;listening\u0026#39;\u003c/a\u003e event.\n\n\u003c/p\u003e\n\u003cp\u003eOne issue some users run into is getting \u003ccode\u003eEADDRINUSE\u003c/code\u003e errors. This means that\nanother server is already running on the requested port. One way of handling this\nwould be to wait a second and then try again. This can be done with\n\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eserver:on(\u0026#39;error\u0026#39;, function (e)\n  if e.code == \u0026#39;EADDRINUSE\u0026#39; then\n    print(\u0026#39;Address in use, retrying...\u0026#39;)\n    timer.setTimeout(1000, function ()\n      server:close()\n      server:listen(PORT, HOST)\n    end)\n  end\nend)\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(Note: All sockets in Luvit set \u003ccode\u003eSO_REUSEADDR\u003c/code\u003e already)\n\n\u003c/p\u003e\n\u003cp\u003eIf a path is given instead of a port, then start a UNIX socket server \nlistening for connections on the given \u003ccode\u003epath\u003c/code\u003e.\n\n\u003c/p\u003e\n\u003cp\u003eThis function is asynchronous.  When the server has been bound,\n\u003ca href=\"#event_listening_\"\u003e\u0026#39;listening\u0026#39;\u003c/a\u003e event will be emitted.\nthe last parameter \u003ccode\u003elisteningListener\u003c/code\u003e will be added as an listener for the\n\u003ca href=\"#event_listening_\"\u003e\u0026#39;listening\u0026#39;\u003c/a\u003e event.\n\n\n\u003c/p\u003e\n\u003ch4\u003eServer:pause(msecs)\u003c/h4\u003e\n\u003cp\u003eStop accepting connections for the given number of milliseconds (default is\none second).  This could be useful for throttling new connections against\nDoS attacks or other oversubscription.\n\n\u003c/p\u003e\n\u003ch3\u003enet2.Socket\u003c/h3\u003e\n\u003cp\u003eInherits from \u003ccode\u003euv.Stream\u003c/code\u003e\n\n\u003c/p\u003e\n\u003cp\u003eThis object is an abstraction of a TCP or UNIX socket.  \u003ccode\u003enet.Socket\u003c/code\u003e\ninstances implement a duplex Stream interface.  They can be created by the\nuser and used as a client (with \u003ccode\u003econnect()\u003c/code\u003e) or they can be created by Luvit\nand passed to the user through the \u003ccode\u003e\u0026#39;connection\u0026#39;\u003c/code\u003e event of a server.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:address()\u003c/h4\u003e\n\u003cp\u003eReturns the bound address and port of the socket as reported by the operating\nsystem. Returns a table with two properties, e.g.\n\u003ccode\u003e{address = \u0026quot;192.168.57.1\u0026quot;, port = 62053}\u003c/code\u003e\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:connect(port, host, connectListener)\u003c/h4\u003e\n\u003cp\u003eOpens the connection for a given socket. If \u003ccode\u003eport\u003c/code\u003e and \u003ccode\u003ehost\u003c/code\u003e are given,\nthen the socket will be opened as a TCP socket, if \u003ccode\u003ehost\u003c/code\u003e is omitted,\n\u003ccode\u003elocalhost\u003c/code\u003e will be assumed. If a \u003ccode\u003epath\u003c/code\u003e is given, the socket will be\nopened as a unix socket to that path.\n\n\u003c/p\u003e\n\u003cp\u003eNormally this method is not needed, as \u003ccode\u003enet.createConnection\u003c/code\u003e opens the\nsocket. Use this only if you are implementing a custom Socket or if a\nSocket is closed and you want to reuse it to connect to another server.\n\n\u003c/p\u003e\n\u003cp\u003eThis function is asynchronous. When the \u003ca href=\"#event_connect_\"\u003e\u0026#39;connect\u0026#39;\u003c/a\u003e event is\nemitted the socket is established. If there is a problem connecting, the\n\u003ccode\u003e\u0026#39;connect\u0026#39;\u003c/code\u003e event will not be emitted, the \u003ccode\u003e\u0026#39;error\u0026#39;\u003c/code\u003e event will be emitted with\nthe exception.\n\n\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003econnectListener\u003c/code\u003e parameter will be added as an listener for the\n\u003ca href=\"#event_connect_\"\u003e\u0026#39;connect\u0026#39;\u003c/a\u003e event.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:destroy()\u003c/h4\u003e\n\u003cp\u003eEnsures that no more I/O activity happens on this socket. Only necessary in\ncase of errors (parse error or so).\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:finish(data, callback)\u003c/h4\u003e\n\u003cp\u003eHalf-closes the socket. i.e., it sends a FIN packet. It is possible the\nserver will still send some data.\n\n\u003c/p\u003e\n\u003cp\u003eIf \u003ccode\u003edata\u003c/code\u003e is specified, it is equivalent to calling\n\u003ccode\u003esocket:write(data)\u003c/code\u003e followed by \u003ccode\u003esocket:finish()\u003c/code\u003e.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:initialize(options)\u003c/h4\u003e\n\u003cp\u003eConstruct a new socket object.\n\n\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eoptions\u003c/code\u003e is an object with the following defaults:\n\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e{\n  fd = nil,\n  type = nil,\n  allowHalfOpen = false\n}\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003efd\u003c/code\u003e allows you to specify the existing file descriptor of socket. \u003ccode\u003etype\u003c/code\u003e\nspecified underlying protocol. It can be \u003ccode\u003e\u0026#39;tcp4\u0026#39;\u003c/code\u003e, \u003ccode\u003e\u0026#39;tcp6\u0026#39;\u003c/code\u003e, or \u003ccode\u003e\u0026#39;unix\u0026#39;\u003c/code\u003e.\nAbout \u003ccode\u003eallowHalfOpen\u003c/code\u003e, refer to \u003ccode\u003ecreateServer()\u003c/code\u003e and \u003ccode\u003e\u0026#39;end\u0026#39;\u003c/code\u003e event.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:pause()\u003c/h4\u003e\n\u003cp\u003ePauses the reading of data. That is, \u003ccode\u003e\u0026#39;data\u0026#39;\u003c/code\u003e events will not be emitted.\nUseful to throttle back an upload.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:remoteAddress()\u003c/h4\u003e\n\u003cp\u003eThe string representation of the remote IP address. For example,\n\u003ccode\u003e\u0026#39;74.125.127.100\u0026#39;\u003c/code\u003e or \u003ccode\u003e\u0026#39;2001:4860:a005::68\u0026#39;\u003c/code\u003e.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:remotePort()\u003c/h4\u003e\n\u003cp\u003eThe numeric representation of the remote port. For example,\n\u003ccode\u003e80\u003c/code\u003e or \u003ccode\u003e21\u003c/code\u003e.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:resume()\u003c/h4\u003e\n\u003cp\u003eResumes reading after a call to \u003ccode\u003epause()\u003c/code\u003e.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:setKeepAlive(enable, initialDelay)\u003c/h4\u003e\n\u003cp\u003eEnable/disable keep-alive functionality, and optionally set the initial\ndelay before the first keepalive probe is sent on an idle socket.\n\u003ccode\u003eenable\u003c/code\u003e defaults to \u003ccode\u003efalse\u003c/code\u003e.\n\n\u003c/p\u003e\n\u003cp\u003eSet \u003ccode\u003einitialDelay\u003c/code\u003e (in milliseconds) to set the delay between the last\ndata packet received and the first keepalive probe. Setting 0 for\ninitialDelay will leave the value unchanged from the default\n(or previous) setting. Defaults to \u003ccode\u003e0\u003c/code\u003e.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:setNoDelay(noDelay)\u003c/h4\u003e\n\u003cp\u003eDisables the Nagle algorithm. By default TCP connections use the Nagle\nalgorithm, they buffer data before sending it off. Setting \u003ccode\u003etrue\u003c/code\u003e for\n\u003ccode\u003enoDelay\u003c/code\u003e will immediately fire off data each time \u003ccode\u003esocket.write()\u003c/code\u003e is called.\n\u003ccode\u003enoDelay\u003c/code\u003e defaults to \u003ccode\u003etrue\u003c/code\u003e.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:setTimeout(timeout, callback)\u003c/h4\u003e\n\u003cp\u003eSets the socket to timeout after \u003ccode\u003etimeout\u003c/code\u003e milliseconds of inactivity on\nthe socket. By default \u003ccode\u003enet.Socket\u003c/code\u003e do not have a timeout.\n\n\u003c/p\u003e\n\u003cp\u003eWhen an idle timeout is triggered the socket will receive a \u003ccode\u003e\u0026#39;timeout\u0026#39;\u003c/code\u003e\nevent but the connection will not be severed. The user must manually \u003ccode\u003eend()\u003c/code\u003e\nor \u003ccode\u003edestroy()\u003c/code\u003e the socket.\n\n\u003c/p\u003e\n\u003cp\u003eIf \u003ccode\u003etimeout\u003c/code\u003e is 0, then the existing idle timeout is disabled.\n\n\u003c/p\u003e\n\u003cp\u003eThe optional \u003ccode\u003ecallback\u003c/code\u003e parameter will be added as a one time listener for the\n\u003ccode\u003e\u0026#39;timeout\u0026#39;\u003c/code\u003e event.\n\n\u003c/p\u003e\n\u003ch4\u003eSocket:write(data, callback)\u003c/h4\u003e\n\u003cp\u003eSends data on the socket. The second parameter specifies the encoding in the\ncase of a string--it defaults to UTF8 encoding.\n\n\u003c/p\u003e\n\u003cp\u003eReturns \u003ccode\u003etrue\u003c/code\u003e if the entire data was flushed successfully to the kernel\nbuffer. Returns \u003ccode\u003efalse\u003c/code\u003e if all or part of the data was queued in user memory.\n\u003ccode\u003e\u0026#39;drain\u0026#39;\u003c/code\u003e will be emitted when the buffer is again free.\n\n\u003c/p\u003e\n\u003cp\u003eThe optional \u003ccode\u003ecallback\u003c/code\u003e parameter will be executed when the data is finally\nwritten out - this may not be immediately.\n\n\u003c/p\u003e\n\u003ch3\u003enet2.connect(port, host, connectListener)\u003c/h3\u003e\n\u003cp\u003eConstruct a new socket object and opens a socket to the given location. When the\nsocket is established the \u003ccode\u003econnect\u003c/code\u003e event will be emitted.\n\n\u003c/p\u003e\n\u003cp\u003eThe arguments for these methods change the type of connection:\n\n\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp\u003e\u003ccode\u003enet.connect(port, [host], [connectListener])\u003c/code\u003e - Creates a TCP connection to\nport on host. If host is omitted, \u0026#39;localhost\u0026#39; will be assumed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003ccode\u003enet.connect(path, [connectListener])\u003c/code\u003e - Creates unix socket connection to\n\u003ccode\u003epath\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe connectListener parameter will be added as an listener for the \u003ccode\u003econnect\u003c/code\u003e\nevent.\n\n\u003c/p\u003e\n\u003cp\u003eHere is an example of a client of echo server as described previously:\n\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003elocal net = require \u0026#39;net\u0026#39;\nlocal client = net.connect(8124, function ()\n  debug(\u0026#39;on_connect\u0026#39;)\n  client:write(\u0026#39;world!\\r\\n\u0026#39;)\nend)\nclient:on(\u0026#39;data\u0026#39;, function (data) \n  debug(\u0026#39;on_data\u0026#39;, data)\n  client:end()\nend)\nclient:on(\u0026#39;end\u0026#39;, function ()\n  debug(\u0026#39;on_end\u0026#39;)\nend)\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eTo connect on the socket \u003ccode\u003e/tmp/echo.sock\u003c/code\u003e the second line would just be changed to\n\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003elocal client = net.connect(\u0026#39;/tmp/echo.sock\u0026#39;, function ()\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003enet2.createServer(options, connectionListener)\u003c/h3\u003e\n\u003cp\u003eCreates a new TCP server. The \u003ccode\u003econnectionListener\u003c/code\u003e argument is automatically set\nas a listener for the \u003ccode\u003econnection\u003c/code\u003e event.\n\n\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eoptions\u003c/code\u003e is a table with the following defaults:\n\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e{ allowHalfOpen = false }\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eIf \u003ccode\u003eallowHalfOpen\u003c/code\u003e is \u003ccode\u003etrue\u003c/code\u003e, then the socket won\u0026#39;t automatically send a FIN\npacket when the other end of the socket sends a FIN packet. The socket becomes\nnon-readable, but still writable. You should call the \u003ccode\u003eend()\u003c/code\u003e method explicitly.\nSee \u003ccode\u003eend\u003c/code\u003e event for more information.\n\n\u003c/p\u003e\n\u003cp\u003eHere is an example of a echo server which listens for connections\non port 8124:\n\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003elocal net = require(\u0026#39;net\u0026#39;)\nlocal server = net.createServer(function (c) { //\u0026#39;connection\u0026#39; listener\n  debug(\u0026#39;server connected\u0026#39;)\n  c:on(\u0026#39;end\u0026#39;, function ()\n    debug(\u0026#39;client disconnected\u0026#39;)\n  end)\n  c:write(\u0026#39;hello\\r\\n\u0026#39;)\n  c:pipe(c)\nend)\nserver:listen(8124, function () {\n  print(\u0026#39;server bound\u0026#39;)\nend)\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eTest this by using \u003ccode\u003etelnet\u003c/code\u003e:\n\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003etelnet localhost 8124\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eTo listen on the socket \u003ccode\u003e/tmp/echo.sock\u003c/code\u003e the third line from the last would\njust be changed to\n\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eserver:listen(\u0026#39;/tmp/echo.sock\u0026#39;, function (c) {\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eUse \u003ccode\u003enc\u003c/code\u003e to connect to a UNIX domain socket server:\n\n\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003enc -U /tmp/echo.sock\u003c/code\u003e\u003c/pre\u003e\n\u003ch1 id=\"Examples\"\u003e\u003ca href=\"#Examples\"\u003eExamples\u003c/a\u003e\u003c/h1\u003e\n\u003ch2 id=\"Reading a file\"\u003e\u003ca href=\"#Reading a file\"\u003eReading a file\u003c/a\u003e\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003efs.readFileSync()\u003c/code\u003e\u003c/pre\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilips%2Fgodee","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphilips%2Fgodee","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilips%2Fgodee/lists"}