@base44-preview/cli 0.1.32-pr.663.8c44c88 → 0.1.32-pr.663.a2a6b70
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/README.md +2 -2
- package/dist/cli/index.js +357 -184
- package/dist/cli/index.js.map +17 -15
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -39570,9 +39570,9 @@ function tm(e, t, r) {
|
|
|
39570
39570
|
return l(["<", r("name"), r("typeArguments"), " ", ...e.map(r, "attributes"), n.selfClosing ? " />" : ">"]);
|
|
39571
39571
|
let i = n.attributes?.some((u) => V3(u.value) && u.value.value.includes(`
|
|
39572
39572
|
`)), o = t.singleAttributePerLine && n.attributes.length > 1 ? E : A;
|
|
39573
|
-
return l(["<", r("name"), r("typeArguments"), m(e.map(() => [o, r()], "attributes")), ...
|
|
39573
|
+
return l(["<", r("name"), r("typeArguments"), m(e.map(() => [o, r()], "attributes")), ...rm3(n, t, s)], { shouldBreak: i });
|
|
39574
39574
|
}
|
|
39575
|
-
function
|
|
39575
|
+
function rm3(e, t, r) {
|
|
39576
39576
|
return e.selfClosing ? [A, "/>"] : nm(e, t, r) ? [">"] : [f, ">"];
|
|
39577
39577
|
}
|
|
39578
39578
|
function nm(e, t, r) {
|
|
@@ -111521,7 +111521,7 @@ function N62(e) {
|
|
|
111521
111521
|
function nm2(e, t, a) {
|
|
111522
111522
|
return ie10(t, a, e.typeParameters) || ie10(t, a, e.parameters) || S7(t, e.type);
|
|
111523
111523
|
}
|
|
111524
|
-
function
|
|
111524
|
+
function rm4(e, t, a) {
|
|
111525
111525
|
return ie10(t, a, e.types);
|
|
111526
111526
|
}
|
|
111527
111527
|
function im2(e, t, a) {
|
|
@@ -114489,7 +114489,7 @@ ${Me.join(`
|
|
|
114489
114489
|
return S7(a, t.elementType);
|
|
114490
114490
|
}, 190: function(t, a, _) {
|
|
114491
114491
|
return ie10(a, _, t.elements);
|
|
114492
|
-
}, 193:
|
|
114492
|
+
}, 193: rm4, 194: rm4, 195: function(t, a, _) {
|
|
114493
114493
|
return S7(a, t.checkType) || S7(a, t.extendsType) || S7(a, t.trueType) || S7(a, t.falseType);
|
|
114494
114494
|
}, 196: function(t, a, _) {
|
|
114495
114495
|
return S7(a, t.typeParameter);
|
|
@@ -119123,7 +119123,7 @@ import url22 from "url";
|
|
|
119123
119123
|
function diffLines(oldStr, newStr, options8) {
|
|
119124
119124
|
return lineDiff.diff(oldStr, newStr, options8);
|
|
119125
119125
|
}
|
|
119126
|
-
function
|
|
119126
|
+
function tokenize2(value, options8) {
|
|
119127
119127
|
if (options8.stripTrailingCr) {
|
|
119128
119128
|
value = value.replace(/\r\n/g, `
|
|
119129
119129
|
`);
|
|
@@ -120053,7 +120053,7 @@ function highlight(text) {
|
|
|
120053
120053
|
for (const {
|
|
120054
120054
|
type,
|
|
120055
120055
|
value
|
|
120056
|
-
} of
|
|
120056
|
+
} of tokenize22(text)) {
|
|
120057
120057
|
if (type in defs) {
|
|
120058
120058
|
highlighted += value.split(NEWLINE$1).map((str) => defs[type](str)).join(`
|
|
120059
120059
|
`);
|
|
@@ -124581,7 +124581,7 @@ var require2, __filename2, __dirname3, __create2, __defProp3, __getOwnPropDesc2,
|
|
|
124581
124581
|
return internalize({ "": root }, "", reviver);
|
|
124582
124582
|
}
|
|
124583
124583
|
return root;
|
|
124584
|
-
}, lexState, buffer, doubleQuote, sign, c7, lexStates, parseStates, dist_default, import_picocolors4, import_js_tokens, nonASCIIidentifierStartChars = "ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-Ა-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ--ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ", nonASCIIidentifierChars = "·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛-࢟࣊-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍୕-ୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఄ఼ా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ೳഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ඁ-ඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ຼ່-໎໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜕ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠏-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᪿ--ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭᳴᳷-᳹᷀-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯・꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧ꠬ꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱ꣿ-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_・", nonASCIIidentifierStart, nonASCIIidentifier, reservedWords, keywords, reservedWordsStrictSet, reservedWordsStrictBindSet, compose = (f, g) => (v) => f(g(v)), defsOn, defsOff, sometimesKeywords, NEWLINE$1, BRACKET,
|
|
124584
|
+
}, lexState, buffer, doubleQuote, sign, c7, lexStates, parseStates, dist_default, import_picocolors4, import_js_tokens, nonASCIIidentifierStartChars = "ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-Ა-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ--ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ", nonASCIIidentifierChars = "·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛-࢟࣊-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍୕-ୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఄ఼ా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ೳഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ඁ-ඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ຼ່-໎໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜕ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠏-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᪿ--ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭᳴᳷-᳹᷀-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯・꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧ꠬ꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱ꣿ-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_・", nonASCIIidentifierStart, nonASCIIidentifier, reservedWords, keywords, reservedWordsStrictSet, reservedWordsStrictBindSet, compose = (f, g) => (v) => f(g(v)), defsOn, defsOff, sometimesKeywords, NEWLINE$1, BRACKET, tokenize22, NEWLINE, getOffsets = ({
|
|
124585
124585
|
oneBased,
|
|
124586
124586
|
oneBasedLine = oneBased,
|
|
124587
124587
|
oneBasedColumn = oneBased
|
|
@@ -133471,7 +133471,7 @@ globstar while`, file, fr, pattern, pr, swallowee);
|
|
|
133471
133471
|
LineDiff = class extends Diff {
|
|
133472
133472
|
constructor() {
|
|
133473
133473
|
super(...arguments);
|
|
133474
|
-
this.tokenize =
|
|
133474
|
+
this.tokenize = tokenize2;
|
|
133475
133475
|
}
|
|
133476
133476
|
equals(left, right, options8) {
|
|
133477
133477
|
if (options8.ignoreWhitespace) {
|
|
@@ -134348,7 +134348,7 @@ globstar while`, file, fr, pattern, pr, swallowee);
|
|
|
134348
134348
|
return "uncolored";
|
|
134349
134349
|
}
|
|
134350
134350
|
};
|
|
134351
|
-
|
|
134351
|
+
tokenize22 = function* (text) {
|
|
134352
134352
|
for (const token2 of (0, import_js_tokens.default)(text, {
|
|
134353
134353
|
jsx: true
|
|
134354
134354
|
})) {
|
|
@@ -247587,8 +247587,8 @@ function normalizeDatetime(value) {
|
|
|
247587
247587
|
return `${value}Z`;
|
|
247588
247588
|
}
|
|
247589
247589
|
// src/cli/utils/json.ts
|
|
247590
|
-
function toJsonStdout(result) {
|
|
247591
|
-
return `${JSON.stringify(result, null, 2)}
|
|
247590
|
+
function toJsonStdout(result, options = {}) {
|
|
247591
|
+
return `${JSON.stringify(result, null, options.compact ? undefined : 2)}
|
|
247592
247592
|
`;
|
|
247593
247593
|
}
|
|
247594
247594
|
// src/cli/errors.ts
|
|
@@ -249102,19 +249102,30 @@ var wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
|
249102
249102
|
var SPACE_OR_PUNCTUATION = /[\n\r\p{Z}\p{P}]+/u;
|
|
249103
249103
|
|
|
249104
249104
|
// src/core/api-spec/search.ts
|
|
249105
|
-
var BOOST = {
|
|
249105
|
+
var BOOST = {
|
|
249106
|
+
method: 1,
|
|
249107
|
+
path: 8,
|
|
249108
|
+
summary: 5,
|
|
249109
|
+
description: 2,
|
|
249110
|
+
parameters: 0.5
|
|
249111
|
+
};
|
|
249106
249112
|
var MIN_RELATIVE_SCORE = 0.2;
|
|
249107
249113
|
var TOKEN_SEPARATOR = /[\n\r\p{Z}\p{P}\p{S}]+/u;
|
|
249114
|
+
var STOPWORDS = new Set("a an and are at be by do does for from how i id in is it its me my of on or our that the this to we what who with you your".split(" "));
|
|
249115
|
+
function tokenize(text) {
|
|
249116
|
+
return text.split(TOKEN_SEPARATOR).filter((word) => word.length >= 2 && !STOPWORDS.has(word.toLowerCase()));
|
|
249117
|
+
}
|
|
249108
249118
|
function toOperationSummary(op) {
|
|
249109
249119
|
return { endpoint: op.endpoint, summary: op.summary };
|
|
249110
249120
|
}
|
|
249111
249121
|
function buildSearchIndex(operations) {
|
|
249112
249122
|
const index = new MiniSearch({
|
|
249113
|
-
fields: ["path", "summary", "description", "parameters"],
|
|
249114
|
-
tokenize
|
|
249123
|
+
fields: ["method", "path", "summary", "description", "parameters"],
|
|
249124
|
+
tokenize
|
|
249115
249125
|
});
|
|
249116
249126
|
index.addAll(operations.map((op, id) => ({
|
|
249117
249127
|
id,
|
|
249128
|
+
method: op.method,
|
|
249118
249129
|
path: op.path.replace(/\{[^}]*\}/g, ""),
|
|
249119
249130
|
summary: op.summary,
|
|
249120
249131
|
description: op.description,
|
|
@@ -249122,16 +249133,37 @@ function buildSearchIndex(operations) {
|
|
|
249122
249133
|
})));
|
|
249123
249134
|
return index;
|
|
249124
249135
|
}
|
|
249136
|
+
function summaryMatch(terms, op) {
|
|
249137
|
+
const words = tokenize(op?.summary.toLowerCase() ?? "");
|
|
249138
|
+
const named = (word) => terms.some((term) => word.startsWith(term));
|
|
249139
|
+
return {
|
|
249140
|
+
coverage: terms.filter((term) => words.some((word) => word.startsWith(term))).length / terms.length,
|
|
249141
|
+
precision: words.length ? words.filter(named).length / words.length : 0
|
|
249142
|
+
};
|
|
249143
|
+
}
|
|
249144
|
+
var readsFirst = (op) => op?.method === "GET" ? 0 : 1;
|
|
249125
249145
|
function searchOperations(operations, query, options = {}) {
|
|
249146
|
+
const terms = tokenize(query.toLowerCase());
|
|
249147
|
+
if (terms.length === 0) {
|
|
249148
|
+
return [];
|
|
249149
|
+
}
|
|
249126
249150
|
const index = buildSearchIndex(operations);
|
|
249127
249151
|
const hits = index.search(query, {
|
|
249128
|
-
prefix:
|
|
249129
|
-
fuzzy: 0.2,
|
|
249152
|
+
prefix: (term) => term.length >= 3,
|
|
249153
|
+
fuzzy: (term) => term.length >= 4 ? 0.2 : false,
|
|
249130
249154
|
boost: BOOST,
|
|
249131
249155
|
filter: options.readOnly ? (hit) => operations[hit.id]?.readOnly === true : undefined
|
|
249132
|
-
})
|
|
249133
|
-
|
|
249134
|
-
|
|
249156
|
+
}).map((hit) => {
|
|
249157
|
+
const match = summaryMatch(terms, operations[hit.id]);
|
|
249158
|
+
return {
|
|
249159
|
+
...hit,
|
|
249160
|
+
...match,
|
|
249161
|
+
full: match.coverage === 1,
|
|
249162
|
+
score: hit.score * (1 + match.coverage)
|
|
249163
|
+
};
|
|
249164
|
+
}).sort((a, b) => Number(b.full) - Number(a.full) || (a.full ? b.precision - a.precision || readsFirst(operations[a.id]) - readsFirst(operations[b.id]) : 0) || b.score - a.score);
|
|
249165
|
+
const baseline = Math.max(0, ...hits.map((hit) => hit.score)) * MIN_RELATIVE_SCORE;
|
|
249166
|
+
return hits.filter((hit) => hit.full || hit.score >= baseline).slice(0, options.limit ?? 5).flatMap((hit) => {
|
|
249135
249167
|
const op = operations[hit.id];
|
|
249136
249168
|
return op ? [toOperationSummary(op)] : [];
|
|
249137
249169
|
});
|
|
@@ -249140,6 +249172,7 @@ function searchOperations(operations, query, options = {}) {
|
|
|
249140
249172
|
// src/core/api-spec/catalog.ts
|
|
249141
249173
|
var INLINE_AREA_MAX = 2;
|
|
249142
249174
|
var AREA_SAMPLE_MAX = 3;
|
|
249175
|
+
var AREA_OPERATIONS_MAX = 200;
|
|
249143
249176
|
var byCodePoint = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
249144
249177
|
function areaOf(path) {
|
|
249145
249178
|
const parts = path.split("/").filter(Boolean);
|
|
@@ -249161,7 +249194,7 @@ function groupByArea(operations) {
|
|
|
249161
249194
|
}
|
|
249162
249195
|
return new Map([...areas].sort(([a], [b]) => byCodePoint(a, b)));
|
|
249163
249196
|
}
|
|
249164
|
-
function
|
|
249197
|
+
function readsFirst2(ops) {
|
|
249165
249198
|
const isRead = (op) => op.method === "GET" ? 0 : 1;
|
|
249166
249199
|
return [...ops].sort((a, b) => isRead(a) - isRead(b));
|
|
249167
249200
|
}
|
|
@@ -249169,48 +249202,17 @@ function catalogIndex(operations) {
|
|
|
249169
249202
|
const areas = [...groupByArea(operations)].map(([area, ops]) => ops.length <= INLINE_AREA_MAX ? { area, operations: ops.map(toOperationSummary) } : {
|
|
249170
249203
|
area,
|
|
249171
249204
|
operationCount: ops.length,
|
|
249172
|
-
sample:
|
|
249205
|
+
sample: readsFirst2(ops).slice(0, AREA_SAMPLE_MAX).map((op) => op.summary)
|
|
249173
249206
|
});
|
|
249174
249207
|
return { areas, total: operations.length };
|
|
249175
249208
|
}
|
|
249176
|
-
|
|
249177
|
-
|
|
249178
|
-
|
|
249179
|
-
|
|
249180
|
-
|
|
249181
|
-
|
|
249182
|
-
}
|
|
249183
|
-
function snippets(text, pattern) {
|
|
249184
|
-
const found = [];
|
|
249185
|
-
for (const match of text.matchAll(pattern)) {
|
|
249186
|
-
const start = Math.max(0, match.index - CONTEXT_CHARS);
|
|
249187
|
-
const end = match.index + match[0].length + CONTEXT_CHARS;
|
|
249188
|
-
found.push(unescapeJson(text.slice(start, Math.min(end, start + MAX_SNIPPET_CHARS))));
|
|
249189
|
-
if (found.length === MAX_SNIPPETS || match[0].length === 0) {
|
|
249190
|
-
break;
|
|
249191
|
-
}
|
|
249192
|
-
}
|
|
249193
|
-
return found;
|
|
249194
|
-
}
|
|
249195
|
-
function grepSpec(spec, operations, pattern, options = {}) {
|
|
249196
|
-
const regex = new RegExp(pattern, options.ignoreCase ? "gi" : "g");
|
|
249197
|
-
const hits = [];
|
|
249198
|
-
const selected = (op) => (options.area === undefined || areaOf(op.path) === options.area) && (!options.readOnly || op.readOnly);
|
|
249199
|
-
for (const op of operations.filter(selected)) {
|
|
249200
|
-
const { summary, description, parameters, requestBody, responses } = op.operation;
|
|
249201
|
-
const matches = snippets(`${op.endpoint} ${JSON.stringify({ summary, description, parameters, requestBody, responses })}`, regex);
|
|
249202
|
-
if (matches.length > 0) {
|
|
249203
|
-
hits.push({ ...toOperationSummary(op), matches });
|
|
249204
|
-
}
|
|
249205
|
-
}
|
|
249206
|
-
const schemas = options.area === undefined && !options.readOnly ? spec.components?.schemas : {};
|
|
249207
|
-
for (const [schema, definition] of Object.entries(schemas ?? {})) {
|
|
249208
|
-
const matches = snippets(JSON.stringify(definition), regex);
|
|
249209
|
-
if (matches.length > 0) {
|
|
249210
|
-
hits.push({ schema, matches });
|
|
249211
|
-
}
|
|
249212
|
-
}
|
|
249213
|
-
return hits.slice(0, options.limit ?? 20);
|
|
249209
|
+
function areaListing(area, operations, max = AREA_OPERATIONS_MAX) {
|
|
249210
|
+
return {
|
|
249211
|
+
area,
|
|
249212
|
+
operations: operations.slice(0, max).map(toOperationSummary),
|
|
249213
|
+
total: operations.length,
|
|
249214
|
+
truncated: operations.length > max
|
|
249215
|
+
};
|
|
249214
249216
|
}
|
|
249215
249217
|
// src/core/api-spec/schema.ts
|
|
249216
249218
|
var HTTP_METHODS = [
|
|
@@ -249232,7 +249234,7 @@ var ParameterSchema = looseObject({
|
|
|
249232
249234
|
example: unknown().optional()
|
|
249233
249235
|
});
|
|
249234
249236
|
var MediaTypesSchema = record(string2(), looseObject({ schema: unknown().optional() }));
|
|
249235
|
-
var
|
|
249237
|
+
var MediaContentSchema = looseObject({
|
|
249236
249238
|
content: MediaTypesSchema.optional()
|
|
249237
249239
|
});
|
|
249238
249240
|
var ResponseObjectSchema = looseObject({
|
|
@@ -249249,7 +249251,10 @@ var OperationSchema = looseObject({
|
|
|
249249
249251
|
responses: record(string2(), unknown()).optional(),
|
|
249250
249252
|
security: array(SecurityRequirementSchema).optional()
|
|
249251
249253
|
});
|
|
249252
|
-
var PathItemSchema = looseObject(
|
|
249254
|
+
var PathItemSchema = looseObject({
|
|
249255
|
+
...Object.fromEntries(HTTP_METHODS.map((method) => [method, OperationSchema.optional()])),
|
|
249256
|
+
parameters: array(unknown()).optional()
|
|
249257
|
+
});
|
|
249253
249258
|
var OpenApiSpecSchema = looseObject({
|
|
249254
249259
|
openapi: string2(),
|
|
249255
249260
|
paths: record(string2(), PathItemSchema),
|
|
@@ -249259,73 +249264,16 @@ var OpenApiSpecSchema = looseObject({
|
|
|
249259
249264
|
security: array(SecurityRequirementSchema).optional()
|
|
249260
249265
|
});
|
|
249261
249266
|
|
|
249262
|
-
// src/core/api-spec/
|
|
249263
|
-
var
|
|
249264
|
-
var
|
|
249265
|
-
function
|
|
249266
|
-
|
|
249267
|
-
return security.some((requirement) => requirement[PERSONAL_ACCESS_TOKEN_SCHEME]?.includes(READ_ONLY_SCOPE));
|
|
249268
|
-
}
|
|
249269
|
-
function parameterText(operation) {
|
|
249270
|
-
return (operation.parameters ?? []).flatMap((parameter) => {
|
|
249271
|
-
const parsed = ParameterSchema.safeParse(parameter);
|
|
249272
|
-
return parsed.success ? [parsed.data.name, parsed.data.description ?? ""] : [];
|
|
249273
|
-
}).join(" ");
|
|
249274
|
-
}
|
|
249275
|
-
function listOperations(spec) {
|
|
249276
|
-
return Object.entries(spec.paths).flatMap(([path, item]) => HTTP_METHODS.flatMap((method) => {
|
|
249277
|
-
const operation = item[method];
|
|
249278
|
-
if (!operation) {
|
|
249279
|
-
return [];
|
|
249280
|
-
}
|
|
249281
|
-
return [
|
|
249282
|
-
{
|
|
249283
|
-
endpoint: `${method.toUpperCase()} ${path}`,
|
|
249284
|
-
method: method.toUpperCase(),
|
|
249285
|
-
path,
|
|
249286
|
-
summary: operation.summary ?? "",
|
|
249287
|
-
description: operation.description ?? "",
|
|
249288
|
-
parameterText: parameterText(operation),
|
|
249289
|
-
readOnly: isReadOnly(operation, spec),
|
|
249290
|
-
operation
|
|
249291
|
-
}
|
|
249292
|
-
];
|
|
249293
|
-
}));
|
|
249294
|
-
}
|
|
249295
|
-
function pathSegments(path) {
|
|
249296
|
-
const pathname = path.split(/[?#]/, 1)[0] ?? "";
|
|
249297
|
-
return pathname.split("/").filter(Boolean);
|
|
249298
|
-
}
|
|
249299
|
-
function segmentPattern(segment) {
|
|
249300
|
-
const source = segment.split(/(\{[^}]+\})/).map((part) => part.startsWith("{") ? "[^/]+" : part.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("");
|
|
249301
|
-
return new RegExp(`^${source}$`);
|
|
249302
|
-
}
|
|
249303
|
-
function specificity(templateSegments) {
|
|
249304
|
-
return templateSegments.map((segment) => segment.includes("{") ? 0 : 1);
|
|
249305
|
-
}
|
|
249306
|
-
function compareSpecificity(a, b) {
|
|
249307
|
-
for (let i = 0;i < a.length; i++) {
|
|
249308
|
-
if (a[i] !== b[i]) {
|
|
249309
|
-
return (b[i] ?? 0) - (a[i] ?? 0);
|
|
249310
|
-
}
|
|
249311
|
-
}
|
|
249312
|
-
return 0;
|
|
249313
|
-
}
|
|
249314
|
-
function matchOperation(operations, method, concretePath) {
|
|
249315
|
-
const upperMethod = method.toUpperCase();
|
|
249316
|
-
const segments = pathSegments(concretePath);
|
|
249317
|
-
const candidates = operations.filter((op) => {
|
|
249318
|
-
if (op.method !== upperMethod) {
|
|
249319
|
-
return false;
|
|
249320
|
-
}
|
|
249321
|
-
const template = pathSegments(op.path);
|
|
249322
|
-
return template.length === segments.length && template.every((part, i) => segmentPattern(part).test(segments[i] ?? ""));
|
|
249323
|
-
});
|
|
249324
|
-
return candidates.sort((a, b) => compareSpecificity(specificity(pathSegments(a.path)), specificity(pathSegments(b.path))))[0];
|
|
249267
|
+
// src/core/api-spec/text.ts
|
|
249268
|
+
var DOCS_CALLOUT = /<(Info|Note|Tip|Check|Warning)>([\s\S]*?)<\/\1>/g;
|
|
249269
|
+
var RELATIVE_LINK = /\[([^\]]+)\]\(\/[^)]*\)/g;
|
|
249270
|
+
function cleanText(text) {
|
|
249271
|
+
return text.replace(DOCS_CALLOUT, (_, kind, body) => kind === "Warning" ? `Warning: ${body}` : body).replace(RELATIVE_LINK, "$1");
|
|
249325
249272
|
}
|
|
249273
|
+
|
|
249274
|
+
// src/core/api-spec/contract.ts
|
|
249326
249275
|
var SCHEMA_REF_PREFIX = "#/components/schemas/";
|
|
249327
249276
|
var MAX_REF_DEPTH = 4;
|
|
249328
|
-
var FRAMEWORK_VALIDATION_ERROR = "Validation Error";
|
|
249329
249277
|
function inlineRefs(node, schemas, seen = new Set, depth = 0) {
|
|
249330
249278
|
if (depth > MAX_REF_DEPTH) {
|
|
249331
249279
|
return node;
|
|
@@ -249350,20 +249298,78 @@ function inlineRefs(node, schemas, seen = new Set, depth = 0) {
|
|
|
249350
249298
|
inlineRefs(value, schemas, seen, depth)
|
|
249351
249299
|
]));
|
|
249352
249300
|
}
|
|
249353
|
-
function
|
|
249354
|
-
const parsed =
|
|
249355
|
-
|
|
249301
|
+
function bodyOf(value) {
|
|
249302
|
+
const parsed = MediaContentSchema.safeParse(value);
|
|
249303
|
+
const content = parsed.success ? parsed.data.content ?? {} : {};
|
|
249304
|
+
const contentType = "application/json" in content ? "application/json" : Object.keys(content)[0];
|
|
249305
|
+
return contentType ? { contentType, schema: content[contentType]?.schema } : {};
|
|
249306
|
+
}
|
|
249307
|
+
function leftoverRefs(node, schemas, found = new Map) {
|
|
249308
|
+
if (Array.isArray(node)) {
|
|
249309
|
+
for (const item of node) {
|
|
249310
|
+
leftoverRefs(item, schemas, found);
|
|
249311
|
+
}
|
|
249312
|
+
} else if (node !== null && typeof node === "object") {
|
|
249313
|
+
for (const [key, value] of Object.entries(node)) {
|
|
249314
|
+
if (key === "$ref" && typeof value === "string" && value.startsWith(SCHEMA_REF_PREFIX) && !found.has(value)) {
|
|
249315
|
+
const schema = schemas[value.slice(SCHEMA_REF_PREFIX.length)];
|
|
249316
|
+
if (schema !== undefined) {
|
|
249317
|
+
found.set(value, schema);
|
|
249318
|
+
leftoverRefs(schema, schemas, found);
|
|
249319
|
+
}
|
|
249320
|
+
} else {
|
|
249321
|
+
leftoverRefs(value, schemas, found);
|
|
249322
|
+
}
|
|
249323
|
+
}
|
|
249324
|
+
}
|
|
249325
|
+
return found;
|
|
249326
|
+
}
|
|
249327
|
+
var SCHEMA_DATA_KEYS = new Set([
|
|
249328
|
+
"example",
|
|
249329
|
+
"examples",
|
|
249330
|
+
"default",
|
|
249331
|
+
"enum",
|
|
249332
|
+
"const"
|
|
249333
|
+
]);
|
|
249334
|
+
function slimSchema(node, isPropertyMap = false) {
|
|
249335
|
+
if (Array.isArray(node)) {
|
|
249336
|
+
return node.map((item) => slimSchema(item));
|
|
249337
|
+
}
|
|
249338
|
+
if (node === null || typeof node !== "object") {
|
|
249339
|
+
return node;
|
|
249340
|
+
}
|
|
249341
|
+
const entries = Object.entries(node);
|
|
249342
|
+
if (isPropertyMap) {
|
|
249343
|
+
return Object.fromEntries(entries.map(([name, value]) => [name, slimSchema(value)]));
|
|
249344
|
+
}
|
|
249345
|
+
const slim = {};
|
|
249346
|
+
for (const [key, value] of entries) {
|
|
249347
|
+
if (key === "title" && typeof value === "string") {
|
|
249348
|
+
continue;
|
|
249349
|
+
}
|
|
249350
|
+
slim[key] = SCHEMA_DATA_KEYS.has(key) ? value : key === "properties" ? slimSchema(value, true) : key === "description" && typeof value === "string" ? cleanText(value) : slimSchema(value);
|
|
249351
|
+
}
|
|
249352
|
+
const { anyOf, ...rest } = slim;
|
|
249353
|
+
const nullable = Array.isArray(anyOf) && anyOf.length === 2 ? nullableType(anyOf) : undefined;
|
|
249354
|
+
return nullable ? { type: [nullable, "null"], ...rest } : slim;
|
|
249355
|
+
}
|
|
249356
|
+
function nullableType(variants) {
|
|
249357
|
+
const types = variants.map((variant) => variant !== null && typeof variant === "object" && Object.keys(variant).length === 1 && typeof variant.type === "string" ? variant.type : undefined);
|
|
249358
|
+
if (types.includes(undefined) || !types.includes("null")) {
|
|
249359
|
+
return;
|
|
249360
|
+
}
|
|
249361
|
+
return types.find((type) => type !== "null");
|
|
249356
249362
|
}
|
|
249357
249363
|
function getOperationContract(spec, op) {
|
|
249358
249364
|
const schemas = spec.components?.schemas ?? {};
|
|
249359
|
-
const inline = (node) => node === undefined ? null : inlineRefs(node, schemas);
|
|
249365
|
+
const inline = (node) => node === undefined ? null : slimSchema(inlineRefs(node, schemas));
|
|
249360
249366
|
const responses = Object.entries(op.operation.responses ?? {}).flatMap(([status, response]) => {
|
|
249361
249367
|
const parsed = ResponseObjectSchema.safeParse(response);
|
|
249362
249368
|
return parsed.success ? [[status, parsed.data]] : [];
|
|
249363
249369
|
});
|
|
249364
|
-
const success = responses.filter(([status]) => status.startsWith("2")).sort(([a], [b]) => a.localeCompare(b)).map(([, response]) =>
|
|
249365
|
-
const
|
|
249366
|
-
|
|
249370
|
+
const success = responses.filter(([status]) => status.startsWith("2")).sort(([a], [b]) => a.localeCompare(b)).map(([, response]) => bodyOf(response).schema).find(Boolean);
|
|
249371
|
+
const requestBody = bodyOf(op.operation.requestBody);
|
|
249372
|
+
const contract = {
|
|
249367
249373
|
endpoint: op.endpoint,
|
|
249368
249374
|
method: op.method,
|
|
249369
249375
|
path: op.path,
|
|
@@ -249382,23 +249388,121 @@ function getOperationContract(spec, op) {
|
|
|
249382
249388
|
in: location2,
|
|
249383
249389
|
required: required ?? false,
|
|
249384
249390
|
schema: inline(schema ?? {}),
|
|
249385
|
-
...description && !inSchema ? { description } : {},
|
|
249391
|
+
...description && !inSchema ? { description: cleanText(description) } : {},
|
|
249386
249392
|
..."example" in parsed.data ? { example: parsed.data.example } : {}
|
|
249387
249393
|
}
|
|
249388
249394
|
];
|
|
249389
249395
|
}),
|
|
249390
|
-
|
|
249391
|
-
|
|
249392
|
-
|
|
249396
|
+
...requestBody.contentType && requestBody.contentType !== "application/json" ? { requestBodyContentType: requestBody.contentType } : {},
|
|
249397
|
+
requestBodySchema: inline(requestBody.schema),
|
|
249398
|
+
responseSchema: inline(success)
|
|
249399
|
+
};
|
|
249400
|
+
const refs = leftoverRefs(contract, schemas);
|
|
249401
|
+
return {
|
|
249402
|
+
...contract,
|
|
249403
|
+
...refs.size > 0 ? {
|
|
249404
|
+
refs: Object.fromEntries([...refs].map(([ref, schema]) => [ref, slimSchema(schema)]))
|
|
249405
|
+
} : {}
|
|
249406
|
+
};
|
|
249407
|
+
}
|
|
249408
|
+
// src/core/api-spec/grep.ts
|
|
249409
|
+
function grepOperations(spec, operations, pattern, options = {}) {
|
|
249410
|
+
const regex = new RegExp(pattern, options.ignoreCase ? "i" : "");
|
|
249411
|
+
return operations.filter((op) => regex.test(JSON.stringify(getOperationContract(spec, op)))).slice(0, options.limit ?? 20).map(toOperationSummary);
|
|
249412
|
+
}
|
|
249413
|
+
// src/core/api-spec/operations.ts
|
|
249414
|
+
var PERSONAL_ACCESS_TOKEN_SCHEME = "PersonalAccessTokenAuth";
|
|
249415
|
+
var READ_ONLY_SCOPE = "read_only";
|
|
249416
|
+
function isReadOnly(operation, spec) {
|
|
249417
|
+
const security = operation.security ?? spec.security ?? [];
|
|
249418
|
+
return security.some((requirement) => requirement[PERSONAL_ACCESS_TOKEN_SCHEME]?.includes(READ_ONLY_SCOPE));
|
|
249419
|
+
}
|
|
249420
|
+
function parameterText(operation) {
|
|
249421
|
+
return (operation.parameters ?? []).flatMap((parameter) => {
|
|
249422
|
+
const parsed = ParameterSchema.safeParse(parameter);
|
|
249423
|
+
return parsed.success ? [parsed.data.name, cleanText(parsed.data.description ?? "")] : [];
|
|
249424
|
+
}).join(" ");
|
|
249425
|
+
}
|
|
249426
|
+
function mergeParameters(shared, own) {
|
|
249427
|
+
if (!shared?.length) {
|
|
249428
|
+
return own;
|
|
249429
|
+
}
|
|
249430
|
+
const key = (parameter) => {
|
|
249431
|
+
const parsed = ParameterSchema.safeParse(parameter);
|
|
249432
|
+
return parsed.success ? `${parsed.data.in}:${parsed.data.name}` : undefined;
|
|
249393
249433
|
};
|
|
249434
|
+
const ownKeys = new Set((own ?? []).map(key));
|
|
249435
|
+
return [
|
|
249436
|
+
...shared.filter((parameter) => !ownKeys.has(key(parameter))),
|
|
249437
|
+
...own ?? []
|
|
249438
|
+
];
|
|
249439
|
+
}
|
|
249440
|
+
function listOperations(spec) {
|
|
249441
|
+
return Object.entries(spec.paths).flatMap(([path, item]) => HTTP_METHODS.flatMap((method) => {
|
|
249442
|
+
const declared = item[method];
|
|
249443
|
+
if (!declared) {
|
|
249444
|
+
return [];
|
|
249445
|
+
}
|
|
249446
|
+
const operation = {
|
|
249447
|
+
...declared,
|
|
249448
|
+
parameters: mergeParameters(item.parameters, declared.parameters)
|
|
249449
|
+
};
|
|
249450
|
+
return [
|
|
249451
|
+
{
|
|
249452
|
+
endpoint: `${method.toUpperCase()} ${path}`,
|
|
249453
|
+
method: method.toUpperCase(),
|
|
249454
|
+
path,
|
|
249455
|
+
summary: operation.summary ?? "",
|
|
249456
|
+
description: cleanText(operation.description ?? ""),
|
|
249457
|
+
parameterText: parameterText(operation),
|
|
249458
|
+
readOnly: isReadOnly(operation, spec),
|
|
249459
|
+
operation
|
|
249460
|
+
}
|
|
249461
|
+
];
|
|
249462
|
+
}));
|
|
249463
|
+
}
|
|
249464
|
+
function pathSegments(path) {
|
|
249465
|
+
const pathname = path.split(/[?#]/, 1)[0] ?? "";
|
|
249466
|
+
return pathname.split("/").filter(Boolean);
|
|
249467
|
+
}
|
|
249468
|
+
function segmentPattern(segment) {
|
|
249469
|
+
const source = segment.split(/(\{[^}]+\})/).map((part) => part.startsWith("{") ? "[^/]+" : part.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("");
|
|
249470
|
+
return new RegExp(`^${source}$`);
|
|
249471
|
+
}
|
|
249472
|
+
function literalSegments(path) {
|
|
249473
|
+
return pathSegments(path).map((segment) => segment.includes("{") ? "0" : "1").join("");
|
|
249474
|
+
}
|
|
249475
|
+
function matchOperation(operations, method, concretePath) {
|
|
249476
|
+
const upperMethod = method.toUpperCase();
|
|
249477
|
+
const segments = pathSegments(concretePath);
|
|
249478
|
+
const candidates = operations.filter((op) => {
|
|
249479
|
+
if (op.method !== upperMethod) {
|
|
249480
|
+
return false;
|
|
249481
|
+
}
|
|
249482
|
+
const template = pathSegments(op.path);
|
|
249483
|
+
return template.length === segments.length && template.every((part, i) => segmentPattern(part).test(segments[i] ?? ""));
|
|
249484
|
+
});
|
|
249485
|
+
return candidates.sort((a, b) => literalSegments(b.path).localeCompare(literalSegments(a.path)))[0];
|
|
249394
249486
|
}
|
|
249395
249487
|
// src/core/api-spec/request.ts
|
|
249488
|
+
var MAX_ERROR_BODY_CHARS = 4000;
|
|
249489
|
+
var QUERY_STRING = /\?\S*/g;
|
|
249490
|
+
async function readBody(response) {
|
|
249491
|
+
try {
|
|
249492
|
+
const text = (await response.clone().text()).trim();
|
|
249493
|
+
return text.length > MAX_ERROR_BODY_CHARS ? `${text.slice(0, MAX_ERROR_BODY_CHARS)}…` : text || undefined;
|
|
249494
|
+
} catch {
|
|
249495
|
+
return;
|
|
249496
|
+
}
|
|
249497
|
+
}
|
|
249396
249498
|
async function sendApiRequest(method, path, body) {
|
|
249397
249499
|
try {
|
|
249398
249500
|
const response = await base44Client(path.replace(/^\/+/, ""), {
|
|
249399
249501
|
method,
|
|
249400
249502
|
body,
|
|
249401
|
-
headers: body === undefined ? {} : { "Content-Type": "application/json" }
|
|
249503
|
+
headers: body === undefined ? {} : { "Content-Type": "application/json" },
|
|
249504
|
+
timeout: false,
|
|
249505
|
+
retry: { methods: ["get", "head"] }
|
|
249402
249506
|
});
|
|
249403
249507
|
return {
|
|
249404
249508
|
status: response.status,
|
|
@@ -249406,11 +249510,25 @@ async function sendApiRequest(method, path, body) {
|
|
|
249406
249510
|
body: new Uint8Array(await response.arrayBuffer())
|
|
249407
249511
|
};
|
|
249408
249512
|
} catch (error) {
|
|
249409
|
-
|
|
249513
|
+
const apiError = await ApiError.fromHttpError(error, `calling ${method} ${path}`);
|
|
249514
|
+
const raw = error instanceof HTTPError ? await readBody(error.response) : undefined;
|
|
249515
|
+
throw redactedApiError(apiError, raw, method, path);
|
|
249410
249516
|
}
|
|
249411
249517
|
}
|
|
249518
|
+
function redactedApiError(apiError, raw, method, path) {
|
|
249519
|
+
const reason = apiError.statusCode !== undefined ? `HTTP ${apiError.statusCode}` : (apiError.cause?.message ?? "request failed").replace(QUERY_STRING, "");
|
|
249520
|
+
const message = `Error calling ${method} ${path.split("?", 1)[0]}: ${reason}`;
|
|
249521
|
+
return new ApiError(message, {
|
|
249522
|
+
statusCode: apiError.statusCode,
|
|
249523
|
+
requestUrl: apiError.requestUrl?.split("?", 1)[0],
|
|
249524
|
+
requestMethod: apiError.requestMethod,
|
|
249525
|
+
requestId: apiError.requestId,
|
|
249526
|
+
hints: apiError.hints,
|
|
249527
|
+
details: raw ? [`Response body: ${raw}`] : apiError.details
|
|
249528
|
+
});
|
|
249529
|
+
}
|
|
249412
249530
|
// src/core/api-spec/spec.ts
|
|
249413
|
-
import { stat as stat3 } from "node:fs/promises";
|
|
249531
|
+
import { rename, rm, stat as stat3 } from "node:fs/promises";
|
|
249414
249532
|
import { join as join22 } from "node:path";
|
|
249415
249533
|
var SPEC_CACHE_TTL_MS = 60 * 60 * 1000;
|
|
249416
249534
|
function getSpecCachePath(apiUrl = getBase44ApiUrl()) {
|
|
@@ -249433,17 +249551,24 @@ function parseSpec(text) {
|
|
|
249433
249551
|
}
|
|
249434
249552
|
return result.data;
|
|
249435
249553
|
}
|
|
249554
|
+
var SPEC_DOWNLOAD_TIMEOUT_MS = 60000;
|
|
249436
249555
|
async function readFreshCache(path) {
|
|
249437
249556
|
try {
|
|
249438
249557
|
const { mtimeMs } = await stat3(path);
|
|
249439
|
-
|
|
249558
|
+
if (!isSpecCacheFresh(mtimeMs)) {
|
|
249559
|
+
return null;
|
|
249560
|
+
}
|
|
249561
|
+
const text = await readTextFile(path);
|
|
249562
|
+
return { text, spec: parseSpec(text) };
|
|
249440
249563
|
} catch {
|
|
249441
249564
|
return null;
|
|
249442
249565
|
}
|
|
249443
249566
|
}
|
|
249444
249567
|
async function downloadSpec() {
|
|
249445
249568
|
try {
|
|
249446
|
-
const response = await base44Client.get("api/openapi.json"
|
|
249569
|
+
const response = await base44Client.get("api/openapi.json", {
|
|
249570
|
+
timeout: SPEC_DOWNLOAD_TIMEOUT_MS
|
|
249571
|
+
});
|
|
249447
249572
|
return await response.text();
|
|
249448
249573
|
} catch (error) {
|
|
249449
249574
|
throw await ApiError.fromHttpError(error, "fetching the API spec");
|
|
@@ -249453,17 +249578,25 @@ async function loadSpec(options = {}) {
|
|
|
249453
249578
|
const path = getSpecCachePath();
|
|
249454
249579
|
const cached = options.refresh ? null : await readFreshCache(path);
|
|
249455
249580
|
if (cached !== null) {
|
|
249456
|
-
return
|
|
249581
|
+
return cached;
|
|
249457
249582
|
}
|
|
249458
249583
|
const text = await downloadSpec();
|
|
249459
249584
|
const spec = parseSpec(text);
|
|
249460
|
-
|
|
249585
|
+
const partial = `${path}.${process.pid}.tmp`;
|
|
249586
|
+
try {
|
|
249587
|
+
await writeFile(partial, text);
|
|
249588
|
+
await rename(partial, path);
|
|
249589
|
+
} catch {
|
|
249590
|
+
await rm(partial, { force: true }).catch(() => {
|
|
249591
|
+
return;
|
|
249592
|
+
});
|
|
249593
|
+
}
|
|
249461
249594
|
return { text, spec };
|
|
249462
249595
|
}
|
|
249463
249596
|
// src/cli/commands/api/shared.ts
|
|
249597
|
+
import { fstatSync } from "node:fs";
|
|
249464
249598
|
function formatJson(value) {
|
|
249465
|
-
return
|
|
249466
|
-
`;
|
|
249599
|
+
return toJsonStdout(value, { compact: !process.stdout.isTTY });
|
|
249467
249600
|
}
|
|
249468
249601
|
function parseLimit(value) {
|
|
249469
249602
|
if (value === undefined) {
|
|
@@ -249493,38 +249626,50 @@ function operationsInArea(operations, area) {
|
|
|
249493
249626
|
}
|
|
249494
249627
|
return inArea;
|
|
249495
249628
|
}
|
|
249496
|
-
|
|
249629
|
+
function isPipedStdin() {
|
|
249630
|
+
try {
|
|
249631
|
+
const stats = fstatSync(0);
|
|
249632
|
+
return stats.isFIFO() || stats.isFile();
|
|
249633
|
+
} catch {
|
|
249634
|
+
return false;
|
|
249635
|
+
}
|
|
249636
|
+
}
|
|
249637
|
+
async function readRequestBody(flag, log) {
|
|
249497
249638
|
if (flag === "@-") {
|
|
249498
249639
|
return readStdin("--body @-", { trim: false });
|
|
249499
249640
|
}
|
|
249500
249641
|
if (flag?.startsWith("@")) {
|
|
249501
249642
|
return readTextFile(flag.slice(1));
|
|
249502
249643
|
}
|
|
249503
|
-
if (flag
|
|
249504
|
-
|
|
249505
|
-
}
|
|
249506
|
-
if (method === "GET" || method === "HEAD" || process.stdin.isTTY) {
|
|
249507
|
-
return;
|
|
249644
|
+
if (flag === undefined && isPipedStdin()) {
|
|
249645
|
+
log.warn("stdin is ignored; pass --body @- to send it as the body.");
|
|
249508
249646
|
}
|
|
249509
|
-
|
|
249510
|
-
|
|
249647
|
+
return flag;
|
|
249648
|
+
}
|
|
249649
|
+
function withoutQuery(path) {
|
|
249650
|
+
return path.split("?", 1)[0] ?? "";
|
|
249651
|
+
}
|
|
249652
|
+
function reportedFetchCommand(method, path, options) {
|
|
249653
|
+
return {
|
|
249654
|
+
name: "api fetch",
|
|
249655
|
+
args: [method, withoutQuery(path)],
|
|
249656
|
+
options: {
|
|
249657
|
+
...options,
|
|
249658
|
+
...options.body === undefined ? {} : { body: "[not reported]" }
|
|
249659
|
+
}
|
|
249660
|
+
};
|
|
249511
249661
|
}
|
|
249512
249662
|
|
|
249513
249663
|
// src/cli/commands/api/catalog.ts
|
|
249514
249664
|
async function catalogAction(ctx, area, options) {
|
|
249515
249665
|
const { spec } = await loadSpecTask(ctx, options.refresh);
|
|
249516
|
-
const operations = listOperations(spec)
|
|
249666
|
+
const operations = listOperations(spec);
|
|
249667
|
+
const readOnly = (ops) => options.readOnly ? ops.filter((op) => op.readOnly) : ops;
|
|
249517
249668
|
if (area === undefined) {
|
|
249518
|
-
return { stdout: formatJson(catalogIndex(operations)) };
|
|
249669
|
+
return { stdout: formatJson(catalogIndex(readOnly(operations))) };
|
|
249519
249670
|
}
|
|
249520
|
-
const inArea = operationsInArea(operations, area);
|
|
249521
|
-
return {
|
|
249522
|
-
stdout: formatJson({
|
|
249523
|
-
area,
|
|
249524
|
-
operations: inArea.map(toOperationSummary),
|
|
249525
|
-
total: inArea.length
|
|
249526
|
-
})
|
|
249527
|
-
};
|
|
249671
|
+
const inArea = readOnly(operationsInArea(operations, area));
|
|
249672
|
+
return { stdout: formatJson(areaListing(area, inArea)) };
|
|
249528
249673
|
}
|
|
249529
249674
|
function getApiCatalogCommand() {
|
|
249530
249675
|
return new Base44Command("catalog", {
|
|
@@ -249534,12 +249679,16 @@ function getApiCatalogCommand() {
|
|
|
249534
249679
|
}
|
|
249535
249680
|
|
|
249536
249681
|
// src/cli/commands/api/fetch.ts
|
|
249537
|
-
async function findOperation(ctx, method, path, refresh) {
|
|
249682
|
+
async function findOperation(ctx, method, path, { refresh, flag }) {
|
|
249538
249683
|
const { spec } = await loadSpecTask(ctx, refresh);
|
|
249539
249684
|
const op = matchOperation(listOperations(spec), method, path);
|
|
249540
249685
|
if (!op) {
|
|
249541
|
-
throw new InvalidInputError(`No operation in the API spec matches ${method} ${path}.`, {
|
|
249686
|
+
throw new InvalidInputError(`No operation in the API spec matches ${method} ${withoutQuery(path)}.`, {
|
|
249542
249687
|
hints: [
|
|
249688
|
+
{
|
|
249689
|
+
message: "The cached spec may predate this route; fetch it again",
|
|
249690
|
+
command: `base44 api fetch ${method} ${path} ${flag} --refresh`
|
|
249691
|
+
},
|
|
249543
249692
|
{
|
|
249544
249693
|
message: "Find the operation and its path template",
|
|
249545
249694
|
command: 'base44 api search "<what you want to do>"'
|
|
@@ -249549,6 +249698,8 @@ async function findOperation(ctx, method, path, refresh) {
|
|
|
249549
249698
|
}
|
|
249550
249699
|
return { spec, op };
|
|
249551
249700
|
}
|
|
249701
|
+
var CONTRACT_HELP = `
|
|
249702
|
+
The contract is JSON; cut it down with e.g. | jq '.parameters, .requestBodySchema'`;
|
|
249552
249703
|
var TEXT_CONTENT_TYPES = [
|
|
249553
249704
|
"json",
|
|
249554
249705
|
"text/",
|
|
@@ -249559,7 +249710,7 @@ var TEXT_CONTENT_TYPES = [
|
|
|
249559
249710
|
function isText(contentType) {
|
|
249560
249711
|
return !contentType || TEXT_CONTENT_TYPES.some((hint) => contentType.toLowerCase().includes(hint));
|
|
249561
249712
|
}
|
|
249562
|
-
async function formatResponse({ status, contentType, body }, output) {
|
|
249713
|
+
async function formatResponse({ status, contentType, body }, output, jsonMode) {
|
|
249563
249714
|
if (output !== undefined) {
|
|
249564
249715
|
await writeFile(output, body);
|
|
249565
249716
|
return formatJson({ status, contentType, bytes: body.length, output });
|
|
@@ -249568,48 +249719,69 @@ async function formatResponse({ status, contentType, body }, output) {
|
|
|
249568
249719
|
return formatJson({ status });
|
|
249569
249720
|
}
|
|
249570
249721
|
if (!isText(contentType)) {
|
|
249571
|
-
|
|
249722
|
+
return formatJson({
|
|
249723
|
+
status,
|
|
249724
|
+
contentType,
|
|
249725
|
+
bytes: body.length,
|
|
249726
|
+
note: "Binary body not printed; add --output <file> to save it."
|
|
249727
|
+
});
|
|
249572
249728
|
}
|
|
249573
249729
|
const text = new TextDecoder().decode(body);
|
|
249574
249730
|
try {
|
|
249575
249731
|
return formatJson(JSON.parse(text));
|
|
249576
249732
|
} catch {
|
|
249733
|
+
if (jsonMode) {
|
|
249734
|
+
return formatJson({ status, contentType, body: text });
|
|
249735
|
+
}
|
|
249577
249736
|
return text.endsWith(`
|
|
249578
249737
|
`) ? text : `${text}
|
|
249579
249738
|
`;
|
|
249580
249739
|
}
|
|
249581
249740
|
}
|
|
249582
249741
|
async function fetchAction(ctx, methodArg, path, options, command) {
|
|
249742
|
+
ctx.errorReporter.setContext({
|
|
249743
|
+
command: reportedFetchCommand(methodArg ?? "", path ?? "", { ...options })
|
|
249744
|
+
});
|
|
249583
249745
|
if (!methodArg || !path) {
|
|
249584
249746
|
if (options.help) {
|
|
249585
|
-
|
|
249747
|
+
const usage = `${command.helpInformation()}${CONTRACT_HELP}
|
|
249748
|
+
`;
|
|
249749
|
+
return { stdout: ctx.jsonMode ? formatJson({ usage }) : usage };
|
|
249586
249750
|
}
|
|
249587
249751
|
throw new InvalidInputError("Provide a method and a path, e.g. GET /api/apps.");
|
|
249588
249752
|
}
|
|
249589
249753
|
const method = methodArg.toUpperCase();
|
|
249590
249754
|
if (options.help) {
|
|
249591
|
-
const { spec, op } = await findOperation(ctx, method, path,
|
|
249755
|
+
const { spec, op } = await findOperation(ctx, method, path, {
|
|
249756
|
+
refresh: options.refresh,
|
|
249757
|
+
flag: "--help"
|
|
249758
|
+
});
|
|
249592
249759
|
return { stdout: formatJson(getOperationContract(spec, op)) };
|
|
249593
249760
|
}
|
|
249594
249761
|
if (options.readOnly) {
|
|
249595
|
-
const { op } = await findOperation(ctx, method, path,
|
|
249762
|
+
const { op } = await findOperation(ctx, method, path, {
|
|
249763
|
+
refresh: options.refresh,
|
|
249764
|
+
flag: "--read-only"
|
|
249765
|
+
});
|
|
249596
249766
|
if (!op.readOnly) {
|
|
249597
249767
|
throw new InvalidInputError(`Refused under --read-only: ${op.method} ${op.path} is not a read-only operation. Nothing was sent.`);
|
|
249598
249768
|
}
|
|
249599
249769
|
}
|
|
249600
249770
|
await ensureAuth(ctx);
|
|
249601
|
-
const body = await readRequestBody(
|
|
249771
|
+
const body = await readRequestBody(options.body, ctx.log);
|
|
249602
249772
|
const response = await ctx.runTask(`Calling ${method} ${path}`, () => sendApiRequest(method, path, body), {
|
|
249603
249773
|
successMessage: `Called ${method} ${path}`,
|
|
249604
249774
|
errorMessage: "Request failed"
|
|
249605
249775
|
});
|
|
249606
|
-
return {
|
|
249776
|
+
return {
|
|
249777
|
+
stdout: await formatResponse(response, options.output, ctx.jsonMode)
|
|
249778
|
+
};
|
|
249607
249779
|
}
|
|
249608
249780
|
function getApiFetchCommand() {
|
|
249609
249781
|
return new Base44Command("fetch", {
|
|
249610
249782
|
requireAuth: false,
|
|
249611
249783
|
requireAppContext: false
|
|
249612
|
-
}).description("Call a Base44 API operation
|
|
249784
|
+
}).description("Call a Base44 API operation; add --help after a path for its contract").helpOption(false).argument("[method]", "HTTP method, e.g. GET or POST").argument("[path]", 'Concrete path with any query string, e.g. "/api/apps/<app-id>/workflows/runs?status=failed"').option("--body <json>", "Request body: JSON, @file.json, or @- to read it from stdin").option("--output <file>", "Save the response body to a file").option("--read-only", "Refuse, before sending, any operation the spec does not mark read-only").option("--refresh", REFRESH_OPTION_HELP).option("-h, --help", "With a method and path, print that operation's contract; otherwise this help").addHelpText("after", CONTRACT_HELP).action(fetchAction);
|
|
249613
249785
|
}
|
|
249614
249786
|
|
|
249615
249787
|
// src/cli/commands/api/grep.ts
|
|
@@ -249624,15 +249796,16 @@ async function grepAction(ctx, pattern, options) {
|
|
|
249624
249796
|
const limit = parseLimit(options.limit);
|
|
249625
249797
|
assertValidRegex(pattern);
|
|
249626
249798
|
const { spec } = await loadSpecTask(ctx, options.refresh);
|
|
249627
|
-
|
|
249799
|
+
let operations = listOperations(spec);
|
|
249628
249800
|
if (options.area !== undefined) {
|
|
249629
|
-
operationsInArea(operations, options.area);
|
|
249801
|
+
operations = operationsInArea(operations, options.area);
|
|
249802
|
+
}
|
|
249803
|
+
if (options.readOnly) {
|
|
249804
|
+
operations = operations.filter((op) => op.readOnly);
|
|
249630
249805
|
}
|
|
249631
|
-
const hits =
|
|
249632
|
-
area: options.area,
|
|
249806
|
+
const hits = grepOperations(spec, operations, pattern, {
|
|
249633
249807
|
ignoreCase: options.ignoreCase,
|
|
249634
|
-
limit
|
|
249635
|
-
readOnly: options.readOnly
|
|
249808
|
+
limit
|
|
249636
249809
|
});
|
|
249637
249810
|
return { stdout: formatJson(hits) };
|
|
249638
249811
|
}
|
|
@@ -249640,7 +249813,7 @@ function getApiGrepCommand() {
|
|
|
249640
249813
|
return new Base44Command("grep", {
|
|
249641
249814
|
requireAuth: false,
|
|
249642
249815
|
requireAppContext: false
|
|
249643
|
-
}).description("Search the
|
|
249816
|
+
}).description("Search the API spec with a regular expression, for when search misses").argument("<pattern>", 'Regular expression, e.g. "runs.*status"').option("--area <area>", "Search only one area's operations (see base44 api catalog)").option("-i, --ignore-case", "Case-insensitive match").option("--limit <n>", "Most operations to return (default 20)").option("--read-only", READ_ONLY_FILTER_HELP).option("--refresh", REFRESH_OPTION_HELP).action(grepAction);
|
|
249644
249817
|
}
|
|
249645
249818
|
|
|
249646
249819
|
// src/cli/commands/api/search.ts
|
|
@@ -262200,7 +262373,7 @@ var nativeEnumType = ZodNativeEnum.create;
|
|
|
262200
262373
|
var promiseType = ZodPromise.create;
|
|
262201
262374
|
var effectsType = ZodEffects.create;
|
|
262202
262375
|
var optionalType = ZodOptional2.create;
|
|
262203
|
-
var
|
|
262376
|
+
var nullableType2 = ZodNullable2.create;
|
|
262204
262377
|
var preprocessType = ZodEffects.createWithPreprocess;
|
|
262205
262378
|
var pipelineType = ZodPipeline.create;
|
|
262206
262379
|
// ../functions-compiler/src/contracts.ts
|
|
@@ -262230,7 +262403,7 @@ var bundleAppRequestSchema = objectType({
|
|
|
262230
262403
|
var ACTIVATION_MODE = "pull";
|
|
262231
262404
|
|
|
262232
262405
|
// ../functions-compiler/src/deno-bundle.ts
|
|
262233
|
-
import { mkdtemp, rm, writeFile as writeFile2 } from "node:fs/promises";
|
|
262406
|
+
import { mkdtemp, rm as rm2, writeFile as writeFile2 } from "node:fs/promises";
|
|
262234
262407
|
import { tmpdir as tmpdir2 } from "node:os";
|
|
262235
262408
|
import path21 from "node:path";
|
|
262236
262409
|
|
|
@@ -262837,7 +263010,7 @@ async function bundleToModule(prepared, nodeModulesDir = "none") {
|
|
|
262837
263010
|
warnings: result.warnings.map((w) => w.text)
|
|
262838
263011
|
};
|
|
262839
263012
|
} finally {
|
|
262840
|
-
await
|
|
263013
|
+
await rm2(dir, { recursive: true, force: true });
|
|
262841
263014
|
}
|
|
262842
263015
|
}
|
|
262843
263016
|
function buildFailureErrors(e, dir) {
|
|
@@ -273202,4 +273375,4 @@ export {
|
|
|
273202
273375
|
runCLI
|
|
273203
273376
|
};
|
|
273204
273377
|
|
|
273205
|
-
//# debugId=
|
|
273378
|
+
//# debugId=A6B266663FAD34EF64756E2164756E21
|