@picked/vite-plugin-picked 0.0.1-dev.1773371977114 → 0.0.1-dev.1773724362573
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/cjs/index.js +23 -23
- package/dist/esm/index.js +33 -33
- package/package.json +2 -2
package/dist/cjs/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("@picked/client/plugins/dynamic-experiences");var h=Object.freeze,R=Object.defineProperty,I=(e,t)=>h(R(e,"raw",{value:h(t||e.slice())})),y;function b(e){const t=JSON.stringify(e),r=e.length>0?e.map(n=>`
|
|
2
2
|
<div class="feature-row">
|
|
3
3
|
<label>
|
|
4
|
-
<input type="checkbox" data-feature-id="${S(n.
|
|
4
|
+
<input type="checkbox" data-feature-id="${S(n.id)}" checked>
|
|
5
5
|
<span class="feature-name">${w(n.name)}</span>
|
|
6
|
-
<span class="feature-id">${w(n.
|
|
6
|
+
<span class="feature-id">${w(n.id)}</span>
|
|
7
7
|
</label>
|
|
8
|
-
<select data-value-for="${S(n.
|
|
8
|
+
<select data-value-for="${S(n.id)}">
|
|
9
9
|
<option value="true" selected>true</option>
|
|
10
10
|
<option value="false">false</option>
|
|
11
11
|
</select>
|
|
@@ -301,10 +301,10 @@
|
|
|
301
301
|
function saveSelections() {
|
|
302
302
|
var selections = {};
|
|
303
303
|
FEATURES.forEach(function(f) {
|
|
304
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
305
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
304
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
305
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
306
306
|
if (checkbox && select) {
|
|
307
|
-
selections[f.
|
|
307
|
+
selections[f.id] = { checked: checkbox.checked, value: select.value };
|
|
308
308
|
}
|
|
309
309
|
});
|
|
310
310
|
localStorage.setItem(STORAGE_KEY_SELECTIONS, JSON.stringify(selections));
|
|
@@ -313,10 +313,10 @@
|
|
|
313
313
|
function restoreSelections() {
|
|
314
314
|
var selections = getSelections();
|
|
315
315
|
FEATURES.forEach(function(f) {
|
|
316
|
-
var saved = selections[f.
|
|
316
|
+
var saved = selections[f.id];
|
|
317
317
|
if (!saved) return;
|
|
318
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
319
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
318
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
319
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
320
320
|
if (checkbox) checkbox.checked = saved.checked;
|
|
321
321
|
if (select) select.value = saved.value;
|
|
322
322
|
});
|
|
@@ -346,10 +346,10 @@
|
|
|
346
346
|
sep = '&';
|
|
347
347
|
}
|
|
348
348
|
FEATURES.forEach(function(f) {
|
|
349
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
350
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
349
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
350
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
351
351
|
if (checkbox && checkbox.checked && select) {
|
|
352
|
-
target = target + sep + 'picked-feature=' + encodeURIComponent(f.
|
|
352
|
+
target = target + sep + 'picked-feature=' + encodeURIComponent(f.id + ':' + select.value);
|
|
353
353
|
sep = '&';
|
|
354
354
|
}
|
|
355
355
|
});
|
|
@@ -724,10 +724,10 @@
|
|
|
724
724
|
function saveSelections() {
|
|
725
725
|
var selections = {};
|
|
726
726
|
FEATURES.forEach(function(f) {
|
|
727
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
728
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
727
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
728
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
729
729
|
if (checkbox && select) {
|
|
730
|
-
selections[f.
|
|
730
|
+
selections[f.id] = { checked: checkbox.checked, value: select.value };
|
|
731
731
|
}
|
|
732
732
|
});
|
|
733
733
|
localStorage.setItem(STORAGE_KEY_SELECTIONS, JSON.stringify(selections));
|
|
@@ -736,10 +736,10 @@
|
|
|
736
736
|
function restoreSelections() {
|
|
737
737
|
var selections = getSelections();
|
|
738
738
|
FEATURES.forEach(function(f) {
|
|
739
|
-
var saved = selections[f.
|
|
739
|
+
var saved = selections[f.id];
|
|
740
740
|
if (!saved) return;
|
|
741
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
742
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
741
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
742
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
743
743
|
if (checkbox) checkbox.checked = saved.checked;
|
|
744
744
|
if (select) select.value = saved.value;
|
|
745
745
|
});
|
|
@@ -769,10 +769,10 @@
|
|
|
769
769
|
sep = '&';
|
|
770
770
|
}
|
|
771
771
|
FEATURES.forEach(function(f) {
|
|
772
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
773
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
772
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
773
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
774
774
|
if (checkbox && checkbox.checked && select) {
|
|
775
|
-
target = target + sep + 'picked-feature=' + encodeURIComponent(f.
|
|
775
|
+
target = target + sep + 'picked-feature=' + encodeURIComponent(f.id + ':' + select.value);
|
|
776
776
|
sep = '&';
|
|
777
777
|
}
|
|
778
778
|
});
|
|
@@ -857,5 +857,5 @@
|
|
|
857
857
|
</body>
|
|
858
858
|
</html>`])),r,t)}function w(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function S(e){return e.replaceAll("&","&").replaceAll('"',""").replaceAll("<","<").replaceAll(">",">")}const E="picked",L="\x1B[0m";function O(){const e=process.env.NO_COLOR;return e==="1"||e==="true"}function c(e){return t=>O()?t:`${e}${t}${L}`}const x=["debug","info","warn","error","silent"],v={debug:{color:c("\x1B[2m"),log:console.debug,enabled:!1},info:{color:c("\x1B[36m"),log:console.log,enabled:!0},warn:{color:c("\x1B[33m"),log:console.warn,enabled:!0},error:{color:c("\x1B[31m"),log:console.error,enabled:!0},silent:{log:()=>{},enabled:!1}};function H(e,t){const r=new Date().toLocaleTimeString(),n=t?`${E}:${t}`:E;return`${r} [${n}] ${e}`}function g(e,t,r,n){if(!e.enabled)return;const o=H(t,n);e.log(e.color?e.color(o):o),r!==void 0&&e.log(r)}function p(e){const t=v[e],r=new Set;return Object.assign((n,o,i)=>{g(t,n,o,i)},{once(n,o,i){!t.enabled||r.has(n)||(r.add(n),g(t,n,o,i))}})}function $(e){const t=x.indexOf(e);if(t===-1){g(v.error,`invalid log level: ${e}`);return}for(const[r,n]of x.entries())v[n].enabled=r>=t}const s=c("\x1B[34m"),_=c("\x1B[36m");function C(){const e=[` ${s("_")} ${_("_")} _ _ _`,`${s("(_)")} ${_("(_)")} _ __(_)__| |_____ __| |`,` ${s("_")} ${s("_")} | '_ \\ / _| / / -_) _\` |`,`${s("(_)")} ${s("(_)")} | .__/_\\__|_\\_\\___\\__,_|`,` |_|
|
|
859
859
|
`];console.log(e.join(`
|
|
860
|
-
`))}const l={banner:C,debug:p("debug"),info:p("info"),warn:p("warn"),error:p("error"),setLevel:$};function Y(e){return(t,r,n)=>{if(t.method!=="GET"){n();return}const i=(t.url??"").split("?")[0];if(i!=="/"&&i!=="/index.html"){n();return}const a=e();r.setHeader("Content-Type","text/html"),r.statusCode=200,r.end(a)}}function B(e){if(e.length===0)return;const t=Math.max(4,...e.map(a=>a.name.length)),r=Math.max(
|
|
861
|
-
`))}function F(e){try{const t=new URL(e).hostname;return t==="localhost"||t==="127.0.0.1"||t==="::1"}catch{return!1}}function P(e){return new Promise(t=>{setTimeout(t,e)})}async function z(e,t,r){const n=await m.fetchProject(e,t,{headers:r});if(n||!F(e))return n;for(let o=1;o<=
|
|
860
|
+
`))}const l={banner:C,debug:p("debug"),info:p("info"),warn:p("warn"),error:p("error"),setLevel:$};function Y(e){return(t,r,n)=>{if(t.method!=="GET"){n();return}const i=(t.url??"").split("?")[0];if(i!=="/"&&i!=="/index.html"){n();return}const a=e();r.setHeader("Content-Type","text/html"),r.statusCode=200,r.end(a)}}function B(e){if(e.length===0)return;const t=Math.max(4,...e.map(a=>a.name.length)),r=Math.max(2,...e.map(a=>a.id.length)),n=` ${"Name".padEnd(t)} ${"ID".padEnd(r)} Status Weight Ver`,o=` ${"─".repeat(t)} ${"─".repeat(r)} ──────── ────── ───`,i=e.map(a=>{const d=a.enabled?"\x1B[32m enabled\x1B[0m":"\x1B[2mdisabled\x1B[0m",u=`${a.weight.toString()}%`.padStart(6),f=`v${a.version.toString()}`;return` ${a.name.padEnd(t)} ${a.id.padEnd(r)} ${d} ${u} ${f}`});console.log([""," Features:","",n,o,...i,""].join(`
|
|
861
|
+
`))}function F(e){try{const t=new URL(e).hostname;return t==="localhost"||t==="127.0.0.1"||t==="::1"}catch{return!1}}function P(e){return new Promise(t=>{setTimeout(t,e)})}async function z(e,t,r){const n=await m.fetchProject(e,t,{headers:r});if(n||!F(e))return n;for(let o=1;o<=T;o++){l.info(`local API not ready, retrying in ${(k/1e3).toString()}s (${o.toString()}/${T.toString()})`),await P(k);const i=await m.fetchProject(e,t,{headers:r});if(i)return i}return null}function N(){return"0.0.1-dev.1773724362573"}const A="https://api.picked.app",j="__PICKED_PROJECT_CONFIG__",T=5,k=2e3;function G(e){const t=e.apiUrl??A;let r=[];return{name:"picked",config:async()=>{l.banner(),l.info(`fetching project config for "${e.projectId}"`),t!==A&&l.warn(`using custom API URL: ${t}`);const n=m.createClientHeaders("vite-plugin",N()),o=performance.now(),i=await z(t,e.projectId,n),a=(performance.now()-o).toFixed(0);if(!i){l.warn(`failed to fetch project config for "${e.projectId}" (${a}ms)`);return}r=i.features;const d=i.features.length,u=i.features.filter(U=>U.enabled).length,f=JSON.stringify(i).length;return l.info(`fetched ${d.toString()} features (${u.toString()} enabled) for "${e.projectId}" in ${a}ms`),B(i.features),l.debug(`config size: ${f.toString()} bytes`),{define:{[j]:JSON.stringify(i)}}},configureServer(n){if(e.disableLauncher)return;n.middlewares.use(Y(()=>b(r)));const o=n.printUrls.bind(n);n.printUrls=()=>{const i=n.resolvedUrls?.local[0];if(i){const a=i.replace(/:(?<port>\d+)\//,(d,u)=>`:\x1B[1m${u}\x1B[22m/`);console.log(` \x1B[32m➜\x1B[0m \x1B[1mPicked\x1B[22m: \x1B[36m${a}\x1B[0m`)}o()}},generateBundle(){e.disableLauncher||this.emitFile({type:"asset",fileName:"index.html",source:b(r)})}}}exports.picked=G;
|
package/dist/esm/index.js
CHANGED
|
@@ -5,11 +5,11 @@ function b(e) {
|
|
|
5
5
|
(n) => `
|
|
6
6
|
<div class="feature-row">
|
|
7
7
|
<label>
|
|
8
|
-
<input type="checkbox" data-feature-id="${S(n.
|
|
8
|
+
<input type="checkbox" data-feature-id="${S(n.id)}" checked>
|
|
9
9
|
<span class="feature-name">${w(n.name)}</span>
|
|
10
|
-
<span class="feature-id">${w(n.
|
|
10
|
+
<span class="feature-id">${w(n.id)}</span>
|
|
11
11
|
</label>
|
|
12
|
-
<select data-value-for="${S(n.
|
|
12
|
+
<select data-value-for="${S(n.id)}">
|
|
13
13
|
<option value="true" selected>true</option>
|
|
14
14
|
<option value="false">false</option>
|
|
15
15
|
</select>
|
|
@@ -307,10 +307,10 @@ function b(e) {
|
|
|
307
307
|
function saveSelections() {
|
|
308
308
|
var selections = {};
|
|
309
309
|
FEATURES.forEach(function(f) {
|
|
310
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
311
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
310
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
311
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
312
312
|
if (checkbox && select) {
|
|
313
|
-
selections[f.
|
|
313
|
+
selections[f.id] = { checked: checkbox.checked, value: select.value };
|
|
314
314
|
}
|
|
315
315
|
});
|
|
316
316
|
localStorage.setItem(STORAGE_KEY_SELECTIONS, JSON.stringify(selections));
|
|
@@ -319,10 +319,10 @@ function b(e) {
|
|
|
319
319
|
function restoreSelections() {
|
|
320
320
|
var selections = getSelections();
|
|
321
321
|
FEATURES.forEach(function(f) {
|
|
322
|
-
var saved = selections[f.
|
|
322
|
+
var saved = selections[f.id];
|
|
323
323
|
if (!saved) return;
|
|
324
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
325
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
324
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
325
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
326
326
|
if (checkbox) checkbox.checked = saved.checked;
|
|
327
327
|
if (select) select.value = saved.value;
|
|
328
328
|
});
|
|
@@ -352,10 +352,10 @@ function b(e) {
|
|
|
352
352
|
sep = '&';
|
|
353
353
|
}
|
|
354
354
|
FEATURES.forEach(function(f) {
|
|
355
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
356
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
355
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
356
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
357
357
|
if (checkbox && checkbox.checked && select) {
|
|
358
|
-
target = target + sep + 'picked-feature=' + encodeURIComponent(f.
|
|
358
|
+
target = target + sep + 'picked-feature=' + encodeURIComponent(f.id + ':' + select.value);
|
|
359
359
|
sep = '&';
|
|
360
360
|
}
|
|
361
361
|
});
|
|
@@ -730,10 +730,10 @@ function b(e) {
|
|
|
730
730
|
function saveSelections() {
|
|
731
731
|
var selections = {};
|
|
732
732
|
FEATURES.forEach(function(f) {
|
|
733
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
734
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
733
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
734
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
735
735
|
if (checkbox && select) {
|
|
736
|
-
selections[f.
|
|
736
|
+
selections[f.id] = { checked: checkbox.checked, value: select.value };
|
|
737
737
|
}
|
|
738
738
|
});
|
|
739
739
|
localStorage.setItem(STORAGE_KEY_SELECTIONS, JSON.stringify(selections));
|
|
@@ -742,10 +742,10 @@ function b(e) {
|
|
|
742
742
|
function restoreSelections() {
|
|
743
743
|
var selections = getSelections();
|
|
744
744
|
FEATURES.forEach(function(f) {
|
|
745
|
-
var saved = selections[f.
|
|
745
|
+
var saved = selections[f.id];
|
|
746
746
|
if (!saved) return;
|
|
747
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
748
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
747
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
748
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
749
749
|
if (checkbox) checkbox.checked = saved.checked;
|
|
750
750
|
if (select) select.value = saved.value;
|
|
751
751
|
});
|
|
@@ -775,10 +775,10 @@ function b(e) {
|
|
|
775
775
|
sep = '&';
|
|
776
776
|
}
|
|
777
777
|
FEATURES.forEach(function(f) {
|
|
778
|
-
var checkbox = document.querySelector('input[data-feature-id="' + f.
|
|
779
|
-
var select = document.querySelector('select[data-value-for="' + f.
|
|
778
|
+
var checkbox = document.querySelector('input[data-feature-id="' + f.id + '"]');
|
|
779
|
+
var select = document.querySelector('select[data-value-for="' + f.id + '"]');
|
|
780
780
|
if (checkbox && checkbox.checked && select) {
|
|
781
|
-
target = target + sep + 'picked-feature=' + encodeURIComponent(f.
|
|
781
|
+
target = target + sep + 'picked-feature=' + encodeURIComponent(f.id + ':' + select.value);
|
|
782
782
|
sep = '&';
|
|
783
783
|
}
|
|
784
784
|
});
|
|
@@ -975,9 +975,9 @@ function B(e) {
|
|
|
975
975
|
function F(e) {
|
|
976
976
|
if (e.length === 0)
|
|
977
977
|
return;
|
|
978
|
-
const t = Math.max(4, ...e.map((a) => a.name.length)), r = Math.max(
|
|
978
|
+
const t = Math.max(4, ...e.map((a) => a.name.length)), r = Math.max(2, ...e.map((a) => a.id.length)), n = ` ${"Name".padEnd(t)} ${"ID".padEnd(r)} Status Weight Ver`, o = ` ${"─".repeat(t)} ${"─".repeat(r)} ──────── ────── ───`, i = e.map((a) => {
|
|
979
979
|
const d = a.enabled ? "\x1B[32m enabled\x1B[0m" : "\x1B[2mdisabled\x1B[0m", u = `${a.weight.toString()}%`.padStart(6), f = `v${a.version.toString()}`;
|
|
980
|
-
return ` ${a.name.padEnd(t)} ${a.
|
|
980
|
+
return ` ${a.name.padEnd(t)} ${a.id.padEnd(r)} ${d} ${u} ${f}`;
|
|
981
981
|
});
|
|
982
982
|
console.log(["", " Features:", "", n, o, ...i, ""].join(`
|
|
983
983
|
`));
|
|
@@ -999,28 +999,28 @@ async function N(e, t, r) {
|
|
|
999
999
|
const n = await g(e, t, { headers: r });
|
|
1000
1000
|
if (n || !z(e))
|
|
1001
1001
|
return n;
|
|
1002
|
-
for (let o = 1; o <=
|
|
1002
|
+
for (let o = 1; o <= T; o++) {
|
|
1003
1003
|
l.info(
|
|
1004
|
-
`local API not ready, retrying in ${(
|
|
1005
|
-
), await P(
|
|
1004
|
+
`local API not ready, retrying in ${(k / 1e3).toString()}s (${o.toString()}/${T.toString()})`
|
|
1005
|
+
), await P(k);
|
|
1006
1006
|
const i = await g(e, t, { headers: r });
|
|
1007
1007
|
if (i)
|
|
1008
1008
|
return i;
|
|
1009
1009
|
}
|
|
1010
1010
|
return null;
|
|
1011
1011
|
}
|
|
1012
|
-
function
|
|
1013
|
-
return "0.0.1-dev.
|
|
1012
|
+
function G() {
|
|
1013
|
+
return "0.0.1-dev.1773724362573";
|
|
1014
1014
|
}
|
|
1015
|
-
const
|
|
1015
|
+
const A = "https://api.picked.app", K = "__PICKED_PROJECT_CONFIG__", T = 5, k = 2e3;
|
|
1016
1016
|
function q(e) {
|
|
1017
|
-
const t = e.apiUrl ??
|
|
1017
|
+
const t = e.apiUrl ?? A;
|
|
1018
1018
|
let r = [];
|
|
1019
1019
|
return {
|
|
1020
1020
|
name: "picked",
|
|
1021
1021
|
config: async () => {
|
|
1022
|
-
l.banner(), l.info(`fetching project config for "${e.projectId}"`), t !==
|
|
1023
|
-
const n = R("vite-plugin",
|
|
1022
|
+
l.banner(), l.info(`fetching project config for "${e.projectId}"`), t !== A && l.warn(`using custom API URL: ${t}`);
|
|
1023
|
+
const n = R("vite-plugin", G()), o = performance.now(), i = await N(t, e.projectId, n), a = (performance.now() - o).toFixed(0);
|
|
1024
1024
|
if (!i) {
|
|
1025
1025
|
l.warn(`failed to fetch project config for "${e.projectId}" (${a}ms)`);
|
|
1026
1026
|
return;
|
|
@@ -1031,7 +1031,7 @@ function q(e) {
|
|
|
1031
1031
|
`fetched ${d.toString()} features (${u.toString()} enabled) for "${e.projectId}" in ${a}ms`
|
|
1032
1032
|
), F(i.features), l.debug(`config size: ${f.toString()} bytes`), {
|
|
1033
1033
|
define: {
|
|
1034
|
-
[
|
|
1034
|
+
[K]: JSON.stringify(i)
|
|
1035
1035
|
}
|
|
1036
1036
|
};
|
|
1037
1037
|
},
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@picked/vite-plugin-picked",
|
|
3
3
|
"description": "Vite plugin for build-time config injection",
|
|
4
|
-
"version": "0.0.1-dev.
|
|
4
|
+
"version": "0.0.1-dev.1773724362573",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@picked/client": "0.0.1-dev.
|
|
6
|
+
"@picked/client": "0.0.1-dev.1773724362573"
|
|
7
7
|
},
|
|
8
8
|
"devDependencies": {
|
|
9
9
|
"@repo/eslint-config": "workspace:*",
|