@acutis/cli 0.1.2-dev.17 → 0.1.2-dev.19

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.
Files changed (63) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/9eLkUDDj.js +1 -0
  3. package/.output/public/_nuxt/BGkBW2ni2.js +1 -0
  4. package/.output/public/_nuxt/BKydt2Wp2.js +4 -0
  5. package/.output/public/_nuxt/CDI0GNVb2.js +1 -0
  6. package/.output/public/_nuxt/CqZ7dV6a2.js +64 -0
  7. package/.output/public/_nuxt/{CC0OsuIz.js → DtncvtMS.js} +3 -3
  8. package/.output/public/_nuxt/builds/latest.json +1 -1
  9. package/.output/public/_nuxt/builds/meta/a872bf7d-d21f-4cc5-b4d7-6ddb7b63d620.json +1 -0
  10. package/.output/public/_nuxt/entry.Ci6Ki0cW.css +2 -0
  11. package/.output/public/_nuxt/tags.B5A43CvD.css +1 -0
  12. package/.output/server/chunks/_/auth2.mjs +3 -3
  13. package/.output/server/chunks/_/environment.mjs +2 -2
  14. package/.output/server/chunks/_/generation.mjs +3 -3
  15. package/.output/server/chunks/_/project.mjs +2 -2
  16. package/.output/server/chunks/_/project.service.mjs +2 -30
  17. package/.output/server/chunks/_/project.service.mjs.map +1 -1
  18. package/.output/server/chunks/_/recording.mjs +5 -2
  19. package/.output/server/chunks/_/recording.mjs.map +1 -1
  20. package/.output/server/chunks/_/scenario.mjs +4 -2
  21. package/.output/server/chunks/_/scenario.mjs.map +1 -1
  22. package/.output/server/chunks/_/scenario2.mjs +22 -5
  23. package/.output/server/chunks/_/scenario2.mjs.map +1 -1
  24. package/.output/server/chunks/_/spec-rules.mjs +28 -231
  25. package/.output/server/chunks/_/spec-rules.mjs.map +1 -1
  26. package/.output/server/chunks/build/{_...scenario_-DNqQ06NM.mjs → _...scenario_-CTwC_evr.mjs} +172 -31
  27. package/.output/server/chunks/build/_...scenario_-CTwC_evr.mjs.map +1 -0
  28. package/.output/server/chunks/build/{_slug_-BlLRYU9d.mjs → _slug_-DEXTo_9N.mjs} +58 -34
  29. package/.output/server/chunks/build/{_slug_-BlLRYU9d.mjs.map → _slug_-DEXTo_9N.mjs.map} +1 -1
  30. package/.output/server/chunks/build/{tags-DrKY6Ah4.mjs → tags-DQ0X0wtQ.mjs} +59 -14
  31. package/.output/server/chunks/build/{tags-DrKY6Ah4.mjs.map → tags-DQ0X0wtQ.mjs.map} +1 -1
  32. package/.output/server/chunks/build/timeline-styles.CzOXKr8R.mjs +9 -0
  33. package/.output/server/chunks/build/timeline-styles.CzOXKr8R.mjs.map +1 -0
  34. package/.output/server/chunks/nitro/nitro.mjs +680 -270
  35. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  36. package/.output/server/chunks/raw/driver-entry.mjs +1 -1
  37. package/.output/server/chunks/routes/api/projects/_slug/auth/record.post.mjs +1 -1
  38. package/.output/server/chunks/routes/api/projects/_slug/auth/skip.post.mjs +1 -1
  39. package/.output/server/chunks/routes/api/projects/_slug/auth.get.mjs +1 -1
  40. package/.output/server/chunks/routes/api/projects/_slug/auth.put.mjs +1 -1
  41. package/.output/server/chunks/routes/debug/close-page.post.mjs +40 -0
  42. package/.output/server/chunks/routes/debug/close-page.post.mjs.map +1 -0
  43. package/.output/server/chunks/routes/debug/replay-decision.post.mjs +43 -0
  44. package/.output/server/chunks/routes/debug/replay-decision.post.mjs.map +1 -0
  45. package/.output/server/chunks/routes/renderer.mjs +2 -2
  46. package/.output/server/chunks/routes/runner/video.get.mjs +1 -1
  47. package/.output/server/chunks/routes/ws.mjs +19 -2
  48. package/.output/server/chunks/routes/ws.mjs.map +1 -1
  49. package/.output/server/chunks/virtual/entry.mjs +3 -3
  50. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  51. package/.output/server/chunks/virtual/styles.mjs +2 -1
  52. package/.output/server/index.mjs +1 -1
  53. package/.output/server/package.json +1 -1
  54. package/dist-ui/driver-entry.js +3 -3
  55. package/package.json +1 -1
  56. package/.output/public/_nuxt/5GgR1mbX.js +0 -1
  57. package/.output/public/_nuxt/CTLrtTtn2.js +0 -64
  58. package/.output/public/_nuxt/D4ykC_lY2.js +0 -1
  59. package/.output/public/_nuxt/DDHUGtv32.js +0 -4
  60. package/.output/public/_nuxt/Dpnaldxf2.js +0 -1
  61. package/.output/public/_nuxt/builds/meta/f764322c-bb05-455d-81f9-a546df72cf7d.json +0 -1
  62. package/.output/public/_nuxt/entry.m-nAFUcz.css +0 -2
  63. package/.output/server/chunks/build/_...scenario_-DNqQ06NM.mjs.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { M as useState, v as useRoute, z as icon_default, _ as _sfc_main$2, m as modal_default$1, e as _sfc_main$1, N as useRequestEvent, C as _sfc_main$8, o as _sfc_main$6 } from '../virtual/entry.mjs';
