cascading works
parent
754fb25a64
commit
dc929bfc2a
|
@ -47,3 +47,6 @@ r3 create ComponentMesh component_extends Component ./r3-component/
|
||||||
r3 create ComponentGeometry component_extends Component ./r3-component/
|
r3 create ComponentGeometry component_extends Component ./r3-component/
|
||||||
r3 create ComponentBufferGeometry component_extends ComponentGeometry ./r3-component/
|
r3 create ComponentBufferGeometry component_extends ComponentGeometry ./r3-component/
|
||||||
r3 create ComponentPlaneGeometry component_extends ComponentBufferGeometry ./r3-component/
|
r3 create ComponentPlaneGeometry component_extends ComponentBufferGeometry ./r3-component/
|
||||||
|
r3 create Graph base ./
|
||||||
|
r3 create Node base ./
|
||||||
|
r3 create RuntimeJsDOM runtime_extends RuntimeDOM ./r3-runtime/
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "r3",
|
"name": "r3",
|
||||||
"version": "3.0.117",
|
"version": "3.0.333",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -141,6 +141,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@tootallnate/once": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="
|
||||||
|
},
|
||||||
"@types/body-parser": {
|
"@types/body-parser": {
|
||||||
"version": "1.19.0",
|
"version": "1.19.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
|
||||||
|
@ -244,6 +249,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
|
||||||
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
|
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
|
||||||
},
|
},
|
||||||
|
"abab": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
|
||||||
|
"integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="
|
||||||
|
},
|
||||||
"accepts": {
|
"accepts": {
|
||||||
"version": "1.3.7",
|
"version": "1.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
||||||
|
@ -253,11 +263,60 @@
|
||||||
"negotiator": "0.6.2"
|
"negotiator": "0.6.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"acorn": {
|
||||||
|
"version": "8.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
|
||||||
|
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q=="
|
||||||
|
},
|
||||||
|
"acorn-globals": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
|
||||||
|
"requires": {
|
||||||
|
"acorn": "^7.1.1",
|
||||||
|
"acorn-walk": "^7.1.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"acorn": {
|
||||||
|
"version": "7.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||||
|
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"acorn-walk": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
|
||||||
|
},
|
||||||
"after": {
|
"after": {
|
||||||
"version": "0.8.2",
|
"version": "0.8.2",
|
||||||
"resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
|
||||||
"integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
|
"integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
|
||||||
},
|
},
|
||||||
|
"agent-base": {
|
||||||
|
"version": "6.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||||
|
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
||||||
|
"requires": {
|
||||||
|
"debug": "4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "4.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
|
||||||
|
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"ansi-regex": {
|
"ansi-regex": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
||||||
|
@ -283,6 +342,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
||||||
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="
|
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="
|
||||||
},
|
},
|
||||||
|
"asynckit": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
|
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||||
|
},
|
||||||
"backo2": {
|
"backo2": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
|
||||||
|
@ -334,6 +398,11 @@
|
||||||
"concat-map": "0.0.1"
|
"concat-map": "0.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"browser-process-hrtime": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
|
||||||
|
},
|
||||||
"browser-stdout": {
|
"browser-stdout": {
|
||||||
"version": "1.3.1",
|
"version": "1.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
|
||||||
|
@ -367,6 +436,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
||||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
|
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
|
||||||
},
|
},
|
||||||
|
"combined-stream": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
|
"requires": {
|
||||||
|
"delayed-stream": "~1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"component-bind": {
|
"component-bind": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
|
||||||
|
@ -410,6 +487,36 @@
|
||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||||
},
|
},
|
||||||
|
"cssom": {
|
||||||
|
"version": "0.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
|
||||||
|
"integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
|
||||||
|
},
|
||||||
|
"cssstyle": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
|
||||||
|
"requires": {
|
||||||
|
"cssom": "~0.3.6"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"cssom": {
|
||||||
|
"version": "0.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
|
||||||
|
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"data-urls": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
|
||||||
|
"requires": {
|
||||||
|
"abab": "^2.0.3",
|
||||||
|
"whatwg-mimetype": "^3.0.0",
|
||||||
|
"whatwg-url": "^10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "2.6.9",
|
"version": "2.6.9",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
@ -418,6 +525,11 @@
|
||||||
"ms": "2.0.0"
|
"ms": "2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"decimal.js": {
|
||||||
|
"version": "10.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
|
||||||
|
"integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
|
||||||
|
},
|
||||||
"deep-eql": {
|
"deep-eql": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
|
||||||
|
@ -426,6 +538,16 @@
|
||||||
"type-detect": "^4.0.0"
|
"type-detect": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"deep-is": {
|
||||||
|
"version": "0.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
||||||
|
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
|
||||||
|
},
|
||||||
|
"delayed-stream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||||
|
},
|
||||||
"depd": {
|
"depd": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
||||||
|
@ -441,6 +563,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
|
||||||
"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w=="
|
"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w=="
|
||||||
},
|
},
|
||||||
|
"domexception": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
|
||||||
|
"requires": {
|
||||||
|
"webidl-conversions": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ee-first": {
|
"ee-first": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||||
|
@ -539,6 +669,33 @@
|
||||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
|
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
|
||||||
},
|
},
|
||||||
|
"escodegen": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
|
||||||
|
"requires": {
|
||||||
|
"esprima": "^4.0.1",
|
||||||
|
"estraverse": "^5.2.0",
|
||||||
|
"esutils": "^2.0.2",
|
||||||
|
"optionator": "^0.8.1",
|
||||||
|
"source-map": "~0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"esprima": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
|
||||||
|
},
|
||||||
|
"estraverse": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
|
||||||
|
},
|
||||||
|
"esutils": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
|
||||||
|
},
|
||||||
"etag": {
|
"etag": {
|
||||||
"version": "1.8.1",
|
"version": "1.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
||||||
|
@ -586,6 +743,11 @@
|
||||||
"vary": "~1.1.2"
|
"vary": "~1.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"fast-levenshtein": {
|
||||||
|
"version": "2.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||||
|
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
|
||||||
|
},
|
||||||
"finalhandler": {
|
"finalhandler": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
|
||||||
|
@ -605,6 +767,16 @@
|
||||||
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
|
||||||
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
|
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
|
||||||
},
|
},
|
||||||
|
"form-data": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||||
|
"requires": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"forwarded": {
|
"forwarded": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
||||||
|
@ -668,6 +840,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
||||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
|
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
|
||||||
},
|
},
|
||||||
|
"html-encoding-sniffer": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
|
||||||
|
"requires": {
|
||||||
|
"whatwg-encoding": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"http-errors": {
|
"http-errors": {
|
||||||
"version": "1.7.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
|
||||||
|
@ -687,6 +867,55 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"http-proxy-agent": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
|
||||||
|
"requires": {
|
||||||
|
"@tootallnate/once": "2",
|
||||||
|
"agent-base": "6",
|
||||||
|
"debug": "4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "4.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
|
||||||
|
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"https-proxy-agent": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
|
||||||
|
"requires": {
|
||||||
|
"agent-base": "6",
|
||||||
|
"debug": "4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "4.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
|
||||||
|
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"iconv-lite": {
|
"iconv-lite": {
|
||||||
"version": "0.4.24",
|
"version": "0.4.24",
|
||||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||||
|
@ -745,6 +974,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
|
||||||
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
|
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
|
||||||
},
|
},
|
||||||
|
"is-potential-custom-element-name": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
|
||||||
|
},
|
||||||
"is-unicode-supported": {
|
"is-unicode-supported": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
|
||||||
|
@ -763,6 +997,56 @@
|
||||||
"argparse": "^2.0.1"
|
"argparse": "^2.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"jsdom": {
|
||||||
|
"version": "18.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-18.0.0.tgz",
|
||||||
|
"integrity": "sha512-HVLuBcFmwdWulStv5U+J59b1AyzXhM92KXlM8HQ3ecYtRM2OQEUCPMa4oNuDeCBmtRcC7tJvb0Xz5OeFXMOKTA==",
|
||||||
|
"requires": {
|
||||||
|
"abab": "^2.0.5",
|
||||||
|
"acorn": "^8.5.0",
|
||||||
|
"acorn-globals": "^6.0.0",
|
||||||
|
"cssom": "^0.5.0",
|
||||||
|
"cssstyle": "^2.3.0",
|
||||||
|
"data-urls": "^3.0.1",
|
||||||
|
"decimal.js": "^10.3.1",
|
||||||
|
"domexception": "^4.0.0",
|
||||||
|
"escodegen": "^2.0.0",
|
||||||
|
"form-data": "^4.0.0",
|
||||||
|
"html-encoding-sniffer": "^3.0.0",
|
||||||
|
"http-proxy-agent": "^5.0.0",
|
||||||
|
"https-proxy-agent": "^5.0.0",
|
||||||
|
"is-potential-custom-element-name": "^1.0.1",
|
||||||
|
"nwsapi": "^2.2.0",
|
||||||
|
"parse5": "6.0.1",
|
||||||
|
"saxes": "^5.0.1",
|
||||||
|
"symbol-tree": "^3.2.4",
|
||||||
|
"tough-cookie": "^4.0.0",
|
||||||
|
"w3c-hr-time": "^1.0.2",
|
||||||
|
"w3c-xmlserializer": "^3.0.0",
|
||||||
|
"webidl-conversions": "^7.0.0",
|
||||||
|
"whatwg-encoding": "^2.0.0",
|
||||||
|
"whatwg-mimetype": "^3.0.0",
|
||||||
|
"whatwg-url": "^10.0.0",
|
||||||
|
"ws": "^8.2.3",
|
||||||
|
"xml-name-validator": "^4.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ws": {
|
||||||
|
"version": "8.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
|
||||||
|
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"levn": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||||
|
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
|
||||||
|
"requires": {
|
||||||
|
"prelude-ls": "~1.1.2",
|
||||||
|
"type-check": "~0.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"locate-path": {
|
"locate-path": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
||||||
|
@ -1181,6 +1465,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
||||||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
|
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
|
||||||
},
|
},
|
||||||
|
"nwsapi": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
|
||||||
|
},
|
||||||
"on-finished": {
|
"on-finished": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
||||||
|
@ -1197,6 +1486,19 @@
|
||||||
"wrappy": "1"
|
"wrappy": "1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"optionator": {
|
||||||
|
"version": "0.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
|
||||||
|
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
|
||||||
|
"requires": {
|
||||||
|
"deep-is": "~0.1.3",
|
||||||
|
"fast-levenshtein": "~2.0.6",
|
||||||
|
"levn": "~0.3.0",
|
||||||
|
"prelude-ls": "~1.1.2",
|
||||||
|
"type-check": "~0.3.2",
|
||||||
|
"word-wrap": "~1.2.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"p-limit": {
|
"p-limit": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
|
||||||
|
@ -1213,6 +1515,11 @@
|
||||||
"p-limit": "^3.0.2"
|
"p-limit": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"parse5": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
|
||||||
|
},
|
||||||
"parseqs": {
|
"parseqs": {
|
||||||
"version": "0.0.6",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
|
||||||
|
@ -1248,6 +1555,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
|
||||||
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
|
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
|
||||||
},
|
},
|
||||||
|
"prelude-ls": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
|
||||||
|
},
|
||||||
"proxy-addr": {
|
"proxy-addr": {
|
||||||
"version": "2.0.7",
|
"version": "2.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
||||||
|
@ -1257,6 +1569,16 @@
|
||||||
"ipaddr.js": "1.9.1"
|
"ipaddr.js": "1.9.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"psl": {
|
||||||
|
"version": "1.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
||||||
|
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
|
||||||
|
},
|
||||||
|
"punycode": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
|
||||||
|
},
|
||||||
"qs": {
|
"qs": {
|
||||||
"version": "6.7.0",
|
"version": "6.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
|
||||||
|
@ -1306,6 +1628,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||||
},
|
},
|
||||||
|
"saxes": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
|
||||||
|
"requires": {
|
||||||
|
"xmlchars": "^2.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"send": {
|
"send": {
|
||||||
"version": "0.17.1",
|
"version": "0.17.1",
|
||||||
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
|
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
|
||||||
|
@ -1478,6 +1808,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"statuses": {
|
"statuses": {
|
||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
|
||||||
|
@ -1506,6 +1842,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
||||||
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
|
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
|
||||||
},
|
},
|
||||||
|
"symbol-tree": {
|
||||||
|
"version": "3.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||||
|
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
|
||||||
|
},
|
||||||
"to-array": {
|
"to-array": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
|
||||||
|
@ -1516,6 +1857,32 @@
|
||||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
||||||
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
|
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
|
||||||
},
|
},
|
||||||
|
"tough-cookie": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
|
||||||
|
"requires": {
|
||||||
|
"psl": "^1.1.33",
|
||||||
|
"punycode": "^2.1.1",
|
||||||
|
"universalify": "^0.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tr46": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
|
||||||
|
"requires": {
|
||||||
|
"punycode": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type-check": {
|
||||||
|
"version": "0.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
||||||
|
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
|
||||||
|
"requires": {
|
||||||
|
"prelude-ls": "~1.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"type-detect": {
|
"type-detect": {
|
||||||
"version": "4.0.8",
|
"version": "4.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
|
||||||
|
@ -1535,6 +1902,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/uberproto/-/uberproto-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/uberproto/-/uberproto-2.0.6.tgz",
|
||||||
"integrity": "sha512-68H97HffZoFaa3HFtpstahWorN9dSp5uTU6jo3GjIQ6JkJBR3hC2Nx/e/HFOoYHdUyT/Z1MRWfxN1EiQJZUyCQ=="
|
"integrity": "sha512-68H97HffZoFaa3HFtpstahWorN9dSp5uTU6jo3GjIQ6JkJBR3hC2Nx/e/HFOoYHdUyT/Z1MRWfxN1EiQJZUyCQ=="
|
||||||
},
|
},
|
||||||
|
"universalify": {
|
||||||
|
"version": "0.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
||||||
|
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
|
||||||
|
},
|
||||||
"unpipe": {
|
"unpipe": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||||
|
@ -1550,6 +1922,59 @@
|
||||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
||||||
},
|
},
|
||||||
|
"w3c-hr-time": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
|
||||||
|
"requires": {
|
||||||
|
"browser-process-hrtime": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"w3c-xmlserializer": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
|
||||||
|
"requires": {
|
||||||
|
"xml-name-validator": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"webidl-conversions": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
|
||||||
|
},
|
||||||
|
"whatwg-encoding": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
|
||||||
|
"requires": {
|
||||||
|
"iconv-lite": "0.6.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"iconv-lite": {
|
||||||
|
"version": "0.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||||
|
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||||
|
"requires": {
|
||||||
|
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"whatwg-mimetype": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="
|
||||||
|
},
|
||||||
|
"whatwg-url": {
|
||||||
|
"version": "10.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
|
||||||
|
"integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
|
||||||
|
"requires": {
|
||||||
|
"tr46": "^3.0.0",
|
||||||
|
"webidl-conversions": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"wide-align": {
|
"wide-align": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
|
||||||
|
@ -1558,6 +1983,11 @@
|
||||||
"string-width": "^1.0.2 || 2"
|
"string-width": "^1.0.2 || 2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"word-wrap": {
|
||||||
|
"version": "1.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||||
|
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
|
||||||
|
},
|
||||||
"workerpool": {
|
"workerpool": {
|
||||||
"version": "6.1.4",
|
"version": "6.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.4.tgz",
|
||||||
|
@ -1573,6 +2003,16 @@
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
|
||||||
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
|
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
|
||||||
},
|
},
|
||||||
|
"xml-name-validator": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="
|
||||||
|
},
|
||||||
|
"xmlchars": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
|
||||||
|
},
|
||||||
"xmlhttprequest-ssl": {
|
"xmlhttprequest-ssl": {
|
||||||
"version": "1.6.3",
|
"version": "1.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "r3",
|
"name": "r3",
|
||||||
"version": "3.0.262",
|
"version": "3.0.339",
|
||||||
"description": "",
|
"description": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8,6 +8,7 @@
|
||||||
"@feathersjs/feathers": "^4.5.3",
|
"@feathersjs/feathers": "^4.5.3",
|
||||||
"@feathersjs/socketio": "^4.5.3",
|
"@feathersjs/socketio": "^4.5.3",
|
||||||
"chai": "^4.3.4",
|
"chai": "^4.3.4",
|
||||||
|
"jsdom": "^18.0.0",
|
||||||
"mocha": "^9.0.0"
|
"mocha": "^9.0.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
2
r3.php
2
r3.php
|
@ -594,7 +594,7 @@ function extractOption($item, $template)
|
||||||
$numSpaces = strlen($str);
|
$numSpaces = strlen($str);
|
||||||
}
|
}
|
||||||
|
|
||||||
$comment = wordwrap($comment, 95, "\n" . str_pad('', $numSpaces, ' ', STR_PAD_LEFT) . "* ");
|
$comment = wordwrap($comment, 90, "\n" . str_pad('', $numSpaces, ' ', STR_PAD_LEFT) . "* ");
|
||||||
}
|
}
|
||||||
$updated = str_replace('COMMENT', $comment, $template);
|
$updated = str_replace('COMMENT', $comment, $template);
|
||||||
$updated = str_replace('KEY', $key, $updated);
|
$updated = str_replace('KEY', $key, $updated);
|
||||||
|
|
|
@ -3,6 +3,8 @@ const R3 = require('./r3.js');
|
||||||
const System = require('./r3-system/');
|
const System = require('./r3-system/');
|
||||||
const Runtime = require('./r3-runtime/');
|
const Runtime = require('./r3-runtime/');
|
||||||
const Event = require('./r3-event.js');
|
const Event = require('./r3-event.js');
|
||||||
|
const Graph = require('./r3-graph.js');
|
||||||
|
const Node = require('./r3-node.js');
|
||||||
const Utils = require('./r3-utils.js');
|
const Utils = require('./r3-utils.js');
|
||||||
const R3Object = require('./r3-object/');
|
const R3Object = require('./r3-object/');
|
||||||
const Project = require('./r3-object/r3-project.js');
|
const Project = require('./r3-object/r3-project.js');
|
||||||
|
@ -14,6 +16,8 @@ const Component = require('./r3-component/');
|
||||||
R3.System = System;
|
R3.System = System;
|
||||||
R3.Runtime = Runtime;
|
R3.Runtime = Runtime;
|
||||||
R3.Event = Event;
|
R3.Event = Event;
|
||||||
|
R3.Graph = Graph;
|
||||||
|
R3.Node = Node;
|
||||||
R3.Utils = Utils;
|
R3.Utils = Utils;
|
||||||
R3.Object = R3Object;
|
R3.Object = R3Object;
|
||||||
R3.Project = Project;
|
R3.Project = Project;
|
||||||
|
|
|
@ -19,9 +19,14 @@ const Event = require('../r3-event.js');
|
||||||
TEMPLATE_OPTIONS_END
|
TEMPLATE_OPTIONS_END
|
||||||
|
|
||||||
CUSTOM_OPTIONS_START
|
CUSTOM_OPTIONS_START
|
||||||
|
material=null
|
||||||
CUSTOM_OPTIONS_END
|
CUSTOM_OPTIONS_END
|
||||||
|
|
||||||
CUSTOM_REQUIRED_COMPONENTS_START
|
CUSTOM_REQUIRED_COMPONENTS_START
|
||||||
|
[0]material=ComponentMaterial
|
||||||
|
[0]geometry=ComponentGeometry
|
||||||
|
[1]material=[ComponentMaterial]
|
||||||
|
[1]geometry=ComponentGeometry
|
||||||
CUSTOM_REQUIRED_COMPONENTS_END
|
CUSTOM_REQUIRED_COMPONENTS_END
|
||||||
|
|
||||||
TEMPLATE_STATIC_OPTIONS_START
|
TEMPLATE_STATIC_OPTIONS_START
|
||||||
|
@ -93,9 +98,192 @@ class ComponentMesh extends Component {
|
||||||
//GENERATED_TEMPLATE_OPTIONS_INIT_END
|
//GENERATED_TEMPLATE_OPTIONS_INIT_END
|
||||||
|
|
||||||
//GENERATED_OPTIONS_INIT_START
|
//GENERATED_OPTIONS_INIT_START
|
||||||
|
/**
|
||||||
|
* material - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.material === 'undefined') {
|
||||||
|
options.material = null;
|
||||||
|
}
|
||||||
//GENERATED_OPTIONS_INIT_END
|
//GENERATED_OPTIONS_INIT_END
|
||||||
|
|
||||||
//GENERATED_REQUIRED_COMPONENTS_START
|
//GENERATED_REQUIRED_COMPONENTS_START
|
||||||
|
/**
|
||||||
|
* material - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.required[0] === 'undefined') {
|
||||||
|
options.required[0] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
options.required[0].material = ComponentMaterial;
|
||||||
|
|
||||||
|
if (typeof this._cache === 'undefined') {
|
||||||
|
this._cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache['material'] = options.material;
|
||||||
|
Object.defineProperty(
|
||||||
|
this,
|
||||||
|
'material',
|
||||||
|
{
|
||||||
|
configurable : true,
|
||||||
|
enumerable : true,
|
||||||
|
set: (x) => {
|
||||||
|
Event.Emit(
|
||||||
|
Event.OBJECT_PROPERTY_UPDATE,
|
||||||
|
{
|
||||||
|
r3Object : this,
|
||||||
|
property : 'material',
|
||||||
|
value : x
|
||||||
|
}
|
||||||
|
);
|
||||||
|
this._cache['material'] = x;
|
||||||
|
Event.Emit(
|
||||||
|
Event.OBJECT_PROPERTY_UPDATED,
|
||||||
|
{
|
||||||
|
r3Object : this,
|
||||||
|
property : 'material',
|
||||||
|
value : x
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return x;
|
||||||
|
},
|
||||||
|
get : () => {
|
||||||
|
return this._cache['material'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) /**
|
||||||
|
* geometry - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.required[0] === 'undefined') {
|
||||||
|
options.required[0] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
options.required[0].geometry = ComponentGeometry;
|
||||||
|
|
||||||
|
if (typeof this._cache === 'undefined') {
|
||||||
|
this._cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache['geometry'] = options.geometry;
|
||||||
|
Object.defineProperty(
|
||||||
|
this,
|
||||||
|
'geometry',
|
||||||
|
{
|
||||||
|
configurable : true,
|
||||||
|
enumerable : true,
|
||||||
|
set: (x) => {
|
||||||
|
Event.Emit(
|
||||||
|
Event.OBJECT_PROPERTY_UPDATE,
|
||||||
|
{
|
||||||
|
r3Object : this,
|
||||||
|
property : 'geometry',
|
||||||
|
value : x
|
||||||
|
}
|
||||||
|
);
|
||||||
|
this._cache['geometry'] = x;
|
||||||
|
Event.Emit(
|
||||||
|
Event.OBJECT_PROPERTY_UPDATED,
|
||||||
|
{
|
||||||
|
r3Object : this,
|
||||||
|
property : 'geometry',
|
||||||
|
value : x
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return x;
|
||||||
|
},
|
||||||
|
get : () => {
|
||||||
|
return this._cache['geometry'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) /**
|
||||||
|
* material - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.required[1] === 'undefined') {
|
||||||
|
options.required[1] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
options.required[1].material = [ComponentMaterial];
|
||||||
|
|
||||||
|
if (typeof this._cache === 'undefined') {
|
||||||
|
this._cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache['material'] = options.material;
|
||||||
|
Object.defineProperty(
|
||||||
|
this,
|
||||||
|
'material',
|
||||||
|
{
|
||||||
|
configurable : true,
|
||||||
|
enumerable : true,
|
||||||
|
set: (x) => {
|
||||||
|
Event.Emit(
|
||||||
|
Event.OBJECT_PROPERTY_UPDATE,
|
||||||
|
{
|
||||||
|
r3Object : this,
|
||||||
|
property : 'material',
|
||||||
|
value : x
|
||||||
|
}
|
||||||
|
);
|
||||||
|
this._cache['material'] = x;
|
||||||
|
Event.Emit(
|
||||||
|
Event.OBJECT_PROPERTY_UPDATED,
|
||||||
|
{
|
||||||
|
r3Object : this,
|
||||||
|
property : 'material',
|
||||||
|
value : x
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return x;
|
||||||
|
},
|
||||||
|
get : () => {
|
||||||
|
return this._cache['material'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) /**
|
||||||
|
* geometry - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.required[1] === 'undefined') {
|
||||||
|
options.required[1] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
options.required[1].geometry = ComponentGeometry;
|
||||||
|
|
||||||
|
if (typeof this._cache === 'undefined') {
|
||||||
|
this._cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache['geometry'] = options.geometry;
|
||||||
|
Object.defineProperty(
|
||||||
|
this,
|
||||||
|
'geometry',
|
||||||
|
{
|
||||||
|
configurable : true,
|
||||||
|
enumerable : true,
|
||||||
|
set: (x) => {
|
||||||
|
Event.Emit(
|
||||||
|
Event.OBJECT_PROPERTY_UPDATE,
|
||||||
|
{
|
||||||
|
r3Object : this,
|
||||||
|
property : 'geometry',
|
||||||
|
value : x
|
||||||
|
}
|
||||||
|
);
|
||||||
|
this._cache['geometry'] = x;
|
||||||
|
Event.Emit(
|
||||||
|
Event.OBJECT_PROPERTY_UPDATED,
|
||||||
|
{
|
||||||
|
r3Object : this,
|
||||||
|
property : 'geometry',
|
||||||
|
value : x
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return x;
|
||||||
|
},
|
||||||
|
get : () => {
|
||||||
|
return this._cache['geometry'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
//GENERATED_REQUIRED_COMPONENTS_END
|
//GENERATED_REQUIRED_COMPONENTS_END
|
||||||
|
|
||||||
//GENERATED_AFTER_REQUIRED_COMPONENTS_START
|
//GENERATED_AFTER_REQUIRED_COMPONENTS_START
|
||||||
|
@ -163,6 +351,20 @@ class ComponentMesh extends Component {
|
||||||
this.emit(Event.UPDATE_INSTANCE_BEFORE, this);
|
this.emit(Event.UPDATE_INSTANCE_BEFORE, this);
|
||||||
|
|
||||||
//GENERATED_UPDATE_INSTANCE_OPTIONS_START
|
//GENERATED_UPDATE_INSTANCE_OPTIONS_START
|
||||||
|
if (property === 'material') {
|
||||||
|
this.instance.material = this.material;
|
||||||
|
this.emit(
|
||||||
|
Event.UPDATE_INSTANCE_PROPERTY,
|
||||||
|
{
|
||||||
|
component : this,
|
||||||
|
property : 'material',
|
||||||
|
instanceProperty : 'material'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (property !== 'all') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
//GENERATED_UPDATE_INSTANCE_OPTIONS_END
|
//GENERATED_UPDATE_INSTANCE_OPTIONS_END
|
||||||
|
|
||||||
//GENERATED_TEMPLATE_UPDATE_INSTANCE_OPTIONS_START
|
//GENERATED_TEMPLATE_UPDATE_INSTANCE_OPTIONS_START
|
||||||
|
@ -190,6 +392,20 @@ class ComponentMesh extends Component {
|
||||||
this.emit(Event.UPDATE_FROM_INSTANCE_BEFORE, this);
|
this.emit(Event.UPDATE_FROM_INSTANCE_BEFORE, this);
|
||||||
|
|
||||||
//GENERATED_UPDATE_FROM_INSTANCE_OPTIONS_START
|
//GENERATED_UPDATE_FROM_INSTANCE_OPTIONS_START
|
||||||
|
if (property === 'material' || property === 'all') {
|
||||||
|
this.material = this.instance.material;
|
||||||
|
this.emit(
|
||||||
|
Event.UPDATE_PROPERTY_FROM_INSTANCE,
|
||||||
|
{
|
||||||
|
component : this,
|
||||||
|
property : 'material',
|
||||||
|
instanceProperty : 'material'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (property !== 'all') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
//GENERATED_UPDATE_FROM_INSTANCE_OPTIONS_END
|
//GENERATED_UPDATE_FROM_INSTANCE_OPTIONS_END
|
||||||
|
|
||||||
//GENERATED_TEMPLATE_UPDATE_FROM_INSTANCE_OPTIONS_START
|
//GENERATED_TEMPLATE_UPDATE_FROM_INSTANCE_OPTIONS_START
|
||||||
|
|
|
@ -112,15 +112,21 @@ class ComponentTouch extends ComponentInput {
|
||||||
if (typeof options.required[0] === 'undefined') {
|
if (typeof options.required[0] === 'undefined') {
|
||||||
options.required[0] = {};
|
options.required[0] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
options.required[0].domComponent = ComponentDOM;
|
options.required[0].domComponent = ComponentDOM;
|
||||||
this.domComponentBackup = options.domComponent;
|
|
||||||
|
if (typeof this._cache === 'undefined') {
|
||||||
|
this._cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache['domComponent'] = options.domComponent;
|
||||||
Object.defineProperty(
|
Object.defineProperty(
|
||||||
this,
|
this,
|
||||||
'domComponent',
|
'domComponent',
|
||||||
{
|
{
|
||||||
configurable : true,
|
configurable : true,
|
||||||
enumerable : true,
|
enumerable : true,
|
||||||
set: function(x) {
|
set: (x) => {
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATE,
|
Event.OBJECT_PROPERTY_UPDATE,
|
||||||
{
|
{
|
||||||
|
@ -129,7 +135,7 @@ class ComponentTouch extends ComponentInput {
|
||||||
value : x
|
value : x
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
this.domComponentBackup = x;
|
this._cache['domComponent'] = x;
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATED,
|
Event.OBJECT_PROPERTY_UPDATED,
|
||||||
{
|
{
|
||||||
|
@ -140,8 +146,8 @@ class ComponentTouch extends ComponentInput {
|
||||||
);
|
);
|
||||||
return x;
|
return x;
|
||||||
},
|
},
|
||||||
get : function() {
|
get : () => {
|
||||||
return this.domComponentBackup;
|
return this._cache['domComponent'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -102,8 +102,8 @@ class EntitySlider extends Entity {
|
||||||
options.started = false;
|
options.started = false;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* subscriptions - An association object which hold the subscription handles for Events this system is listening
|
* subscriptions - An association object which hold the subscription handles for Events this system is
|
||||||
* to. The system can stop receiving events by calling remove() on a handle.
|
* listening to. The system can stop receiving events by calling remove() on a handle.
|
||||||
*/
|
*/
|
||||||
if (typeof options.subscriptions === 'undefined') {
|
if (typeof options.subscriptions === 'undefined') {
|
||||||
options.subscriptions = {};
|
options.subscriptions = {};
|
||||||
|
@ -145,15 +145,21 @@ class EntitySlider extends Entity {
|
||||||
if (typeof options.required[0] === 'undefined') {
|
if (typeof options.required[0] === 'undefined') {
|
||||||
options.required[0] = {};
|
options.required[0] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
options.required[0].images = [ComponentImage];
|
options.required[0].images = [ComponentImage];
|
||||||
this.imagesBackup = options.images;
|
|
||||||
|
if (typeof this._cache === 'undefined') {
|
||||||
|
this._cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache['images'] = options.images;
|
||||||
Object.defineProperty(
|
Object.defineProperty(
|
||||||
this,
|
this,
|
||||||
'images',
|
'images',
|
||||||
{
|
{
|
||||||
configurable : true,
|
configurable : true,
|
||||||
enumerable : true,
|
enumerable : true,
|
||||||
set: function(x) {
|
set: (x) => {
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATE,
|
Event.OBJECT_PROPERTY_UPDATE,
|
||||||
{
|
{
|
||||||
|
@ -162,7 +168,7 @@ class EntitySlider extends Entity {
|
||||||
value : x
|
value : x
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
this.imagesBackup = x;
|
this._cache['images'] = x;
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATED,
|
Event.OBJECT_PROPERTY_UPDATED,
|
||||||
{
|
{
|
||||||
|
@ -173,8 +179,8 @@ class EntitySlider extends Entity {
|
||||||
);
|
);
|
||||||
return x;
|
return x;
|
||||||
},
|
},
|
||||||
get : function() {
|
get : () => {
|
||||||
return this.imagesBackup;
|
return this._cache['images'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) /**
|
) /**
|
||||||
|
@ -183,15 +189,21 @@ class EntitySlider extends Entity {
|
||||||
if (typeof options.required[0] === 'undefined') {
|
if (typeof options.required[0] === 'undefined') {
|
||||||
options.required[0] = {};
|
options.required[0] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
options.required[0].canvas = ComponentCanvas;
|
options.required[0].canvas = ComponentCanvas;
|
||||||
this.canvasBackup = options.canvas;
|
|
||||||
|
if (typeof this._cache === 'undefined') {
|
||||||
|
this._cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache['canvas'] = options.canvas;
|
||||||
Object.defineProperty(
|
Object.defineProperty(
|
||||||
this,
|
this,
|
||||||
'canvas',
|
'canvas',
|
||||||
{
|
{
|
||||||
configurable : true,
|
configurable : true,
|
||||||
enumerable : true,
|
enumerable : true,
|
||||||
set: function(x) {
|
set: (x) => {
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATE,
|
Event.OBJECT_PROPERTY_UPDATE,
|
||||||
{
|
{
|
||||||
|
@ -200,7 +212,7 @@ class EntitySlider extends Entity {
|
||||||
value : x
|
value : x
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
this.canvasBackup = x;
|
this._cache['canvas'] = x;
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATED,
|
Event.OBJECT_PROPERTY_UPDATED,
|
||||||
{
|
{
|
||||||
|
@ -211,8 +223,8 @@ class EntitySlider extends Entity {
|
||||||
);
|
);
|
||||||
return x;
|
return x;
|
||||||
},
|
},
|
||||||
get : function() {
|
get : () => {
|
||||||
return this.canvasBackup;
|
return this._cache['canvas'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) /**
|
) /**
|
||||||
|
@ -221,15 +233,21 @@ class EntitySlider extends Entity {
|
||||||
if (typeof options.required[0] === 'undefined') {
|
if (typeof options.required[0] === 'undefined') {
|
||||||
options.required[0] = {};
|
options.required[0] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
options.required[0].touch = ComponentTouch;
|
options.required[0].touch = ComponentTouch;
|
||||||
this.touchBackup = options.touch;
|
|
||||||
|
if (typeof this._cache === 'undefined') {
|
||||||
|
this._cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache['touch'] = options.touch;
|
||||||
Object.defineProperty(
|
Object.defineProperty(
|
||||||
this,
|
this,
|
||||||
'touch',
|
'touch',
|
||||||
{
|
{
|
||||||
configurable : true,
|
configurable : true,
|
||||||
enumerable : true,
|
enumerable : true,
|
||||||
set: function(x) {
|
set: (x) => {
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATE,
|
Event.OBJECT_PROPERTY_UPDATE,
|
||||||
{
|
{
|
||||||
|
@ -238,7 +256,7 @@ class EntitySlider extends Entity {
|
||||||
value : x
|
value : x
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
this.touchBackup = x;
|
this._cache['touch'] = x;
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATED,
|
Event.OBJECT_PROPERTY_UPDATED,
|
||||||
{
|
{
|
||||||
|
@ -249,8 +267,8 @@ class EntitySlider extends Entity {
|
||||||
);
|
);
|
||||||
return x;
|
return x;
|
||||||
},
|
},
|
||||||
get : function() {
|
get : () => {
|
||||||
return this.touchBackup;
|
return this._cache['touch'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -347,7 +365,7 @@ class EntitySlider extends Entity {
|
||||||
|
|
||||||
this.started = true;
|
this.started = true;
|
||||||
|
|
||||||
if (this instanceof R3.Entity) {
|
if (this instanceof Entity) {
|
||||||
this.emit(
|
this.emit(
|
||||||
Event.ENTITY_STARTED,
|
Event.ENTITY_STARTED,
|
||||||
this
|
this
|
||||||
|
|
|
@ -372,44 +372,43 @@ Event.ENTITY_CREATED = 0xa;
|
||||||
Event.ENTITY_INITIALIZED = 0xb;
|
Event.ENTITY_INITIALIZED = 0xb;
|
||||||
Event.ENTITY_STARTED = 0xc;
|
Event.ENTITY_STARTED = 0xc;
|
||||||
Event.FINAL_INITIALIZE = 0xd;
|
Event.FINAL_INITIALIZE = 0xd;
|
||||||
Event.FUTURE_READY_STATE_FALSE = 0xe;
|
Event.GET_API_URL = 0xe;
|
||||||
Event.FUTURE_READY_STATE_TRUE = 0xf;
|
Event.GET_RUNTIME = 0xf;
|
||||||
Event.GET_API_URL = 0x10;
|
Event.GET_WINDOW_SIZE = 0x10;
|
||||||
Event.GET_RUNTIME = 0x11;
|
Event.GRAPHICS_COMPONENT_INITIALIZED = 0x11;
|
||||||
Event.GET_WINDOW_SIZE = 0x12;
|
Event.IMAGE_COMPONENT_INITIALIZED = 0x12;
|
||||||
Event.GRAPHICS_COMPONENT_INITIALIZED = 0x13;
|
Event.IMAGE_INSTANCE_CREATED = 0x13;
|
||||||
Event.IMAGE_COMPONENT_INITIALIZED = 0x14;
|
Event.INPUT_COMPONENT_INITIALIZED = 0x14;
|
||||||
Event.IMAGE_INSTANCE_CREATED = 0x15;
|
Event.INSTANCE_CREATED = 0x15;
|
||||||
Event.INPUT_COMPONENT_INITIALIZED = 0x16;
|
Event.INSTANCE_DISPOSED = 0x16;
|
||||||
Event.INSTANCE_CREATED = 0x17;
|
Event.KEYBOARD_DOWN = 0x17;
|
||||||
Event.INSTANCE_DISPOSED = 0x18;
|
Event.KEYBOARD_UP = 0x18;
|
||||||
Event.KEYBOARD_DOWN = 0x19;
|
Event.MOUSE_DOWN = 0x19;
|
||||||
Event.KEYBOARD_UP = 0x1a;
|
Event.MOUSE_MOVE = 0x1a;
|
||||||
Event.MOUSE_DOWN = 0x1b;
|
Event.MOUSE_UP = 0x1b;
|
||||||
Event.MOUSE_MOVE = 0x1c;
|
Event.MOUSE_WHEEL = 0x1c;
|
||||||
Event.MOUSE_UP = 0x1d;
|
Event.OBJECT_CREATED = 0x1d;
|
||||||
Event.MOUSE_WHEEL = 0x1e;
|
Event.OBJECT_PROPERTY_UPDATE = 0x1e;
|
||||||
Event.OBJECT_CREATED = 0x1f;
|
Event.OBJECT_PROPERTY_UPDATED = 0x1f;
|
||||||
Event.OBJECT_PROPERTY_UPDATE = 0x20;
|
Event.ON_READY_STATE_CHANGE = 0x20;
|
||||||
Event.OBJECT_PROPERTY_UPDATED = 0x21;
|
Event.PAUSE = 0x21;
|
||||||
Event.PAUSE = 0x22;
|
Event.PROJECT_INITIALIZED = 0x22;
|
||||||
Event.PROJECT_INITIALIZED = 0x23;
|
Event.RESTART = 0x23;
|
||||||
Event.RESTART = 0x24;
|
Event.RUNTIME_CREATED = 0x24;
|
||||||
Event.RUNTIME_CREATED = 0x25;
|
Event.SLIDER_ENTITY_INITIALIZED = 0x25;
|
||||||
Event.SLIDER_ENTITY_INITIALIZED = 0x26;
|
Event.START = 0x26;
|
||||||
Event.START = 0x27;
|
Event.TOUCH_CANCEL = 0x27;
|
||||||
Event.TOUCH_CANCEL = 0x28;
|
Event.TOUCH_COMPONENT_INITIALIZED = 0x28;
|
||||||
Event.TOUCH_COMPONENT_INITIALIZED = 0x29;
|
Event.TOUCH_END = 0x29;
|
||||||
Event.TOUCH_END = 0x2a;
|
Event.TOUCH_MOVE = 0x2a;
|
||||||
Event.TOUCH_MOVE = 0x2b;
|
Event.TOUCH_START = 0x2b;
|
||||||
Event.TOUCH_START = 0x2c;
|
Event.UPDATE_FROM_INSTANCE_AFTER = 0x2c;
|
||||||
Event.UPDATE_FROM_INSTANCE_AFTER = 0x2d;
|
Event.UPDATE_FROM_INSTANCE_BEFORE = 0x2d;
|
||||||
Event.UPDATE_FROM_INSTANCE_BEFORE = 0x2e;
|
Event.UPDATE_INSTANCE_AFTER = 0x2e;
|
||||||
Event.UPDATE_INSTANCE_AFTER = 0x2f;
|
Event.UPDATE_INSTANCE_BEFORE = 0x2f;
|
||||||
Event.UPDATE_INSTANCE_BEFORE = 0x30;
|
Event.UPDATE_INSTANCE_PROPERTY = 0x30;
|
||||||
Event.UPDATE_INSTANCE_PROPERTY = 0x31;
|
Event.UPDATE_PROPERTY_FROM_INSTANCE = 0x31;
|
||||||
Event.UPDATE_PROPERTY_FROM_INSTANCE = 0x32;
|
Event.MAX_EVENTS = 0x32;
|
||||||
Event.MAX_EVENTS = 0x33;
|
|
||||||
|
|
||||||
Event.GetEventName = function(eventId) {
|
Event.GetEventName = function(eventId) {
|
||||||
|
|
||||||
|
@ -427,43 +426,42 @@ Event.GetEventName = function(eventId) {
|
||||||
case 0xb : return 'entity_initialized';
|
case 0xb : return 'entity_initialized';
|
||||||
case 0xc : return 'entity_started';
|
case 0xc : return 'entity_started';
|
||||||
case 0xd : return 'final_initialize';
|
case 0xd : return 'final_initialize';
|
||||||
case 0xe : return 'future_ready_state_false';
|
case 0xe : return 'get_api_url';
|
||||||
case 0xf : return 'future_ready_state_true';
|
case 0xf : return 'get_runtime';
|
||||||
case 0x10 : return 'get_api_url';
|
case 0x10 : return 'get_window_size';
|
||||||
case 0x11 : return 'get_runtime';
|
case 0x11 : return 'graphics_component_initialized';
|
||||||
case 0x12 : return 'get_window_size';
|
case 0x12 : return 'image_component_initialized';
|
||||||
case 0x13 : return 'graphics_component_initialized';
|
case 0x13 : return 'image_instance_created';
|
||||||
case 0x14 : return 'image_component_initialized';
|
case 0x14 : return 'input_component_initialized';
|
||||||
case 0x15 : return 'image_instance_created';
|
case 0x15 : return 'instance_created';
|
||||||
case 0x16 : return 'input_component_initialized';
|
case 0x16 : return 'instance_disposed';
|
||||||
case 0x17 : return 'instance_created';
|
case 0x17 : return 'keyboard_down';
|
||||||
case 0x18 : return 'instance_disposed';
|
case 0x18 : return 'keyboard_up';
|
||||||
case 0x19 : return 'keyboard_down';
|
case 0x19 : return 'mouse_down';
|
||||||
case 0x1a : return 'keyboard_up';
|
case 0x1a : return 'mouse_move';
|
||||||
case 0x1b : return 'mouse_down';
|
case 0x1b : return 'mouse_up';
|
||||||
case 0x1c : return 'mouse_move';
|
case 0x1c : return 'mouse_wheel';
|
||||||
case 0x1d : return 'mouse_up';
|
case 0x1d : return 'object_created';
|
||||||
case 0x1e : return 'mouse_wheel';
|
case 0x1e : return 'object_property_update';
|
||||||
case 0x1f : return 'object_created';
|
case 0x1f : return 'object_property_updated';
|
||||||
case 0x20 : return 'object_property_update';
|
case 0x20 : return 'on_ready_state_change';
|
||||||
case 0x21 : return 'object_property_updated';
|
case 0x21 : return 'pause';
|
||||||
case 0x22 : return 'pause';
|
case 0x22 : return 'project_initialized';
|
||||||
case 0x23 : return 'project_initialized';
|
case 0x23 : return 'restart';
|
||||||
case 0x24 : return 'restart';
|
case 0x24 : return 'runtime_created';
|
||||||
case 0x25 : return 'runtime_created';
|
case 0x25 : return 'slider_entity_initialized';
|
||||||
case 0x26 : return 'slider_entity_initialized';
|
case 0x26 : return 'start';
|
||||||
case 0x27 : return 'start';
|
case 0x27 : return 'touch_cancel';
|
||||||
case 0x28 : return 'touch_cancel';
|
case 0x28 : return 'touch_component_initialized';
|
||||||
case 0x29 : return 'touch_component_initialized';
|
case 0x29 : return 'touch_end';
|
||||||
case 0x2a : return 'touch_end';
|
case 0x2a : return 'touch_move';
|
||||||
case 0x2b : return 'touch_move';
|
case 0x2b : return 'touch_start';
|
||||||
case 0x2c : return 'touch_start';
|
case 0x2c : return 'update_from_instance_after';
|
||||||
case 0x2d : return 'update_from_instance_after';
|
case 0x2d : return 'update_from_instance_before';
|
||||||
case 0x2e : return 'update_from_instance_before';
|
case 0x2e : return 'update_instance_after';
|
||||||
case 0x2f : return 'update_instance_after';
|
case 0x2f : return 'update_instance_before';
|
||||||
case 0x30 : return 'update_instance_before';
|
case 0x30 : return 'update_instance_property';
|
||||||
case 0x31 : return 'update_instance_property';
|
case 0x31 : return 'update_property_from_instance';
|
||||||
case 0x32 : return 'update_property_from_instance';
|
|
||||||
default :
|
default :
|
||||||
throw new Error('Event type not defined : ' + eventId);
|
throw new Error('Event type not defined : ' + eventId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,479 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
const Node = require('./r3-node.js');
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
|
GENERATED_INHERITED_START
|
||||||
|
|
||||||
|
GENERATED_INHERITED_END
|
||||||
|
|
||||||
|
TEMPLATE_OPTIONS_START
|
||||||
|
TEMPLATE_OPTIONS_END
|
||||||
|
|
||||||
|
CUSTOM_OPTIONS_START
|
||||||
|
open=[] - Internal structure required for traversing the graph
|
||||||
|
closed=[] - Internal structure required for traversing the graph
|
||||||
|
relevant=['parents', 'children'] - By default we traverse all parents and children of a node when performing a search
|
||||||
|
solutions=[] - Internal structure for holding solutions from n0 to n. n passed the goalFunction() test.
|
||||||
|
terminateOnFirstGoal=false - By default we want to collect all goal nodes which pass the goalFunction(). Set this to true to terminate immediately after discovering the first goal node.
|
||||||
|
startNode=null - The start node from which the graph will build
|
||||||
|
goalFunction=(node)=>{return false;} - By having no goal as a default, on construction of a Graph object we will traverse and build the entire graph starting from the startNode.
|
||||||
|
CUSTOM_OPTIONS_END
|
||||||
|
|
||||||
|
TEMPLATE_STATIC_OPTIONS_START
|
||||||
|
TEMPLATE_STATIC_OPTIONS_END
|
||||||
|
|
||||||
|
CUSTOM_STATIC_OPTIONS_START
|
||||||
|
CUSTOM_STATIC_OPTIONS_END
|
||||||
|
|
||||||
|
TEMPLATE_METHODS_START
|
||||||
|
TEMPLATE_METHODS_END
|
||||||
|
|
||||||
|
CUSTOM_METHODS_START
|
||||||
|
build() - Uses A* algorithm to build a graph of all nodes which represents the dependency structure of this graph.
|
||||||
|
process() - Repeats steps 3 to 8. Should indicate whether a goal node was found.
|
||||||
|
expand(node) - Expands a node generating a set M of its successors which are not already ancestors of the node (n) in the graph (G). i.e. *NOT* already in either OPEN or CLOSED. Install those members of M as successors of n in G.
|
||||||
|
establishPointers(M, node) - Establish a pointer to n from each of those members of M that were not already in G. Add these members of M to OPEN. For each member M that was already on OPEN or CLOSED, update the pointer to point to n if the best path so far is through n. For each member of M that was already on CLOSED, redirect the pointers of each of its descendants in G so that they point backward along the best paths found so far to these descendants.
|
||||||
|
reOrder() - Re-Order nodes in OPEN in order of increasing ~f values. Ties among minimal ~f values are resolved in favor of the deepest node in the search tree.
|
||||||
|
buildSolution(node, solution=[]) - Traverses node pointers from n (goal node) to n0 (start node) and stores the path in a solution list.
|
||||||
|
isGoal(callback)
|
||||||
|
CUSTOM_METHODS_END
|
||||||
|
|
||||||
|
TEMPLATE_STATIC_METHODS_START
|
||||||
|
TEMPLATE_STATIC_METHODS_END
|
||||||
|
|
||||||
|
CUSTOM_STATIC_METHODS_START
|
||||||
|
CUSTOM_STATIC_METHODS_END
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
class Graph {
|
||||||
|
|
||||||
|
//GENERATED_CONSTRUCTOR_START
|
||||||
|
constructor(options) {
|
||||||
|
|
||||||
|
if (typeof options === 'undefined') {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_OPTIONS_INIT_START
|
||||||
|
//GENERATED_TEMPLATE_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//GENERATED_OPTIONS_INIT_START
|
||||||
|
/**
|
||||||
|
* open - Internal structure required for traversing the graph
|
||||||
|
*/
|
||||||
|
if (typeof options.open === 'undefined') {
|
||||||
|
options.open = [];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* closed - Internal structure required for traversing the graph
|
||||||
|
*/
|
||||||
|
if (typeof options.closed === 'undefined') {
|
||||||
|
options.closed = [];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* relevant - By default we traverse all parents and children of a node when performing a search
|
||||||
|
*/
|
||||||
|
if (typeof options.relevant === 'undefined') {
|
||||||
|
options.relevant = ['parents', 'children'];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* solutions - Internal structure for holding solutions from n0 to n. n passed the goalFunction() test.
|
||||||
|
*/
|
||||||
|
if (typeof options.solutions === 'undefined') {
|
||||||
|
options.solutions = [];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* terminateOnFirstGoal - By default we want to collect all goal nodes which pass the goalFunction(). Set this to
|
||||||
|
* true to terminate immediately after discovering the first goal node.
|
||||||
|
*/
|
||||||
|
if (typeof options.terminateOnFirstGoal === 'undefined') {
|
||||||
|
options.terminateOnFirstGoal = false;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* startNode - The start node from which the graph will build
|
||||||
|
*/
|
||||||
|
if (typeof options.startNode === 'undefined') {
|
||||||
|
options.startNode = null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* goalFunction - By having no goal as a default, on construction of a Graph object we will traverse and
|
||||||
|
* build the entire graph starting from the startNode.
|
||||||
|
*/
|
||||||
|
if (typeof options.goalFunction === 'undefined') {
|
||||||
|
options.goalFunction = (node)=>{return false;};
|
||||||
|
}
|
||||||
|
//GENERATED_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//CUSTOM_OPTIONS_INIT_START
|
||||||
|
//CUSTOM_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
Object.assign(this, options);
|
||||||
|
|
||||||
|
//CUSTOM_BEFORE_INIT_START
|
||||||
|
//CUSTOM_BEFORE_INIT_END
|
||||||
|
|
||||||
|
//CUSTOM_AFTER_INIT_START
|
||||||
|
if (this.startNode) {
|
||||||
|
this.build();
|
||||||
|
}
|
||||||
|
//CUSTOM_AFTER_INIT_END
|
||||||
|
}
|
||||||
|
//GENERATED_CONSTRUCTOR_END
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_METHODS_START
|
||||||
|
//GENERATED_TEMPLATE_METHODS_END
|
||||||
|
|
||||||
|
//GENERATED_METHODS_START
|
||||||
|
|
||||||
|
/**
|
||||||
|
* build()
|
||||||
|
* - Uses A* algorithm to build a graph of all nodes which represents the dependency structure of this graph.
|
||||||
|
*/
|
||||||
|
build() {
|
||||||
|
|
||||||
|
//GENERATED_BUILD_METHOD_START
|
||||||
|
//GENERATED_BUILD_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_BUILD_METHOD_START
|
||||||
|
if (this.startNode === null) {
|
||||||
|
throw new Error('startNode cannot be null');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Step 1. Push start node on open[]
|
||||||
|
*/
|
||||||
|
this.open.push(this.startNode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Step 2. Clear the closed[] list (we also clear the solutions[] list because we maintain it this way)
|
||||||
|
*/
|
||||||
|
this.closed = [];
|
||||||
|
this.solutions = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start with step 3 to 8
|
||||||
|
*/
|
||||||
|
this.process();
|
||||||
|
//CUSTOM_BUILD_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_BUILD_METHOD_AFTER_START
|
||||||
|
//GENERATED_BUILD_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* process()
|
||||||
|
* - Repeats steps 3 to 8. Should indicate whether a goal node was found.
|
||||||
|
*/
|
||||||
|
process() {
|
||||||
|
|
||||||
|
//GENERATED_PROCESS_METHOD_START
|
||||||
|
//GENERATED_PROCESS_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_PROCESS_METHOD_START
|
||||||
|
/**
|
||||||
|
* Step 3. If open[] is empty - exit with failure
|
||||||
|
*/
|
||||||
|
if (this.open.length === 0) {
|
||||||
|
console.log('open[] is empty');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Step 4. Select first node on open[] - remove it from open[] and put it on closed[]
|
||||||
|
*/
|
||||||
|
let node = this.open.pop();
|
||||||
|
this.closed.push(node);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Step 5. If node is a goal function - exit successfully (or continue if we do not terminate on first goal)
|
||||||
|
*/
|
||||||
|
if (this.goalFunction(node)) {
|
||||||
|
|
||||||
|
this.solutions.push(this.buildSolution(node));
|
||||||
|
|
||||||
|
if (this.terminateOnFirstGoal) {
|
||||||
|
return this.solutions[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Step 6.a Expand node n, generating the set M of its successors that are not already ancestors of n in G.
|
||||||
|
*/
|
||||||
|
let M = this.expand(node);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Step 7 - Establish pointers to node
|
||||||
|
*/
|
||||||
|
this.establishPointers(M, node);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Step 8 - Re-Order nodes in OPEN in order of increasing ~f values. Ties among minimal ~f values are resolved
|
||||||
|
* in favor of the deepest node in the search tree.
|
||||||
|
* We skip this step because we are not so interested in the shortest path to the solution (yet, for now at least)
|
||||||
|
*/
|
||||||
|
//this.reOrder();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Continue back to step 3
|
||||||
|
*/
|
||||||
|
this.process();
|
||||||
|
//CUSTOM_PROCESS_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_PROCESS_METHOD_AFTER_START
|
||||||
|
//GENERATED_PROCESS_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* expand()
|
||||||
|
* - Expands a node generating a set M of its successors which are not already ancestors of the node (n) in the
|
||||||
|
* graph (G). i.e. *NOT* already in either OPEN or CLOSED. Install those members of M as successors of n in G.
|
||||||
|
* @param node
|
||||||
|
*/
|
||||||
|
expand(node) {
|
||||||
|
|
||||||
|
//GENERATED_EXPAND_METHOD_START
|
||||||
|
//GENERATED_EXPAND_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_EXPAND_METHOD_START
|
||||||
|
|
||||||
|
let successors = {
|
||||||
|
onOpen : [],
|
||||||
|
onClosed : [],
|
||||||
|
notInG : []
|
||||||
|
};
|
||||||
|
|
||||||
|
for (let r = 0; r < this.relevant.length; r++) {
|
||||||
|
|
||||||
|
let relevant = this.relevant[r];
|
||||||
|
|
||||||
|
for (let n = 0; n < node.object[relevant].length; n++) {
|
||||||
|
|
||||||
|
let notInG = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this child is part of an open[] node
|
||||||
|
*/
|
||||||
|
let onOpen = this.open.reduce(
|
||||||
|
(onOpen, openNode) => {
|
||||||
|
if (openNode.object === node.object[relevant][n]) {
|
||||||
|
onOpen = true;
|
||||||
|
notInG = false;
|
||||||
|
}
|
||||||
|
return onOpen;
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
let onClosed = this.closed.reduce(
|
||||||
|
(onClosed, closedNode) => {
|
||||||
|
if (closedNode.object === node.object[relevant][n]) {
|
||||||
|
onClosed = true;
|
||||||
|
notInG = false;
|
||||||
|
}
|
||||||
|
return onClosed;
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
let type = 'child';
|
||||||
|
|
||||||
|
if (relevant === 'parents') {
|
||||||
|
type = 'parent';
|
||||||
|
}
|
||||||
|
|
||||||
|
let newNode = new Node(
|
||||||
|
{
|
||||||
|
object: node.object[relevant][n],
|
||||||
|
type: type
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (onOpen) {
|
||||||
|
successors.onOpen.push(newNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onClosed) {
|
||||||
|
successors.onClosed.push(newNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (notInG) {
|
||||||
|
successors.notInG.push(newNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the set of successors (M) to be used later in processing
|
||||||
|
*/
|
||||||
|
return successors;
|
||||||
|
|
||||||
|
//CUSTOM_EXPAND_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_EXPAND_METHOD_AFTER_START
|
||||||
|
//GENERATED_EXPAND_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* establishPointers()
|
||||||
|
* - Establish a pointer to n from each of those members of M that were not already in G. Add these members of M to
|
||||||
|
* OPEN. For each member M that was already on OPEN or CLOSED, update the pointer to point to n if the best path
|
||||||
|
* so far is through n. For each member of M that was already on CLOSED, redirect the pointers of each of its
|
||||||
|
* descendants in G so that they point backward along the best paths found so far to these descendants.
|
||||||
|
* @param M
|
||||||
|
* @param node
|
||||||
|
*/
|
||||||
|
establishPointers(
|
||||||
|
M,
|
||||||
|
node
|
||||||
|
) {
|
||||||
|
|
||||||
|
//GENERATED_ESTABLISH_POINTERS_METHOD_START
|
||||||
|
//GENERATED_ESTABLISH_POINTERS_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_ESTABLISH_POINTERS_METHOD_START
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We now have a list of successors (M) which is not already an ancestor of n in G.
|
||||||
|
* Install them as successors of n in G. We do part of step 7 here to save some processing steps:
|
||||||
|
* We additionally set the pointer of the successor to n, and we push the successor to OPEN.
|
||||||
|
*/
|
||||||
|
M.notInG.map(
|
||||||
|
(successor) => {
|
||||||
|
successor.pointer = node;
|
||||||
|
node.successors.push(successor);
|
||||||
|
this.open.push(successor);
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redirect pointers of successors that were in OPEN to n
|
||||||
|
*/
|
||||||
|
M.onOpen.map(
|
||||||
|
(successor) => {
|
||||||
|
successor.pointer = node;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redirect pointers of successors that were in CLOSED to n
|
||||||
|
*/
|
||||||
|
M.onClosed.map(
|
||||||
|
(successor) => {
|
||||||
|
successor.pointer = node;
|
||||||
|
/**
|
||||||
|
* We skip a part of 7 here - we could alternatively redirect the pointers of each descendant of the successor
|
||||||
|
* in G to point backward along the best paths found so far to these descendants - but we don't do this because
|
||||||
|
* we are not really interested in the shortest paths -
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
//CUSTOM_ESTABLISH_POINTERS_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_ESTABLISH_POINTERS_METHOD_AFTER_START
|
||||||
|
//GENERATED_ESTABLISH_POINTERS_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reOrder()
|
||||||
|
* - Re-Order nodes in OPEN in order of increasing ~f values. Ties among minimal ~f values are resolved in favor of
|
||||||
|
* the deepest node in the search tree.
|
||||||
|
*/
|
||||||
|
reOrder() {
|
||||||
|
|
||||||
|
//GENERATED_RE_ORDER_METHOD_START
|
||||||
|
//GENERATED_RE_ORDER_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_RE_ORDER_METHOD_START
|
||||||
|
//CUSTOM_RE_ORDER_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_RE_ORDER_METHOD_AFTER_START
|
||||||
|
//GENERATED_RE_ORDER_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* buildSolution()
|
||||||
|
* - Traverses node pointers from n (goal node) to n0 (start node) and stores the path in a solution list.
|
||||||
|
* @param node
|
||||||
|
* @param solution=[]
|
||||||
|
*/
|
||||||
|
buildSolution(
|
||||||
|
node,
|
||||||
|
solution=[]
|
||||||
|
) {
|
||||||
|
|
||||||
|
//GENERATED_BUILD_SOLUTION_METHOD_START
|
||||||
|
//GENERATED_BUILD_SOLUTION_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_BUILD_SOLUTION_METHOD_START
|
||||||
|
solution.push(node);
|
||||||
|
|
||||||
|
if (node.pointer) {
|
||||||
|
this.buildSolution(node.pointer, solution);
|
||||||
|
} else {
|
||||||
|
return solution;
|
||||||
|
}
|
||||||
|
//CUSTOM_BUILD_SOLUTION_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_BUILD_SOLUTION_METHOD_AFTER_START
|
||||||
|
//GENERATED_BUILD_SOLUTION_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* isGoal()
|
||||||
|
* - No comment
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
isGoal(callback) {
|
||||||
|
|
||||||
|
//GENERATED_IS_GOAL_METHOD_START
|
||||||
|
//GENERATED_IS_GOAL_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_IS_GOAL_METHOD_START
|
||||||
|
return callback();
|
||||||
|
//CUSTOM_IS_GOAL_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_IS_GOAL_METHOD_AFTER_START
|
||||||
|
//GENERATED_IS_GOAL_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
//GENERATED_METHODS_END
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_STATIC_METHODS_START
|
||||||
|
//GENERATED_TEMPLATE_STATIC_METHODS_END
|
||||||
|
|
||||||
|
//GENERATED_STATIC_METHODS_START
|
||||||
|
//GENERATED_STATIC_METHODS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPLEMENTATION_START
|
||||||
|
//CUSTOM_IMPLEMENTATION_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_STATIC_OPTIONS_INIT_START
|
||||||
|
//GENERATED_TEMPLATE_STATIC_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//GENERATED_STATIC_OPTIONS_INIT_START
|
||||||
|
//GENERATED_STATIC_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_START
|
||||||
|
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_END
|
||||||
|
|
||||||
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
|
||||||
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
|
||||||
|
|
||||||
|
module.exports = Graph;
|
|
@ -0,0 +1,124 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
|
GENERATED_INHERITED_START
|
||||||
|
|
||||||
|
GENERATED_INHERITED_END
|
||||||
|
|
||||||
|
TEMPLATE_OPTIONS_START
|
||||||
|
TEMPLATE_OPTIONS_END
|
||||||
|
|
||||||
|
CUSTOM_OPTIONS_START
|
||||||
|
object=null
|
||||||
|
pointer=null
|
||||||
|
type='start-node'
|
||||||
|
successors=[]
|
||||||
|
CUSTOM_OPTIONS_END
|
||||||
|
|
||||||
|
TEMPLATE_STATIC_OPTIONS_START
|
||||||
|
TEMPLATE_STATIC_OPTIONS_END
|
||||||
|
|
||||||
|
CUSTOM_STATIC_OPTIONS_START
|
||||||
|
CUSTOM_STATIC_OPTIONS_END
|
||||||
|
|
||||||
|
TEMPLATE_METHODS_START
|
||||||
|
TEMPLATE_METHODS_END
|
||||||
|
|
||||||
|
CUSTOM_METHODS_START
|
||||||
|
CUSTOM_METHODS_END
|
||||||
|
|
||||||
|
TEMPLATE_STATIC_METHODS_START
|
||||||
|
TEMPLATE_STATIC_METHODS_END
|
||||||
|
|
||||||
|
CUSTOM_STATIC_METHODS_START
|
||||||
|
CUSTOM_STATIC_METHODS_END
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
class Node {
|
||||||
|
|
||||||
|
//GENERATED_CONSTRUCTOR_START
|
||||||
|
constructor(options) {
|
||||||
|
|
||||||
|
if (typeof options === 'undefined') {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_OPTIONS_INIT_START
|
||||||
|
//GENERATED_TEMPLATE_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//GENERATED_OPTIONS_INIT_START
|
||||||
|
/**
|
||||||
|
* object - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.object === 'undefined') {
|
||||||
|
options.object = null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* pointer - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.pointer === 'undefined') {
|
||||||
|
options.pointer = null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* type - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.type === 'undefined') {
|
||||||
|
options.type = 'start-node';
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* successors - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.successors === 'undefined') {
|
||||||
|
options.successors = [];
|
||||||
|
}
|
||||||
|
//GENERATED_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//CUSTOM_OPTIONS_INIT_START
|
||||||
|
//CUSTOM_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
Object.assign(this, options);
|
||||||
|
|
||||||
|
//CUSTOM_BEFORE_INIT_START
|
||||||
|
//CUSTOM_BEFORE_INIT_END
|
||||||
|
|
||||||
|
//CUSTOM_AFTER_INIT_START
|
||||||
|
//CUSTOM_AFTER_INIT_END
|
||||||
|
}
|
||||||
|
//GENERATED_CONSTRUCTOR_END
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_METHODS_START
|
||||||
|
//GENERATED_TEMPLATE_METHODS_END
|
||||||
|
|
||||||
|
//GENERATED_METHODS_START
|
||||||
|
//GENERATED_METHODS_END
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_STATIC_METHODS_START
|
||||||
|
//GENERATED_TEMPLATE_STATIC_METHODS_END
|
||||||
|
|
||||||
|
//GENERATED_STATIC_METHODS_START
|
||||||
|
//GENERATED_STATIC_METHODS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPLEMENTATION_START
|
||||||
|
//CUSTOM_IMPLEMENTATION_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_STATIC_OPTIONS_INIT_START
|
||||||
|
//GENERATED_TEMPLATE_STATIC_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//GENERATED_STATIC_OPTIONS_INIT_START
|
||||||
|
//GENERATED_STATIC_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_START
|
||||||
|
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_END
|
||||||
|
|
||||||
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
|
||||||
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
|
||||||
|
|
||||||
|
module.exports = Node;
|
|
@ -38,6 +38,8 @@ const Utils = require('.././r3-utils');
|
||||||
|
|
||||||
TEMPLATE_METHODS_START
|
TEMPLATE_METHODS_START
|
||||||
initialize() - Initializes this Object if all of its required Objects are initialized
|
initialize() - Initializes this Object if all of its required Objects are initialized
|
||||||
|
isReady() - Checks whether or not at least one set of requirements pass the ready state (i.e. required objects are assigned and ready)
|
||||||
|
requirementValueCheck(property, value) - Checks whether or not the property / value pair meets the requirements of setting this ready to true. It handles values of type Object and Array properly.
|
||||||
TEMPLATE_METHODS_END
|
TEMPLATE_METHODS_END
|
||||||
|
|
||||||
CUSTOM_METHODS_START
|
CUSTOM_METHODS_START
|
||||||
|
@ -76,8 +78,8 @@ class R3Object extends Event {
|
||||||
|
|
||||||
//GENERATED_TEMPLATE_OPTIONS_INIT_START
|
//GENERATED_TEMPLATE_OPTIONS_INIT_START
|
||||||
/**
|
/**
|
||||||
* id - Each Object receives an 15 digit random ID which uniquely identifies it everywhere (client and
|
* id - Each Object receives an 15 digit random ID which uniquely identifies it everywhere (client
|
||||||
* server side)
|
* and server side)
|
||||||
*/
|
*/
|
||||||
if (typeof options.id === 'undefined') {
|
if (typeof options.id === 'undefined') {
|
||||||
options.id = Utils.RandomId(15);
|
options.id = Utils.RandomId(15);
|
||||||
|
@ -89,17 +91,18 @@ class R3Object extends Event {
|
||||||
options.name = this.constructor.name + '(' + options.id + ')';
|
options.name = this.constructor.name + '(' + options.id + ')';
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* ready - Normally all objects are 'ready' to have their instances created, unless it has some required
|
* ready - Normally all objects are 'ready' to have their instances created, unless it has some
|
||||||
* Object which is not present at time of construction and will be assigned later. All objects
|
* required Object which is not present at time of construction and will be assigned later.
|
||||||
* have multiple sets of 'required' objects which affect its 'ready' state.
|
* All objects have multiple sets of 'required' objects which affect its 'ready' state.
|
||||||
*/
|
*/
|
||||||
if (typeof options.ready === 'undefined') {
|
if (typeof options.ready === 'undefined') {
|
||||||
options.ready = [];
|
options.ready = [];
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* dirty - When dirty is true, it means that this object is in transition from having a child Object to
|
* dirty - When dirty is true, it means that this object is in transition from having a child Object
|
||||||
* not having this child Object, and will probably end up in an uninitialized state. During the
|
* to not having this child Object, and will probably end up in an uninitialized state.
|
||||||
* next few clock cycles this child Object will have its parent reference to this Object removed.
|
* During the next few clock cycles this child Object will have its parent reference to this
|
||||||
|
* Object removed.
|
||||||
*/
|
*/
|
||||||
if (typeof options.dirty === 'undefined') {
|
if (typeof options.dirty === 'undefined') {
|
||||||
options.dirty = false;
|
options.dirty = false;
|
||||||
|
@ -129,8 +132,8 @@ class R3Object extends Event {
|
||||||
options.children = [];
|
options.children = [];
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* required - All Objects could have some required Objects which need to initialize before this Object can
|
* required - All Objects could have some required Objects which need to initialize before this Object
|
||||||
* initialize
|
* can initialize
|
||||||
*/
|
*/
|
||||||
if (typeof options.required === 'undefined') {
|
if (typeof options.required === 'undefined') {
|
||||||
options.required = [];
|
options.required = [];
|
||||||
|
@ -184,6 +187,151 @@ class R3Object extends Event {
|
||||||
}
|
}
|
||||||
//GENERATED_INITIALIZE_METHOD_AFTER_END
|
//GENERATED_INITIALIZE_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* isReady()
|
||||||
|
* - Checks whether or not at least one set of requirements pass the ready state (i.e. required objects are
|
||||||
|
* assigned and ready)
|
||||||
|
*/
|
||||||
|
isReady() {
|
||||||
|
|
||||||
|
//GENERATED_IS_READY_METHOD_START
|
||||||
|
//GENERATED_IS_READY_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_IS_READY_METHOD_START
|
||||||
|
if (this.required.length === 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let r = 0; r < this.required.length; r++) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We assume it is ready and will fail the ready test if a requirementValueCheck() fails
|
||||||
|
*/
|
||||||
|
let ready = true;
|
||||||
|
|
||||||
|
let requirements = this.required[r];
|
||||||
|
|
||||||
|
for (let property in requirements) {
|
||||||
|
if (requirements.hasOwnProperty(property)) {
|
||||||
|
if (!this.requirementValueCheck(requirements[property], this[property])) {
|
||||||
|
ready = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ready state could have changed or not - regardless it should cascade this information in case
|
||||||
|
* new instances need to be created (ex. an image is added to an array and needs its instance created).
|
||||||
|
*/
|
||||||
|
|
||||||
|
let readyStateChange = false;
|
||||||
|
|
||||||
|
if (this.ready[r] !== ready) {
|
||||||
|
readyStateChange = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ready[r] = ready;
|
||||||
|
|
||||||
|
if (readyStateChange) {
|
||||||
|
if (this.ready[r]) {
|
||||||
|
this.emit(
|
||||||
|
Event.ON_READY_STATE_CHANGE,
|
||||||
|
{
|
||||||
|
r3Object: this,
|
||||||
|
readyState: R3Object.READY_STATE_TRUE,
|
||||||
|
readyStateIndex: r
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.emit(
|
||||||
|
Event.ON_READY_STATE_CHANGE,
|
||||||
|
{
|
||||||
|
r3Object: this,
|
||||||
|
readyState: R3Object.READY_STATE_FALSE,
|
||||||
|
readyStateIndex: r
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If at least one requirements set pass - return true.
|
||||||
|
*/
|
||||||
|
for (let r = 0; r < this.required.length; r++) {
|
||||||
|
if (this.ready[r]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//CUSTOM_IS_READY_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_IS_READY_METHOD_AFTER_START
|
||||||
|
//GENERATED_IS_READY_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* requirementValueCheck()
|
||||||
|
* - Checks whether or not the property / value pair meets the requirements of setting this ready to true. It
|
||||||
|
* handles values of type Object and Array properly.
|
||||||
|
* @param property
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
requirementValueCheck(
|
||||||
|
property,
|
||||||
|
value
|
||||||
|
) {
|
||||||
|
|
||||||
|
//GENERATED_REQUIREMENT_VALUE_CHECK_METHOD_START
|
||||||
|
//GENERATED_REQUIREMENT_VALUE_CHECK_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_REQUIREMENT_VALUE_CHECK_METHOD_START
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The property change is one of the required properties of this Object, so it affects the overall
|
||||||
|
* 'readiness' of this object.
|
||||||
|
*/
|
||||||
|
if (property instanceof Array) {
|
||||||
|
|
||||||
|
if (!(value instanceof Array)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value.length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let v = 0; v < value.length; v++) {
|
||||||
|
if (!(value[v] instanceof property[0])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(value[v].isReady())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!(value instanceof property)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return value.isReady();
|
||||||
|
}
|
||||||
|
|
||||||
|
//CUSTOM_REQUIREMENT_VALUE_CHECK_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_REQUIREMENT_VALUE_CHECK_METHOD_AFTER_START
|
||||||
|
//GENERATED_REQUIREMENT_VALUE_CHECK_METHOD_AFTER_END
|
||||||
|
|
||||||
}
|
}
|
||||||
//GENERATED_TEMPLATE_METHODS_END
|
//GENERATED_TEMPLATE_METHODS_END
|
||||||
|
|
||||||
|
@ -229,6 +377,10 @@ R3Object.MAX_R3OBJECT = 0x11;
|
||||||
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_END
|
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_END
|
||||||
|
|
||||||
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
|
||||||
|
R3Object.READY_STATE_FALSE = 0x1;
|
||||||
|
R3Object.READY_STATE_PENDING_FALSE = 0x2;
|
||||||
|
R3Object.READY_STATE_PENDING_TRUE = 0x3;
|
||||||
|
R3Object.READY_STATE_TRUE = 0x4;
|
||||||
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
|
||||||
|
|
||||||
module.exports = R3Object;
|
module.exports = R3Object;
|
||||||
|
|
|
@ -4,6 +4,7 @@ const RuntimeCoder = require('./r3-runtime-coder.js');
|
||||||
const RuntimeCodeMirror = require('./r3-runtime-code-mirror.js');
|
const RuntimeCodeMirror = require('./r3-runtime-code-mirror.js');
|
||||||
const RuntimeDOM = require('./r3-runtime-d-o-m.js');
|
const RuntimeDOM = require('./r3-runtime-d-o-m.js');
|
||||||
const RuntimeDocument = require('./r3-runtime-document.js');
|
const RuntimeDocument = require('./r3-runtime-document.js');
|
||||||
|
const RuntimeJsDOM = require('./r3-runtime-js-d-o-m.js');
|
||||||
const RuntimeGUI = require('./r3-runtime-g-u-i.js');
|
const RuntimeGUI = require('./r3-runtime-g-u-i.js');
|
||||||
const RuntimeControlKit = require('./r3-runtime-control-kit.js');
|
const RuntimeControlKit = require('./r3-runtime-control-kit.js');
|
||||||
const RuntimeGraphics = require('./r3-runtime-graphics.js');
|
const RuntimeGraphics = require('./r3-runtime-graphics.js');
|
||||||
|
@ -23,6 +24,7 @@ Runtime.Coder = RuntimeCoder;
|
||||||
Runtime.Coder.CodeMirror = RuntimeCodeMirror;
|
Runtime.Coder.CodeMirror = RuntimeCodeMirror;
|
||||||
Runtime.DOM = RuntimeDOM;
|
Runtime.DOM = RuntimeDOM;
|
||||||
Runtime.DOM.Document = RuntimeDocument;
|
Runtime.DOM.Document = RuntimeDocument;
|
||||||
|
Runtime.DOM.JsDOM = RuntimeJsDOM;
|
||||||
Runtime.GUI = RuntimeGUI;
|
Runtime.GUI = RuntimeGUI;
|
||||||
Runtime.GUI.ControlKit = RuntimeControlKit;
|
Runtime.GUI.ControlKit = RuntimeControlKit;
|
||||||
Runtime.Graphics = RuntimeGraphics;
|
Runtime.Graphics = RuntimeGraphics;
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
const Utils = require('.././r3-utils');
|
const Utils = require('.././r3-utils');
|
||||||
const RuntimePhysics = require('./r3-runtime-physics.js');
|
const RuntimePhysics = require('./r3-runtime-physics.js');
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
const Utils = require('.././r3-utils');
|
const Utils = require('.././r3-utils');
|
||||||
const RuntimeCoder = require('./r3-runtime-coder.js');
|
const RuntimeCoder = require('./r3-runtime-coder.js');
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
const Utils = require('.././r3-utils');
|
const Utils = require('.././r3-utils');
|
||||||
const RuntimeGUI = require('./r3-runtime-g-u-i.js');
|
const RuntimeGUI = require('./r3-runtime-g-u-i.js');
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
const ComponentCanvas = require('../r3-component/r3-component-canvas');
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
const Utils = require('.././r3-utils');
|
const Utils = require('.././r3-utils');
|
||||||
const RuntimeDOM = require('./r3-runtime-d-o-m.js');
|
const RuntimeDOM = require('./r3-runtime-d-o-m.js');
|
||||||
|
@ -70,7 +77,7 @@ class RuntimeDocument extends RuntimeDOM {
|
||||||
//GENERATED_BUILD_INSTANCE_METHOD_END
|
//GENERATED_BUILD_INSTANCE_METHOD_END
|
||||||
|
|
||||||
//CUSTOM_BUILD_INSTANCE_METHOD_START
|
//CUSTOM_BUILD_INSTANCE_METHOD_START
|
||||||
if (component instanceof R3.Component.DOM.Canvas) {
|
if (component instanceof ComponentCanvas) {
|
||||||
let canvas = document.createElement('canvas');
|
let canvas = document.createElement('canvas');
|
||||||
canvas.setAttribute('width', component.width);
|
canvas.setAttribute('width', component.width);
|
||||||
canvas.setAttribute('height', component.height);
|
canvas.setAttribute('height', component.height);
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
const jsdom = require('jsdom');
|
||||||
|
const {JSDOM} = jsdom;
|
||||||
|
const ComponentCanvas = require('../r3-component/r3-component-canvas');
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
|
const Event = require('.././r3-event');
|
||||||
|
const Utils = require('.././r3-utils');
|
||||||
|
const RuntimeDOM = require('./r3-runtime-d-o-m.js');
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
|
GENERATED_INHERITED_START
|
||||||
|
|
||||||
|
GENERATED_INHERITED_END
|
||||||
|
|
||||||
|
TEMPLATE_OPTIONS_START
|
||||||
|
TEMPLATE_OPTIONS_END
|
||||||
|
|
||||||
|
CUSTOM_OPTIONS_START
|
||||||
|
dom=new JSDOM(`<!DOCTYPE html><p>R3 NodeJS DOM</p>`);
|
||||||
|
CUSTOM_OPTIONS_END
|
||||||
|
|
||||||
|
TEMPLATE_STATIC_OPTIONS_START
|
||||||
|
TEMPLATE_STATIC_OPTIONS_END
|
||||||
|
|
||||||
|
CUSTOM_STATIC_OPTIONS_START
|
||||||
|
CUSTOM_STATIC_OPTIONS_END
|
||||||
|
|
||||||
|
TEMPLATE_METHODS_START
|
||||||
|
buildInstance(component) - Creates a runtime instance object based on the R3.Component representing it.
|
||||||
|
TEMPLATE_METHODS_END
|
||||||
|
|
||||||
|
CUSTOM_METHODS_START
|
||||||
|
CUSTOM_METHODS_END
|
||||||
|
|
||||||
|
TEMPLATE_STATIC_METHODS_START
|
||||||
|
TEMPLATE_STATIC_METHODS_END
|
||||||
|
|
||||||
|
CUSTOM_STATIC_METHODS_START
|
||||||
|
CUSTOM_STATIC_METHODS_END
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
class RuntimeJsDOM extends RuntimeDOM {
|
||||||
|
|
||||||
|
//GENERATED_CONSTRUCTOR_START
|
||||||
|
constructor(options) {
|
||||||
|
|
||||||
|
if (typeof options === 'undefined') {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
super(options);
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_OPTIONS_INIT_START
|
||||||
|
//GENERATED_TEMPLATE_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//GENERATED_OPTIONS_INIT_START
|
||||||
|
/**
|
||||||
|
* dom - No comment
|
||||||
|
*/
|
||||||
|
if (typeof options.dom === 'undefined') {
|
||||||
|
options.dom = new JSDOM(`<!DOCTYPE html><p>R3 NodeJS DOM</p>`);;
|
||||||
|
}
|
||||||
|
//GENERATED_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
Object.assign(this, options);
|
||||||
|
|
||||||
|
}
|
||||||
|
//GENERATED_CONSTRUCTOR_END
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_METHODS_START
|
||||||
|
|
||||||
|
/**
|
||||||
|
* buildInstance()
|
||||||
|
* - Creates a runtime instance object based on the R3.Component representing it.
|
||||||
|
* @param component
|
||||||
|
*/
|
||||||
|
buildInstance(component) {
|
||||||
|
|
||||||
|
//GENERATED_BUILD_INSTANCE_METHOD_START
|
||||||
|
//GENERATED_BUILD_INSTANCE_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_BUILD_INSTANCE_METHOD_START
|
||||||
|
if (component instanceof ComponentCanvas) {
|
||||||
|
let canvas = this.dom.window.document.createElement('canvas');
|
||||||
|
canvas.setAttribute('width', component.width);
|
||||||
|
canvas.setAttribute('height', component.height);
|
||||||
|
canvas.setAttribute('style', component.style);
|
||||||
|
return canvas;
|
||||||
|
}
|
||||||
|
//CUSTOM_BUILD_INSTANCE_METHOD_END
|
||||||
|
|
||||||
|
//GENERATED_BUILD_INSTANCE_METHOD_AFTER_START
|
||||||
|
//GENERATED_BUILD_INSTANCE_METHOD_AFTER_END
|
||||||
|
|
||||||
|
}
|
||||||
|
//GENERATED_TEMPLATE_METHODS_END
|
||||||
|
|
||||||
|
//GENERATED_METHODS_START
|
||||||
|
//GENERATED_METHODS_END
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_STATIC_METHODS_START
|
||||||
|
//GENERATED_TEMPLATE_STATIC_METHODS_END
|
||||||
|
|
||||||
|
//GENERATED_STATIC_METHODS_START
|
||||||
|
//GENERATED_STATIC_METHODS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPLEMENTATION_START
|
||||||
|
//CUSTOM_IMPLEMENTATION_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//GENERATED_TEMPLATE_STATIC_OPTIONS_INIT_START
|
||||||
|
//GENERATED_TEMPLATE_STATIC_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//GENERATED_STATIC_OPTIONS_INIT_START
|
||||||
|
//GENERATED_STATIC_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_START
|
||||||
|
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_END
|
||||||
|
|
||||||
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
|
||||||
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
|
||||||
|
|
||||||
|
module.exports = RuntimeJsDOM;
|
|
@ -1,3 +1,9 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
const Utils = require('.././r3-utils');
|
const Utils = require('.././r3-utils');
|
||||||
const RuntimeImage = require('./r3-runtime-image.js');
|
const RuntimeImage = require('./r3-runtime-image.js');
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
const Utils = require('.././r3-utils');
|
const Utils = require('.././r3-utils');
|
||||||
const RuntimeStatistics = require('./r3-runtime-statistics.js');
|
const RuntimeStatistics = require('./r3-runtime-statistics.js');
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
const Utils = require('.././r3-utils');
|
const Utils = require('.././r3-utils');
|
||||||
const RuntimeGraphics = require('./r3-runtime-graphics.js');
|
const RuntimeGraphics = require('./r3-runtime-graphics.js');
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
const Utils = require('.././r3-utils');
|
const Utils = require('.././r3-utils');
|
||||||
const RuntimeImage = require('./r3-runtime-image.js');
|
const RuntimeImage = require('./r3-runtime-image.js');
|
||||||
|
|
|
@ -98,12 +98,13 @@ Runtime.BASE_SOCKET = 0x6;
|
||||||
Runtime.BASE_STATISTICS = 0x7;
|
Runtime.BASE_STATISTICS = 0x7;
|
||||||
Runtime.CODE_MIRROR = 0x8;
|
Runtime.CODE_MIRROR = 0x8;
|
||||||
Runtime.DOCUMENT = 0x9;
|
Runtime.DOCUMENT = 0x9;
|
||||||
Runtime.CONTROL_KIT = 0xa;
|
Runtime.JS_DOM = 0xa;
|
||||||
Runtime.THREE = 0xb;
|
Runtime.CONTROL_KIT = 0xb;
|
||||||
Runtime.NODE_JS_IMAGE = 0xc;
|
Runtime.THREE = 0xc;
|
||||||
Runtime.WEB_IMAGE = 0xd;
|
Runtime.NODE_JS_IMAGE = 0xd;
|
||||||
Runtime.BULLET = 0xe;
|
Runtime.WEB_IMAGE = 0xe;
|
||||||
Runtime.STATS = 0xf;
|
Runtime.BULLET = 0xf;
|
||||||
|
Runtime.STATS = 0x10;
|
||||||
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_END
|
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_END
|
||||||
|
|
||||||
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
|
||||||
|
|
|
@ -182,8 +182,8 @@ class SystemDOM extends System {
|
||||||
SystemDOM.Started = false;
|
SystemDOM.Started = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* static Subscriptions - An association object which hold the subscription handles for Events this system is listening
|
* static Subscriptions - An association object which hold the subscription handles for Events this system is
|
||||||
* to. The system can stop receiving events by calling remove() on a handle.
|
* listening to. The system can stop receiving events by calling remove() on a handle.
|
||||||
*/
|
*/
|
||||||
SystemDOM.Subscriptions = {};
|
SystemDOM.Subscriptions = {};
|
||||||
|
|
||||||
|
|
|
@ -433,8 +433,8 @@ class SystemInput extends System {
|
||||||
SystemInput.Started = false;
|
SystemInput.Started = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* static Subscriptions - An association object which hold the subscription handles for Events this system is listening
|
* static Subscriptions - An association object which hold the subscription handles for Events this system is
|
||||||
* to. The system can stop receiving events by calling remove() on a handle.
|
* listening to. The system can stop receiving events by calling remove() on a handle.
|
||||||
*/
|
*/
|
||||||
SystemInput.Subscriptions = {};
|
SystemInput.Subscriptions = {};
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
const R3Object = require('../r3-object/r3-object.js');
|
const R3Object = require('../r3-object/r3-object.js');
|
||||||
const Utils = require('../r3-utils.js');
|
const Utils = require('../r3-utils.js');
|
||||||
const Entity = require('../r3-entity/r3-entity.js');
|
const Entity = require('../r3-entity/r3-entity.js');
|
||||||
|
const Component = require('../r3-component/r3-component.js');
|
||||||
|
const Graph = require('../r3-graph.js');
|
||||||
|
const Node = require('../r3-node.js');
|
||||||
//CUSTOM_IMPORTS_END
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
|
@ -42,6 +45,8 @@ const System = require('./r3-system.js');
|
||||||
Event.CREATE_INSTANCE_BEFORE - @returns boolean delayInstance which indicates whether or not instance creation is delayed (handled) by another system. (i.e. where instance creation order is of importance)
|
Event.CREATE_INSTANCE_BEFORE - @returns boolean delayInstance which indicates whether or not instance creation is delayed (handled) by another system. (i.e. where instance creation order is of importance)
|
||||||
Event.OBJECT_PROPERTY_UPDATE
|
Event.OBJECT_PROPERTY_UPDATE
|
||||||
Event.OBJECT_PROPERTY_UPDATED
|
Event.OBJECT_PROPERTY_UPDATED
|
||||||
|
Event.ON_READY_STATE_CHANGE
|
||||||
|
Event.FINAL_INITIALIZE
|
||||||
CUSTOM_STATIC_EVENT_LISTENERS_END
|
CUSTOM_STATIC_EVENT_LISTENERS_END
|
||||||
|
|
||||||
TEMPLATE_METHODS_START
|
TEMPLATE_METHODS_START
|
||||||
|
@ -57,11 +62,10 @@ const System = require('./r3-system.js');
|
||||||
|
|
||||||
CUSTOM_STATIC_METHODS_START
|
CUSTOM_STATIC_METHODS_START
|
||||||
SanityChecks(r3Object, property, value) - When an object gets some value assigned to a property, we need to check if this property is a required property, and if so, the value assigned to this property needs to conform to the type restrictions enforced by the requirements objects.
|
SanityChecks(r3Object, property, value) - When an object gets some value assigned to a property, we need to check if this property is a required property, and if so, the value assigned to this property needs to conform to the type restrictions enforced by the requirements objects.
|
||||||
SetParentChildRelationships(r3Object, property, value) - When an object gets some value assigned to a property, and it is a required property, we need to ensure that the proper parent / child relationships are maintained
|
SetParentChildRelationships(r3Object, property, value) - When an object gets some value assigned to a property, and it is a required property, we need to ensure that the proper parent and child relationships are maintained
|
||||||
DetermineFutureReadyState(r3Object, property, value) - When an object is assigned some value to one of its required properties, we should determine the future 'readiness' state of this R3 Object. If an object will fall out of readiness, we need to notify all relevant systems of the eventual demise of this object, so that they have the opportunity to cleanly stop using running instances of this object.
|
DetermineFutureReadyState(r3Object, property, value) - When an object is assigned some value to one of its required properties, we should determine the future 'readiness' state of this R3 Object. Only if its ready state becomes false, we need to cascade this information to all parents forcing them to emit a Only if its ready state becomes false, we force all parents to emit a READY_STATE_PENDING_FALSE event.
|
||||||
DetermineActualReadyState(r3Object, property, value) - When an object is assigned some value to one of its required properties, we should determine the current 'readiness' state of this R3 Object after its property has assumed the value. If the ready state of an object changed - we need to start / stop this Object or Entity, create / delete instances of the Component
|
CascadeFutureReadyState(r3Object, readyState) - We start at the current node - emit READY_STATE_PENDING_FALSE event, afterwards calling asking all parents to emit a READY_STATE_PENDING_FALSE event. This allows the SystemLinking to stop Entities before the cleanup occurs.
|
||||||
RequirementsValueCheck(requirementProperty, value) - Does a quick check of the value against the requirement
|
CascadeActualReadyState(r3Object) - We start at the current node, determine its current ready state (it triggers the appropriate events), afterwards we work from the first parent upwards, determining it's ready state, taking appropriate action and cascading upwards.
|
||||||
ActivateInstances()
|
|
||||||
CUSTOM_STATIC_METHODS_END
|
CUSTOM_STATIC_METHODS_END
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
@ -146,6 +150,16 @@ class SystemLinking extends System {
|
||||||
SystemLinking.OnObjectPropertyUpdated
|
SystemLinking.OnObjectPropertyUpdated
|
||||||
);
|
);
|
||||||
|
|
||||||
|
SystemLinking.Subscriptions['ON_READY_STATE_CHANGE'] = Event.Subscribe(
|
||||||
|
Event.ON_READY_STATE_CHANGE,
|
||||||
|
SystemLinking.OnOnReadyStateChange
|
||||||
|
);
|
||||||
|
|
||||||
|
SystemLinking.Subscriptions['FINAL_INITIALIZE'] = Event.Subscribe(
|
||||||
|
Event.FINAL_INITIALIZE,
|
||||||
|
SystemLinking.OnFinalInitialize
|
||||||
|
);
|
||||||
|
|
||||||
//GENERATED_STATIC_EVENT_LISTENERS_START_END
|
//GENERATED_STATIC_EVENT_LISTENERS_START_END
|
||||||
|
|
||||||
//CUSTOM_BEFORE_STATIC_SYSTEM_START_START
|
//CUSTOM_BEFORE_STATIC_SYSTEM_START_START
|
||||||
|
@ -193,6 +207,12 @@ class SystemLinking extends System {
|
||||||
SystemLinking.Subscriptions['OBJECT_PROPERTY_UPDATED'].remove();
|
SystemLinking.Subscriptions['OBJECT_PROPERTY_UPDATED'].remove();
|
||||||
delete SystemLinking.Subscriptions['OBJECT_PROPERTY_UPDATED'];
|
delete SystemLinking.Subscriptions['OBJECT_PROPERTY_UPDATED'];
|
||||||
|
|
||||||
|
SystemLinking.Subscriptions['ON_READY_STATE_CHANGE'].remove();
|
||||||
|
delete SystemLinking.Subscriptions['ON_READY_STATE_CHANGE'];
|
||||||
|
|
||||||
|
SystemLinking.Subscriptions['FINAL_INITIALIZE'].remove();
|
||||||
|
delete SystemLinking.Subscriptions['FINAL_INITIALIZE'];
|
||||||
|
|
||||||
//GENERATED_STATIC_EVENT_LISTENERS_STOP_END
|
//GENERATED_STATIC_EVENT_LISTENERS_STOP_END
|
||||||
|
|
||||||
//CUSTOM_BEFORE_STATIC_SYSTEM_STOP_START
|
//CUSTOM_BEFORE_STATIC_SYSTEM_STOP_START
|
||||||
|
@ -335,7 +355,7 @@ class SystemLinking extends System {
|
||||||
/**
|
/**
|
||||||
* SetParentChildRelationships()
|
* SetParentChildRelationships()
|
||||||
* - When an object gets some value assigned to a property, and it is a required property, we need to ensure that
|
* - When an object gets some value assigned to a property, and it is a required property, we need to ensure that
|
||||||
* the proper parent / child relationships are maintained
|
* the proper parent and child relationships are maintained
|
||||||
* @param r3Object
|
* @param r3Object
|
||||||
* @param property
|
* @param property
|
||||||
* @param value
|
* @param value
|
||||||
|
@ -421,9 +441,9 @@ class SystemLinking extends System {
|
||||||
/**
|
/**
|
||||||
* DetermineFutureReadyState()
|
* DetermineFutureReadyState()
|
||||||
* - When an object is assigned some value to one of its required properties, we should determine the future
|
* - When an object is assigned some value to one of its required properties, we should determine the future
|
||||||
* 'readiness' state of this R3 Object. If an object will fall out of readiness, we need to notify all relevant
|
* 'readiness' state of this R3 Object. Only if its ready state becomes false, we need to cascade this
|
||||||
* systems of the eventual demise of this object, so that they have the opportunity to cleanly stop using running
|
* information to all parents forcing them to emit a Only if its ready state becomes false, we force all parents
|
||||||
* instances of this object.
|
* to emit a READY_STATE_PENDING_FALSE event.
|
||||||
* @param r3Object
|
* @param r3Object
|
||||||
* @param property
|
* @param property
|
||||||
* @param value
|
* @param value
|
||||||
|
@ -444,65 +464,25 @@ class SystemLinking extends System {
|
||||||
|
|
||||||
if (r3Object.ready[r]) {
|
if (r3Object.ready[r]) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This object is currently ready - we need to check if this object will fall out of a ready state.
|
||||||
|
* We only need to compare the current property.
|
||||||
|
*/
|
||||||
|
|
||||||
let ready = true;
|
let ready = true;
|
||||||
|
|
||||||
/**
|
|
||||||
* This object is currently ready - we need to check if this object will fall out of a ready state
|
|
||||||
*/
|
|
||||||
let requirements = r3Object.required[r];
|
let requirements = r3Object.required[r];
|
||||||
|
|
||||||
if (requirements.hasOwnProperty(property)) {
|
if (requirements.hasOwnProperty(property)) {
|
||||||
ready = SystemLinking.RequirementsValueCheck(requirements[property], value);
|
ready = r3Object.requirementValueCheck(requirements[property], value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ready) {
|
if (!ready) {
|
||||||
/**
|
/**
|
||||||
* This object will fall out of readiness state - notify all systems
|
* This object will fall out of readiness state - notify all systems
|
||||||
*/
|
*/
|
||||||
Event.Emit(
|
console.log('Future ready state will transition from true to false');
|
||||||
Event.FUTURE_READY_STATE_FALSE,
|
SystemLinking.CascadeFutureReadyState(r3Object, R3Object.READY_STATE_PENDING_FALSE);
|
||||||
{
|
|
||||||
r3Object,
|
|
||||||
property,
|
|
||||||
value,
|
|
||||||
requiredIndex : r
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
let ready = true;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This object is current *NOT* ready - we need to check if this object will fall into a ready state.
|
|
||||||
*/
|
|
||||||
let requirements = r3Object.required[r];
|
|
||||||
|
|
||||||
for (let requirementProperty in requirements) {
|
|
||||||
if (requirements.hasOwnProperty(requirementProperty)) {
|
|
||||||
|
|
||||||
if (requirementProperty === property) {
|
|
||||||
/**
|
|
||||||
* Compare against the current value and not the r3Object[requirementProperty]
|
|
||||||
*/
|
|
||||||
ready = SystemLinking.RequirementsValueCheck(requirements[requirementProperty], value);
|
|
||||||
} else {
|
|
||||||
ready = SystemLinking.RequirementsValueCheck(requirements[requirementProperty], r3Object[requirementProperty]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ready) {
|
|
||||||
Event.Emit(
|
|
||||||
Event.FUTURE_READY_STATE_TRUE,
|
|
||||||
{
|
|
||||||
r3Object,
|
|
||||||
property,
|
|
||||||
value,
|
|
||||||
requiredIndex: r
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -512,121 +492,108 @@ class SystemLinking extends System {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DetermineActualReadyState()
|
* CascadeFutureReadyState()
|
||||||
* - When an object is assigned some value to one of its required properties, we should determine the current
|
* - We start at the current node - emit READY_STATE_PENDING_FALSE event, afterwards calling asking all parents to
|
||||||
* 'readiness' state of this R3 Object after its property has assumed the value. If the ready state of an object
|
* emit a READY_STATE_PENDING_FALSE event. This allows the SystemLinking to stop Entities before the cleanup
|
||||||
* changed - we need to start / stop this Object or Entity, create / delete instances of the Component
|
* occurs.
|
||||||
* @param r3Object
|
* @param r3Object
|
||||||
* @param property
|
* @param readyState
|
||||||
* @param value
|
|
||||||
*/
|
*/
|
||||||
static DetermineActualReadyState(
|
static CascadeFutureReadyState(
|
||||||
r3Object,
|
r3Object,
|
||||||
property,
|
readyState
|
||||||
value
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
//GENERATED_STATIC_DETERMINE_ACTUAL_READY_STATE_METHOD_START
|
//GENERATED_STATIC_CASCADE_FUTURE_READY_STATE_METHOD_START
|
||||||
//GENERATED_STATIC_DETERMINE_ACTUAL_READY_STATE_METHOD_END
|
//GENERATED_STATIC_CASCADE_FUTURE_READY_STATE_METHOD_END
|
||||||
|
|
||||||
//CUSTOM_STATIC_DETERMINE_ACTUAL_READY_STATE_METHOD_START
|
//CUSTOM_STATIC_CASCADE_FUTURE_READY_STATE_METHOD_START
|
||||||
console.log('Determining actual ready state of ' + r3Object.name);
|
|
||||||
|
|
||||||
for (let r = 0; r < r3Object.required.length; r++) {
|
let node = new Node(
|
||||||
|
{
|
||||||
|
object : r3Object
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
let ready = true;
|
let graph = new Graph(
|
||||||
|
{
|
||||||
|
startNode : node,
|
||||||
|
relevant : ['parents']
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
let nodes = graph.closed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This object is currently ready - we need to check if this object will fall out of a ready state
|
* nodes contains a list of current node and parent Objects which are affected by the ready state of this object.
|
||||||
*/
|
*/
|
||||||
let requirements = r3Object.required[r];
|
for (let n = 0; n < nodes.length; n++) {
|
||||||
|
|
||||||
for (let property in requirements) {
|
let node = nodes[n];
|
||||||
if (requirements.hasOwnProperty(property)) {
|
|
||||||
ready = SystemLinking.RequirementsValueCheck(requirements[property], r3Object[property]);
|
/**
|
||||||
|
* The parent does not know directly why it falls out of ready state necessarily - because from its perspective
|
||||||
|
* it may have all its children requirements met - however a child of one of its children is going out of ready
|
||||||
|
* state. So - without adding too much complexity here, we just notify all parents (including the current node)
|
||||||
|
* that it's impending ready state will be false. We don't care about the readyStateIndex because of this. (for
|
||||||
|
* the sake of complexity)
|
||||||
|
*/
|
||||||
|
Event.Emit(
|
||||||
|
Event.ON_READY_STATE_CHANGE,
|
||||||
|
{
|
||||||
|
r3Object: node.object,
|
||||||
|
readyState: readyState
|
||||||
}
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
r3Object.ready[r] = ready;
|
//CUSTOM_STATIC_CASCADE_FUTURE_READY_STATE_METHOD_END
|
||||||
}
|
|
||||||
|
|
||||||
//CUSTOM_STATIC_DETERMINE_ACTUAL_READY_STATE_METHOD_END
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RequirementsValueCheck()
|
* CascadeActualReadyState()
|
||||||
* - Does a quick check of the value against the requirement
|
* - We start at the current node, determine its current ready state (it triggers the appropriate events),
|
||||||
* @param requirementProperty
|
* afterwards we work from the first parent upwards, determining it's ready state, taking appropriate action and
|
||||||
* @param value
|
* cascading upwards.
|
||||||
|
* @param r3Object
|
||||||
*/
|
*/
|
||||||
static RequirementsValueCheck(
|
static CascadeActualReadyState(r3Object) {
|
||||||
requirementProperty,
|
|
||||||
value
|
|
||||||
) {
|
|
||||||
|
|
||||||
//GENERATED_STATIC_REQUIREMENTS_VALUE_CHECK_METHOD_START
|
//GENERATED_STATIC_CASCADE_ACTUAL_READY_STATE_METHOD_START
|
||||||
//GENERATED_STATIC_REQUIREMENTS_VALUE_CHECK_METHOD_END
|
//GENERATED_STATIC_CASCADE_ACTUAL_READY_STATE_METHOD_END
|
||||||
|
|
||||||
//CUSTOM_STATIC_REQUIREMENTS_VALUE_CHECK_METHOD_START
|
//CUSTOM_STATIC_CASCADE_ACTUAL_READY_STATE_METHOD_START
|
||||||
|
console.log('Cascading actual ready state of ' + r3Object.name);
|
||||||
|
|
||||||
|
let node = new Node(
|
||||||
|
{
|
||||||
|
object : r3Object
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
let graph = new Graph(
|
||||||
|
{
|
||||||
|
startNode : node,
|
||||||
|
relevant : ['parents']
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
let nodes = graph.closed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The property change is one of the required properties of this Object, so it affects the overall
|
* nodes contains the current node as it's first object, followed by its parents
|
||||||
* 'readiness' of this object.
|
|
||||||
*/
|
*/
|
||||||
if (requirementProperty instanceof Array) {
|
for (let n = 0; n < nodes.length; n++) {
|
||||||
|
|
||||||
|
let node = nodes[n];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* A simple node.object.isReady() check will trigger the required READY_STATE_CHANGE events
|
||||||
*/
|
*/
|
||||||
if (!(value instanceof Array)) {
|
node.object.isReady();
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
//CUSTOM_STATIC_CASCADE_ACTUAL_READY_STATE_METHOD_END
|
||||||
if (value.length === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let v = 0; v < value.length; v++) {
|
|
||||||
if (!(value[v] instanceof requirementProperty[0])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (!(value instanceof requirementProperty)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
//CUSTOM_STATIC_REQUIREMENTS_VALUE_CHECK_METHOD_END
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ActivateInstances()
|
|
||||||
* - No comment
|
|
||||||
*/
|
|
||||||
static ActivateInstances() {
|
|
||||||
|
|
||||||
//GENERATED_STATIC_ACTIVATE_INSTANCES_METHOD_START
|
|
||||||
//GENERATED_STATIC_ACTIVATE_INSTANCES_METHOD_END
|
|
||||||
|
|
||||||
//CUSTOM_STATIC_ACTIVATE_INSTANCES_METHOD_START
|
|
||||||
|
|
||||||
// if (this instanceof Component && this.initialized) {
|
|
||||||
// this.createInstance();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (this instanceof Entity && this.initialized && !this.started) {
|
|
||||||
// this.start();
|
|
||||||
// }
|
|
||||||
|
|
||||||
//CUSTOM_STATIC_ACTIVATE_INSTANCES_METHOD_END
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//GENERATED_STATIC_METHODS_END
|
//GENERATED_STATIC_METHODS_END
|
||||||
|
@ -823,15 +790,112 @@ class SystemLinking extends System {
|
||||||
//GENERATED_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD_END
|
//GENERATED_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD_END
|
||||||
|
|
||||||
//CUSTOM_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD_START
|
//CUSTOM_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD_START
|
||||||
let {r3Object, property, value} = object;
|
let {r3Object} = object;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine the actual ready state of the r3Object
|
* Determine the actual ready state of the r3Object
|
||||||
*/
|
*/
|
||||||
SystemLinking.DetermineActualReadyState(r3Object, property, value);
|
SystemLinking.CascadeActualReadyState(r3Object);
|
||||||
|
|
||||||
//CUSTOM_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD_END
|
//CUSTOM_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OnOnReadyStateChange()
|
||||||
|
* - Listens to events of type Event.ON_READY_STATE_CHANGE and executes this function.
|
||||||
|
* @param object (The event data passed as argument - typically an R3Object)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
static OnOnReadyStateChange(object) {
|
||||||
|
|
||||||
|
//GENERATED_STATIC_ON_ON_READY_STATE_CHANGE_METHOD_START
|
||||||
|
//GENERATED_STATIC_ON_ON_READY_STATE_CHANGE_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_STATIC_ON_ON_READY_STATE_CHANGE_METHOD_START
|
||||||
|
|
||||||
|
let {r3Object, readyState, readyStateIndex} = object;
|
||||||
|
|
||||||
|
|
||||||
|
if (readyState === R3Object.READY_STATE_TRUE) {
|
||||||
|
|
||||||
|
console.log('Ready state changed to true for ' + r3Object.name + ' by passing requirements set ' + readyStateIndex);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If it is a Component and it has no instance, call its createInstance().
|
||||||
|
*/
|
||||||
|
if (r3Object instanceof Component && !r3Object.instance) {
|
||||||
|
r3Object.createInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If it is an Entity and it is stopped, call the start() method.
|
||||||
|
*/
|
||||||
|
if (r3Object instanceof Entity && r3Object.started === false) {
|
||||||
|
r3Object.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (readyState === R3Object.READY_STATE_FALSE) {
|
||||||
|
console.log('Ready state false for : ' + r3Object.name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If it is a Component and it has an instance, dispose of it
|
||||||
|
*/
|
||||||
|
if (r3Object instanceof Component && r3Object.instance) {
|
||||||
|
r3Object.disposeInstance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (readyState === R3Object.READY_STATE_PENDING_FALSE) {
|
||||||
|
console.log('Ready state pending false for : ' + r3Object.name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If it is an Entity and is started, stop it.
|
||||||
|
*/
|
||||||
|
if (r3Object instanceof Entity && r3Object.started === true) {
|
||||||
|
r3Object.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (readyState === R3Object.READY_STATE_PENDING_TRUE) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We don't do anything at the moment - we just log this information.
|
||||||
|
*/
|
||||||
|
console.log('Ready state pending true for ' + r3Object.name + ' by passing requirements set ' + readyStateIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
//CUSTOM_STATIC_ON_ON_READY_STATE_CHANGE_METHOD_END
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OnFinalInitialize()
|
||||||
|
* - Listens to events of type Event.FINAL_INITIALIZE and executes this function.
|
||||||
|
* @param object (The event data passed as argument - typically an R3Object)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
static OnFinalInitialize(object) {
|
||||||
|
|
||||||
|
//GENERATED_STATIC_ON_FINAL_INITIALIZE_METHOD_START
|
||||||
|
//GENERATED_STATIC_ON_FINAL_INITIALIZE_METHOD_END
|
||||||
|
|
||||||
|
//CUSTOM_STATIC_ON_FINAL_INITIALIZE_METHOD_START
|
||||||
|
if (object instanceof Component) {
|
||||||
|
if (object.required.length === 0) {
|
||||||
|
object.createInstance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object instanceof Entity) {
|
||||||
|
if (object.required.length === 0) {
|
||||||
|
object.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//CUSTOM_STATIC_ON_FINAL_INITIALIZE_METHOD_END
|
||||||
|
|
||||||
}
|
}
|
||||||
//GENERATED_STATIC_EVENT_LISTENER_METHODS_END
|
//GENERATED_STATIC_EVENT_LISTENER_METHODS_END
|
||||||
|
|
||||||
|
@ -846,8 +910,8 @@ class SystemLinking extends System {
|
||||||
SystemLinking.Started = false;
|
SystemLinking.Started = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* static Subscriptions - An association object which hold the subscription handles for Events this system is listening
|
* static Subscriptions - An association object which hold the subscription handles for Events this system is
|
||||||
* to. The system can stop receiving events by calling remove() on a handle.
|
* listening to. The system can stop receiving events by calling remove() on a handle.
|
||||||
*/
|
*/
|
||||||
SystemLinking.Subscriptions = {};
|
SystemLinking.Subscriptions = {};
|
||||||
|
|
||||||
|
@ -855,7 +919,8 @@ SystemLinking.Subscriptions = {};
|
||||||
|
|
||||||
//GENERATED_STATIC_OPTIONS_INIT_START
|
//GENERATED_STATIC_OPTIONS_INIT_START
|
||||||
/**
|
/**
|
||||||
* static BlacklistedComponents - A list of component constructors which should not be permitted to create instances immediately
|
* static BlacklistedComponents - A list of component constructors which should not be permitted to create instances
|
||||||
|
* immediately
|
||||||
*/
|
*/
|
||||||
SystemLinking.BlacklistedComponents = [];
|
SystemLinking.BlacklistedComponents = [];
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
//GENERATED_IMPORTS_END
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
//CUSTOM_IMPORTS_START
|
//CUSTOM_IMPORTS_START
|
||||||
|
const ComponentDOM = require('../r3-component/r3-component-d-o-m');
|
||||||
|
const ComponentImage = require('../r3-component/r3-component-image');
|
||||||
|
const RuntimeDocument = require('../r3-runtime/r3-runtime-document');
|
||||||
|
const RuntimeWebImage = require('../r3-runtime/r3-runtime-web-image');
|
||||||
//CUSTOM_IMPORTS_END
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
|
@ -166,14 +170,14 @@ class SystemRender extends System {
|
||||||
//GENERATED_STATIC_ON_INSTANCE_CREATED_METHOD_END
|
//GENERATED_STATIC_ON_INSTANCE_CREATED_METHOD_END
|
||||||
|
|
||||||
//CUSTOM_STATIC_ON_INSTANCE_CREATED_METHOD_START
|
//CUSTOM_STATIC_ON_INSTANCE_CREATED_METHOD_START
|
||||||
if (object instanceof R3.Component.DOM) {
|
if (object instanceof ComponentDOM) {
|
||||||
if (object.runtime instanceof R3.Runtime.DOM.Document) {
|
if (object.runtime instanceof RuntimeDocument) {
|
||||||
document.body.appendChild(object.instance);
|
document.body.appendChild(object.instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (object instanceof R3.Component.Graphics.Image) {
|
if (object instanceof ComponentImage) {
|
||||||
if (object.runtime instanceof R3.Runtime.Image.WebImage) {
|
if (object.runtime instanceof RuntimeWebImage) {
|
||||||
document.body.appendChild(object.instance);
|
document.body.appendChild(object.instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -194,8 +198,8 @@ class SystemRender extends System {
|
||||||
SystemRender.Started = false;
|
SystemRender.Started = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* static Subscriptions - An association object which hold the subscription handles for Events this system is listening
|
* static Subscriptions - An association object which hold the subscription handles for Events this system is
|
||||||
* to. The system can stop receiving events by calling remove() on a handle.
|
* listening to. The system can stop receiving events by calling remove() on a handle.
|
||||||
*/
|
*/
|
||||||
SystemRender.Subscriptions = {};
|
SystemRender.Subscriptions = {};
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,13 @@
|
||||||
//GENERATED_IMPORTS_END
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
//CUSTOM_IMPORTS_START
|
//CUSTOM_IMPORTS_START
|
||||||
|
const ComponentDOM = require('../r3-component/r3-component-d-o-m.js');
|
||||||
|
const ComponentInput = require('../r3-component/r3-component-input.js');
|
||||||
|
const ComponentImage = require('../r3-component/r3-component-image.js');
|
||||||
|
const RuntimeDocument = require('../r3-runtime/r3-runtime-document.js');
|
||||||
|
const RuntimeWebImage = require('../r3-runtime/r3-runtime-web-image.js');
|
||||||
|
const RuntimeJsDOM = require('../r3-runtime/r3-runtime-js-d-o-m.js');
|
||||||
|
const Utils = require('.././r3-utils.js');
|
||||||
//CUSTOM_IMPORTS_END
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('.././r3-event');
|
const Event = require('.././r3-event');
|
||||||
|
@ -27,12 +34,15 @@ const System = require('./r3-system.js');
|
||||||
CUSTOM_STATIC_OPTIONS_START
|
CUSTOM_STATIC_OPTIONS_START
|
||||||
Projects=[]
|
Projects=[]
|
||||||
CurrentProject=null
|
CurrentProject=null
|
||||||
|
ServerSide=(typeof process !== 'undefined')
|
||||||
RuntimeCoder={}
|
RuntimeCoder={}
|
||||||
RuntimeDOM={}
|
RuntimeDOM={}
|
||||||
RuntimeGUI={}
|
RuntimeGUI={}
|
||||||
RuntimeGraphics={}
|
RuntimeGraphics={}
|
||||||
RuntimePhysics={}
|
RuntimePhysics={}
|
||||||
RuntimeStatistics={}
|
RuntimeStatistics={}
|
||||||
|
RuntimeJsDOM=null
|
||||||
|
RuntimeDocument=null
|
||||||
CUSTOM_STATIC_OPTIONS_END
|
CUSTOM_STATIC_OPTIONS_END
|
||||||
|
|
||||||
CUSTOM_EVENT_LISTENERS_START
|
CUSTOM_EVENT_LISTENERS_START
|
||||||
|
@ -223,23 +233,41 @@ class SystemRuntime extends System {
|
||||||
* the DOM.
|
* the DOM.
|
||||||
*/
|
*/
|
||||||
if (
|
if (
|
||||||
object instanceof R3.Component.DOM ||
|
object instanceof ComponentDOM ||
|
||||||
object instanceof R3.Component.Input
|
object instanceof ComponentImage ||
|
||||||
|
object instanceof ComponentInput
|
||||||
) {
|
) {
|
||||||
if (SystemRuntime.CurrentProject === null) {
|
if (SystemRuntime.CurrentProject === null) {
|
||||||
return new R3.Runtime.DOM.Document();
|
|
||||||
|
if (SystemRuntime.ServerSide) {
|
||||||
|
|
||||||
|
if (!SystemRuntime.RuntimeJsDOM) {
|
||||||
|
SystemRuntime.RuntimeJsDOM = new RuntimeJsDOM();
|
||||||
|
}
|
||||||
|
|
||||||
|
return SystemRuntime.RuntimeJsDOM;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!SystemRuntime.RuntimeDocument) {
|
||||||
|
SystemRuntime.RuntimeDocument = new RuntimeDocument();
|
||||||
|
}
|
||||||
|
|
||||||
|
return SystemRuntime.RuntimeDocument;
|
||||||
|
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log('TODO: implement a project based DOM runtime');
|
console.log('TODO: implement a project based DOM runtime');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (object instanceof R3.Component.Graphics.Image) {
|
// if (object instanceof ComponentImage) {
|
||||||
if (SystemRuntime.CurrentProject === null) {
|
// if (SystemRuntime.CurrentProject === null) {
|
||||||
return new R3.Runtime.Image.WebImage();
|
// return new RuntimeWebImage();
|
||||||
} else {
|
// } else {
|
||||||
console.log('TODO: implement a project based Image runtime');
|
// console.log('TODO: implement a project based Image runtime');
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
//CUSTOM_STATIC_ON_GET_RUNTIME_METHOD_END
|
//CUSTOM_STATIC_ON_GET_RUNTIME_METHOD_END
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -306,8 +334,8 @@ class SystemRuntime extends System {
|
||||||
SystemRuntime.Started = false;
|
SystemRuntime.Started = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* static Subscriptions - An association object which hold the subscription handles for Events this system is listening
|
* static Subscriptions - An association object which hold the subscription handles for Events this system is
|
||||||
* to. The system can stop receiving events by calling remove() on a handle.
|
* listening to. The system can stop receiving events by calling remove() on a handle.
|
||||||
*/
|
*/
|
||||||
SystemRuntime.Subscriptions = {};
|
SystemRuntime.Subscriptions = {};
|
||||||
|
|
||||||
|
@ -324,6 +352,11 @@ SystemRuntime.Projects = [];
|
||||||
*/
|
*/
|
||||||
SystemRuntime.CurrentProject = null;
|
SystemRuntime.CurrentProject = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* static ServerSide - No comment
|
||||||
|
*/
|
||||||
|
SystemRuntime.ServerSide = (typeof process !== 'undefined');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* static RuntimeCoder - No comment
|
* static RuntimeCoder - No comment
|
||||||
*/
|
*/
|
||||||
|
@ -354,6 +387,16 @@ SystemRuntime.RuntimePhysics = {};
|
||||||
*/
|
*/
|
||||||
SystemRuntime.RuntimeStatistics = {};
|
SystemRuntime.RuntimeStatistics = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* static RuntimeJsDOM - No comment
|
||||||
|
*/
|
||||||
|
SystemRuntime.RuntimeJsDOM = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* static RuntimeDocument - No comment
|
||||||
|
*/
|
||||||
|
SystemRuntime.RuntimeDocument = null;
|
||||||
|
|
||||||
//GENERATED_STATIC_OPTIONS_INIT_END
|
//GENERATED_STATIC_OPTIONS_INIT_END
|
||||||
|
|
||||||
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_START
|
//GENERATED_OUT_OF_CLASS_IMPLEMENTATION_START
|
||||||
|
|
|
@ -158,8 +158,8 @@ class SystemSocket extends System {
|
||||||
SystemSocket.Started = false;
|
SystemSocket.Started = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* static Subscriptions - An association object which hold the subscription handles for Events this system is listening
|
* static Subscriptions - An association object which hold the subscription handles for Events this system is
|
||||||
* to. The system can stop receiving events by calling remove() on a handle.
|
* listening to. The system can stop receiving events by calling remove() on a handle.
|
||||||
*/
|
*/
|
||||||
SystemSocket.Subscriptions = {};
|
SystemSocket.Subscriptions = {};
|
||||||
|
|
||||||
|
|
|
@ -189,8 +189,8 @@ class SystemStorage extends System {
|
||||||
SystemStorage.Started = false;
|
SystemStorage.Started = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* static Subscriptions - An association object which hold the subscription handles for Events this system is listening
|
* static Subscriptions - An association object which hold the subscription handles for Events this system is
|
||||||
* to. The system can stop receiving events by calling remove() on a handle.
|
* listening to. The system can stop receiving events by calling remove() on a handle.
|
||||||
*/
|
*/
|
||||||
SystemStorage.Subscriptions = {};
|
SystemStorage.Subscriptions = {};
|
||||||
|
|
||||||
|
|
|
@ -90,12 +90,12 @@ class R3 {
|
||||||
/**
|
/**
|
||||||
* static Version - Current R3 version
|
* static Version - Current R3 version
|
||||||
*/
|
*/
|
||||||
R3.Version = '3.0.261';
|
R3.Version = '3.0.338';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* static CompileDate - Current compile date of R3
|
* static CompileDate - Current compile date of R3
|
||||||
*/
|
*/
|
||||||
R3.CompileDate = '2021 Oct 03 - 07:35:08 am';
|
R3.CompileDate = '2021 Oct 10 - 15:24:05 pm';
|
||||||
|
|
||||||
//GENERATED_STATIC_OPTIONS_INIT_END
|
//GENERATED_STATIC_OPTIONS_INIT_END
|
||||||
|
|
||||||
|
|
|
@ -4,15 +4,21 @@
|
||||||
if (typeof options.required[INDEX] === 'undefined') {
|
if (typeof options.required[INDEX] === 'undefined') {
|
||||||
options.required[INDEX] = {};
|
options.required[INDEX] = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
options.required[INDEX].KEY = VALUE;
|
options.required[INDEX].KEY = VALUE;
|
||||||
this.KEYBackup = options.KEY;
|
|
||||||
|
if (typeof this._cache === 'undefined') {
|
||||||
|
this._cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
this._cache['KEY'] = options.KEY;
|
||||||
Object.defineProperty(
|
Object.defineProperty(
|
||||||
this,
|
this,
|
||||||
'KEY',
|
'KEY',
|
||||||
{
|
{
|
||||||
configurable : true,
|
configurable : true,
|
||||||
enumerable : true,
|
enumerable : true,
|
||||||
set: function(x) {
|
set: (x) => {
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATE,
|
Event.OBJECT_PROPERTY_UPDATE,
|
||||||
{
|
{
|
||||||
|
@ -21,7 +27,7 @@
|
||||||
value : x
|
value : x
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
this.KEYBackup = x;
|
this._cache['KEY'] = x;
|
||||||
Event.Emit(
|
Event.Emit(
|
||||||
Event.OBJECT_PROPERTY_UPDATED,
|
Event.OBJECT_PROPERTY_UPDATED,
|
||||||
{
|
{
|
||||||
|
@ -32,8 +38,8 @@
|
||||||
);
|
);
|
||||||
return x;
|
return x;
|
||||||
},
|
},
|
||||||
get : function() {
|
get : () => {
|
||||||
return this.KEYBackup;
|
return this._cache['KEY'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
|
@ -36,6 +36,8 @@ const Utils = require('INCLUDE_PATH/r3-utils');
|
||||||
|
|
||||||
TEMPLATE_METHODS_START
|
TEMPLATE_METHODS_START
|
||||||
initialize() - Initializes this Object if all of its required Objects are initialized
|
initialize() - Initializes this Object if all of its required Objects are initialized
|
||||||
|
isReady() - Checks whether or not at least one set of requirements pass the ready state (i.e. required objects are assigned and ready)
|
||||||
|
requirementValueCheck(property, value) - Checks whether or not the property / value pair meets the requirements of setting this ready to true. It handles values of type Object and Array properly.
|
||||||
TEMPLATE_METHODS_END
|
TEMPLATE_METHODS_END
|
||||||
|
|
||||||
CUSTOM_METHODS_START
|
CUSTOM_METHODS_START
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
//GENERATED_IMPORTS_START
|
||||||
|
//GENERATED_IMPORTS_END
|
||||||
|
|
||||||
|
//CUSTOM_IMPORTS_START
|
||||||
|
//CUSTOM_IMPORTS_END
|
||||||
|
|
||||||
const Event = require('INCLUDE_PATH/r3-event');
|
const Event = require('INCLUDE_PATH/r3-event');
|
||||||
const Utils = require('INCLUDE_PATH/r3-utils');
|
const Utils = require('INCLUDE_PATH/r3-utils');
|
||||||
const EXTEND_CLASS = require('./EXTEND_CLASS_FILE_NAME');
|
const EXTEND_CLASS = require('./EXTEND_CLASS_FILE_NAME');
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
this.started = true;
|
this.started = true;
|
||||||
|
|
||||||
if (this instanceof R3.Entity) {
|
if (this instanceof Entity) {
|
||||||
this.emit(
|
this.emit(
|
||||||
Event.ENTITY_STARTED,
|
Event.ENTITY_STARTED,
|
||||||
this
|
this
|
||||||
|
|
|
@ -3,6 +3,10 @@ GENERATED_ASYNC_METHOD
|
||||||
GENERATED_ASYNC_METHOD_AFTER
|
GENERATED_ASYNC_METHOD_AFTER
|
||||||
GENERATED_BUILD_INSTANCE_METHOD
|
GENERATED_BUILD_INSTANCE_METHOD
|
||||||
GENERATED_BUILD_INSTANCE_METHOD_AFTER
|
GENERATED_BUILD_INSTANCE_METHOD_AFTER
|
||||||
|
GENERATED_BUILD_METHOD
|
||||||
|
GENERATED_BUILD_METHOD_AFTER
|
||||||
|
GENERATED_BUILD_SOLUTION_METHOD
|
||||||
|
GENERATED_BUILD_SOLUTION_METHOD_AFTER
|
||||||
GENERATED_CONSTRUCTOR
|
GENERATED_CONSTRUCTOR
|
||||||
GENERATED_CREATE_INSTANCE_METHOD
|
GENERATED_CREATE_INSTANCE_METHOD
|
||||||
GENERATED_CREATE_INSTANCE_METHOD_AFTER
|
GENERATED_CREATE_INSTANCE_METHOD_AFTER
|
||||||
|
@ -13,16 +17,24 @@ GENERATED_DISPOSE_METHOD
|
||||||
GENERATED_DISPOSE_METHOD_AFTER
|
GENERATED_DISPOSE_METHOD_AFTER
|
||||||
GENERATED_EMIT_METHOD
|
GENERATED_EMIT_METHOD
|
||||||
GENERATED_EMIT_METHOD_AFTER
|
GENERATED_EMIT_METHOD_AFTER
|
||||||
|
GENERATED_ESTABLISH_POINTERS_METHOD
|
||||||
|
GENERATED_ESTABLISH_POINTERS_METHOD_AFTER
|
||||||
GENERATED_EVENT_LISTENER_METHODS
|
GENERATED_EVENT_LISTENER_METHODS
|
||||||
GENERATED_EVENT_LISTENERS_START
|
GENERATED_EVENT_LISTENERS_START
|
||||||
GENERATED_EVENT_LISTENERS_STOP
|
GENERATED_EVENT_LISTENERS_STOP
|
||||||
GENERATED_EVENTS
|
GENERATED_EVENTS
|
||||||
|
GENERATED_EXPAND_METHOD
|
||||||
|
GENERATED_EXPAND_METHOD_AFTER
|
||||||
GENERATED_EXPORTS
|
GENERATED_EXPORTS
|
||||||
GENERATED_IMPORTS
|
GENERATED_IMPORTS
|
||||||
GENERATED_INDEX_BODY
|
GENERATED_INDEX_BODY
|
||||||
GENERATED_INHERITED
|
GENERATED_INHERITED
|
||||||
GENERATED_INITIALIZE_METHOD
|
GENERATED_INITIALIZE_METHOD
|
||||||
GENERATED_INITIALIZE_METHOD_AFTER
|
GENERATED_INITIALIZE_METHOD_AFTER
|
||||||
|
GENERATED_IS_GOAL_METHOD
|
||||||
|
GENERATED_IS_GOAL_METHOD_AFTER
|
||||||
|
GENERATED_IS_READY_METHOD
|
||||||
|
GENERATED_IS_READY_METHOD_AFTER
|
||||||
GENERATED_METHOD_NAME_UPPERCASE_METHOD
|
GENERATED_METHOD_NAME_UPPERCASE_METHOD
|
||||||
GENERATED_METHOD_NAME_UPPERCASE_METHOD_AFTER
|
GENERATED_METHOD_NAME_UPPERCASE_METHOD_AFTER
|
||||||
GENERATED_METHODS
|
GENERATED_METHODS
|
||||||
|
@ -36,15 +48,21 @@ GENERATED_ON_TOUCH_START_METHOD
|
||||||
GENERATED_ON_TOUCH_START_METHOD_AFTER
|
GENERATED_ON_TOUCH_START_METHOD_AFTER
|
||||||
GENERATED_OPTIONS_INIT
|
GENERATED_OPTIONS_INIT
|
||||||
GENERATED_OUT_OF_CLASS_IMPLEMENTATION
|
GENERATED_OUT_OF_CLASS_IMPLEMENTATION
|
||||||
|
GENERATED_PROCESS_METHOD
|
||||||
|
GENERATED_PROCESS_METHOD_AFTER
|
||||||
|
GENERATED_RE_ORDER_METHOD
|
||||||
|
GENERATED_RE_ORDER_METHOD_AFTER
|
||||||
GENERATED_REQUIRED_COMPONENTS
|
GENERATED_REQUIRED_COMPONENTS
|
||||||
|
GENERATED_REQUIREMENT_VALUE_CHECK_METHOD
|
||||||
|
GENERATED_REQUIREMENT_VALUE_CHECK_METHOD_AFTER
|
||||||
GENERATED_SET_RUNTIME_METHOD
|
GENERATED_SET_RUNTIME_METHOD
|
||||||
GENERATED_SET_RUNTIME_METHOD_AFTER
|
GENERATED_SET_RUNTIME_METHOD_AFTER
|
||||||
GENERATED_SOURCE
|
GENERATED_SOURCE
|
||||||
GENERATED_START_METHOD
|
GENERATED_START_METHOD
|
||||||
GENERATED_START_METHOD_AFTER
|
GENERATED_START_METHOD_AFTER
|
||||||
GENERATED_STATIC_ACTIVATE_INSTANCES_METHOD
|
|
||||||
GENERATED_STATIC_ASYNC_METHOD
|
GENERATED_STATIC_ASYNC_METHOD
|
||||||
GENERATED_STATIC_DETERMINE_ACTUAL_READY_STATE_METHOD
|
GENERATED_STATIC_CASCADE_ACTUAL_READY_STATE_METHOD
|
||||||
|
GENERATED_STATIC_CASCADE_FUTURE_READY_STATE_METHOD
|
||||||
GENERATED_STATIC_DETERMINE_FUTURE_READY_STATE_METHOD
|
GENERATED_STATIC_DETERMINE_FUTURE_READY_STATE_METHOD
|
||||||
GENERATED_STATIC_EMIT_METHOD
|
GENERATED_STATIC_EMIT_METHOD
|
||||||
GENERATED_STATIC_EVENT_LISTENER_METHODS
|
GENERATED_STATIC_EVENT_LISTENER_METHODS
|
||||||
|
@ -56,6 +74,7 @@ GENERATED_STATIC_ON_COMPONENT_INITIALIZED_METHOD
|
||||||
GENERATED_STATIC_ON_CREATE_INSTANCE_BEFORE_METHOD
|
GENERATED_STATIC_ON_CREATE_INSTANCE_BEFORE_METHOD
|
||||||
GENERATED_STATIC_ON_DOM_COMPONENT_INITIALIZED_METHOD
|
GENERATED_STATIC_ON_DOM_COMPONENT_INITIALIZED_METHOD
|
||||||
GENERATED_STATIC_ON_ENTITY_INITIALIZED_METHOD
|
GENERATED_STATIC_ON_ENTITY_INITIALIZED_METHOD
|
||||||
|
GENERATED_STATIC_ON_FINAL_INITIALIZE_METHOD
|
||||||
GENERATED_STATIC_ON_GET_API_URL_METHOD
|
GENERATED_STATIC_ON_GET_API_URL_METHOD
|
||||||
GENERATED_STATIC_ON_GET_RUNTIME_METHOD
|
GENERATED_STATIC_ON_GET_RUNTIME_METHOD
|
||||||
GENERATED_STATIC_ON_IMAGE_INSTANCE_CREATED_METHOD
|
GENERATED_STATIC_ON_IMAGE_INSTANCE_CREATED_METHOD
|
||||||
|
@ -69,6 +88,7 @@ GENERATED_STATIC_ON_MOUSE_WHEEL_METHOD
|
||||||
GENERATED_STATIC_ON_OBJECT_CREATED_METHOD
|
GENERATED_STATIC_ON_OBJECT_CREATED_METHOD
|
||||||
GENERATED_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD
|
GENERATED_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD
|
||||||
GENERATED_STATIC_ON_OBJECT_PROPERTY_UPDATE_METHOD
|
GENERATED_STATIC_ON_OBJECT_PROPERTY_UPDATE_METHOD
|
||||||
|
GENERATED_STATIC_ON_ON_READY_STATE_CHANGE_METHOD
|
||||||
GENERATED_STATIC_ON_PROJECT_INITIALIZED_METHOD
|
GENERATED_STATIC_ON_PROJECT_INITIALIZED_METHOD
|
||||||
GENERATED_STATIC_ON_RUNTIME_CREATED_METHOD
|
GENERATED_STATIC_ON_RUNTIME_CREATED_METHOD
|
||||||
GENERATED_STATIC_ON_SLIDER_ENTITY_INITIALIZED_METHOD
|
GENERATED_STATIC_ON_SLIDER_ENTITY_INITIALIZED_METHOD
|
||||||
|
@ -107,17 +127,23 @@ CUSTOM_BEFORE_STATIC_SYSTEM_STOP
|
||||||
CUSTOM_BEFORE_SYSTEM_START
|
CUSTOM_BEFORE_SYSTEM_START
|
||||||
CUSTOM_BEFORE_SYSTEM_STOP
|
CUSTOM_BEFORE_SYSTEM_STOP
|
||||||
CUSTOM_BUILD_INSTANCE_METHOD
|
CUSTOM_BUILD_INSTANCE_METHOD
|
||||||
|
CUSTOM_BUILD_METHOD
|
||||||
|
CUSTOM_BUILD_SOLUTION_METHOD
|
||||||
CUSTOM_CREATE_INSTANCE_METHOD
|
CUSTOM_CREATE_INSTANCE_METHOD
|
||||||
CUSTOM_DEFINES
|
CUSTOM_DEFINES
|
||||||
CUSTOM_DISPOSE_INSTANCE_METHOD
|
CUSTOM_DISPOSE_INSTANCE_METHOD
|
||||||
CUSTOM_DISPOSE_METHOD
|
CUSTOM_DISPOSE_METHOD
|
||||||
CUSTOM_EMIT_METHOD
|
CUSTOM_EMIT_METHOD
|
||||||
|
CUSTOM_ESTABLISH_POINTERS_METHOD
|
||||||
CUSTOM_EVENT_LISTENERS
|
CUSTOM_EVENT_LISTENERS
|
||||||
CUSTOM_EXCLUDED_FROM_INSTANCE_OPTIONS
|
CUSTOM_EXCLUDED_FROM_INSTANCE_OPTIONS
|
||||||
|
CUSTOM_EXPAND_METHOD
|
||||||
CUSTOM_IMPLEMENTATION
|
CUSTOM_IMPLEMENTATION
|
||||||
CUSTOM_IMPORTS
|
CUSTOM_IMPORTS
|
||||||
CUSTOM_INITIALIZE_METHOD
|
CUSTOM_INITIALIZE_METHOD
|
||||||
CUSTOM_INSTANCE_OPTIONS_MAPPING
|
CUSTOM_INSTANCE_OPTIONS_MAPPING
|
||||||
|
CUSTOM_IS_GOAL_METHOD
|
||||||
|
CUSTOM_IS_READY_METHOD
|
||||||
CUSTOM_METHOD_NAME_UPPERCASE_METHOD
|
CUSTOM_METHOD_NAME_UPPERCASE_METHOD
|
||||||
CUSTOM_METHODS
|
CUSTOM_METHODS
|
||||||
CUSTOM_ON_BEFORE_RENDER_METHOD
|
CUSTOM_ON_BEFORE_RENDER_METHOD
|
||||||
|
@ -127,12 +153,15 @@ CUSTOM_ON_TOUCH_START_METHOD
|
||||||
CUSTOM_OPTIONS
|
CUSTOM_OPTIONS
|
||||||
CUSTOM_OPTIONS_INIT
|
CUSTOM_OPTIONS_INIT
|
||||||
CUSTOM_OUT_OF_CLASS_IMPLEMENTATION
|
CUSTOM_OUT_OF_CLASS_IMPLEMENTATION
|
||||||
|
CUSTOM_PROCESS_METHOD
|
||||||
|
CUSTOM_RE_ORDER_METHOD
|
||||||
CUSTOM_REQUIRED_COMPONENTS
|
CUSTOM_REQUIRED_COMPONENTS
|
||||||
|
CUSTOM_REQUIREMENT_VALUE_CHECK_METHOD
|
||||||
CUSTOM_SET_RUNTIME_METHOD
|
CUSTOM_SET_RUNTIME_METHOD
|
||||||
CUSTOM_START_METHOD
|
CUSTOM_START_METHOD
|
||||||
CUSTOM_STATIC_ACTIVATE_INSTANCES_METHOD
|
|
||||||
CUSTOM_STATIC_ASYNC_METHOD
|
CUSTOM_STATIC_ASYNC_METHOD
|
||||||
CUSTOM_STATIC_DETERMINE_ACTUAL_READY_STATE_METHOD
|
CUSTOM_STATIC_CASCADE_ACTUAL_READY_STATE_METHOD
|
||||||
|
CUSTOM_STATIC_CASCADE_FUTURE_READY_STATE_METHOD
|
||||||
CUSTOM_STATIC_DETERMINE_FUTURE_READY_STATE_METHOD
|
CUSTOM_STATIC_DETERMINE_FUTURE_READY_STATE_METHOD
|
||||||
CUSTOM_STATIC_EMIT_METHOD
|
CUSTOM_STATIC_EMIT_METHOD
|
||||||
CUSTOM_STATIC_EVENT_LISTENERS
|
CUSTOM_STATIC_EVENT_LISTENERS
|
||||||
|
@ -142,6 +171,7 @@ CUSTOM_STATIC_ON_COMPONENT_INITIALIZED_METHOD
|
||||||
CUSTOM_STATIC_ON_CREATE_INSTANCE_BEFORE_METHOD
|
CUSTOM_STATIC_ON_CREATE_INSTANCE_BEFORE_METHOD
|
||||||
CUSTOM_STATIC_ON_DOM_COMPONENT_INITIALIZED_METHOD
|
CUSTOM_STATIC_ON_DOM_COMPONENT_INITIALIZED_METHOD
|
||||||
CUSTOM_STATIC_ON_ENTITY_INITIALIZED_METHOD
|
CUSTOM_STATIC_ON_ENTITY_INITIALIZED_METHOD
|
||||||
|
CUSTOM_STATIC_ON_FINAL_INITIALIZE_METHOD
|
||||||
CUSTOM_STATIC_ON_GET_API_URL_METHOD
|
CUSTOM_STATIC_ON_GET_API_URL_METHOD
|
||||||
CUSTOM_STATIC_ON_GET_RUNTIME_METHOD
|
CUSTOM_STATIC_ON_GET_RUNTIME_METHOD
|
||||||
CUSTOM_STATIC_ON_IMAGE_INSTANCE_CREATED_METHOD
|
CUSTOM_STATIC_ON_IMAGE_INSTANCE_CREATED_METHOD
|
||||||
|
@ -155,6 +185,7 @@ CUSTOM_STATIC_ON_MOUSE_WHEEL_METHOD
|
||||||
CUSTOM_STATIC_ON_OBJECT_CREATED_METHOD
|
CUSTOM_STATIC_ON_OBJECT_CREATED_METHOD
|
||||||
CUSTOM_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD
|
CUSTOM_STATIC_ON_OBJECT_PROPERTY_UPDATED_METHOD
|
||||||
CUSTOM_STATIC_ON_OBJECT_PROPERTY_UPDATE_METHOD
|
CUSTOM_STATIC_ON_OBJECT_PROPERTY_UPDATE_METHOD
|
||||||
|
CUSTOM_STATIC_ON_ON_READY_STATE_CHANGE_METHOD
|
||||||
CUSTOM_STATIC_ON_PROJECT_INITIALIZED_METHOD
|
CUSTOM_STATIC_ON_PROJECT_INITIALIZED_METHOD
|
||||||
CUSTOM_STATIC_ON_RUNTIME_CREATED_METHOD
|
CUSTOM_STATIC_ON_RUNTIME_CREATED_METHOD
|
||||||
CUSTOM_STATIC_ON_SLIDER_ENTITY_INITIALIZED_METHOD
|
CUSTOM_STATIC_ON_SLIDER_ENTITY_INITIALIZED_METHOD
|
||||||
|
|
|
@ -26,6 +26,7 @@ const RuntimeCoder = require('../src/r3/r3-runtime/./r3-runtime-coder.js');
|
||||||
const RuntimeCodeMirror = require('../src/r3/r3-runtime/./r3-runtime-code-mirror.js');
|
const RuntimeCodeMirror = require('../src/r3/r3-runtime/./r3-runtime-code-mirror.js');
|
||||||
const RuntimeDOM = require('../src/r3/r3-runtime/./r3-runtime-d-o-m.js');
|
const RuntimeDOM = require('../src/r3/r3-runtime/./r3-runtime-d-o-m.js');
|
||||||
const RuntimeDocument = require('../src/r3/r3-runtime/./r3-runtime-document.js');
|
const RuntimeDocument = require('../src/r3/r3-runtime/./r3-runtime-document.js');
|
||||||
|
const RuntimeJsDOM = require('../src/r3/r3-runtime/./r3-runtime-js-d-o-m.js');
|
||||||
const RuntimeGUI = require('../src/r3/r3-runtime/./r3-runtime-g-u-i.js');
|
const RuntimeGUI = require('../src/r3/r3-runtime/./r3-runtime-g-u-i.js');
|
||||||
const RuntimeControlKit = require('../src/r3/r3-runtime/./r3-runtime-control-kit.js');
|
const RuntimeControlKit = require('../src/r3/r3-runtime/./r3-runtime-control-kit.js');
|
||||||
const RuntimeGraphics = require('../src/r3/r3-runtime/./r3-runtime-graphics.js');
|
const RuntimeGraphics = require('../src/r3/r3-runtime/./r3-runtime-graphics.js');
|
||||||
|
@ -118,6 +119,7 @@ describe('R3 Tests', () => {
|
||||||
const runtimeCodeMirror = new RuntimeCodeMirror();
|
const runtimeCodeMirror = new RuntimeCodeMirror();
|
||||||
const runtimeDOM = new RuntimeDOM();
|
const runtimeDOM = new RuntimeDOM();
|
||||||
const runtimeDocument = new RuntimeDocument();
|
const runtimeDocument = new RuntimeDocument();
|
||||||
|
const runtimeJsDOM = new RuntimeJsDOM();
|
||||||
const runtimeGUI = new RuntimeGUI();
|
const runtimeGUI = new RuntimeGUI();
|
||||||
const runtimeControlKit = new RuntimeControlKit();
|
const runtimeControlKit = new RuntimeControlKit();
|
||||||
const runtimeGraphics = new RuntimeGraphics();
|
const runtimeGraphics = new RuntimeGraphics();
|
||||||
|
@ -284,6 +286,8 @@ describe('R3 Tests', () => {
|
||||||
'Linking system detects future ready state correctly',
|
'Linking system detects future ready state correctly',
|
||||||
() => {
|
() => {
|
||||||
|
|
||||||
|
const R3 = require('../src/r3/');
|
||||||
|
|
||||||
let touch1 = new ComponentTouch(
|
let touch1 = new ComponentTouch(
|
||||||
{
|
{
|
||||||
name : 'touch1'
|
name : 'touch1'
|
||||||
|
@ -298,6 +302,72 @@ describe('R3 Tests', () => {
|
||||||
|
|
||||||
assert.isTrue(touch1.ready[0]);
|
assert.isTrue(touch1.ready[0]);
|
||||||
|
|
||||||
|
let slider1 = new EntitySlider();
|
||||||
|
|
||||||
|
assert.isFalse(slider1.ready[0]);
|
||||||
|
|
||||||
|
let images = [];
|
||||||
|
|
||||||
|
slider1.images = images;
|
||||||
|
|
||||||
|
assert.isFalse(slider1.ready[0]);
|
||||||
|
|
||||||
|
let image1 = new ComponentImage();
|
||||||
|
|
||||||
|
slider1.images = [image1];
|
||||||
|
|
||||||
|
assert.isFalse(slider1.ready[0]);
|
||||||
|
|
||||||
|
slider1.canvas = canvas;
|
||||||
|
|
||||||
|
assert.isFalse(slider1.ready[0]);
|
||||||
|
|
||||||
|
slider1.touch = touch1;
|
||||||
|
|
||||||
|
assert.isTrue(slider1.ready[0]);
|
||||||
|
|
||||||
|
touch1.domComponent = null;
|
||||||
|
|
||||||
|
assert.isFalse(touch1.ready[0]);
|
||||||
|
assert.isFalse(slider1.ready[0]);
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
it(
|
||||||
|
'Tests the Graph building process',
|
||||||
|
() => {
|
||||||
|
const R3 = require('../src/r3/');
|
||||||
|
let canvas = new ComponentCanvas();
|
||||||
|
let image1 = new ComponentImage();
|
||||||
|
let image2 = new ComponentImage();
|
||||||
|
let image3 = new ComponentImage();
|
||||||
|
let image4 = new ComponentImage();
|
||||||
|
|
||||||
|
let touch = new ComponentTouch(
|
||||||
|
{
|
||||||
|
domComponent : canvas
|
||||||
|
}
|
||||||
|
);
|
||||||
|
let slider = new EntitySlider(
|
||||||
|
{
|
||||||
|
canvas,
|
||||||
|
images : [image1, image2, image3, image4],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
slider.touch = touch;
|
||||||
|
|
||||||
|
assert.isTrue(slider.ready[0]);
|
||||||
|
|
||||||
|
touch.domComponent = null;
|
||||||
|
|
||||||
|
assert.isFalse(slider.ready[0]);
|
||||||
|
|
||||||
|
touch.domComponent = canvas;
|
||||||
|
|
||||||
|
assert.isTrue(slider.ready[0]);
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue