{"id":21435612,"url":"https://github.com/mountain/jsq","last_synced_at":"2026-01-03T08:03:42.172Z","repository":{"id":1133944,"uuid":"1011283","full_name":"mountain/jsq","owner":"mountain","description":"An Object system for Node.js based on the MOP concept from Lisp CLOS","archived":false,"fork":false,"pushed_at":"2017-02-18T16:45:06.000Z","size":834,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-23T09:21:59.786Z","etag":null,"topics":["javascript","mop","object-oriented","self-hosted"],"latest_commit_sha":null,"homepage":"","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/mountain.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}},"created_at":"2010-10-21T05:22:07.000Z","updated_at":"2019-08-13T14:37:59.000Z","dependencies_parsed_at":"2022-08-16T12:10:42.633Z","dependency_job_id":null,"html_url":"https://github.com/mountain/jsq","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/mountain%2Fjsq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mountain%2Fjsq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mountain%2Fjsq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mountain%2Fjsq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mountain","download_url":"https://codeload.github.com/mountain/jsq/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243945611,"owners_count":20372897,"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":["javascript","mop","object-oriented","self-hosted"],"created_at":"2024-11-22T23:44:54.817Z","updated_at":"2026-01-03T08:03:42.119Z","avatar_url":"https://github.com/mountain.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Jsq README\n==========\n\nJsq is an object system for javascript. This project is not maintained any more\nand only for achieve purpose.\n\nThe API is similar to eBay's VJO system, but the ideas is rooted from MOP\nof Lisp CLOS.\n\nThe overview of the API\n-----------------------\n\nBelow code is an example of the jsq Object system.\n\n```javascript\njsq.cls(\"test.basic.ChildType\")\n.bases(\"test.basic.ParentType\")\n.defines({\n  constructs : function (x, y) {\n    this.base(x+y);\n    this.x = x;\n    this.y = y;\n  },\n  getX : function () {\n    return this.x;\n  },\n  addToY : function (val) {\n    return this.y+val;\n  }\n})\n.end();\n```\n\nWe intended to implements Namespace, Object(Singleton), Function, Class,\nEnumeration, Mixin and Traits types in Jsq, but only Namespace, Object and Class\nhad been finished.\n\nJsq self descritption\n---------------------\n\nThe most interesting part of Jsq implementation is that we implemented Jsq on\na simplified version of Jsq itself.\n\nYou can see two bootstrap code in org.jsq.bootstrap packages:\n\n* uBootstrap.js: boot the simplified version of Jsq, only Class was supported\n* Bootstrap.js: second round of bootstrap for full version of Jsq\n\nThe performance of the second Jsq is not alway slower than the first version.\nMOP is not a layered achietecture, the second Jsq metaobject is created by the\nfirst Jsq metaobject, but they are independent each other. After the creation\nof second metaobject, the first metaobject will be discarded, and the execution\nof jsq code afterwards is not dispached to the first metaobject.\n\nWhy not maintain it\n-------------------\n\nAn Object System is too heavy for Javascript.\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmountain%2Fjsq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmountain%2Fjsq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmountain%2Fjsq/lists"}