2
2
  import { _ as _sfc_main } from './origin-_Ab6zkKk.mjs';
3
3
  import { c as codefield_default } from './modal-Cpj-bQgu.mjs';
4
+ import { _ as _plugin_vue_export_helper_default } from './_plugin-vue_export-helper-BOaGB7Aw.mjs';
4
5
  import { defineComponent, ref, computed, mergeProps, isRef, unref, useModel, withCtx, createVNode, renderSlot, createTextVNode, toDisplayString, mergeModels, watch, nextTick, useSSRContext } from 'vue';
5
6
  import { m as getRequestURL } from '../nitro/nitro.mjs';
6
7
  import { ssrRenderAttrs, ssrRenderComponent, ssrInterpolate, ssrRenderAttr, ssrRenderClass, ssrRenderList, ssrRenderSlot } from 'vue/server-renderer';
@@ -84,6 +85,24 @@ setup_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
84
85
  var setup_default = Object.assign(setup_vue_vue_type_script_setup_true_lang_default, { __name: "WebdriverSetup" });
85
86
  //#endregion
86
87
  //#region app/utils/recorder-event.ts
88
+ /** A gravação como o backend a guarda: os campos do evento, sem o que é do transporte. */
89
+ function toRecordedEvents(events) {
90
+ return events.map((event) => ({
91
+ type: event.type,
92
+ timestamp: event.timestamp,
93
+ url: event.url ?? null,
94
+ selectors: event.selectors ?? null,
95
+ label: event.label ?? null,
96
+ innerText: event.innerText ?? null,
97
+ tagName: event.tagName ?? null,
98
+ inputType: event.inputType ?? null,
99
+ value: event.value ?? null,
100
+ sensitive: event.sensitive ?? false,
101
+ checked: event.checked ?? null,
102
+ html: event.html ?? null,
103
+ assert: event.assert
104
+ }));
105
+ }
87
106
  /** Como o evento chama o elemento, na mesma ordem de fontes do `SpecEmitter` do backend. */
88
107
  function target(event) {
89
108
  const selectors = event.selectors;
@@ -120,7 +139,9 @@ function describeRecorderEvent(event) {
120
139
  return `Preenche ${field} com ${event.sensitive ? "••••" : quoted(event.value)}`;
121
140
  }
122
141
  case "submit": return "Envia o formulário";
123
- case "assert": return `Confere ${what ? quoted(what) : "o elemento"}`;
142
+ case "assert":
143
+ if (event.assert?.assertType === "url") return `Confere que a tela é ${page(event)}`;
144
+ return `Confere ${what ? quoted(what) : "o elemento"}`;
124
145
  default: return what ?? event.url ?? event.type ?? "";
125
146
  }
