@monimesl/dot-simulator 0.1.0-alpha.11 → 0.1.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/service-bridge.js.map +1 -1
- package/dist/client/simulator.js +12 -14
- package/dist/client/simulator.js.map +1 -1
- package/dist/node/index.d.ts +4 -10
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +7 -17
- package/dist/node/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-bridge.js","names":[],"sources":["../../../../core/dist/index.js","../../src/paths.ts","../../src/client/hot-reload.ts","../../src/client/wire.ts","../../src/client/service-bridge.ts"],"sourcesContent":["//#region src/view/component.ts\nfunction defineComponent(manifest) {\n\treturn {\n\t\tprops: {},\n\t\tevents: [],\n\t\t...manifest\n\t};\n}\nfunction eventProp(event) {\n\treturn `on${event.charAt(0).toUpperCase()}${event.slice(1)}`;\n}\nfunction isEventProp(name) {\n\tconst letterAfterOn = name.charAt(2);\n\treturn name.startsWith(\"on\") && letterAfterOn >= \"A\" && letterAfterOn <= \"Z\";\n}\nfunction eventName(prop) {\n\tconst name = prop.slice(2);\n\treturn name.charAt(0).toLowerCase() + name.slice(1);\n}\nfunction componentRegistry(manifests) {\n\tconst registry = {};\n\tfor (const manifest of manifests) {\n\t\tif (manifest.name in registry) throw new Error(`Component <${manifest.name}> is defined twice`);\n\t\tregistry[manifest.name] = manifest;\n\t}\n\treturn registry;\n}\n//#endregion\n//#region src/view/values.ts\nfunction toText(value) {\n\tswitch (typeof value) {\n\t\tcase \"string\": return value;\n\t\tcase \"number\":\n\t\tcase \"boolean\":\n\t\tcase \"bigint\": return String(value);\n\t\tcase \"object\": return value === null ? \"\" : JSON.stringify(value);\n\t\tdefault: return \"\";\n\t}\n}\nfunction toList(value) {\n\tif (Array.isArray(value)) return value;\n\tif (typeof value === \"object\" && value !== null && Symbol.iterator in value) return Array.from(value);\n\treturn [];\n}\n//#endregion\n//#region src/view/components/amount-input.ts\nconst AmountInput = defineComponent({\n\tname: \"AmountInput\",\n\tprops: {\n\t\tvalue: \"number\",\n\t\tcurrency: \"string\",\n\t\tminorUnits: \"number\",\n\t\tunit: [\"minor\", \"major\"],\n\t\tlabel: \"string\",\n\t\tplaceholder: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/button.ts\nconst Button = defineComponent({\n\tname: \"Button\",\n\tprops: {\n\t\tvariant: [\"primary\", \"secondary\"],\n\t\tdisabled: \"boolean\",\n\t\tloading: \"boolean\"\n\t},\n\tevents: [\"click\"],\n\tchildren: \"text\"\n});\n//#endregion\n//#region src/view/components/options.ts\nconst SIZES = [\n\t\"small\",\n\t\"medium\",\n\t\"large\"\n];\nconst SPACES = [\n\t\"none\",\n\t\"small\",\n\t\"medium\",\n\t\"large\"\n];\nconst PADDING_PROPS = {\n\tpadding: SPACES,\n\tpaddingTop: SPACES,\n\tpaddingStart: SPACES,\n\tpaddingEnd: SPACES,\n\tpaddingBottom: SPACES\n};\nconst ASPECTS = [\n\t\"1:1\",\n\t\"4:3\",\n\t\"3:2\",\n\t\"16:9\",\n\t\"3:4\",\n\t\"2:3\",\n\t\"9:16\"\n];\nconst TONES = [\n\t\"default\",\n\t\"muted\",\n\t\"info\",\n\t\"success\",\n\t\"warning\",\n\t\"danger\"\n];\nconst STATUS_TONES = [\n\t\"default\",\n\t\"info\",\n\t\"success\",\n\t\"warning\",\n\t\"danger\"\n];\nconst ICON_NAMES = [\n\t\"arrow-down\",\n\t\"arrow-left\",\n\t\"arrow-right\",\n\t\"arrow-up\",\n\t\"bank\",\n\t\"bell\",\n\t\"bolt\",\n\t\"calendar\",\n\t\"card\",\n\t\"cart\",\n\t\"cash\",\n\t\"check\",\n\t\"chevron-down\",\n\t\"chevron-left\",\n\t\"chevron-right\",\n\t\"chevron-up\",\n\t\"clock\",\n\t\"close\",\n\t\"copy\",\n\t\"download\",\n\t\"edit\",\n\t\"error\",\n\t\"external-link\",\n\t\"eye\",\n\t\"eye-off\",\n\t\"file\",\n\t\"gift\",\n\t\"globe\",\n\t\"grid\",\n\t\"headphones\",\n\t\"heart\",\n\t\"help\",\n\t\"history\",\n\t\"home\",\n\t\"image\",\n\t\"info\",\n\t\"link\",\n\t\"list\",\n\t\"location\",\n\t\"lock\",\n\t\"logout\",\n\t\"mail\",\n\t\"microphone\",\n\t\"minus\",\n\t\"mobile\",\n\t\"more\",\n\t\"music\",\n\t\"phone\",\n\t\"playlist\",\n\t\"plus\",\n\t\"qr-code\",\n\t\"receipt\",\n\t\"refresh\",\n\t\"search\",\n\t\"send\",\n\t\"settings\",\n\t\"share\",\n\t\"star\",\n\t\"success\",\n\t\"ticket\",\n\t\"trash\",\n\t\"upload\",\n\t\"user\",\n\t\"users\",\n\t\"video\",\n\t\"wallet\",\n\t\"warning\",\n\t\"water\",\n\t\"wifi\"\n];\n//#endregion\n//#region src/view/components/carousel.ts\nconst Carousel = defineComponent({\n\tname: \"Carousel\",\n\tprops: {\n\t\tautoplay: \"boolean\",\n\t\tinterval: \"number\",\n\t\tloop: \"boolean\",\n\t\tindicator: [\"dots\", \"none\"],\n\t\tgap: SPACES,\n\t\teffect: [\"slide\", \"scale\"],\n\t\tindex: \"number\",\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/chip.ts\nconst Chip = defineComponent({\n\tname: \"Chip\",\n\tprops: {\n\t\tlabel: \"string\",\n\t\ticon: ICON_NAMES,\n\t\tselected: \"boolean\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/code-input.ts\nconst CodeInput = defineComponent({\n\tname: \"CodeInput\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlength: \"number\",\n\t\tlabel: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\tsecure: \"boolean\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\", \"complete\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/detail-row.ts\nconst DetailRow = defineComponent({\n\tname: \"DetailRow\",\n\tprops: {\n\t\tlabel: \"string\",\n\t\tvalue: \"string\",\n\t\ttone: TONES,\n\t\tweight: [\n\t\t\t\"regular\",\n\t\t\t\"medium\",\n\t\t\t\"bold\"\n\t\t],\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/divider.ts\nconst Divider = defineComponent({\n\tname: \"Divider\",\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/empty-state.ts\nconst EmptyState = defineComponent({\n\tname: \"EmptyState\",\n\tprops: {\n\t\ticon: ICON_NAMES,\n\t\ttitle: \"string\",\n\t\ttext: \"string\",\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/feedback.ts\nconst Spinner = defineComponent({\n\tname: \"Spinner\",\n\tprops: { size: SIZES },\n\tchildren: \"none\"\n});\nconst ProgressBar = defineComponent({\n\tname: \"ProgressBar\",\n\tprops: { value: \"number\" },\n\tchildren: \"none\"\n});\nconst Notice = defineComponent({\n\tname: \"Notice\",\n\tprops: {\n\t\ttone: STATUS_TONES,\n\t\ttitle: \"string\",\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"text\"\n});\nconst Badge = defineComponent({\n\tname: \"Badge\",\n\tprops: { tone: STATUS_TONES },\n\tchildren: \"text\"\n});\n//#endregion\n//#region src/view/components/footer.ts\nconst Footer = defineComponent({\n\tname: \"Footer\",\n\tprops: PADDING_PROPS,\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/grid.ts\nconst Grid = defineComponent({\n\tname: \"Grid\",\n\tprops: {\n\t\tcolumns: \"number\",\n\t\tgap: SPACES,\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"elements\"\n});\nconst GridItem = defineComponent({\n\tname: \"GridItem\",\n\tprops: {\n\t\tlabel: \"string\",\n\t\ticon: ICON_NAMES,\n\t\timage: \"string\",\n\t\tbadge: \"string\"\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/icon.ts\nconst Icon = defineComponent({\n\tname: \"Icon\",\n\tprops: {\n\t\tname: ICON_NAMES,\n\t\tsize: SIZES,\n\t\ttone: TONES\n\t},\n\tchildren: \"none\",\n\tinline: true\n});\n//#endregion\n//#region src/view/components/image.ts\nconst Image = defineComponent({\n\tname: \"Image\",\n\tprops: {\n\t\tsrc: \"string\",\n\t\talt: \"string\",\n\t\twidth: \"number\",\n\t\theight: \"number\",\n\t\tfit: [\"cover\", \"contain\"],\n\t\tshape: [\n\t\t\t\"rounded\",\n\t\t\t\"square\",\n\t\t\t\"circle\"\n\t\t],\n\t\taspect: ASPECTS\n\t},\n\tevents: [\"load\", \"error\"],\n\tchildren: \"none\",\n\toverrides: [{\n\t\tprop: \"aspect\",\n\t\tignores: \"height\",\n\t\tbecause: \"the aspect sets the height\"\n\t}]\n});\n//#endregion\n//#region src/view/components/input.ts\nconst Input = defineComponent({\n\tname: \"Input\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tplaceholder: \"string\",\n\t\tlabel: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\tprefix: \"string\",\n\t\tsuffix: \"string\",\n\t\ttype: [\n\t\t\t\"text\",\n\t\t\t\"number\",\n\t\t\t\"email\",\n\t\t\t\"phone\",\n\t\t\t\"password\"\n\t\t],\n\t\tmaxLength: \"number\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\", \"submit\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/link.ts\nconst Link = defineComponent({\n\tname: \"Link\",\n\tprops: {\n\t\thref: \"string\",\n\t\ttone: TONES\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"text\",\n\tinline: true\n});\n//#endregion\n//#region src/view/components/list.ts\nconst List = defineComponent({\n\tname: \"List\",\n\tprops: {\n\t\tsize: [\"sm\", \"md\"],\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"endReached\"],\n\tchildren: \"elements\"\n});\nconst ListItem = defineComponent({\n\tname: \"ListItem\",\n\tprops: {\n\t\ttitle: \"string\",\n\t\tsubtitle: \"string\",\n\t\tvalue: \"string\",\n\t\ticon: ICON_NAMES,\n\t\timage: \"string\",\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/overlays.ts\nconst Sheet = defineComponent({\n\tname: \"Sheet\",\n\tprops: {\n\t\topen: \"boolean\",\n\t\ttitle: \"string\",\n\t\tshowCloseIcon: \"boolean\",\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"close\"],\n\tchildren: \"elements\"\n});\nconst Toast = defineComponent({\n\tname: \"Toast\",\n\tprops: {\n\t\tmessage: \"string\",\n\t\ttone: STATUS_TONES,\n\t\tduration: \"number\"\n\t},\n\tevents: [\"hide\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/qr-code.ts\nconst QRCode = defineComponent({\n\tname: \"QRCode\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tsize: \"number\",\n\t\tlabel: \"string\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/select.ts\nconst Select = defineComponent({\n\tname: \"Select\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\",\n\t\tplaceholder: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\nconst Option = defineComponent({\n\tname: \"Option\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/scroll.ts\nconst Scroll = defineComponent({\n\tname: \"Scroll\",\n\tprops: {\n\t\tgap: SPACES,\n\t\tsnap: [\n\t\t\t\"none\",\n\t\t\t\"start\",\n\t\t\t\"center\"\n\t\t],\n\t\tindex: \"number\",\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/skeleton.ts\nconst Skeleton = defineComponent({\n\tname: \"Skeleton\",\n\tprops: {\n\t\tshape: [\n\t\t\t\"text\",\n\t\t\t\"circle\",\n\t\t\t\"box\"\n\t\t],\n\t\tlines: \"number\",\n\t\theight: \"number\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/tabs.ts\nconst Tabs = defineComponent({\n\tname: \"Tabs\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tvariant: [\"underline\", \"segmented\"],\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\nconst Tab = defineComponent({\n\tname: \"Tab\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\",\n\t\tbadge: \"number\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/text.ts\nconst Text = defineComponent({\n\tname: \"Text\",\n\tprops: {\n\t\tvariant: [\n\t\t\t\"title\",\n\t\t\t\"body\",\n\t\t\t\"caption\"\n\t\t],\n\t\ttone: TONES,\n\t\tweight: [\n\t\t\t\"regular\",\n\t\t\t\"medium\",\n\t\t\t\"bold\"\n\t\t],\n\t\talign: [\n\t\t\t\"start\",\n\t\t\t\"center\",\n\t\t\t\"end\"\n\t\t],\n\t\tmaxLines: \"number\",\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"text\",\n\tinline: true\n});\n//#endregion\n//#region src/view/components/text-area.ts\nconst TextArea = defineComponent({\n\tname: \"TextArea\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tplaceholder: \"string\",\n\t\tlabel: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\trows: \"number\",\n\t\tmaxLength: \"number\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/toggles.ts\nconst Switch = defineComponent({\n\tname: \"Switch\",\n\tprops: {\n\t\tchecked: \"boolean\",\n\t\tlabel: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"none\"\n});\nconst Checkbox = defineComponent({\n\tname: \"Checkbox\",\n\tprops: {\n\t\tchecked: \"boolean\",\n\t\tlabel: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"none\"\n});\nconst RadioGroup = defineComponent({\n\tname: \"RadioGroup\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\nconst Radio = defineComponent({\n\tname: \"Radio\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/view.ts\nconst View = defineComponent({\n\tname: \"View\",\n\tprops: {\n\t\tgap: SPACES,\n\t\tdirection: [\"column\", \"row\"],\n\t\talign: [\n\t\t\t\"stretch\",\n\t\t\t\"start\",\n\t\t\t\"center\",\n\t\t\t\"end\"\n\t\t],\n\t\tjustify: [\n\t\t\t\"start\",\n\t\t\t\"center\",\n\t\t\t\"end\",\n\t\t\t\"between\"\n\t\t],\n\t\twrap: \"boolean\",\n\t\tgrow: \"boolean\",\n\t\t...PADDING_PROPS,\n\t\tvariant: [\"plain\", \"card\"]\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/index.ts\nconst builtinComponents = {\n\tAmountInput,\n\tBadge,\n\tButton,\n\tCarousel,\n\tCheckbox,\n\tChip,\n\tCodeInput,\n\tDetailRow,\n\tDivider,\n\tEmptyState,\n\tFooter,\n\tGrid,\n\tGridItem,\n\tIcon,\n\tImage,\n\tInput,\n\tLink,\n\tList,\n\tListItem,\n\tNotice,\n\tOption,\n\tProgressBar,\n\tQRCode,\n\tRadio,\n\tRadioGroup,\n\tScroll,\n\tSelect,\n\tSheet,\n\tSkeleton,\n\tSpinner,\n\tSwitch,\n\tTab,\n\tTabs,\n\tText,\n\tTextArea,\n\tToast,\n\tView\n};\nconst builtinRegistry = componentRegistry(Object.values(builtinComponents));\n//#endregion\n//#region src/source/location.ts\nfunction createLocator(source) {\n\tconst lineStarts = [0];\n\tfor (let index = 0; index < source.length; index++) if (source[index] === \"\\n\") lineStarts.push(index + 1);\n\treturn (offset) => {\n\t\tlet low = 0;\n\t\tlet high = lineStarts.length - 1;\n\t\twhile (low < high) {\n\t\t\tconst middle = Math.floor((low + high + 1) / 2);\n\t\t\tif (lineStarts[middle] <= offset) low = middle;\n\t\t\telse high = middle - 1;\n\t\t}\n\t\treturn {\n\t\t\tline: low + 1,\n\t\t\tcolumn: offset - lineStarts[low] + 1,\n\t\t\toffset\n\t\t};\n\t};\n}\nfunction locationAt(source, offset) {\n\treturn createLocator(source)(offset);\n}\nfunction locatedMessage(message, file, location) {\n\tconst where = [\n\t\tfile,\n\t\tlocation?.line,\n\t\tlocation?.column\n\t].filter((part) => part !== void 0).join(\":\");\n\treturn where ? `${where}: ${message}` : message;\n}\n//#endregion\n//#region src/source/error.ts\nvar SourceError = class extends Error {\n\treason;\n\tfile;\n\tloc;\n\tconstructor(reason, file, location) {\n\t\tsuper(locatedMessage(reason, file, location));\n\t\tthis.reason = reason;\n\t\tthis.file = file;\n\t\tthis.loc = location;\n\t}\n};\n//#endregion\n//#region src/event/emitter.ts\nvar EventEmitter = class {\n\t#listeners = /* @__PURE__ */ new Map();\n\ton(name, listener) {\n\t\tconst listeners = this.#listeners.get(name) ?? /* @__PURE__ */ new Set();\n\t\tthis.#listeners.set(name, listeners);\n\t\tlisteners.add(listener);\n\t\treturn () => listeners.delete(listener);\n\t}\n\temit(name, ...args) {\n\t\tthis.#listeners.get(name)?.forEach((listener) => listener(...args));\n\t}\n};\n//#endregion\n//#region src/event/core.ts\nfunction createEvent(type, detail = {}, data = {}) {\n\treturn {\n\t\ttype,\n\t\tdetail,\n\t\tdata\n\t};\n}\n//#endregion\n//#region src/host/host.ts\nfunction hostTransport() {\n\tconst transport = globalThis.__hostTransport;\n\tif (!transport) throw new Error(\"No Dot host found: `globalThis.__hostTransport` is not set. Run the dot in the Dash app, or in the simulator with `dotctl dev`.\");\n\treturn transport;\n}\n//#endregion\n//#region src/host/context.ts\nconst DEFAULT_SYSTEM_CONTEXT = {\n\tscheme: \"light\",\n\tappState: \"active\"\n};\n//#endregion\n//#region src/host/calls.ts\nvar HostError = class extends Error {\n\tname = \"HostError\";\n\tcode;\n\tconstructor(code, message) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t}\n};\nlet connectedCaller = null;\nfunction connectHost(caller) {\n\tconnectedCaller = caller;\n}\nfunction callHost(method, params, options = {}) {\n\tif (!connectedCaller) {\n\t\tconst error = new HostError(\"unsupported\", `Can't run \"${method}\" here: call Dash from the dot's logic`);\n\t\treturn createHostRequest(Promise.reject(error));\n\t}\n\treturn connectedCaller(method, params, options);\n}\nfunction createHostRequest(promise, cancel = () => {}) {\n\tconst request = promise;\n\trequest.cancel = cancel;\n\treturn request;\n}\n//#endregion\n//#region src/host/permissions.ts\nconst PERMISSIONS = [\"account\"];\nfunction isPermission(value) {\n\treturn PERMISSIONS.includes(value);\n}\n//#endregion\n//#region src/host/files.ts\nconst DOT_FILE_PATH_MAX_LENGTH = 512;\nconst MAX_NAME_LENGTH = 255;\nfunction dotFilePathProblem(path, { allowRoot = false } = {}) {\n\tif (path === \"\") return allowRoot ? null : \"A path is needed, such as \\\"receipts/42.pdf\\\"\";\n\tif (path.length > 512) return `\"${path.slice(0, 40)}…\" is longer than 512 characters`;\n\tif (path.startsWith(\"/\")) return `\"${path}\" starts with \"/\". Start paths without it, such as \"receipts/42.pdf\"`;\n\tif ([...path].some((char) => char === \"\\\\\" || char.charCodeAt(0) < 32)) return `\"${path}\" has a backslash or another character paths can't use`;\n\tfor (const name of path.split(\"/\")) {\n\t\tif (name === \"\" || name === \".\" || name === \"..\") return `\"${path}\" has an empty, \".\" or \"..\" part. Name each folder, such as \"receipts/42.pdf\"`;\n\t\tif (name.length > MAX_NAME_LENGTH) return `\"${path}\" has a name longer than ${MAX_NAME_LENGTH} characters`;\n\t}\n\treturn null;\n}\n//#endregion\n//#region src/host/network.ts\nconst LABEL = \"[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\";\nconst NETWORK_HOST_PATTERN = new RegExp(`^(?:\\\\*\\\\.${LABEL}(?:\\\\.${LABEL})+|${LABEL}(?:\\\\.${LABEL})*)$`);\nconst NETWORK_HOST_MAX_LENGTH = 253;\nfunction isNetworkHost(value) {\n\treturn value.length <= 253 && NETWORK_HOST_PATTERN.test(value);\n}\nfunction allowsHost(hosts, host) {\n\tconst name = host.toLowerCase().replace(/\\.$/, \"\");\n\treturn hosts.some((pattern) => pattern.startsWith(\"*.\") ? name.endsWith(pattern.slice(1)) : name === pattern);\n}\n//#endregion\n//#region src/version/semantic-version.ts\nconst SEMVER_PATTERN = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\nfunction isSemanticVersion(value) {\n\treturn typeof value === \"string\" && SEMVER_PATTERN.test(value);\n}\nfunction majorVersion(version) {\n\treturn parseVersion(version).major;\n}\nfunction isVersionAtLeast(version, minimum) {\n\treturn compareVersions(version, minimum) >= 0;\n}\nfunction compareVersions(left, right) {\n\tconst leftVersion = parseVersion(left);\n\tconst rightVersion = parseVersion(right);\n\tconst differences = [\n\t\tleftVersion.major - rightVersion.major,\n\t\tleftVersion.minor - rightVersion.minor,\n\t\tleftVersion.patch - rightVersion.patch\n\t];\n\tfor (const difference of differences) if (difference !== 0) return difference;\n\treturn comparePrereleases(leftVersion.prerelease, rightVersion.prerelease);\n}\nfunction parseVersion(version) {\n\tconst match = SEMVER_PATTERN.exec(version);\n\tif (!match) throw new Error(`\"${version}\" is not a semantic version`);\n\tconst [, major, minor, patch, prerelease] = match;\n\treturn {\n\t\tmajor: Number(major),\n\t\tminor: Number(minor),\n\t\tpatch: Number(patch),\n\t\tprerelease: prerelease === void 0 ? [] : prerelease.split(\".\")\n\t};\n}\nfunction comparePrereleases(left, right) {\n\tif (left.length === 0 || right.length === 0) return right.length - left.length;\n\tconst shared = Math.min(left.length, right.length);\n\tfor (let index = 0; index < shared; index++) {\n\t\tconst order = compareIdentifiers(left[index], right[index]);\n\t\tif (order !== 0) return order;\n\t}\n\treturn left.length - right.length;\n}\nfunction compareIdentifiers(left, right) {\n\tconst leftIsNumber = /^\\d+$/.test(left);\n\tconst rightIsNumber = /^\\d+$/.test(right);\n\tif (leftIsNumber && rightIsNumber) return Number(left) - Number(right);\n\tif (leftIsNumber) return -1;\n\tif (rightIsNumber) return 1;\n\tif (left < right) return -1;\n\tif (left > right) return 1;\n\treturn 0;\n}\n//#endregion\n//#region src/host/react.ts\nconst REACT_HOST_PATH = \"/__dot/react/\";\nconst REACT_HOST_MODULES = {\n\treact: \"react.js\",\n\t\"react/jsx-runtime\": \"react-jsx-runtime.js\",\n\t\"react-dom\": \"react-dom.js\",\n\t\"react-dom/client\": \"react-dom-client.js\"\n};\nfunction reactHostUrl(dotReactVersion, file) {\n\treturn `${REACT_HOST_PATH}${majorVersion(dotReactVersion)}/${file}`;\n}\nfunction isReactCompatible(hostVersion, dotVersion) {\n\treturn majorVersion(hostVersion) === majorVersion(dotVersion) && isVersionAtLeast(hostVersion, dotVersion);\n}\nfunction newestReactOfMajor(versions, major) {\n\treturn versions.filter((version) => majorVersion(version) === major).sort(compareVersions).at(-1);\n}\n//#endregion\n//#region src/protocol/transport.ts\nfunction createAdaptorTransport(adapter) {\n\treturn {\n\t\tpost: (message) => adapter.postMessage(message),\n\t\tlisten(listener) {\n\t\t\tconst onMessage = (event) => listener(event.data);\n\t\t\tadapter.addEventListener(\"message\", onMessage);\n\t\t\treturn () => adapter.removeEventListener(\"message\", onMessage);\n\t\t}\n\t};\n}\nfunction createTransportPair() {\n\tconst firstListeners = /* @__PURE__ */ new Set();\n\tconst secondListeners = /* @__PURE__ */ new Set();\n\tconst createSide = (ownListeners, otherListeners) => ({\n\t\tpost: (message) => {\n\t\t\tconst copy = JSON.parse(JSON.stringify(message));\n\t\t\totherListeners.forEach((listener) => listener(copy));\n\t\t},\n\t\tlisten(listener) {\n\t\t\townListeners.add(listener);\n\t\t\treturn () => ownListeners.delete(listener);\n\t\t}\n\t});\n\treturn [createSide(firstListeners, secondListeners), createSide(secondListeners, firstListeners)];\n}\nconst PAGE_HOOKS = Object.keys({\n\tonLoad: true,\n\tonShow: true,\n\tonHide: true,\n\tonUnload: true\n});\n//#endregion\n//#region src/page/navigation.ts\nconst MAX_STACK_DEPTH = 8;\nconst PAGE_ID = /^[A-Za-z0-9_-]+(?:\\/[A-Za-z0-9_-]+)*$/;\nfunction isPageId(value) {\n\treturn PAGE_ID.test(value);\n}\nvar NavigationStack = class {\n\tlimit;\n\t#pages = [];\n\t#nextInstanceId = 1;\n\tconstructor(limit = 8) {\n\t\tthis.limit = limit;\n\t}\n\tget pages() {\n\t\treturn this.#pages;\n\t}\n\tget top() {\n\t\treturn this.#pages.at(-1);\n\t}\n\tapply(navigation) {\n\t\tswitch (navigation.action) {\n\t\t\tcase \"push\":\n\t\t\t\tif (this.#pages.length >= this.limit) return false;\n\t\t\t\tbreak;\n\t\t\tcase \"replace\":\n\t\t\t\tthis.#pages.pop();\n\t\t\t\tbreak;\n\t\t\tcase \"reset\":\n\t\t\t\tthis.#pages = [];\n\t\t\t\tbreak;\n\t\t\tcase \"back\": {\n\t\t\t\tconst count = Math.min(navigation.delta, this.#pages.length - 1);\n\t\t\t\tif (count < 1) return false;\n\t\t\t\tthis.#pages = this.#pages.slice(0, -count);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tconst { page, options } = navigation;\n\t\tthis.#pages = [...this.#pages, {\n\t\t\tinstanceId: this.#nextInstanceId++,\n\t\t\tpage,\n\t\t\toptions\n\t\t}];\n\t\treturn true;\n\t}\n};\n//#endregion\n//#region src/page/state.ts\nfunction applyChanges(state, changes) {\n\tconst next = { ...state };\n\tfor (const [key, value] of Object.entries(changes)) if (value !== void 0) next[key] = value;\n\treturn next;\n}\n//#endregion\n//#region src/page/bars.ts\nconst HEX_COLOR = /^#[0-9a-fA-F]{6}$/;\nfunction checkNavigationBar(options) {\n\tconst { title, hidden, backgroundColor, textColor } = options;\n\tif (title !== void 0 && typeof title !== \"string\") throw new TypeError(\"The navigation bar's title must be text\");\n\tif (hidden !== void 0 && typeof hidden !== \"boolean\") throw new TypeError(\"The navigation bar's `hidden` must be true or false\");\n\tfor (const [name, color] of Object.entries({\n\t\tbackgroundColor,\n\t\ttextColor\n\t})) if (color !== void 0 && (typeof color !== \"string\" || !HEX_COLOR.test(color))) throw new TypeError(`The navigation bar's ${name} must be a color such as \"#1A73E8\"`);\n}\nfunction checkTabBar(options) {\n\tif (options.hidden !== void 0 && typeof options.hidden !== \"boolean\") throw new TypeError(\"The tab bar's `hidden` must be true or false\");\n}\nfunction checkConfigs(configs) {\n\tcheckNavigationBar(configs.navigationBar ?? {});\n\tcheckTabBar(configs.tabBar ?? {});\n}\nfunction mergeConfigs(...configs) {\n\tconst bars = {\n\t\tnavigationBar: {},\n\t\ttabBar: {}\n\t};\n\tfor (const config of configs) {\n\t\tbars.navigationBar = {\n\t\t\t...bars.navigationBar,\n\t\t\t...config?.navigationBar\n\t\t};\n\t\tbars.tabBar = {\n\t\t\t...bars.tabBar,\n\t\t\t...config?.tabBar\n\t\t};\n\t}\n\treturn bars;\n}\n//#endregion\n//#region src/messageChannel.ts\nvar MessageChannel = class {\n\t#transport;\n\t#handlers = /* @__PURE__ */ new Map();\n\tconstructor(transport) {\n\t\tthis.#transport = transport;\n\t}\n\tsend(type, payload) {\n\t\tthis.#transport.post({\n\t\t\ttype,\n\t\t\tpayload\n\t\t});\n\t}\n\thandle(type, handler) {\n\t\tconst previous = this.#handlers.get(type);\n\t\tthis.#handlers.set(type, handler);\n\t\treturn previous;\n\t}\n\tlisten(onError) {\n\t\treturn this.#transport.listen((rawMessage) => {\n\t\t\tconst message = rawMessage;\n\t\t\tconst handler = this.#handlers.get(message.type);\n\t\t\tif (!handler) {\n\t\t\t\tonError(/* @__PURE__ */ new Error(`No handler for message \"${message.type}\"`), message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\thandler(message.payload);\n\t\t\t} catch (error) {\n\t\t\t\tonError(error, message);\n\t\t\t}\n\t\t});\n\t}\n};\n//#endregion\nexport { ASPECTS, AmountInput, Badge, Button, Carousel, Checkbox, Chip, CodeInput, DEFAULT_SYSTEM_CONTEXT, DOT_FILE_PATH_MAX_LENGTH, DetailRow, Divider, EmptyState, EventEmitter, Footer, Grid, GridItem, HostError, ICON_NAMES, Icon, Image, Input, Link, List, ListItem, MAX_STACK_DEPTH, MessageChannel, NETWORK_HOST_MAX_LENGTH, NETWORK_HOST_PATTERN, NavigationStack, Notice, Option, PADDING_PROPS, PAGE_HOOKS, PERMISSIONS, ProgressBar, QRCode, REACT_HOST_MODULES, REACT_HOST_PATH, Radio, RadioGroup, SEMVER_PATTERN, SIZES, SPACES, STATUS_TONES, Scroll, Select, Sheet, Skeleton, SourceError, Spinner, Switch, TONES, Tab, Tabs, Text, TextArea, Toast, View, allowsHost, applyChanges, builtinComponents, builtinRegistry, callHost, checkConfigs, checkNavigationBar, checkTabBar, compareVersions, componentRegistry, connectHost, createAdaptorTransport, createEvent, createHostRequest, createLocator, createTransportPair, defineComponent, dotFilePathProblem, eventName, eventProp, hostTransport, isEventProp, isNetworkHost, isPageId, isPermission, isReactCompatible, isSemanticVersion, isVersionAtLeast, locatedMessage, locationAt, majorVersion, mergeConfigs, newestReactOfMajor, reactHostUrl, toList, toText };\n\n//# sourceMappingURL=index.js.map","export const CLIENT_PATH = '/__dot/';\nexport const EVENTS_PATH = `${CLIENT_PATH}events`;\nexport const HTTP_PATH = `${CLIENT_PATH}network/http/`;\nexport const FILE_PATH = `${CLIENT_PATH}storage/file/`;\nexport const CACHE_PATH = `${CLIENT_PATH}storage/cache/`;\nexport const SECRET_PATH = `${CLIENT_PATH}storage/secret/`;\nexport const TEMPORARY_FILES_PATH = `${CLIENT_PATH}files/`;\n\nexport const DOT_PATH = '/dot/';\nexport const WEBVIEW_URL = `${DOT_PATH}ui/index.html`;\nexport const WEBVIEW_SCRIPT_URL = `${DOT_PATH}ui/dot.js`;\nexport const SERVICE_URL = `${DOT_PATH}logic/dot.js`;\nexport const MANIFEST_URL = `${DOT_PATH}manifest.json`;\n","// What the simulator page posts to the dot's worker and web view to run its new build in place.\nexport interface HotReload {\n readonly dotHotReload: number;\n}\n\nexport function hotReloadIn(data: unknown): number | undefined {\n const reload = (data as Partial<HotReload> | null)?.dotHotReload;\n return typeof reload === 'number' ? reload : undefined;\n}\n","import type { Transport } from '@monimesl/dot-core';\n\n// Native bridges only carry strings. Encoding to JSON here makes state that a device can't carry\n// fail in the simulator too.\ninterface Wire {\n readonly dot: string;\n}\n\nfunction isWire(data: unknown): data is Wire {\n return typeof (data as Partial<Wire> | null)?.dot === 'string';\n}\n\nexport function wireTransport(channel: Transport): Transport {\n return {\n post: (message) => channel.post({ dot: JSON.stringify(message) } satisfies Wire),\n listen: (listener) =>\n channel.listen((data) => {\n if (isWire(data)) {\n listener(JSON.parse(data.dot));\n }\n }),\n };\n}\n\n// The simulator page and the webview's iframe, each accepting messages only from the other.\nexport function windowChannel(other: () => Window | null): Transport {\n return {\n post: (message) => other()?.postMessage(message, location.origin),\n listen(listener) {\n const onMessage = (event: MessageEvent) => {\n if (event.source === other()) {\n listener(event.data);\n }\n };\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n },\n };\n}\n","import type { TransportAdapter } from '@monimesl/dot-core';\nimport { createAdaptorTransport } from '@monimesl/dot-core';\n\nimport { SERVICE_URL } from '../paths';\nimport { hotReloadIn } from './hot-reload';\nimport { wireTransport } from './wire';\n\ninterface WorkerScope extends TransportAdapter {\n importScripts(...urls: string[]): void;\n}\n\nconst scope = globalThis as unknown as WorkerScope;\n\nglobalThis.__hostTransport = wireTransport(createAdaptorTransport(scope));\n\nscope.importScripts(SERVICE_URL);\n\n// The new build hands its pages to the service already running here.\nscope.addEventListener('message', ({ data }) => {\n const reload = hotReloadIn(data);\n if (reload !== undefined) {\n scope.importScripts(`${SERVICE_URL}?hot=${reload}`);\n }\n});\n"],"mappings":";;CACA,SAAS,gBAAgB,UAAU;EAClC,OAAO;GACN,OAAO,CAAC;GACR,QAAQ,CAAC;GACT,GAAG;EACJ;CACD;CAYA,SAAS,kBAAkB,WAAW;EACrC,MAAM,WAAW,CAAC;EAClB,KAAK,MAAM,YAAY,WAAW;GACjC,IAAI,SAAS,QAAQ,UAAU,MAAM,IAAI,MAAM,cAAc,SAAS,KAAK,mBAAmB;GAC9F,SAAS,SAAS,QAAQ;EAC3B;EACA,OAAO;CACR;CAoBA,MAAM,cAAc,gBAAgB;EACnC,MAAM;EACN,OAAO;GACN,OAAO;GACP,UAAU;GACV,YAAY;GACZ,MAAM,CAAC,SAAS,OAAO;GACvB,OAAO;GACP,aAAa;GACb,MAAM;GACN,OAAO;GACP,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CAGD,MAAM,SAAS,gBAAgB;EAC9B,MAAM;EACN,OAAO;GACN,SAAS,CAAC,WAAW,WAAW;GAChC,UAAU;GACV,SAAS;EACV;EACA,QAAQ,CAAC,OAAO;EAChB,UAAU;CACX,CAAC;CAGD,MAAM,QAAQ;EACb;EACA;EACA;CACD;CACA,MAAM,SAAS;EACd;EACA;EACA;EACA;CACD;CACA,MAAM,gBAAgB;EACrB,SAAS;EACT,YAAY;EACZ,cAAc;EACd,YAAY;EACZ,eAAe;CAChB;CACA,MAAM,UAAU;EACf;EACA;EACA;EACA;EACA;EACA;EACA;CACD;CACA,MAAM,QAAQ;EACb;EACA;EACA;EACA;EACA;EACA;CACD;CACA,MAAM,eAAe;EACpB;EACA;EACA;EACA;EACA;CACD;CACA,MAAM,aAAa;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA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GACD;GACA,MAAM;GACN,QAAQ;IACP;IACA;IACA;GACD;GACA,OAAO;IACN;IACA;IACA;GACD;GACA,UAAU;GACV,GAAG;EACJ;EACA,UAAU;EACV,QAAQ;CACT,CAAC;CAGD,MAAM,WAAW,gBAAgB;EAChC,MAAM;EACN,OAAO;GACN,OAAO;GACP,aAAa;GACb,OAAO;GACP,MAAM;GACN,OAAO;GACP,MAAM;GACN,WAAW;GACX,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CAGD,MAAM,SAAS,gBAAgB;EAC9B,MAAM;EACN,OAAO;GACN,SAAS;GACT,OAAO;GACP,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CACD,MAAM,WAAW,gBAAgB;EAChC,MAAM;EACN,OAAO;GACN,SAAS;GACT,OAAO;GACP,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CACD,MAAM,aAAa,gBAAgB;EAClC,MAAM;EACN,OAAO;GACN,OAAO;GACP,OAAO;GACP,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CAuCD,MAAM,oBAAoB;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OA9Da,gBAAgB;GAC7B,MAAM;GACN,OAAO;IACN,OAAO;IACP,OAAO;IACP,UAAU;GACX;GACA,UAAU;EACX,CAsDC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAhEY,gBAAgB;GAC5B,MAAM;GACN,OAAO;IACN,KAAK;IACL,WAAW,CAAC,UAAU,KAAK;IAC3B,OAAO;KACN;KACA;KACA;KACA;IACD;IACA,SAAS;KACR;KACA;KACA;KACA;IACD;IACA,MAAM;IACN,MAAM;IACN,GAAG;IACH,SAAS,CAAC,SAAS,MAAM;GAC1B;GACA,QAAQ,CAAC,KAAK;GACd,UAAU;EACX,CAwCC;CACD;CACwB,kBAAkB,OAAO,OAAO,iBAAiB,CAAC;CAkI1E,MAAM,QAAQ;CACe,IAAI,OAAO,aAAa,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ,MAAM,KAAK;CAkFvG,SAAS,uBAAuB,SAAS;EACxC,OAAO;GACN,OAAO,YAAY,QAAQ,YAAY,OAAO;GAC9C,OAAO,UAAU;IAChB,MAAM,aAAa,UAAU,SAAS,MAAM,IAAI;IAChD,QAAQ,iBAAiB,WAAW,SAAS;IAC7C,aAAa,QAAQ,oBAAoB,WAAW,SAAS;GAC9D;EACD;CACD;CCj4BA,MAAa,cAAc;;;CCN3B,SAAgB,YAAY,MAAmC;EAC7D,MAAM,SAAU,MAAoC;EACpD,OAAO,OAAO,WAAW,WAAW,SAAS,KAAA;CAC/C;;;CCAA,SAAS,OAAO,MAA6B;EAC3C,OAAO,OAAQ,MAA+B,QAAQ;CACxD;CAEA,SAAgB,cAAc,SAA+B;EAC3D,OAAO;GACL,OAAO,YAAY,QAAQ,KAAK,EAAE,KAAK,KAAK,UAAU,OAAO,EAAE,CAAgB;GAC/E,SAAS,aACP,QAAQ,QAAQ,SAAS;IACvB,IAAI,OAAO,IAAI,GACb,SAAS,KAAK,MAAM,KAAK,GAAG,CAAC;GAEjC,CAAC;EACL;CACF;;;CCXA,MAAM,QAAQ;CAEd,WAAW,kBAAkB,cAAc,uBAAuB,KAAK,CAAC;CAExE,MAAM,cAAc,WAAW;CAG/B,MAAM,iBAAiB,YAAY,EAAE,WAAW;EAC9C,MAAM,SAAS,YAAY,IAAI;EAC/B,IAAI,WAAW,KAAA,GACb,MAAM,cAAc,GAAG,YAAY,OAAO,QAAQ;CAEtD,CAAC"}
|
|
1
|
+
{"version":3,"file":"service-bridge.js","names":[],"sources":["../../../../core/dist/index.js","../../src/paths.ts","../../src/client/hot-reload.ts","../../src/client/wire.ts","../../src/client/service-bridge.ts"],"sourcesContent":["//#region src/view/component.ts\nfunction defineComponent(manifest) {\n\treturn {\n\t\tprops: {},\n\t\tevents: [],\n\t\t...manifest\n\t};\n}\nfunction eventProp(event) {\n\treturn `on${event.charAt(0).toUpperCase()}${event.slice(1)}`;\n}\nfunction isEventProp(name) {\n\tconst letterAfterOn = name.charAt(2);\n\treturn name.startsWith(\"on\") && letterAfterOn >= \"A\" && letterAfterOn <= \"Z\";\n}\nfunction eventName(prop) {\n\tconst name = prop.slice(2);\n\treturn name.charAt(0).toLowerCase() + name.slice(1);\n}\nfunction componentRegistry(manifests) {\n\tconst registry = {};\n\tfor (const manifest of manifests) {\n\t\tif (manifest.name in registry) throw new Error(`Component <${manifest.name}> is defined twice`);\n\t\tregistry[manifest.name] = manifest;\n\t}\n\treturn registry;\n}\n//#endregion\n//#region src/view/values.ts\nfunction toText(value) {\n\tswitch (typeof value) {\n\t\tcase \"string\": return value;\n\t\tcase \"number\":\n\t\tcase \"boolean\":\n\t\tcase \"bigint\": return String(value);\n\t\tcase \"object\": return value === null ? \"\" : JSON.stringify(value);\n\t\tdefault: return \"\";\n\t}\n}\nfunction toList(value) {\n\tif (Array.isArray(value)) return value;\n\tif (typeof value === \"object\" && value !== null && Symbol.iterator in value) return Array.from(value);\n\treturn [];\n}\n//#endregion\n//#region src/view/components/amount-input.ts\nconst AmountInput = defineComponent({\n\tname: \"AmountInput\",\n\tprops: {\n\t\tvalue: \"number\",\n\t\tcurrency: \"string\",\n\t\tminorUnits: \"number\",\n\t\tunit: [\"minor\", \"major\"],\n\t\tlabel: \"string\",\n\t\tplaceholder: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/button.ts\nconst Button = defineComponent({\n\tname: \"Button\",\n\tprops: {\n\t\tvariant: [\"primary\", \"secondary\"],\n\t\tdisabled: \"boolean\",\n\t\tloading: \"boolean\"\n\t},\n\tevents: [\"click\"],\n\tchildren: \"text\"\n});\n//#endregion\n//#region src/view/components/options.ts\nconst SIZES = [\n\t\"small\",\n\t\"medium\",\n\t\"large\"\n];\nconst SPACES = [\n\t\"none\",\n\t\"small\",\n\t\"medium\",\n\t\"large\"\n];\nconst PADDING_PROPS = {\n\tpadding: SPACES,\n\tpaddingTop: SPACES,\n\tpaddingStart: SPACES,\n\tpaddingEnd: SPACES,\n\tpaddingBottom: SPACES\n};\nconst ASPECTS = [\n\t\"1:1\",\n\t\"4:3\",\n\t\"3:2\",\n\t\"16:9\",\n\t\"3:4\",\n\t\"2:3\",\n\t\"9:16\"\n];\nconst TONES = [\n\t\"default\",\n\t\"muted\",\n\t\"info\",\n\t\"success\",\n\t\"warning\",\n\t\"danger\"\n];\nconst STATUS_TONES = [\n\t\"default\",\n\t\"info\",\n\t\"success\",\n\t\"warning\",\n\t\"danger\"\n];\nconst ICON_NAMES = [\n\t\"arrow-down\",\n\t\"arrow-left\",\n\t\"arrow-right\",\n\t\"arrow-up\",\n\t\"bank\",\n\t\"bell\",\n\t\"bolt\",\n\t\"calendar\",\n\t\"card\",\n\t\"cart\",\n\t\"cash\",\n\t\"check\",\n\t\"chevron-down\",\n\t\"chevron-left\",\n\t\"chevron-right\",\n\t\"chevron-up\",\n\t\"clock\",\n\t\"close\",\n\t\"copy\",\n\t\"download\",\n\t\"edit\",\n\t\"error\",\n\t\"external-link\",\n\t\"eye\",\n\t\"eye-off\",\n\t\"file\",\n\t\"gift\",\n\t\"globe\",\n\t\"grid\",\n\t\"headphones\",\n\t\"heart\",\n\t\"help\",\n\t\"history\",\n\t\"home\",\n\t\"image\",\n\t\"info\",\n\t\"link\",\n\t\"list\",\n\t\"location\",\n\t\"lock\",\n\t\"logout\",\n\t\"mail\",\n\t\"microphone\",\n\t\"minus\",\n\t\"mobile\",\n\t\"more\",\n\t\"music\",\n\t\"phone\",\n\t\"playlist\",\n\t\"plus\",\n\t\"qr-code\",\n\t\"receipt\",\n\t\"refresh\",\n\t\"search\",\n\t\"send\",\n\t\"settings\",\n\t\"share\",\n\t\"star\",\n\t\"success\",\n\t\"ticket\",\n\t\"trash\",\n\t\"upload\",\n\t\"user\",\n\t\"users\",\n\t\"video\",\n\t\"wallet\",\n\t\"warning\",\n\t\"water\",\n\t\"wifi\"\n];\n//#endregion\n//#region src/view/components/carousel.ts\nconst Carousel = defineComponent({\n\tname: \"Carousel\",\n\tprops: {\n\t\tautoplay: \"boolean\",\n\t\tinterval: \"number\",\n\t\tloop: \"boolean\",\n\t\tindicator: [\"dots\", \"none\"],\n\t\tgap: SPACES,\n\t\teffect: [\"slide\", \"scale\"],\n\t\tindex: \"number\",\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/chip.ts\nconst Chip = defineComponent({\n\tname: \"Chip\",\n\tprops: {\n\t\tlabel: \"string\",\n\t\ticon: ICON_NAMES,\n\t\tselected: \"boolean\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/code-input.ts\nconst CodeInput = defineComponent({\n\tname: \"CodeInput\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlength: \"number\",\n\t\tlabel: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\tsecure: \"boolean\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\", \"complete\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/detail-row.ts\nconst DetailRow = defineComponent({\n\tname: \"DetailRow\",\n\tprops: {\n\t\tlabel: \"string\",\n\t\tvalue: \"string\",\n\t\ttone: TONES,\n\t\tweight: [\n\t\t\t\"regular\",\n\t\t\t\"medium\",\n\t\t\t\"bold\"\n\t\t],\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/divider.ts\nconst Divider = defineComponent({\n\tname: \"Divider\",\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/empty-state.ts\nconst EmptyState = defineComponent({\n\tname: \"EmptyState\",\n\tprops: {\n\t\ticon: ICON_NAMES,\n\t\ttitle: \"string\",\n\t\ttext: \"string\",\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/feedback.ts\nconst Spinner = defineComponent({\n\tname: \"Spinner\",\n\tprops: { size: SIZES },\n\tchildren: \"none\"\n});\nconst ProgressBar = defineComponent({\n\tname: \"ProgressBar\",\n\tprops: { value: \"number\" },\n\tchildren: \"none\"\n});\nconst Notice = defineComponent({\n\tname: \"Notice\",\n\tprops: {\n\t\ttone: STATUS_TONES,\n\t\ttitle: \"string\",\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"text\"\n});\nconst Badge = defineComponent({\n\tname: \"Badge\",\n\tprops: { tone: STATUS_TONES },\n\tchildren: \"text\"\n});\n//#endregion\n//#region src/view/components/footer.ts\nconst Footer = defineComponent({\n\tname: \"Footer\",\n\tprops: PADDING_PROPS,\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/grid.ts\nconst Grid = defineComponent({\n\tname: \"Grid\",\n\tprops: {\n\t\tcolumns: \"number\",\n\t\tgap: SPACES,\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"elements\"\n});\nconst GridItem = defineComponent({\n\tname: \"GridItem\",\n\tprops: {\n\t\tlabel: \"string\",\n\t\ticon: ICON_NAMES,\n\t\timage: \"string\",\n\t\tbadge: \"string\"\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/icon.ts\nconst Icon = defineComponent({\n\tname: \"Icon\",\n\tprops: {\n\t\tname: ICON_NAMES,\n\t\tsize: SIZES,\n\t\ttone: TONES\n\t},\n\tchildren: \"none\",\n\tinline: true\n});\n//#endregion\n//#region src/view/components/image.ts\nconst Image = defineComponent({\n\tname: \"Image\",\n\tprops: {\n\t\tsrc: \"string\",\n\t\talt: \"string\",\n\t\twidth: \"number\",\n\t\theight: \"number\",\n\t\tfit: [\"cover\", \"contain\"],\n\t\tshape: [\n\t\t\t\"rounded\",\n\t\t\t\"square\",\n\t\t\t\"circle\"\n\t\t],\n\t\taspect: ASPECTS\n\t},\n\tevents: [\"load\", \"error\"],\n\tchildren: \"none\",\n\toverrides: [{\n\t\tprop: \"aspect\",\n\t\tignores: \"height\",\n\t\tbecause: \"the aspect sets the height\"\n\t}]\n});\n//#endregion\n//#region src/view/components/input.ts\nconst Input = defineComponent({\n\tname: \"Input\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tplaceholder: \"string\",\n\t\tlabel: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\tprefix: \"string\",\n\t\tsuffix: \"string\",\n\t\ttype: [\n\t\t\t\"text\",\n\t\t\t\"number\",\n\t\t\t\"email\",\n\t\t\t\"phone\",\n\t\t\t\"password\"\n\t\t],\n\t\tmaxLength: \"number\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\", \"submit\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/link.ts\nconst Link = defineComponent({\n\tname: \"Link\",\n\tprops: {\n\t\thref: \"string\",\n\t\ttone: TONES\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"text\",\n\tinline: true\n});\n//#endregion\n//#region src/view/components/list.ts\nconst List = defineComponent({\n\tname: \"List\",\n\tprops: {\n\t\tsize: [\"sm\", \"md\"],\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"endReached\"],\n\tchildren: \"elements\"\n});\nconst ListItem = defineComponent({\n\tname: \"ListItem\",\n\tprops: {\n\t\ttitle: \"string\",\n\t\tsubtitle: \"string\",\n\t\tvalue: \"string\",\n\t\ticon: ICON_NAMES,\n\t\timage: \"string\",\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/overlays.ts\nconst Sheet = defineComponent({\n\tname: \"Sheet\",\n\tprops: {\n\t\topen: \"boolean\",\n\t\ttitle: \"string\",\n\t\tshowCloseIcon: \"boolean\",\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"close\"],\n\tchildren: \"elements\"\n});\nconst Toast = defineComponent({\n\tname: \"Toast\",\n\tprops: {\n\t\tmessage: \"string\",\n\t\ttone: STATUS_TONES,\n\t\tduration: \"number\"\n\t},\n\tevents: [\"hide\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/qr-code.ts\nconst QRCode = defineComponent({\n\tname: \"QRCode\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tsize: \"number\",\n\t\tlabel: \"string\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/select.ts\nconst Select = defineComponent({\n\tname: \"Select\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\",\n\t\tplaceholder: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\nconst Option = defineComponent({\n\tname: \"Option\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/scroll.ts\nconst Scroll = defineComponent({\n\tname: \"Scroll\",\n\tprops: {\n\t\tgap: SPACES,\n\t\tsnap: [\n\t\t\t\"none\",\n\t\t\t\"start\",\n\t\t\t\"center\"\n\t\t],\n\t\tindex: \"number\",\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/skeleton.ts\nconst Skeleton = defineComponent({\n\tname: \"Skeleton\",\n\tprops: {\n\t\tshape: [\n\t\t\t\"text\",\n\t\t\t\"circle\",\n\t\t\t\"box\"\n\t\t],\n\t\tlines: \"number\",\n\t\theight: \"number\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/tabs.ts\nconst Tabs = defineComponent({\n\tname: \"Tabs\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tvariant: [\"underline\", \"segmented\"],\n\t\t...PADDING_PROPS\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\nconst Tab = defineComponent({\n\tname: \"Tab\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\",\n\t\tbadge: \"number\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/text.ts\nconst Text = defineComponent({\n\tname: \"Text\",\n\tprops: {\n\t\tvariant: [\n\t\t\t\"title\",\n\t\t\t\"body\",\n\t\t\t\"caption\"\n\t\t],\n\t\ttone: TONES,\n\t\tweight: [\n\t\t\t\"regular\",\n\t\t\t\"medium\",\n\t\t\t\"bold\"\n\t\t],\n\t\talign: [\n\t\t\t\"start\",\n\t\t\t\"center\",\n\t\t\t\"end\"\n\t\t],\n\t\tmaxLines: \"number\",\n\t\t...PADDING_PROPS\n\t},\n\tchildren: \"text\",\n\tinline: true\n});\n//#endregion\n//#region src/view/components/text-area.ts\nconst TextArea = defineComponent({\n\tname: \"TextArea\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tplaceholder: \"string\",\n\t\tlabel: \"string\",\n\t\thint: \"string\",\n\t\terror: \"string\",\n\t\trows: \"number\",\n\t\tmaxLength: \"number\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/toggles.ts\nconst Switch = defineComponent({\n\tname: \"Switch\",\n\tprops: {\n\t\tchecked: \"boolean\",\n\t\tlabel: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"none\"\n});\nconst Checkbox = defineComponent({\n\tname: \"Checkbox\",\n\tprops: {\n\t\tchecked: \"boolean\",\n\t\tlabel: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"none\"\n});\nconst RadioGroup = defineComponent({\n\tname: \"RadioGroup\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tevents: [\"change\"],\n\tchildren: \"elements\"\n});\nconst Radio = defineComponent({\n\tname: \"Radio\",\n\tprops: {\n\t\tvalue: \"string\",\n\t\tlabel: \"string\",\n\t\tdisabled: \"boolean\"\n\t},\n\tchildren: \"none\"\n});\n//#endregion\n//#region src/view/components/view.ts\nconst View = defineComponent({\n\tname: \"View\",\n\tprops: {\n\t\tgap: SPACES,\n\t\tdirection: [\"column\", \"row\"],\n\t\talign: [\n\t\t\t\"stretch\",\n\t\t\t\"start\",\n\t\t\t\"center\",\n\t\t\t\"end\"\n\t\t],\n\t\tjustify: [\n\t\t\t\"start\",\n\t\t\t\"center\",\n\t\t\t\"end\",\n\t\t\t\"between\"\n\t\t],\n\t\twrap: \"boolean\",\n\t\tgrow: \"boolean\",\n\t\t...PADDING_PROPS,\n\t\tvariant: [\"plain\", \"card\"]\n\t},\n\tevents: [\"tap\"],\n\tchildren: \"elements\"\n});\n//#endregion\n//#region src/view/components/index.ts\nconst builtinComponents = {\n\tAmountInput,\n\tBadge,\n\tButton,\n\tCarousel,\n\tCheckbox,\n\tChip,\n\tCodeInput,\n\tDetailRow,\n\tDivider,\n\tEmptyState,\n\tFooter,\n\tGrid,\n\tGridItem,\n\tIcon,\n\tImage,\n\tInput,\n\tLink,\n\tList,\n\tListItem,\n\tNotice,\n\tOption,\n\tProgressBar,\n\tQRCode,\n\tRadio,\n\tRadioGroup,\n\tScroll,\n\tSelect,\n\tSheet,\n\tSkeleton,\n\tSpinner,\n\tSwitch,\n\tTab,\n\tTabs,\n\tText,\n\tTextArea,\n\tToast,\n\tView\n};\nconst builtinRegistry = componentRegistry(Object.values(builtinComponents));\n//#endregion\n//#region src/source/location.ts\nfunction createLocator(source) {\n\tconst lineStarts = [0];\n\tfor (let index = 0; index < source.length; index++) if (source[index] === \"\\n\") lineStarts.push(index + 1);\n\treturn (offset) => {\n\t\tlet low = 0;\n\t\tlet high = lineStarts.length - 1;\n\t\twhile (low < high) {\n\t\t\tconst middle = Math.floor((low + high + 1) / 2);\n\t\t\tif (lineStarts[middle] <= offset) low = middle;\n\t\t\telse high = middle - 1;\n\t\t}\n\t\treturn {\n\t\t\tline: low + 1,\n\t\t\tcolumn: offset - lineStarts[low] + 1,\n\t\t\toffset\n\t\t};\n\t};\n}\nfunction locationAt(source, offset) {\n\treturn createLocator(source)(offset);\n}\nfunction locatedMessage(message, file, location) {\n\tconst where = [\n\t\tfile,\n\t\tlocation?.line,\n\t\tlocation?.column\n\t].filter((part) => part !== void 0).join(\":\");\n\treturn where ? `${where}: ${message}` : message;\n}\n//#endregion\n//#region src/source/error.ts\nvar SourceError = class extends Error {\n\treason;\n\tfile;\n\tloc;\n\tconstructor(reason, file, location) {\n\t\tsuper(locatedMessage(reason, file, location));\n\t\tthis.reason = reason;\n\t\tthis.file = file;\n\t\tthis.loc = location;\n\t}\n};\n//#endregion\n//#region src/event/emitter.ts\nvar EventEmitter = class {\n\t#listeners = /* @__PURE__ */ new Map();\n\ton(name, listener) {\n\t\tconst listeners = this.#listeners.get(name) ?? /* @__PURE__ */ new Set();\n\t\tthis.#listeners.set(name, listeners);\n\t\tlisteners.add(listener);\n\t\treturn () => listeners.delete(listener);\n\t}\n\temit(name, ...args) {\n\t\tthis.#listeners.get(name)?.forEach((listener) => listener(...args));\n\t}\n};\n//#endregion\n//#region src/event/core.ts\nfunction createEvent(type, detail = {}, data = {}) {\n\treturn {\n\t\ttype,\n\t\tdetail,\n\t\tdata\n\t};\n}\n//#endregion\n//#region src/host/host.ts\nfunction hostTransport() {\n\tconst transport = globalThis.__hostTransport;\n\tif (!transport) throw new Error(\"No Dot host found: `globalThis.__hostTransport` is not set. Run the dot in the Dash app, or in the simulator with `dotctl dev`.\");\n\treturn transport;\n}\n//#endregion\n//#region src/host/context.ts\nconst DEFAULT_SYSTEM_CONTEXT = {\n\tscheme: \"light\",\n\tappState: \"active\"\n};\n//#endregion\n//#region src/host/calls.ts\nvar HostError = class extends Error {\n\tname = \"HostError\";\n\tcode;\n\tconstructor(code, message) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t}\n};\nlet connectedCaller = null;\nfunction connectHost(caller) {\n\tconnectedCaller = caller;\n}\nfunction callHost(method, params, options = {}) {\n\tif (!connectedCaller) {\n\t\tconst error = new HostError(\"unsupported\", `Can't run \"${method}\" here: call Dash from the dot's logic`);\n\t\treturn createHostRequest(Promise.reject(error));\n\t}\n\treturn connectedCaller(method, params, options);\n}\nfunction createHostRequest(promise, cancel = () => {}) {\n\tconst request = promise;\n\trequest.cancel = cancel;\n\treturn request;\n}\n//#endregion\n//#region src/host/permissions.ts\nconst PERMISSIONS = [\"account\"];\nfunction isPermission(value) {\n\treturn PERMISSIONS.includes(value);\n}\n//#endregion\n//#region src/host/files.ts\nconst DOT_FILE_PATH_MAX_LENGTH = 512;\nconst MAX_NAME_LENGTH = 255;\nfunction dotFilePathProblem(path, { allowRoot = false } = {}) {\n\tif (path === \"\") return allowRoot ? null : \"A path is needed, such as \\\"receipts/42.pdf\\\"\";\n\tif (path.length > 512) return `\"${path.slice(0, 40)}…\" is longer than 512 characters`;\n\tif (path.startsWith(\"/\")) return `\"${path}\" starts with \"/\". Start paths without it, such as \"receipts/42.pdf\"`;\n\tif ([...path].some((char) => char === \"\\\\\" || char.charCodeAt(0) < 32)) return `\"${path}\" has a backslash or another character paths can't use`;\n\tfor (const name of path.split(\"/\")) {\n\t\tif (name === \"\" || name === \".\" || name === \"..\") return `\"${path}\" has an empty, \".\" or \"..\" part. Name each folder, such as \"receipts/42.pdf\"`;\n\t\tif (name.length > MAX_NAME_LENGTH) return `\"${path}\" has a name longer than ${MAX_NAME_LENGTH} characters`;\n\t}\n\treturn null;\n}\n//#endregion\n//#region src/host/network.ts\nconst LABEL = \"[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\";\nconst NETWORK_HOST_PATTERN = new RegExp(`^(?:\\\\*\\\\.${LABEL}(?:\\\\.${LABEL})+|${LABEL}(?:\\\\.${LABEL})*)$`);\nconst NETWORK_HOST_MAX_LENGTH = 253;\nfunction isNetworkHost(value) {\n\treturn value.length <= 253 && NETWORK_HOST_PATTERN.test(value);\n}\nfunction allowsHost(hosts, host) {\n\tconst name = host.toLowerCase().replace(/\\.$/, \"\");\n\treturn hosts.some((pattern) => pattern.startsWith(\"*.\") ? name.endsWith(pattern.slice(1)) : name === pattern);\n}\n//#endregion\n//#region src/version/semantic-version.ts\nconst SEMVER_PATTERN = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\nfunction isSemanticVersion(value) {\n\treturn typeof value === \"string\" && SEMVER_PATTERN.test(value);\n}\nfunction majorVersion(version) {\n\treturn parseVersion(version).major;\n}\nfunction isVersionAtLeast(version, minimum) {\n\treturn compareVersions(version, minimum) >= 0;\n}\nfunction isNewerMajor(version, current) {\n\treturn parseVersion(version).major > parseVersion(current).major;\n}\nfunction compareVersions(left, right) {\n\tconst leftVersion = parseVersion(left);\n\tconst rightVersion = parseVersion(right);\n\tconst differences = [\n\t\tleftVersion.major - rightVersion.major,\n\t\tleftVersion.minor - rightVersion.minor,\n\t\tleftVersion.patch - rightVersion.patch\n\t];\n\tfor (const difference of differences) if (difference !== 0) return difference;\n\treturn comparePrereleases(leftVersion.prerelease, rightVersion.prerelease);\n}\nfunction parseVersion(version) {\n\tconst match = SEMVER_PATTERN.exec(version);\n\tif (!match) throw new Error(`\"${version}\" is not a semantic version`);\n\tconst [, major, minor, patch, prerelease] = match;\n\treturn {\n\t\tmajor: Number(major),\n\t\tminor: Number(minor),\n\t\tpatch: Number(patch),\n\t\tprerelease: prerelease === void 0 ? [] : prerelease.split(\".\")\n\t};\n}\nfunction comparePrereleases(left, right) {\n\tif (left.length === 0 || right.length === 0) return right.length - left.length;\n\tconst shared = Math.min(left.length, right.length);\n\tfor (let index = 0; index < shared; index++) {\n\t\tconst order = compareIdentifiers(left[index], right[index]);\n\t\tif (order !== 0) return order;\n\t}\n\treturn left.length - right.length;\n}\nfunction compareIdentifiers(left, right) {\n\tconst leftIsNumber = /^\\d+$/.test(left);\n\tconst rightIsNumber = /^\\d+$/.test(right);\n\tif (leftIsNumber && rightIsNumber) return Number(left) - Number(right);\n\tif (leftIsNumber) return -1;\n\tif (rightIsNumber) return 1;\n\tif (left < right) return -1;\n\tif (left > right) return 1;\n\treturn 0;\n}\n//#endregion\n//#region src/host/react.ts\nconst REACT_HOST_PATH = \"/__dot/react/\";\nconst REACT_HOST_MODULES = {\n\treact: \"react.js\",\n\t\"react/jsx-runtime\": \"react-jsx-runtime.js\",\n\t\"react-dom\": \"react-dom.js\",\n\t\"react-dom/client\": \"react-dom-client.js\"\n};\nfunction reactHostUrl(dotReactVersion, file) {\n\treturn `${REACT_HOST_PATH}${majorVersion(dotReactVersion)}/${file}`;\n}\nfunction isReactCompatible(hostVersion, dotVersion) {\n\treturn majorVersion(hostVersion) === majorVersion(dotVersion) && isVersionAtLeast(hostVersion, dotVersion);\n}\nfunction newestReactOfMajor(versions, major) {\n\treturn versions.filter((version) => majorVersion(version) === major).sort(compareVersions).at(-1);\n}\n//#endregion\n//#region src/protocol/transport.ts\nfunction createAdaptorTransport(adapter) {\n\treturn {\n\t\tpost: (message) => adapter.postMessage(message),\n\t\tlisten(listener) {\n\t\t\tconst onMessage = (event) => listener(event.data);\n\t\t\tadapter.addEventListener(\"message\", onMessage);\n\t\t\treturn () => adapter.removeEventListener(\"message\", onMessage);\n\t\t}\n\t};\n}\nfunction createTransportPair() {\n\tconst firstListeners = /* @__PURE__ */ new Set();\n\tconst secondListeners = /* @__PURE__ */ new Set();\n\tconst createSide = (ownListeners, otherListeners) => ({\n\t\tpost: (message) => {\n\t\t\tconst copy = JSON.parse(JSON.stringify(message));\n\t\t\totherListeners.forEach((listener) => listener(copy));\n\t\t},\n\t\tlisten(listener) {\n\t\t\townListeners.add(listener);\n\t\t\treturn () => ownListeners.delete(listener);\n\t\t}\n\t});\n\treturn [createSide(firstListeners, secondListeners), createSide(secondListeners, firstListeners)];\n}\nconst PAGE_HOOKS = Object.keys({\n\tonLoad: true,\n\tonShow: true,\n\tonHide: true,\n\tonUnload: true\n});\n//#endregion\n//#region src/page/navigation.ts\nconst MAX_STACK_DEPTH = 8;\nconst PAGE_ID = /^[A-Za-z0-9_-]+(?:\\/[A-Za-z0-9_-]+)*$/;\nfunction isPageId(value) {\n\treturn PAGE_ID.test(value);\n}\nvar NavigationStack = class {\n\tlimit;\n\t#pages = [];\n\t#nextInstanceId = 1;\n\tconstructor(limit = 8) {\n\t\tthis.limit = limit;\n\t}\n\tget pages() {\n\t\treturn this.#pages;\n\t}\n\tget top() {\n\t\treturn this.#pages.at(-1);\n\t}\n\tapply(navigation) {\n\t\tswitch (navigation.action) {\n\t\t\tcase \"push\":\n\t\t\t\tif (this.#pages.length >= this.limit) return false;\n\t\t\t\tbreak;\n\t\t\tcase \"replace\":\n\t\t\t\tthis.#pages.pop();\n\t\t\t\tbreak;\n\t\t\tcase \"reset\":\n\t\t\t\tthis.#pages = [];\n\t\t\t\tbreak;\n\t\t\tcase \"back\": {\n\t\t\t\tconst count = Math.min(navigation.delta, this.#pages.length - 1);\n\t\t\t\tif (count < 1) return false;\n\t\t\t\tthis.#pages = this.#pages.slice(0, -count);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tconst { page, options } = navigation;\n\t\tthis.#pages = [...this.#pages, {\n\t\t\tinstanceId: this.#nextInstanceId++,\n\t\t\tpage,\n\t\t\toptions\n\t\t}];\n\t\treturn true;\n\t}\n};\n//#endregion\n//#region src/page/state.ts\nfunction applyChanges(state, changes) {\n\tconst next = { ...state };\n\tfor (const [key, value] of Object.entries(changes)) if (value !== void 0) next[key] = value;\n\treturn next;\n}\n//#endregion\n//#region src/page/bars.ts\nconst HEX_COLOR = /^#[0-9a-fA-F]{6}$/;\nfunction checkNavigationBar(options) {\n\tconst { title, hidden, backgroundColor, textColor } = options;\n\tif (title !== void 0 && typeof title !== \"string\") throw new TypeError(\"The navigation bar's title must be text\");\n\tif (hidden !== void 0 && typeof hidden !== \"boolean\") throw new TypeError(\"The navigation bar's `hidden` must be true or false\");\n\tfor (const [name, color] of Object.entries({\n\t\tbackgroundColor,\n\t\ttextColor\n\t})) if (color !== void 0 && (typeof color !== \"string\" || !HEX_COLOR.test(color))) throw new TypeError(`The navigation bar's ${name} must be a color such as \"#1A73E8\"`);\n}\nfunction checkTabBar(options) {\n\tif (options.hidden !== void 0 && typeof options.hidden !== \"boolean\") throw new TypeError(\"The tab bar's `hidden` must be true or false\");\n}\nfunction checkConfigs(configs) {\n\tcheckNavigationBar(configs.navigationBar ?? {});\n\tcheckTabBar(configs.tabBar ?? {});\n}\nfunction mergeConfigs(...configs) {\n\tconst bars = {\n\t\tnavigationBar: {},\n\t\ttabBar: {}\n\t};\n\tfor (const config of configs) {\n\t\tbars.navigationBar = {\n\t\t\t...bars.navigationBar,\n\t\t\t...config?.navigationBar\n\t\t};\n\t\tbars.tabBar = {\n\t\t\t...bars.tabBar,\n\t\t\t...config?.tabBar\n\t\t};\n\t}\n\treturn bars;\n}\n//#endregion\n//#region src/messageChannel.ts\nvar MessageChannel = class {\n\t#transport;\n\t#handlers = /* @__PURE__ */ new Map();\n\tconstructor(transport) {\n\t\tthis.#transport = transport;\n\t}\n\tsend(type, payload) {\n\t\tthis.#transport.post({\n\t\t\ttype,\n\t\t\tpayload\n\t\t});\n\t}\n\thandle(type, handler) {\n\t\tconst previous = this.#handlers.get(type);\n\t\tthis.#handlers.set(type, handler);\n\t\treturn previous;\n\t}\n\tlisten(onError) {\n\t\treturn this.#transport.listen((rawMessage) => {\n\t\t\tconst message = rawMessage;\n\t\t\tconst handler = this.#handlers.get(message.type);\n\t\t\tif (!handler) {\n\t\t\t\tonError(/* @__PURE__ */ new Error(`No handler for message \"${message.type}\"`), message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\thandler(message.payload);\n\t\t\t} catch (error) {\n\t\t\t\tonError(error, message);\n\t\t\t}\n\t\t});\n\t}\n};\n//#endregion\nexport { ASPECTS, AmountInput, Badge, Button, Carousel, Checkbox, Chip, CodeInput, DEFAULT_SYSTEM_CONTEXT, DOT_FILE_PATH_MAX_LENGTH, DetailRow, Divider, EmptyState, EventEmitter, Footer, Grid, GridItem, HostError, ICON_NAMES, Icon, Image, Input, Link, List, ListItem, MAX_STACK_DEPTH, MessageChannel, NETWORK_HOST_MAX_LENGTH, NETWORK_HOST_PATTERN, NavigationStack, Notice, Option, PADDING_PROPS, PAGE_HOOKS, PERMISSIONS, ProgressBar, QRCode, REACT_HOST_MODULES, REACT_HOST_PATH, Radio, RadioGroup, SEMVER_PATTERN, SIZES, SPACES, STATUS_TONES, Scroll, Select, Sheet, Skeleton, SourceError, Spinner, Switch, TONES, Tab, Tabs, Text, TextArea, Toast, View, allowsHost, applyChanges, builtinComponents, builtinRegistry, callHost, checkConfigs, checkNavigationBar, checkTabBar, compareVersions, componentRegistry, connectHost, createAdaptorTransport, createEvent, createHostRequest, createLocator, createTransportPair, defineComponent, dotFilePathProblem, eventName, eventProp, hostTransport, isEventProp, isNetworkHost, isNewerMajor, isPageId, isPermission, isReactCompatible, isSemanticVersion, isVersionAtLeast, locatedMessage, locationAt, majorVersion, mergeConfigs, newestReactOfMajor, reactHostUrl, toList, toText };\n\n//# sourceMappingURL=index.js.map","export const CLIENT_PATH = '/__dot/';\nexport const EVENTS_PATH = `${CLIENT_PATH}events`;\nexport const HTTP_PATH = `${CLIENT_PATH}network/http/`;\nexport const FILE_PATH = `${CLIENT_PATH}storage/file/`;\nexport const CACHE_PATH = `${CLIENT_PATH}storage/cache/`;\nexport const SECRET_PATH = `${CLIENT_PATH}storage/secret/`;\nexport const TEMPORARY_FILES_PATH = `${CLIENT_PATH}files/`;\n\nexport const DOT_PATH = '/dot/';\nexport const WEBVIEW_URL = `${DOT_PATH}ui/index.html`;\nexport const WEBVIEW_SCRIPT_URL = `${DOT_PATH}ui/dot.js`;\nexport const SERVICE_URL = `${DOT_PATH}logic/dot.js`;\nexport const MANIFEST_URL = `${DOT_PATH}manifest.json`;\n","// What the simulator page posts to the dot's worker and web view to run its new build in place.\nexport interface HotReload {\n readonly dotHotReload: number;\n}\n\nexport function hotReloadIn(data: unknown): number | undefined {\n const reload = (data as Partial<HotReload> | null)?.dotHotReload;\n return typeof reload === 'number' ? reload : undefined;\n}\n","import type { Transport } from '@monimesl/dot-core';\n\n// Native bridges only carry strings. Encoding to JSON here makes state that a device can't carry\n// fail in the simulator too.\ninterface Wire {\n readonly dot: string;\n}\n\nfunction isWire(data: unknown): data is Wire {\n return typeof (data as Partial<Wire> | null)?.dot === 'string';\n}\n\nexport function wireTransport(channel: Transport): Transport {\n return {\n post: (message) => channel.post({ dot: JSON.stringify(message) } satisfies Wire),\n listen: (listener) =>\n channel.listen((data) => {\n if (isWire(data)) {\n listener(JSON.parse(data.dot));\n }\n }),\n };\n}\n\n// The simulator page and the webview's iframe, each accepting messages only from the other.\nexport function windowChannel(other: () => Window | null): Transport {\n return {\n post: (message) => other()?.postMessage(message, location.origin),\n listen(listener) {\n const onMessage = (event: MessageEvent) => {\n if (event.source === other()) {\n listener(event.data);\n }\n };\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n },\n };\n}\n","import type { TransportAdapter } from '@monimesl/dot-core';\nimport { createAdaptorTransport } from '@monimesl/dot-core';\n\nimport { SERVICE_URL } from '../paths';\nimport { hotReloadIn } from './hot-reload';\nimport { wireTransport } from './wire';\n\ninterface WorkerScope extends TransportAdapter {\n importScripts(...urls: string[]): void;\n}\n\nconst scope = globalThis as unknown as WorkerScope;\n\nglobalThis.__hostTransport = wireTransport(createAdaptorTransport(scope));\n\nscope.importScripts(SERVICE_URL);\n\n// The new build hands its pages to the service already running here.\nscope.addEventListener('message', ({ data }) => {\n const reload = hotReloadIn(data);\n if (reload !== undefined) {\n scope.importScripts(`${SERVICE_URL}?hot=${reload}`);\n }\n});\n"],"mappings":";;CACA,SAAS,gBAAgB,UAAU;EAClC,OAAO;GACN,OAAO,CAAC;GACR,QAAQ,CAAC;GACT,GAAG;EACJ;CACD;CAYA,SAAS,kBAAkB,WAAW;EACrC,MAAM,WAAW,CAAC;EAClB,KAAK,MAAM,YAAY,WAAW;GACjC,IAAI,SAAS,QAAQ,UAAU,MAAM,IAAI,MAAM,cAAc,SAAS,KAAK,mBAAmB;GAC9F,SAAS,SAAS,QAAQ;EAC3B;EACA,OAAO;CACR;CAoBA,MAAM,cAAc,gBAAgB;EACnC,MAAM;EACN,OAAO;GACN,OAAO;GACP,UAAU;GACV,YAAY;GACZ,MAAM,CAAC,SAAS,OAAO;GACvB,OAAO;GACP,aAAa;GACb,MAAM;GACN,OAAO;GACP,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CAGD,MAAM,SAAS,gBAAgB;EAC9B,MAAM;EACN,OAAO;GACN,SAAS,CAAC,WAAW,WAAW;GAChC,UAAU;GACV,SAAS;EACV;EACA,QAAQ,CAAC,OAAO;EAChB,UAAU;CACX,CAAC;CAGD,MAAM,QAAQ;EACb;EACA;EACA;CACD;CACA,MAAM,SAAS;EACd;EACA;EACA;EACA;CACD;CACA,MAAM,gBAAgB;EACrB,SAAS;EACT,YAAY;EACZ,cAAc;EACd,YAAY;EACZ,eAAe;CAChB;CACA,MAAM,UAAU;EACf;EACA;EACA;EACA;EACA;EACA;EACA;CACD;CACA,MAAM,QAAQ;EACb;EACA;EACA;EACA;EACA;EACA;CACD;CACA,MAAM,eAAe;EACpB;EACA;EACA;EACA;EACA;CACD;CACA,MAAM,aAAa;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA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GACD;GACA,MAAM;GACN,QAAQ;IACP;IACA;IACA;GACD;GACA,OAAO;IACN;IACA;IACA;GACD;GACA,UAAU;GACV,GAAG;EACJ;EACA,UAAU;EACV,QAAQ;CACT,CAAC;CAGD,MAAM,WAAW,gBAAgB;EAChC,MAAM;EACN,OAAO;GACN,OAAO;GACP,aAAa;GACb,OAAO;GACP,MAAM;GACN,OAAO;GACP,MAAM;GACN,WAAW;GACX,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CAGD,MAAM,SAAS,gBAAgB;EAC9B,MAAM;EACN,OAAO;GACN,SAAS;GACT,OAAO;GACP,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CACD,MAAM,WAAW,gBAAgB;EAChC,MAAM;EACN,OAAO;GACN,SAAS;GACT,OAAO;GACP,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CACD,MAAM,aAAa,gBAAgB;EAClC,MAAM;EACN,OAAO;GACN,OAAO;GACP,OAAO;GACP,UAAU;EACX;EACA,QAAQ,CAAC,QAAQ;EACjB,UAAU;CACX,CAAC;CAuCD,MAAM,oBAAoB;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OA9Da,gBAAgB;GAC7B,MAAM;GACN,OAAO;IACN,OAAO;IACP,OAAO;IACP,UAAU;GACX;GACA,UAAU;EACX,CAsDC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAhEY,gBAAgB;GAC5B,MAAM;GACN,OAAO;IACN,KAAK;IACL,WAAW,CAAC,UAAU,KAAK;IAC3B,OAAO;KACN;KACA;KACA;KACA;IACD;IACA,SAAS;KACR;KACA;KACA;KACA;IACD;IACA,MAAM;IACN,MAAM;IACN,GAAG;IACH,SAAS,CAAC,SAAS,MAAM;GAC1B;GACA,QAAQ,CAAC,KAAK;GACd,UAAU;EACX,CAwCC;CACD;CACwB,kBAAkB,OAAO,OAAO,iBAAiB,CAAC;CAkI1E,MAAM,QAAQ;CACe,IAAI,OAAO,aAAa,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ,MAAM,KAAK;CAqFvG,SAAS,uBAAuB,SAAS;EACxC,OAAO;GACN,OAAO,YAAY,QAAQ,YAAY,OAAO;GAC9C,OAAO,UAAU;IAChB,MAAM,aAAa,UAAU,SAAS,MAAM,IAAI;IAChD,QAAQ,iBAAiB,WAAW,SAAS;IAC7C,aAAa,QAAQ,oBAAoB,WAAW,SAAS;GAC9D;EACD;CACD;CCp4BA,MAAa,cAAc;;;CCN3B,SAAgB,YAAY,MAAmC;EAC7D,MAAM,SAAU,MAAoC;EACpD,OAAO,OAAO,WAAW,WAAW,SAAS,KAAA;CAC/C;;;CCAA,SAAS,OAAO,MAA6B;EAC3C,OAAO,OAAQ,MAA+B,QAAQ;CACxD;CAEA,SAAgB,cAAc,SAA+B;EAC3D,OAAO;GACL,OAAO,YAAY,QAAQ,KAAK,EAAE,KAAK,KAAK,UAAU,OAAO,EAAE,CAAgB;GAC/E,SAAS,aACP,QAAQ,QAAQ,SAAS;IACvB,IAAI,OAAO,IAAI,GACb,SAAS,KAAK,MAAM,KAAK,GAAG,CAAC;GAEjC,CAAC;EACL;CACF;;;CCXA,MAAM,QAAQ;CAEd,WAAW,kBAAkB,cAAc,uBAAuB,KAAK,CAAC;CAExE,MAAM,cAAc,WAAW;CAG/B,MAAM,iBAAiB,YAAY,EAAE,WAAW;EAC9C,MAAM,SAAS,YAAY,IAAI;EAC/B,IAAI,WAAW,KAAA,GACb,MAAM,cAAc,GAAG,YAAY,OAAO,QAAQ;CAEtD,CAAC"}
|
package/dist/client/simulator.js
CHANGED
|
@@ -617,6 +617,9 @@
|
|
|
617
617
|
function isVersionAtLeast(version, minimum) {
|
|
618
618
|
return compareVersions(version, minimum) >= 0;
|
|
619
619
|
}
|
|
620
|
+
function isNewerMajor(version, current) {
|
|
621
|
+
return parseVersion(version).major > parseVersion(current).major;
|
|
622
|
+
}
|
|
620
623
|
function compareVersions(left, right) {
|
|
621
624
|
const leftVersion = parseVersion(left);
|
|
622
625
|
const rightVersion = parseVersion(right);
|
|
@@ -721,10 +724,8 @@
|
|
|
721
724
|
this.reason = reason;
|
|
722
725
|
}
|
|
723
726
|
};
|
|
724
|
-
function checkCompatibility(manifest, {
|
|
725
|
-
if (
|
|
726
|
-
const minDashVersion = manifest.dash?.minVersion;
|
|
727
|
-
if (minDashVersion !== void 0 && !isVersionAtLeast(dashVersion, minDashVersion)) throw new IncompatibleDotError("dashTooOld", `This dot needs Dash ${minDashVersion} or newer. This is Dash ${dashVersion}.`);
|
|
727
|
+
function checkCompatibility(manifest, { runtimeVersion, reactVersions }) {
|
|
728
|
+
if (isNewerMajor(manifest.runtime, runtimeVersion)) throw new IncompatibleDotError("runtimeTooNew", `This dot was built with Dot runtime ${manifest.runtime}, which is newer than this Dash supports. Update Dash to open it.`);
|
|
728
729
|
if (reactVersions !== void 0 && !reactVersions.some((version) => isReactCompatible(version, manifest.react))) throw new IncompatibleDotError("reactUnavailable", `This dot needs React ${manifest.react}, which this host doesn't have.`);
|
|
729
730
|
}
|
|
730
731
|
//#endregion
|
|
@@ -847,11 +848,8 @@
|
|
|
847
848
|
};
|
|
848
849
|
//#endregion
|
|
849
850
|
//#region src/host.ts
|
|
850
|
-
function startHost({ logic, ui, manifest,
|
|
851
|
-
checkCompatibility(manifest, {
|
|
852
|
-
dashVersion,
|
|
853
|
-
minRuntimeVersion
|
|
854
|
-
});
|
|
851
|
+
function startHost({ logic, ui, manifest, runtimeVersion, systemContext, handlers = {}, askPermission, observe, restorePages = [], onBarsChange }) {
|
|
852
|
+
checkCompatibility(manifest, { runtimeVersion });
|
|
855
853
|
const stack = new NavigationStack();
|
|
856
854
|
let context = systemContext;
|
|
857
855
|
const calls = new HostCallRunner(handlers, new PermissionGate(manifest.name, manifest.permissions ?? {}, askPermission), (result) => {
|
|
@@ -979,10 +977,9 @@
|
|
|
979
977
|
}
|
|
980
978
|
};
|
|
981
979
|
}
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
};
|
|
980
|
+
//#endregion
|
|
981
|
+
//#region src/versions.ts
|
|
982
|
+
const SIMULATOR_VERSIONS = { runtimeVersion: "0.1.0-alpha.13" };
|
|
986
983
|
//#endregion
|
|
987
984
|
//#region src/paths.ts
|
|
988
985
|
const CLIENT_PATH = "/__dot/";
|
|
@@ -1245,6 +1242,7 @@
|
|
|
1245
1242
|
return;
|
|
1246
1243
|
}
|
|
1247
1244
|
if (thisLaunch !== launchCount) return;
|
|
1245
|
+
const handlers = dashHandlers(phone, note);
|
|
1248
1246
|
try {
|
|
1249
1247
|
checkCompatibility(manifest, SIMULATOR_VERSIONS);
|
|
1250
1248
|
} catch (error) {
|
|
@@ -1259,7 +1257,7 @@
|
|
|
1259
1257
|
manifest,
|
|
1260
1258
|
...SIMULATOR_VERSIONS,
|
|
1261
1259
|
systemContext: systemContext(),
|
|
1262
|
-
handlers
|
|
1260
|
+
handlers,
|
|
1263
1261
|
askPermission: (request, signal) => askPermission(phone, note, request, signal),
|
|
1264
1262
|
observe: record,
|
|
1265
1263
|
restorePages,
|