@nil-/xit 0.1.20 → 0.1.21

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/assets/bundler.js CHANGED
@@ -16,7 +16,7 @@ Defaulting to 2020, but this will stop working in the future.`)),AA.ecmaVersion=
16
16
  import Component from "${USER_TAG}${eA.replace(/\\/g,"/")}";
17
17
  export const action = (target, context) => {
18
18
  let ref = mount(Component, { target, context });
19
- return { destroy: () => unmount(ref) }
19
+ return () => unmount(ref);
20
20
  };`,JSON_PKG_CACHE=new Map,SCOPED_PKG_REGEX=/^(@[^/]*\/[^/]*)(?:\/(.*))?$/s,PKG_REGEX=/^([^/]*)(?:\/(.*))?$/s,FILE_PREFIX="file:/",WIN_FILE_PREFIX="file:///",resolve_local=async(eA,AA)=>{if(AA!=null){const tA=new URL(`${FILE_PREFIX}${AA}`),gA=new URL(eA,tA).href;return gA.startsWith(WIN_FILE_PREFIX)?gA.slice(8):gA.slice(6)}return eA},resolve_remote=async(eA,AA)=>(await fetch(new URL(eA,AA),{method:"HEAD"})).url,fetch_json_remote=async eA=>{const AA=await fetch(eA);if(AA.ok)return JSON.parse(await AA.text())},fetch_package_json=async(eA,AA)=>{const[tA,gA,iA=""]=eA.split(eA.startsWith("@")?SCOPED_PKG_REGEX:PKG_REGEX),IA=`${AA}/${gA}`,BA=`${IA}/package.json`;if(JSON_PKG_CACHE.has(BA))return JSON_PKG_CACHE.get(BA);const sA=await fetch_json_remote(BA);if(sA!=null)return JSON_PKG_CACHE.set(BA,{base:IA,rest:iA,json:sA}),JSON_PKG_CACHE.get(BA)},resolve_id=eA=>({input:AA=>({resolved:AA}),hook:async(AA,tA)=>{if(AA.startsWith(INTERNAL_TAG)||AA.startsWith(USER_TAG))return AA;if(AA.startsWith(".")){if(tA!=null&&tA.startsWith(USER_TAG))return`${USER_TAG}${await resolve_local(AA,tA.slice(USER_TAG.length))}`;if(tA!=null&&tA.startsWith(RESOURCE_TAG))return`${RESOURCE_TAG}${await resolve_remote(AA,tA.slice(RESOURCE_TAG.length))}`}if(AA.startsWith("https://"))return null;const gA=await fetch_package_json(AA,eA.cdn_url);if(gA!=null){const iA=o$2(gA.json,gA.rest,{browser:!0,conditions:["svelte","production"]});if(iA!=null){if(Array.isArray(iA)&&iA.length>0)return`${RESOURCE_TAG}${await resolve_remote(`${gA.base}/${iA[0]}`)}`;if(typeof iA=="string")return`${RESOURCE_TAG}${await resolve_remote(`${gA.base}/${iA}`)}`}else{const IA=i$3(gA.json);if(IA!=null)return`${RESOURCE_TAG}${await resolve_remote(`${gA.base}/${IA}`)}`}}throw"unknown file, should be unreachable"}});function walk(eA,AA,tA){const gA=tA._;let iA=!1;function IA(sA,{next:CA,state:oA}){CA(oA)}function BA(sA,CA,oA){if(iA||!sA.type)return;let QA;const EA={},rA={path:CA,state:oA,next:(uA=oA)=>{CA.push(sA);for(const cA in sA){if(cA==="type")continue;const hA=sA[cA];if(hA&&typeof hA=="object")if(Array.isArray(hA)){const dA={};hA.forEach((pA,wA)=>{if(pA&&typeof pA=="object"){const mA=BA(pA,CA,uA);mA&&(dA[wA]=mA)}}),Object.keys(dA).length>0&&(EA[cA]=hA.map((pA,wA)=>dA[wA]??pA))}else{const dA=BA(hA,CA,uA);dA&&(EA[cA]=dA)}}if(CA.pop(),Object.keys(EA).length>0)return apply_mutations(sA,EA)},stop:()=>{iA=!0},visit:(uA,cA=oA)=>{CA.push(sA);const hA=BA(uA,CA,cA)??uA;return CA.pop(),hA}};let lA=tA[sA.type]??IA;if(gA){let uA;QA=gA(sA,{...rA,next:(cA=oA)=>(oA=cA,uA=lA(sA,{...rA,state:cA}),uA)}),!QA&&uA&&(QA=uA)}else QA=lA(sA,rA);if(QA||Object.keys(EA).length>0&&(QA=apply_mutations(sA,EA)),QA)return QA}return BA(eA,[],AA)??eA}function apply_mutations(eA,AA){const tA={},gA=Object.getOwnPropertyDescriptors(eA);for(const iA in gA)Object.defineProperty(tA,iA,gA[iA]);for(const iA in AA)tA[iA]=AA[iA];return tA}const regex_whitespace=/\s/,regex_whitespaces=/\s+/,regex_starts_with_newline=/^\r?\n/,regex_starts_with_whitespace=/^\s/,regex_starts_with_whitespaces=/^[ \t\r\n]+/,regex_ends_with_whitespace=/\s$/,regex_ends_with_whitespaces=/[ \t\r\n]+$/,regex_not_whitespace=/[^ \t\r\n]/,regex_whitespaces_strict=/[ \t\n\r\f]+/g,regex_only_whitespaces=/^[ \t\n\r\f]+$/,regex_not_newline_characters=/[^\n]/g,regex_is_valid_identifier=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/,regex_invalid_identifier_chars=/(^[^a-zA-Z_$]|[^a-zA-Z0-9_$])/g,regex_starts_with_vowel=/^[aeiou]/,regex_heading_tags=/^h[1-6]$/,regex_illegal_attribute_character=/(^[0-9-.])|[\^$@%&#?!|()[\]{}^*+~;]/,EACH_ITEM_REACTIVE=1,EACH_INDEX_REACTIVE=2,EACH_IS_CONTROLLED=4,EACH_IS_ANIMATED=8,EACH_ITEM_IMMUTABLE=16,PROPS_IS_IMMUTABLE=1,PROPS_IS_RUNES=2,PROPS_IS_UPDATED=4,PROPS_IS_BINDABLE=8,PROPS_IS_LAZY_INITIAL=16,TRANSITION_IN=1,TRANSITION_OUT=2,TRANSITION_GLOBAL=4,TEMPLATE_FRAGMENT=1,TEMPLATE_USE_IMPORT_NODE=2,HYDRATION_START="[",HYDRATION_START_ELSE="[!",HYDRATION_END="]",ELEMENT_IS_NAMESPACED=1,ELEMENT_PRESERVE_ATTRIBUTE_CASE=2,NAMESPACE_SVG="http://www.w3.org/2000/svg",NAMESPACE_MATHML="http://www.w3.org/1998/Math/MathML",IGNORABLE_RUNTIME_WARNINGS=["state_snapshot_uncloneable","binding_property_non_reactive","hydration_attribute_changed","hydration_html_changed","ownership_invalid_binding","ownership_invalid_mutation"];function fuzzymatch(eA,AA){if(AA.length===0)return null;const gA=new FuzzySet(AA).get(eA);return gA&&gA[0][0]>.7?gA[0][1]:null}const GRAM_SIZE_LOWER=2,GRAM_SIZE_UPPER=3;function _distance(eA,AA){if(eA===null&&AA===null)throw"Trying to compare two null values";return eA===null||AA===null?0:(eA=String(eA),AA=String(AA),1-levenshtein(eA,AA)/Math.max(eA.length,AA.length))}function levenshtein(eA,AA){const tA=[];let gA=0,iA=0;for(let IA=0;IA<=AA.length;IA++)for(let BA=0;BA<=eA.length;BA++)IA&&BA?eA.charAt(BA-1)===AA.charAt(IA-1)?iA=gA:iA=Math.min(tA[BA],tA[BA-1],gA)+1:iA=IA+BA,gA=tA[BA],tA[BA]=iA;return tA.pop()}const non_word_regex=/[^\w, ]+/;function iterate_grams(eA,AA=2){const tA="-"+eA.toLowerCase().replace(non_word_regex,"")+"-",gA=AA-tA.length,iA=[];if(gA>0)for(let IA=0;IA<gA;++IA)eA+="-";for(let IA=0;IA<tA.length-AA+1;++IA)iA.push(tA.slice(IA,IA+AA));return iA}function gram_counter(eA,AA=2){const tA={},gA=iterate_grams(eA,AA);let iA=0;for(iA;iA<gA.length;++iA)gA[iA]in tA?tA[gA[iA]]+=1:tA[gA[iA]]=1;return tA}function sort_descending(eA,AA){return AA[0]-eA[0]}class FuzzySet{constructor(AA){rg(this,"exact_set",{});rg(this,"match_dict",{});rg(this,"items",{});for(let tA=GRAM_SIZE_LOWER;tA<GRAM_SIZE_UPPER+1;++tA)this.items[tA]=[];for(let tA=0;tA<AA.length;++tA)this.add(AA[tA])}add(AA){if(AA.toLowerCase()in this.exact_set)return!1;let gA=GRAM_SIZE_LOWER;for(gA;gA<GRAM_SIZE_UPPER+1;++gA)this._add(AA,gA)}_add(AA,tA){const gA=AA.toLowerCase(),iA=this.items[tA]||[],IA=iA.length;iA.push(0);const BA=gram_counter(gA,tA);let sA=0,CA,oA;for(CA in BA)oA=BA[CA],sA+=Math.pow(oA,2),CA in this.match_dict?this.match_dict[CA].push([IA,oA]):this.match_dict[CA]=[[IA,oA]];const QA=Math.sqrt(sA);iA[IA]=[QA,gA],this.items[tA]=iA,this.exact_set[gA]=AA}get(AA){const tA=AA.toLowerCase(),gA=this.exact_set[tA];if(gA)return[[1,gA]];for(let iA=GRAM_SIZE_UPPER;iA>=GRAM_SIZE_LOWER;--iA){const IA=this.__get(AA,iA);if(IA.length>0)return IA}return null}__get(AA,tA){const gA=AA.toLowerCase(),iA={},IA=gram_counter(gA,tA),BA=this.items[tA];let sA=0,CA,oA,QA,EA,rA;for(CA in IA)if(oA=IA[CA],sA+=Math.pow(oA,2),CA in this.match_dict)for(QA=0;QA<this.match_dict[CA].length;++QA)EA=this.match_dict[CA][QA][0],rA=this.match_dict[CA][QA][1],EA in iA?iA[EA]+=oA*rA:iA[EA]=oA*rA;const lA=Math.sqrt(sA);let uA=[],cA;for(const pA in iA)cA=iA[pA],uA.push([cA/(lA*BA[pA][0]),BA[pA][1]]);uA.sort(sort_descending);let hA=[];const dA=Math.min(50,uA.length);for(let pA=0;pA<dA;++pA)hA.push([_distance(uA[pA][1],gA),uA[pA][1]]);uA=hA,uA.sort(sort_descending),hA=[];for(let pA=0;pA<uA.length;++pA)uA[pA][0]===uA[0][0]&&hA.push([uA[pA][0],this.exact_set[uA[pA][1]]]);return hA}}function rangeContains(eA,AA){return eA.start<=AA&&AA<eA.end}function getLocator$1(eA,AA={}){const{offsetLine:tA=0,offsetColumn:gA=0}=AA;let iA=0;const IA=eA.split(`
21
21
  `).map((CA,oA)=>{const QA=iA+CA.length+1,EA={start:iA,end:QA,line:oA};return iA=QA,EA});let BA=0;function sA(CA,oA){if(typeof CA=="string"&&(CA=eA.indexOf(CA,oA??0)),CA===-1)return;let QA=IA[BA];const EA=CA>=QA.end?1:-1;for(;QA;){if(rangeContains(QA,CA))return{line:tA+QA.line,column:gA+CA-QA.start,character:CA};BA+=EA,QA=IA[BA]}}return sA}let warnings=[],filename,source,dev,locator=getLocator$1("",{offsetLine:1}),warning_filter,ignore_stack=[],ignore_map=new Map;function push_ignore(eA){const AA=new Set([...ignore_stack.at(-1)||[],...eA]);ignore_stack.push(AA)}function pop_ignore(){ignore_stack.pop()}function reset_warning_filter(eA=()=>!0){warning_filter=eA}function is_ignored(eA,AA){var tA;return dev&&!!((tA=ignore_map.get(eA))!=null&&tA.some(gA=>gA.has(AA)))}function reset(eA,AA){var gA;source=eA;const tA=(gA=AA.rootDir)==null?void 0:gA.replace(/\\/g,"/");filename=AA.filename.replace(/\\/g,"/"),dev=!!AA.dev,typeof tA=="string"&&filename.startsWith(tA)&&(filename=filename.replace(tA,"").replace(/^[/\\]/,"")),locator=getLocator$1(source,{offsetLine:1}),warnings=[],ignore_stack=[],ignore_map.clear()}const regex_tabs=/^\t+/;function tabs_to_spaces(eA){return eA.replace(regex_tabs,AA=>AA.split(" ").join(" "))}function get_code_frame(eA,AA,tA){const gA=eA.split(`
22
22
  `),iA=Math.max(0,AA-2),IA=Math.min(AA+3,gA.length),BA=String(IA+1).length;return gA.slice(iA,IA).map((sA,CA)=>{const oA=iA+CA===AA,QA=String(CA+iA+1).padStart(BA," ");if(oA){const EA=" ".repeat(BA+2+tabs_to_spaces(sA.slice(0,tA)).length)+"^";return`${QA}: ${tabs_to_spaces(sA)}
package/assets/index.html CHANGED
@@ -20,7 +20,7 @@
20
20
  <script type="module" defer>
21
21
  import { create_component } from "/assets/index.js";
22
22
  const params = new URLSearchParams(location.search);
23
- const { destroy } = await create_component(document.getElementById("xit"), {
23
+ const destroy = await create_component(document.getElementById("xit"), {
24
24
  server: `${location.host}/ws`,
25
25
  frame: params.get("frame") ?? "demo",
26
26
  tag: params.get("tag"),
package/assets/index.js CHANGED
@@ -2860,29 +2860,31 @@ const protobufjs = /* @__PURE__ */ getDefaultExportFromCjs(light), proto_data =
2860
2860
  }, h = (y) => y in d ? d[y]() : import(
2861
2861
  /* @vite-ignore */
2862
2862
  y
2863
- ), { action: c } = await l(h), p = concat([
2864
- header(nil_xit_proto.MessageType.MessageType_FrameLoaded),
2865
- nil_xit_proto.FrameLoaded.encode({ id: e, tag: n }).finish()
2866
- ]);
2867
- return s.start(), s.on_connect(() => {
2863
+ ), { action: c } = await l(h);
2864
+ s.on_connect(() => {
2868
2865
  const y = concat([
2869
2866
  header(nil_xit_proto.MessageType.MessageType_FrameSubscribe),
2870
2867
  nil_xit_proto.FrameLoaded.encode({ id: e, tag: n }).finish()
2871
2868
  ]);
2872
2869
  s.publish(y);
2873
- }), service_publish(t, p), (y) => {
2870
+ }), s.start();
2871
+ const p = concat([
2872
+ header(nil_xit_proto.MessageType.MessageType_FrameLoaded),
2873
+ nil_xit_proto.FrameLoaded.encode({ id: e, tag: n }).finish()
2874
+ ]);
2875
+ return service_publish(t, p), (y) => {
2874
2876
  const _ = /* @__PURE__ */ new Map();
2875
2877
  _.set("nil.xit", {
2876
2878
  values: create_context_values(o),
2877
2879
  signals: create_context_signals(r),
2878
2880
  frame_ui: u,
2879
- frame: a
2881
+ frame: a,
2882
+ resub: () => s.start(),
2883
+ unsub: () => s.stop()
2880
2884
  });
2881
- const { destroy: v } = c(y, _);
2882
- return {
2883
- destroy: () => {
2884
- s.stop(), v();
2885
- }
2885
+ const v = c(y, _);
2886
+ return () => {
2887
+ s.stop(), v();
2886
2888
  };
2887
2889
  };
2888
2890
  }, create_frame = async ({
@@ -2895,17 +2897,24 @@ const protobufjs = /* @__PURE__ */ getDefaultExportFromCjs(light), proto_data =
2895
2897
  const u = new Service$1(f), [a, t] = await Promise.all([
2896
2898
  make_values({ id: e, tag: n ?? null, host: i, service: u }),
2897
2899
  make_signals({ id: e, tag: n ?? null, host: i, service: u })
2898
- ]), s = concat([
2899
- header(nil_xit_proto.MessageType.MessageType_FrameLoaded),
2900
- nil_xit_proto.FrameLoaded.encode({ id: e, tag: n ?? null }).finish()
2901
2900
  ]);
2902
- return u.start(), u.on_connect(() => {
2901
+ u.on_connect(() => {
2903
2902
  const o = concat([
2904
2903
  header(nil_xit_proto.MessageType.MessageType_FrameSubscribe),
2905
2904
  nil_xit_proto.FrameLoaded.encode({ id: e, tag: n ?? null }).finish()
2906
2905
  ]);
2907
2906
  u.publish(o);
2908
- }), service_publish(f, s), { values: create_context_values(a), signals: create_context_signals(t) };
2907
+ }), u.start();
2908
+ const s = concat([
2909
+ header(nil_xit_proto.MessageType.MessageType_FrameLoaded),
2910
+ nil_xit_proto.FrameLoaded.encode({ id: e, tag: n ?? null }).finish()
2911
+ ]);
2912
+ return service_publish(f, s), {
2913
+ values: create_context_values(a),
2914
+ signals: create_context_signals(t),
2915
+ resub: () => u.start(),
2916
+ unsub: () => u.stop()
2917
+ };
2909
2918
  }, create_frame_ui = async ({
2910
2919
  server: i,
2911
2920
  cdn_url: e,
package/index.d.ts CHANGED
@@ -1,6 +1,4 @@
1
- export type Action<T> = (target: T) => {
2
- destroy: () => void;
3
- };
1
+ export type Action<T> = (target: T) => () => void;
4
2
  export type Writable<T> = {
5
3
  set: (v: T) => void;
6
4
  subscribe: (cb: (v: T) => void) => () => void;
@@ -27,7 +25,7 @@ export type Signals = {
27
25
  buffer: (t: string) => (v: Uint8Array) => void;
28
26
  json: (t: string, encoder: CoDec["encode"]) => (v: any) => void;
29
27
  };
30
- export type Xit = {
28
+ export type Context = {
31
29
  values: Values;
32
30
  signals: Signals;
33
31
  frame_ui: (f: string, tag?: string) => Promise<Action<HTMLDivElement>>;
@@ -35,6 +33,14 @@ export type Xit = {
35
33
  values: Values;
36
34
  signals: Signals;
37
35
  }>;
36
+ resub: () => void;
37
+ unsub: () => void;
38
+ };
39
+ export type Frame = {
40
+ values: Values;
41
+ signals: Signals;
42
+ resub: () => void;
43
+ unsub: () => void;
38
44
  };
39
45
  export declare const json_string: CoDec;
40
- export declare const xit: () => Xit;
46
+ export declare const xit: () => Context;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nil-/xit",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./package.json": "./package.json",