126
147
  }
@@ -132,11 +153,18 @@ var timeline_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
132
153
  props: {
133
154
  events: {},
134
155
  videoSrc: { default: null },
135
- recordingStartedAt: { default: null }
156
+ recordingStartedAt: { default: null },
157
+ resumable: {
158
+ type: Boolean,
159
+ default: false
160
+ }
136
161
  },
137
- setup(__props) {
162
+ emits: ["resume"],
163
+ setup(__props, { emit: __emit }) {
138
164
  ref(null);
139
165
  const currentTime = ref(0);
166
+ const armed = ref(null);
167
+ const ready = ref(false);
140
168
  const eventIcons = {
141
169
  navigate: "i-ic-round-public",
142
170
  click: "i-ic-round-ads-click",
@@ -156,22 +184,35 @@ var timeline_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
156
184
  });
157
185
  return index;
158
186
  });
187
+ /** Quantos passos saem da gravação quando o corte armado for confirmado. */
188
+ const dropped = computed(() => armed.value === null ? 0 : __props.events.length - armed.value);
159
189
  return (_ctx, _push, _parent, _attrs) => {
160
190
  const _component_UIcon = _sfc_main$2;
161
- _push(`<div${ssrRenderAttrs(mergeProps({ class: "grid grid-cols-1 gap-6 lg:grid-cols-5" }, _attrs))}>`);
162
- if (__props.videoSrc) _push(`<video data-testid="revisao-video"${ssrRenderAttr("src", __props.videoSrc)} controls class="w-full self-start rounded-lg lg:sticky lg:top-0 lg:col-span-3"></video>`);
191
+ _push(`<div${ssrRenderAttrs(mergeProps({ class: "grid grid-cols-1 gap-6 lg:grid-cols-5" }, _attrs))} data-v-46efcf33>`);
192
+ if (__props.videoSrc) _push(`<video data-testid="revisao-video"${ssrRenderAttr("src", __props.videoSrc)} controls class="w-full self-start rounded-lg lg:sticky lg:top-0 lg:col-span-3" data-v-46efcf33></video>`);
163
193
  else _push(`<!---->`);
164
- _push(`<div class="${ssrRenderClass(__props.videoSrc ? "lg:col-span-2" : "lg:col-span-5")}"><p class="mb-3 font-semibold"> Timeline dos eventos </p><ol class="flex flex-col"><!--[-->`);
194
+ _push(`<div class="${ssrRenderClass(__props.videoSrc ? "lg:col-span-2" : "lg:col-span-5")}" data-v-46efcf33><p class="mb-3 font-semibold" data-v-46efcf33> Timeline dos eventos </p><ol class="flex w-max max-w-full flex-col" data-v-46efcf33><!--[-->`);
165
195
  ssrRenderList(__props.events, (event, i) => {
166
- _push(`<li data-testid="revisao-evento"${ssrRenderAttr("data-current", i === unref(currentIndex) ? "true" : "false")} class="group flex cursor-pointer items-stretch gap-3"><div class="flex flex-col items-center">`);
196
+ _push(`<li data-testid="revisao-evento"${ssrRenderAttr("data-current", i === unref(currentIndex) ? "true" : "false")}${ssrRenderAttr("data-dropped", unref(armed) !== null && i >= unref(armed) ? "true" : "false")} class="${ssrRenderClass([unref(armed) !== null && i >= unref(armed) ? "opacity-50" : "", "group relative flex cursor-pointer items-stretch gap-3 transition-opacity"])}" data-v-46efcf33>`);
197
+ if (__props.resumable && i > 0) {
198
+ _push(`<button type="button" data-testid="revisao-retomar"${ssrRenderAttr("data-armed", unref(armed) === i ? "true" : "false")} class="${ssrRenderClass([unref(armed) === i ? "opacity-100!" : "", "absolute -top-5 -right-1.5 -left-1.5 z-10 flex h-4 items-center gap-2 opacity-0 transition-opacity focus-visible:opacity-100 group-hover:opacity-100"])}"${ssrRenderAttr("aria-label", unref(armed) === i ? `Confirmar a retomada deste passo, descartando ${unref(dropped)}` : "Retomar a gravação deste passo")} data-v-46efcf33><span class="${ssrRenderClass([unref(armed) === i ? "bg-error" : "bg-primary", "h-px flex-1 rounded-full"])}" data-v-46efcf33></span><span class="${ssrRenderClass([unref(armed) === i ? "bg-error text-inverted" : "bg-default text-primary", "rounded-full px-2 py-0.5 text-[10px] leading-none font-medium tracking-wide uppercase"])}" data-v-46efcf33>`);
199
+ if (unref(armed) !== i) _push(`<!--[-->retomar daqui<!--]-->`);
200
+ else if (unref(ready)) _push(`<!--[-->clique de novo · descarta ${ssrInterpolate(unref(dropped))}<!--]-->`);
201
+ else _push(`<!--[-->aguarde…<!--]-->`);
202
+ _push(`</span><span class="relative h-px flex-1 overflow-visible rounded-full bg-accented" data-v-46efcf33>`);
203
+ if (unref(armed) === i) _push(`<span class="arming absolute inset-y-0 left-0 rounded-full bg-error" data-v-46efcf33></span>`);
204
+ else _push(`<!---->`);
205
+ _push(`</span></button>`);
206
+ } else _push(`<!---->`);
207
+ _push(`<div class="flex flex-col items-center" data-v-46efcf33>`);
167
208
  _push(ssrRenderComponent(_component_UIcon, {
168
209
  name: eventIcons[event.type] ?? "i-ic-round-help-outline",
169
210
  class: ["size-5 shrink-0 transition-colors", i <= unref(currentIndex) ? "text-primary" : "text-muted"]
170
211
  }, null, _parent));
171
- if (i < __props.events.length - 1) _push(`<span class="${ssrRenderClass([i < unref(currentIndex) ? "bg-primary" : "bg-accented", "w-px grow transition-colors"])}"></span>`);
212
+ if (i < __props.events.length - 1) _push(`<span class="${ssrRenderClass([i < unref(currentIndex) ? "bg-primary" : "bg-accented", "w-px grow transition-colors"])}" data-v-46efcf33></span>`);
172
213
  else _push(`<!---->`);
173
- _push(`</div><div class="pb-4 min-w-0"><p class="${ssrRenderClass([i === unref(currentIndex) ? "font-semibold text-primary" : "text-default", "truncate text-sm transition-colors group-hover:text-highlighted"])}">${ssrInterpolate(unref(describeRecorderEvent)(event))}</p>`);
174
- if (__props.recordingStartedAt) _push(`<p class="text-xs text-dimmed">${ssrInterpolate(offsetSeconds(event).toFixed(1))}s </p>`);
214
+ _push(`</div><div class="pb-6 min-w-0 flex-1" data-v-46efcf33><p class="${ssrRenderClass([[i === unref(currentIndex) ? "font-semibold text-primary" : "text-default", unref(armed) !== null && i >= unref(armed) ? "line-through decoration-dimmed" : ""], "truncate text-sm transition-colors group-hover:text-highlighted"])}" data-v-46efcf33>${ssrInterpolate(unref(describeRecorderEvent)(event))}</p>`);
215
+ if (__props.recordingStartedAt) _push(`<p class="text-xs text-dimmed" data-v-46efcf33>${ssrInterpolate(offsetSeconds(event).toFixed(1))}s </p>`);
175
216
  else _push(`<!---->`);
176
217
  _push(`</div></li>`);
177
218
  });
@@ -187,7 +228,7 @@ timeline_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
187
228
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/scenario/review/timeline.vue");
188
229
  return _sfc_setup$2 ? _sfc_setup$2(props, ctx) : void 0;
189
230
  };
