{"ScriptPreparationCode":"function setModel(modelObj) {\r\n this._model = modelObj;\r\n return this;\r\n}\r\n\r\nfunction isCommand(cmd, model) {\r\n return cmd \u0026\u0026\r\n (this.id === cmd.id || this.name === cmd) \u0026\u0026\r\n (!model || this._model === model);\r\n}\r\n\r\nfunction cloneCommand() {\r\n return Object.assign({}, this);\r\n}\r\n\r\nlet counter = 1;\r\nfunction nextId() {\r\n return counter\u002B\u002B;\r\n}\r\n\r\nfunction createCommandExternal(name, func, exec, opts) {\r\n const beforeId = nextId();\r\n const afterId = nextId();\r\n const creator = function(...args) {\r\n return {\r\n func,\r\n exec,\r\n args,\r\n opts,\r\n beforeId,\r\n afterId,\r\n isCmd: true,\r\n id: beforeId,\r\n funcName: name,\r\n context: this,\r\n model: setModel,\r\n is: isCommand,\r\n clone: cloneCommand\r\n };\r\n };\r\n creator.id = beforeId;\r\n creator.Before = { id: beforeId };\r\n creator.After = { id: afterId };\r\n return creator;\r\n}\r\n\r\nfunction createCommandInternal(name, func, exec, opts) {\r\n const beforeId = nextId();\r\n const afterId = nextId();\r\n const creator = function(...args) {\r\n return {\r\n func,\r\n exec,\r\n args,\r\n opts,\r\n beforeId,\r\n afterId,\r\n isCmd: true,\r\n id: beforeId,\r\n funcName: name,\r\n context: this,\r\n model(modelObj) {\r\n this._model = modelObj;\r\n return this;\r\n },\r\n is(cmd, model) {\r\n return cmd \u0026\u0026\r\n (this.id === cmd.id || this.name === cmd) \u0026\u0026\r\n (!model || this._model === model);\r\n },\r\n clone() {\r\n return Object.assign({}, this);\r\n },\r\n\t appendArgs(cmd, args) {\r\n \t\tcmd = ensureCmdObject(cmd);\r\n \t\tcmd.args = cmd.args.concat(args);\r\n\t },\r\n\t setContext(cmd, ctx) {\r\n \t\tcmd = ensureCmdObject(cmd);\r\n \t\tcmd.context = ctx;\r\n \t\tcmd.name = getCommandName(cmd.funcName, ctx);\r\n \t\treturn cmd;\r\n\t },\r\n\t hash(cmd) {\r\n \t\tif (is.func(cmd)) {\r\n \t return \u0060${cmd.id}\u0060;\r\n \t\t} else {\r\n \t cmd = ensureCmdObject(cmd);\r\n \t const argsHash = cmd.args.length \u003E 0 ? JSON.stringify(cmd.args) : \u0022\u0022;\r\n \t return \u0060${cmd.id}${argsHash}\u0060;\r\n \t\t}\r\n\t }\r\n };\r\n };\r\n creator.id = beforeId;\r\n creator.Before = { id: beforeId };\r\n creator.After = { id: afterId };\r\n return creator;\r\n}","TestCases":[{"Name":"internal","Code":"createCommandInternal(\u0027testCommand\u0027, () =\u003E \u0027hello\u0027, {}, {})","IsDeferred":false},{"Name":"external","Code":"createCommandExternal(\u0027testCommand\u0027, () =\u003E \u0027hello\u0027, {}, {})","IsDeferred":false}]}