190
- var timeline_default = Object.assign(timeline_vue_vue_type_script_setup_true_lang_default, { __name: "ScenarioReviewTimeline" });
231
+ var timeline_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(timeline_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-46efcf33"]]), { __name: "ScenarioReviewTimeline" });
191
232
  //#endregion
192
233
  //#region app/components/base/confirm.vue?vue&type=script&setup=true&lang.ts
193
234
  var confirm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
@@ -535,6 +576,8 @@ function useWebdriver() {
535
576
  connected: false,
536
577
  extensionReady: false,
537
578
  recording: false,
579
+ replaying: false,
580
+ replayFailedStep: null,
538
581
  error: null,
539
582
  events: [],
540
583
  videoSessionId: null,
@@ -551,10 +594,12 @@ function useWebdriver() {
551
594
  function ensureConnected() {}
552
595
  function startRecording(mode = "scenario", options = {}) {
553
596
  state.value.error = null;
554
- state.value.events = [];
597
+ state.value.events = options.replay ?? [];
555
598
  state.value.videoSessionId = null;
556
599
  state.value.storageState = null;
557
600
  state.value.recording = true;
601
+ state.value.replaying = (options.replay?.length ?? 0) > 0;
602
+ state.value.replayFailedStep = null;
558
603
  send("START_RECORDING", {
559
604
  mode,
560
605
  ...options
@@ -590,5 +635,5 @@ function tagColor(tag) {
590
635
  return "primary";
591
636
  }
592
637
 
593
- export { timeline_default as a, contexts_default as b, confirm_default as c, draftFromScenario as d, eventsBaseUrl as e, setup_default as s, tagColor as t, useWebdriver as u };
594
- //# sourceMappingURL=tags-DrKY6Ah4.mjs.map
638
+ export { timeline_default as a, toRecordedEvents as b, confirm_default as c, draftFromScenario as d, eventsBaseUrl as e, contexts_default as f, setup_default as s, tagColor as t, useWebdriver as u };
639
+ //# sourceMappingURL=tags-DQ0X0wtQ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tags-DrKY6Ah4.mjs","sources":["../../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_416b7c14be74ec1137687d64bf90f040/node_modules/nuxt/dist/app/composables/url.js","../../../../app/components/webdriver/setup.vue","../../../../app/utils/recorder-event.ts","../../../../app/components/scenario/review/timeline.vue","../../../../app/components/base/confirm.vue","../../../../app/utils/scenario-draft.ts","../../../../app/components/scenario/review/contexts.vue","../../../../app/composables/webdriver.ts","../../../../app/utils/tags.ts"],"names":[],"mappings":"","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"tags-DQ0X0wtQ.mjs","sources":["../../../../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_416b7c14be74ec1137687d64bf90f040/node_modules/nuxt/dist/app/composables/url.js","../../../../app/components/webdriver/setup.vue","../../../../app/utils/recorder-event.ts","../../../../app/components/scenario/review/timeline.vue","../../../../app/components/base/confirm.vue","../../../../app/utils/scenario-draft.ts","../../../../app/components/scenario/review/contexts.vue","../../../../app/composables/webdriver.ts","../../../../app/utils/tags.ts"],"names":[],"mappings":"","x_google_ignoreList":[0]}
@@ -0,0 +1,9 @@
1
+ //#region app/components/scenario/review/timeline.vue?vue&type=style&index=0&scoped=46efcf33&inline&used&lang.css
2
+ var timeline_vue_vue_type_style_index_0_scoped_46efcf33_inline_used_lang_default = ".arming[data-v-46efcf33]{animation:.6s linear forwards arming-46efcf33}@keyframes arming-46efcf33{0%{width:0}to{width:100%}}@media (prefers-reduced-motion:reduce){.arming[data-v-46efcf33]{width:100%;animation-duration:1ms}}";
3
+
4
+ const timelineStyles_CzOXKr8R = [
5
+ timeline_vue_vue_type_style_index_0_scoped_46efcf33_inline_used_lang_default
6
+ ];
7
+
8
+ export { timelineStyles_CzOXKr8R as default };
9
+ //# sourceMappingURL=timeline-styles.CzOXKr8R.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-styles.CzOXKr8R.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/timeline-styles.CzOXKr8R.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0]}