nx 16.5.2 → 16.5.4
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/migrations.json +6 -0
- package/package.json +13 -13
- package/src/config/workspaces.d.ts +1 -1
- package/src/config/workspaces.js +10 -10
- package/src/core/graph/main.js +1 -1
- package/src/core/graph/styles.css +2 -2
- package/src/daemon/client/client.d.ts +3 -1
- package/src/daemon/client/client.js +35 -17
- package/src/daemon/server/project-graph-incremental-recomputation.js +4 -1
- package/src/generators/utils/project-configuration.js +1 -1
- package/src/hasher/task-hasher.js +29 -18
- package/src/migrations/update-16-5-4/update-output-globs.d.ts +2 -0
- package/src/migrations/update-16-5-4/update-output-globs.js +44 -0
- package/src/native/index.d.ts +3 -4
- package/src/native/index.js +2 -2
- package/src/plugins/js/lock-file/lock-file.js +5 -2
- package/src/plugins/js/lock-file/yarn-parser.d.ts +1 -1
- package/src/plugins/js/lock-file/yarn-parser.js +39 -13
- package/src/project-graph/file-map-utils.d.ts +2 -2
- package/src/project-graph/file-map-utils.js +1 -1
- package/src/project-graph/utils/retrieve-workspace-files.d.ts +2 -2
- package/src/project-graph/utils/retrieve-workspace-files.js +23 -26
- package/src/tasks-runner/utils.js +1 -1
- package/src/utils/ab-testing.js +1 -1
- package/src/utils/package-manager.d.ts +1 -1
- package/src/utils/package-manager.js +7 -4
- package/src/utils/testing/temp-fs.js +6 -2
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}} /*
|
|
1
|
+
.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-input,.form-multiselect,.form-select,.form-textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.form-input:focus,.form-multiselect:focus,.form-select:focus,.form-textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact} /*
|
|
2
2
|
! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com
|
|
3
|
-
*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{bottom:0;top:0}.top-5{top:1.25rem}.left-5{left:1.25rem}.bottom-4{bottom:1rem}.right-4{right:1rem}.top-1\/2{top:50%}.left-1\/2{left:50%}.right-0{right:0}.right-2{right:.5rem}.top-2{top:.5rem}.top-1{top:.25rem}.right-1{right:.25rem}.z-50{z-index:50}.z-0{z-index:0}.z-10{z-index:10}.-z-10{z-index:-10}.mx-4{margin-left:1rem;margin-right:1rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.mt-3{margin-top:.75rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.-mt-3{margin-top:-.75rem}.-ml-3{margin-left:-.75rem}.mr-1{margin-right:.25rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.mt-2{margin-top:.5rem}.mt-8{margin-top:2rem}.ml-3{margin-left:.75rem}.mt-10{margin-top:2.5rem}.-mt-1{margin-top:-.25rem}.-ml-1{margin-left:-.25rem}.mb-3{margin-bottom:.75rem}.mr-3{margin-right:.75rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-full{height:100%}.h-10{height:2.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-16{height:4rem}.h-5{height:1.25rem}.max-h-\[300px\]{max-height:300px}.w-full{width:100%}.w-72{width:18rem}.w-auto{width:auto}.w-4{width:1rem}.w-6{width:1.5rem}.w-16{width:4rem}.w-5{width:1.25rem}.w-36{width:9rem}.min-w-\[250px\]{min-width:250px}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.origin-top-right{transform-origin:top right}.translate-x-32{--tw-translate-x:8rem}.rotate-45,.translate-x-32{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate:45deg}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-4{gap:1rem}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(226 232 240/var(--tw-divide-opacity))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-l-md{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.rounded-r-md{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.border-2{border-width:2px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-r-0{border-right-width:0}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-slate-900\/10{border-color:rgba(15,23,42,.1)}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.border-slate-400\/10{border-color:rgba(148,163,184,.1)}.border-slate-200\/10{border-color:rgba(226,232,240,.1)}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-1\.5{padding:.375rem}.p-3{padding:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-10{padding-bottom:2.5rem}.pl-2{padding-left:.5rem}.pr-6{padding-right:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-light{font-weight:300}.uppercase{text-transform:uppercase}.leading-4{line-height:1rem}.tracking-wide{letter-spacing:.025em}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.accent-blue-500{accent-color:#3b82f6}.accent-purple-500{accent-color:#a855f7}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-slate-900\/10{--tw-ring-color:rgba(15,23,42,.1)}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity))}.ring-opacity-10{--tw-ring-opacity:0.1}.ring-opacity-5{--tw-ring-opacity:0.05}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}.duration-200{transition-duration:.2s}.duration-100{transition-duration:.1s}.duration-75{transition-duration:75ms}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.dark{color-scheme:dark}.placeholder\:font-light::placeholder{font-weight:300}.placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\:bg-pink-500:hover{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-white:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.focus-visible\:ring-opacity-75:focus-visible{--tw-ring-opacity:0.75}.group:hover .group-hover\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-60{opacity:.6}.dark .dark\:divide-slate-800>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(30 41 59/var(--tw-divide-opacity))}.dark .dark\:border-slate-300\/10{border-color:rgba(203,213,225,.1)}.dark .dark\:border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.dark .dark\:border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.dark .dark\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.dark .dark\:border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.dark .dark\:border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.dark .dark\:border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.dark .dark\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.dark .dark\:bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.dark .dark\:bg-transparent{background-color:transparent}.dark .dark\:bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.dark .dark\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.dark .dark\:bg-\[\#0B1221\]{--tw-bg-opacity:1;background-color:rgb(11 18 33/var(--tw-bg-opacity))}.dark .dark\:bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.dark .dark\:bg-slate-600\/30{background-color:rgba(71,85,105,.3)}.dark .dark\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.dark .dark\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark .dark\:text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.dark .dark\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.dark .dark\:text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.dark .dark\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.dark .dark\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.dark .dark\:accent-sky-500{accent-color:#0ea5e9}.dark .dark\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.dark .dark\:ring-slate-300\/10{--tw-ring-color:rgba(203,213,225,.1)}.dark .dark\:ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity))}.dark .dark\:ring-sky-500{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.dark .dark\:ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity))}.dark .hover\:dark\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.dark .hover\:dark\:bg-fuchsia-600:hover{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.dark .dark\:hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}@media (min-width:1024px){.lg\:text-xs{font-size:.75rem;line-height:1rem}}
|
|
3
|
+
*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{bottom:0;top:0}.top-5{top:1.25rem}.left-5{left:1.25rem}.bottom-4{bottom:1rem}.right-4{right:1rem}.top-1\/2{top:50%}.left-1\/2{left:50%}.right-0{right:0}.right-2{right:.5rem}.top-2{top:.5rem}.top-1{top:.25rem}.right-1{right:.25rem}.z-50{z-index:50}.z-0{z-index:0}.z-10{z-index:10}.-z-10{z-index:-10}.mx-4{margin-left:1rem;margin-right:1rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.mt-3{margin-top:.75rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.-mt-3{margin-top:-.75rem}.-ml-3{margin-left:-.75rem}.mr-1{margin-right:.25rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.mt-2{margin-top:.5rem}.mt-8{margin-top:2rem}.ml-3{margin-left:.75rem}.mt-10{margin-top:2.5rem}.-mt-1{margin-top:-.25rem}.-ml-1{margin-left:-.25rem}.mb-3{margin-bottom:.75rem}.mr-3{margin-right:.75rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-full{height:100%}.h-10{height:2.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-16{height:4rem}.h-5{height:1.25rem}.max-h-\[300px\]{max-height:300px}.w-full{width:100%}.w-72{width:18rem}.w-auto{width:auto}.w-4{width:1rem}.w-6{width:1.5rem}.w-16{width:4rem}.w-5{width:1.25rem}.w-36{width:9rem}.min-w-\[250px\]{min-width:250px}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.origin-top-right{transform-origin:top right}.translate-x-32{--tw-translate-x:8rem}.rotate-45,.translate-x-32{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate:45deg}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-4{gap:1rem}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(226 232 240/var(--tw-divide-opacity))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-l-md{border-bottom-left-radius:.375rem;border-top-left-radius:.375rem}.rounded-r-md{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.border-2{border-width:2px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-r-0{border-right-width:0}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-slate-900\/10{border-color:rgba(15,23,42,.1)}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.border-slate-400\/10{border-color:rgba(148,163,184,.1)}.border-slate-200\/10{border-color:rgba(226,232,240,.1)}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-1\.5{padding:.375rem}.p-3{padding:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-10{padding-bottom:2.5rem}.pl-2{padding-left:.5rem}.pr-6{padding-right:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pl-4{padding-left:1rem}.pr-8{padding-right:2rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-light{font-weight:300}.uppercase{text-transform:uppercase}.leading-4{line-height:1rem}.tracking-wide{letter-spacing:.025em}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity))}.accent-blue-500{accent-color:#3b82f6}.accent-purple-500{accent-color:#a855f7}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-slate-900\/10{--tw-ring-color:rgba(15,23,42,.1)}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity))}.ring-opacity-10{--tw-ring-opacity:0.1}.ring-opacity-5{--tw-ring-opacity:0.05}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}.duration-200{transition-duration:.2s}.duration-100{transition-duration:.1s}.duration-75{transition-duration:75ms}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.dark{color-scheme:dark}.placeholder\:font-light::placeholder{font-weight:300}.placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\:bg-pink-500:hover{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-white:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.focus-visible\:ring-opacity-75:focus-visible{--tw-ring-opacity:0.75}.group:hover .group-hover\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-60{opacity:.6}.dark .dark\:divide-slate-800>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(30 41 59/var(--tw-divide-opacity))}.dark .dark\:border-slate-300\/10{border-color:rgba(203,213,225,.1)}.dark .dark\:border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.dark .dark\:border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity))}.dark .dark\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.dark .dark\:border-fuchsia-800{--tw-border-opacity:1;border-color:rgb(134 25 143/var(--tw-border-opacity))}.dark .dark\:border-sky-500{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity))}.dark .dark\:border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity))}.dark .dark\:border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.dark .dark\:bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.dark .dark\:bg-transparent{background-color:transparent}.dark .dark\:bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.dark .dark\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.dark .dark\:bg-\[\#0B1221\]{--tw-bg-opacity:1;background-color:rgb(11 18 33/var(--tw-bg-opacity))}.dark .dark\:bg-fuchsia-700{--tw-bg-opacity:1;background-color:rgb(162 28 175/var(--tw-bg-opacity))}.dark .dark\:bg-slate-600\/30{background-color:rgba(71,85,105,.3)}.dark .dark\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.dark .dark\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark .dark\:text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.dark .dark\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.dark .dark\:text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.dark .dark\:text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.dark .dark\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.dark .dark\:accent-sky-500{accent-color:#0ea5e9}.dark .dark\:ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.dark .dark\:ring-slate-300\/10{--tw-ring-color:rgba(203,213,225,.1)}.dark .dark\:ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity))}.dark .dark\:ring-sky-500{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.dark .dark\:ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity))}.dark .hover\:dark\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.dark .hover\:dark\:bg-fuchsia-600:hover{--tw-bg-opacity:1;background-color:rgb(192 38 211/var(--tw-bg-opacity))}.dark .dark\:hover\:bg-slate-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}@media (min-width:1024px){.lg\:text-xs{font-size:.75rem;line-height:1rem}}
|
|
@@ -18,7 +18,9 @@ export declare class DaemonClient {
|
|
|
18
18
|
private currentResolve;
|
|
19
19
|
private currentReject;
|
|
20
20
|
private _enabled;
|
|
21
|
-
private
|
|
21
|
+
private _daemonStatus;
|
|
22
|
+
private _waitForDaemonReady;
|
|
23
|
+
private _daemonReady;
|
|
22
24
|
private _out;
|
|
23
25
|
private _err;
|
|
24
26
|
enabled(): boolean;
|
|
@@ -20,9 +20,18 @@ const workspaces_1 = require("../../config/workspaces");
|
|
|
20
20
|
const socket_messenger_1 = require("./socket-messenger");
|
|
21
21
|
const cache_1 = require("../cache");
|
|
22
22
|
const DAEMON_ENV_SETTINGS = Object.assign(Object.assign({}, process.env), { NX_PROJECT_GLOB_CACHE: 'false', NX_CACHE_PROJECTS_CONFIG: 'false' });
|
|
23
|
+
var DaemonStatus;
|
|
24
|
+
(function (DaemonStatus) {
|
|
25
|
+
DaemonStatus[DaemonStatus["CONNECTING"] = 0] = "CONNECTING";
|
|
26
|
+
DaemonStatus[DaemonStatus["DISCONNECTED"] = 1] = "DISCONNECTED";
|
|
27
|
+
DaemonStatus[DaemonStatus["CONNECTED"] = 2] = "CONNECTED";
|
|
28
|
+
})(DaemonStatus || (DaemonStatus = {}));
|
|
23
29
|
class DaemonClient {
|
|
24
30
|
constructor(nxJson) {
|
|
25
31
|
this.nxJson = nxJson;
|
|
32
|
+
this._daemonStatus = DaemonStatus.DISCONNECTED;
|
|
33
|
+
this._waitForDaemonReady = null;
|
|
34
|
+
this._daemonReady = null;
|
|
26
35
|
this._out = null;
|
|
27
36
|
this._err = null;
|
|
28
37
|
this.reset();
|
|
@@ -71,7 +80,8 @@ class DaemonClient {
|
|
|
71
80
|
(_c = this._err) === null || _c === void 0 ? void 0 : _c.close();
|
|
72
81
|
this._out = null;
|
|
73
82
|
this._err = null;
|
|
74
|
-
this.
|
|
83
|
+
this._daemonStatus = DaemonStatus.DISCONNECTED;
|
|
84
|
+
this._waitForDaemonReady = new Promise((resolve) => (this._daemonReady = resolve));
|
|
75
85
|
}
|
|
76
86
|
requestShutdown() {
|
|
77
87
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
@@ -101,20 +111,23 @@ class DaemonClient {
|
|
|
101
111
|
registerFileWatcher(config, callback) {
|
|
102
112
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
103
113
|
yield this.getProjectGraph();
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
let messenger;
|
|
115
|
+
yield this.queue.sendToQueue(() => {
|
|
116
|
+
messenger = new socket_messenger_1.SocketMessenger((0, net_1.connect)(socket_utils_1.FULL_OS_SOCKET_PATH)).listen((message) => {
|
|
117
|
+
try {
|
|
118
|
+
const parsedMessage = JSON.parse(message);
|
|
119
|
+
callback(null, parsedMessage);
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
callback(e, null);
|
|
123
|
+
}
|
|
124
|
+
}, () => {
|
|
125
|
+
callback('closed', null);
|
|
126
|
+
}, (err) => callback(err, null));
|
|
127
|
+
return messenger.sendMessage({ type: 'REGISTER_FILE_WATCHER', config });
|
|
128
|
+
});
|
|
116
129
|
return () => {
|
|
117
|
-
messenger.close();
|
|
130
|
+
messenger === null || messenger === void 0 ? void 0 : messenger.close();
|
|
118
131
|
};
|
|
119
132
|
});
|
|
120
133
|
}
|
|
@@ -171,7 +184,7 @@ class DaemonClient {
|
|
|
171
184
|
// it's ok for the daemon to terminate if the client doesn't wait on
|
|
172
185
|
// any messages from the daemon
|
|
173
186
|
if (this.queue.isEmpty()) {
|
|
174
|
-
this.
|
|
187
|
+
this.reset();
|
|
175
188
|
}
|
|
176
189
|
else {
|
|
177
190
|
output_1.output.error({
|
|
@@ -212,12 +225,17 @@ class DaemonClient {
|
|
|
212
225
|
}
|
|
213
226
|
sendMessageToDaemon(message) {
|
|
214
227
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
215
|
-
if (
|
|
216
|
-
this.
|
|
228
|
+
if (this._daemonStatus == DaemonStatus.DISCONNECTED) {
|
|
229
|
+
this._daemonStatus = DaemonStatus.CONNECTING;
|
|
217
230
|
if (!(yield this.isServerAvailable())) {
|
|
218
231
|
yield this.startInBackground();
|
|
219
232
|
}
|
|
220
233
|
this.setUpConnection();
|
|
234
|
+
this._daemonStatus = DaemonStatus.CONNECTED;
|
|
235
|
+
this._daemonReady();
|
|
236
|
+
}
|
|
237
|
+
else if (this._daemonStatus == DaemonStatus.CONNECTING) {
|
|
238
|
+
yield this._waitForDaemonReady;
|
|
221
239
|
}
|
|
222
240
|
return new Promise((resolve, reject) => {
|
|
223
241
|
perf_hooks_1.performance.mark('sendMessageToDaemon-start');
|
|
@@ -87,7 +87,10 @@ function addUpdatedAndDeletedFiles(createdFiles, updatedFiles, deletedFiles) {
|
|
|
87
87
|
}
|
|
88
88
|
exports.addUpdatedAndDeletedFiles = addUpdatedAndDeletedFiles;
|
|
89
89
|
function computeWorkspaceConfigHash(projectsConfigurations) {
|
|
90
|
-
|
|
90
|
+
const projectConfigurationStrings = Object.entries(projectsConfigurations)
|
|
91
|
+
.sort(([projectNameA], [projectNameB]) => projectNameA.localeCompare(projectNameB))
|
|
92
|
+
.map(([projectName, projectConfig]) => `${projectName}:${JSON.stringify(projectConfig)}`);
|
|
93
|
+
return (0, file_hasher_1.hashArray)(projectConfigurationStrings);
|
|
91
94
|
}
|
|
92
95
|
/**
|
|
93
96
|
* Temporary work around to handle nested gitignores. The parcel file watcher doesn't handle them well,
|
|
@@ -119,7 +119,7 @@ function readAndCombineAllProjectConfigurations(tree) {
|
|
|
119
119
|
const createdFiles = findCreatedProjectFiles(tree);
|
|
120
120
|
const deletedFiles = findDeletedProjectFiles(tree);
|
|
121
121
|
const projectFiles = [...globbedFiles, ...createdFiles].filter((r) => deletedFiles.indexOf(r) === -1);
|
|
122
|
-
return (0, workspaces_1.buildProjectsConfigurationsFromProjectPaths)(nxJson, projectFiles, (file) => (0, json_1.readJson)(tree, file))
|
|
122
|
+
return (0, workspaces_1.buildProjectsConfigurationsFromProjectPaths)(nxJson, projectFiles, (file) => (0, json_1.readJson)(tree, file));
|
|
123
123
|
}
|
|
124
124
|
/**
|
|
125
125
|
* Used to ensure that projects created during
|
|
@@ -188,7 +188,7 @@ class TaskHasherImpl {
|
|
|
188
188
|
return yield this.hashNamedInputForDependencies(d.target, task, input.input || 'default', visited);
|
|
189
189
|
}
|
|
190
190
|
else {
|
|
191
|
-
const hash = this.hashExternalDependency(d.
|
|
191
|
+
const { hash } = this.hashExternalDependency(d.target);
|
|
192
192
|
return {
|
|
193
193
|
value: hash,
|
|
194
194
|
details: {
|
|
@@ -239,17 +239,18 @@ class TaskHasherImpl {
|
|
|
239
239
|
}
|
|
240
240
|
return partialHashes;
|
|
241
241
|
}
|
|
242
|
-
|
|
243
|
-
return `${sourceProjectName}->${targetProjectName}`;
|
|
244
|
-
}
|
|
245
|
-
hashExternalDependency(sourceProjectName, targetProjectName, visited = new Set()) {
|
|
242
|
+
hashExternalDependency(projectName, parentProjects = new Set()) {
|
|
246
243
|
// try to retrieve the hash from cache
|
|
247
|
-
if (this.externalDepsHashCache[
|
|
248
|
-
return
|
|
244
|
+
if (this.externalDepsHashCache[projectName]) {
|
|
245
|
+
return {
|
|
246
|
+
fullyResolved: true,
|
|
247
|
+
hash: this.externalDepsHashCache[projectName],
|
|
248
|
+
};
|
|
249
249
|
}
|
|
250
|
-
|
|
251
|
-
const node = this.projectGraph.externalNodes[
|
|
250
|
+
parentProjects.add(projectName);
|
|
251
|
+
const node = this.projectGraph.externalNodes[projectName];
|
|
252
252
|
let partialHash;
|
|
253
|
+
let fullyResolved = true;
|
|
253
254
|
if (node) {
|
|
254
255
|
const partialHashes = [];
|
|
255
256
|
if (node.data.hash) {
|
|
@@ -261,10 +262,18 @@ class TaskHasherImpl {
|
|
|
261
262
|
partialHashes.push(node.data.version);
|
|
262
263
|
}
|
|
263
264
|
// we want to calculate the hash of the entire dependency tree
|
|
264
|
-
if (this.projectGraph.dependencies[
|
|
265
|
-
this.projectGraph.dependencies[
|
|
266
|
-
if (!
|
|
267
|
-
|
|
265
|
+
if (this.projectGraph.dependencies[projectName]) {
|
|
266
|
+
this.projectGraph.dependencies[projectName].forEach((d) => {
|
|
267
|
+
if (!parentProjects.has(d.target)) {
|
|
268
|
+
const hashResult = this.hashExternalDependency(d.target, new Set(parentProjects));
|
|
269
|
+
partialHashes.push(hashResult.hash);
|
|
270
|
+
if (!hashResult.fullyResolved) {
|
|
271
|
+
fullyResolved = false;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
// NOTE: do not store hash to cache since it is only a partial hash
|
|
276
|
+
fullyResolved = false;
|
|
268
277
|
}
|
|
269
278
|
});
|
|
270
279
|
}
|
|
@@ -275,10 +284,12 @@ class TaskHasherImpl {
|
|
|
275
284
|
// this may occur if dependency is not an npm package
|
|
276
285
|
// but rather symlinked in node_modules or it's pointing to a remote git repo
|
|
277
286
|
// in this case we have no information about the versioning of the given package
|
|
278
|
-
partialHash = `__${
|
|
287
|
+
partialHash = `__${projectName}__`;
|
|
288
|
+
}
|
|
289
|
+
if (fullyResolved) {
|
|
290
|
+
this.externalDepsHashCache[projectName] = partialHash;
|
|
279
291
|
}
|
|
280
|
-
|
|
281
|
-
return partialHash;
|
|
292
|
+
return { fullyResolved, hash: partialHash };
|
|
282
293
|
}
|
|
283
294
|
hashTarget(projectName, targetName, selfInputs) {
|
|
284
295
|
const projectNode = this.projectGraph.nodes[projectName];
|
|
@@ -293,7 +304,7 @@ class TaskHasherImpl {
|
|
|
293
304
|
target.executor.startsWith(`@nx/`)) {
|
|
294
305
|
const executorPackage = target.executor.split(':')[0];
|
|
295
306
|
const executorNodeName = this.findExternalDependencyNodeName(executorPackage);
|
|
296
|
-
hash = this.hashExternalDependency(
|
|
307
|
+
hash = this.hashExternalDependency(executorNodeName).hash;
|
|
297
308
|
}
|
|
298
309
|
else {
|
|
299
310
|
// use command external dependencies if available to construct the hash
|
|
@@ -306,7 +317,7 @@ class TaskHasherImpl {
|
|
|
306
317
|
const externalDependencies = input['externalDependencies'];
|
|
307
318
|
for (let dep of externalDependencies) {
|
|
308
319
|
dep = this.findExternalDependencyNodeName(dep);
|
|
309
|
-
partialHashes.push(this.hashExternalDependency(
|
|
320
|
+
partialHashes.push(this.hashExternalDependency(dep).hash);
|
|
310
321
|
}
|
|
311
322
|
}
|
|
312
323
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const project_configuration_1 = require("../../generators/utils/project-configuration");
|
|
5
|
+
const format_changed_files_with_prettier_if_available_1 = require("../../generators/internal-utils/format-changed-files-with-prettier-if-available");
|
|
6
|
+
const json_1 = require("../../generators/utils/json");
|
|
7
|
+
function replaceOutput(output) {
|
|
8
|
+
// replace {projectRoot}/folder/*.(js|map|ts) to {projectRoot}/folder/*.{js,map,ts}
|
|
9
|
+
const regex = /\(([^)]+)\)/g;
|
|
10
|
+
return output.replace(regex, (match, group1) => {
|
|
11
|
+
let replacements = group1.split('|').join(',');
|
|
12
|
+
return `{${replacements}}`;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function updateOutputsGlobs(tree) {
|
|
16
|
+
var _a;
|
|
17
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
for (const [projectName, projectConfiguration] of (0, project_configuration_1.getProjects)(tree).entries()) {
|
|
19
|
+
for (const [targetName, targetConfiguration] of Object.entries((_a = projectConfiguration.targets) !== null && _a !== void 0 ? _a : {})) {
|
|
20
|
+
if (!Array.isArray(targetConfiguration.outputs)) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
targetConfiguration.outputs =
|
|
24
|
+
targetConfiguration.outputs.map(replaceOutput);
|
|
25
|
+
}
|
|
26
|
+
(0, project_configuration_1.updateProjectConfiguration)(tree, projectName, projectConfiguration);
|
|
27
|
+
}
|
|
28
|
+
if (tree.exists('nx.json')) {
|
|
29
|
+
(0, json_1.updateJson)(tree, 'nx.json', (json) => {
|
|
30
|
+
var _a;
|
|
31
|
+
for (const [, targetConfiguration] of Object.entries((_a = json.targetDefaults) !== null && _a !== void 0 ? _a : {})) {
|
|
32
|
+
if (!Array.isArray(targetConfiguration.outputs)) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
targetConfiguration.outputs =
|
|
36
|
+
targetConfiguration.outputs.map(replaceOutput);
|
|
37
|
+
}
|
|
38
|
+
return json;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
yield (0, format_changed_files_with_prettier_if_available_1.formatChangedFilesWithPrettierIfAvailable)(tree);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
exports.default = updateOutputsGlobs;
|
package/src/native/index.d.ts
CHANGED
|
@@ -37,14 +37,13 @@ export const enum WorkspaceErrors {
|
|
|
37
37
|
Generic = 'Generic'
|
|
38
38
|
}
|
|
39
39
|
/** Get workspace config files based on provided globs */
|
|
40
|
-
export function
|
|
40
|
+
export function getProjectConfigurations(workspaceRoot: string, globs: Array<string>, parseConfigurations: (arg0: Array<string>) => Record<string, object>): Record<string, object>
|
|
41
41
|
export interface NxWorkspaceFiles {
|
|
42
42
|
projectFileMap: Record<string, Array<FileData>>
|
|
43
43
|
globalFiles: Array<FileData>
|
|
44
|
-
|
|
44
|
+
projectConfigurations: Record<string, object>
|
|
45
45
|
}
|
|
46
|
-
|
|
47
|
-
export function getWorkspaceFilesNative(workspaceRoot: string, globs: Array<string>): NxWorkspaceFiles
|
|
46
|
+
export function getWorkspaceFilesNative(workspaceRoot: string, globs: Array<string>, parseConfigurations: (arg0: Array<string>) => Record<string, object>): NxWorkspaceFiles
|
|
48
47
|
export class Watcher {
|
|
49
48
|
origin: string
|
|
50
49
|
/**
|
package/src/native/index.js
CHANGED
|
@@ -246,7 +246,7 @@ if (!nativeBinding) {
|
|
|
246
246
|
throw new Error(`Failed to load native binding`)
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
-
const { expandOutputs, remove, copy, hashArray, hashFile, hashFiles, hashFilesMatchingGlobs, EventType, Watcher, WorkspaceErrors,
|
|
249
|
+
const { expandOutputs, remove, copy, hashArray, hashFile, hashFiles, hashFilesMatchingGlobs, EventType, Watcher, WorkspaceErrors, getProjectConfigurations, getWorkspaceFilesNative } = nativeBinding
|
|
250
250
|
|
|
251
251
|
module.exports.expandOutputs = expandOutputs
|
|
252
252
|
module.exports.remove = remove
|
|
@@ -258,5 +258,5 @@ module.exports.hashFilesMatchingGlobs = hashFilesMatchingGlobs
|
|
|
258
258
|
module.exports.EventType = EventType
|
|
259
259
|
module.exports.Watcher = Watcher
|
|
260
260
|
module.exports.WorkspaceErrors = WorkspaceErrors
|
|
261
|
-
module.exports.
|
|
261
|
+
module.exports.getProjectConfigurations = getProjectConfigurations
|
|
262
262
|
module.exports.getWorkspaceFilesNative = getWorkspaceFilesNative
|
|
@@ -17,6 +17,7 @@ const pnpm_parser_1 = require("./pnpm-parser");
|
|
|
17
17
|
const yarn_parser_1 = require("./yarn-parser");
|
|
18
18
|
const project_graph_pruning_1 = require("./project-graph-pruning");
|
|
19
19
|
const package_json_1 = require("./utils/package-json");
|
|
20
|
+
const fileutils_1 = require("../../../utils/fileutils");
|
|
20
21
|
const YARN_LOCK_FILE = 'yarn.lock';
|
|
21
22
|
const NPM_LOCK_FILE = 'package-lock.json';
|
|
22
23
|
const PNPM_LOCK_FILE = 'pnpm-lock.yaml';
|
|
@@ -69,7 +70,8 @@ function parseLockFile(packageManager = (0, package_manager_1.detectPackageManag
|
|
|
69
70
|
try {
|
|
70
71
|
if (packageManager === 'yarn') {
|
|
71
72
|
const content = (0, fs_1.readFileSync)(YARN_LOCK_PATH, 'utf8');
|
|
72
|
-
(0,
|
|
73
|
+
const packageJson = (0, fileutils_1.readJsonFile)('package.json');
|
|
74
|
+
(0, yarn_parser_1.parseYarnLockfile)(content, packageJson, builder);
|
|
73
75
|
return builder.getUpdatedProjectGraph();
|
|
74
76
|
}
|
|
75
77
|
if (packageManager === 'pnpm') {
|
|
@@ -124,10 +126,11 @@ exports.getLockFileName = getLockFileName;
|
|
|
124
126
|
function createLockFile(packageJson, packageManager = (0, package_manager_1.detectPackageManager)(workspace_root_1.workspaceRoot)) {
|
|
125
127
|
const normalizedPackageJson = (0, package_json_1.normalizePackageJson)(packageJson);
|
|
126
128
|
const content = (0, fs_1.readFileSync)(getLockFileName(packageManager), 'utf8');
|
|
129
|
+
const rootPackageJson = (0, fileutils_1.readJsonFile)('package.json');
|
|
127
130
|
const builder = new project_graph_builder_1.ProjectGraphBuilder();
|
|
128
131
|
try {
|
|
129
132
|
if (packageManager === 'yarn') {
|
|
130
|
-
(0, yarn_parser_1.parseYarnLockfile)(content, builder);
|
|
133
|
+
(0, yarn_parser_1.parseYarnLockfile)(content, rootPackageJson, builder);
|
|
131
134
|
const graph = builder.getUpdatedProjectGraph();
|
|
132
135
|
const prunedGraph = (0, project_graph_pruning_1.pruneProjectGraph)(graph, packageJson);
|
|
133
136
|
return (0, yarn_parser_1.stringifyYarnLockfile)(prunedGraph, content, normalizedPackageJson);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ProjectGraphBuilder } from '../../../project-graph/project-graph-builder';
|
|
2
2
|
import { NormalizedPackageJson } from './utils/package-json';
|
|
3
3
|
import { ProjectGraph } from '../../../config/project-graph';
|
|
4
|
-
export declare function parseYarnLockfile(lockFileContent: string, builder: ProjectGraphBuilder): void;
|
|
4
|
+
export declare function parseYarnLockfile(lockFileContent: string, packageJson: NormalizedPackageJson, builder: ProjectGraphBuilder): void;
|
|
5
5
|
export declare function stringifyYarnLockfile(graph: ProjectGraph, rootLockFileContent: string, packageJson: NormalizedPackageJson): string;
|
|
@@ -6,12 +6,12 @@ const package_json_1 = require("./utils/package-json");
|
|
|
6
6
|
const semver_1 = require("semver");
|
|
7
7
|
const file_hasher_1 = require("../../../hasher/file-hasher");
|
|
8
8
|
const object_sort_1 = require("../../../utils/object-sort");
|
|
9
|
-
function parseYarnLockfile(lockFileContent, builder) {
|
|
9
|
+
function parseYarnLockfile(lockFileContent, packageJson, builder) {
|
|
10
10
|
const { parseSyml } = require('@yarnpkg/parsers');
|
|
11
11
|
const data = parseSyml(lockFileContent);
|
|
12
12
|
// we use key => node map to avoid duplicate work when parsing keys
|
|
13
13
|
const keyMap = new Map();
|
|
14
|
-
addNodes(data, builder, keyMap);
|
|
14
|
+
addNodes(data, packageJson, builder, keyMap);
|
|
15
15
|
addDependencies(data, builder, keyMap);
|
|
16
16
|
}
|
|
17
17
|
exports.parseYarnLockfile = parseYarnLockfile;
|
|
@@ -23,10 +23,11 @@ function getPackageNames(keys) {
|
|
|
23
23
|
});
|
|
24
24
|
return Array.from(packageNames);
|
|
25
25
|
}
|
|
26
|
-
function addNodes(_a, builder, keyMap) {
|
|
26
|
+
function addNodes(_a, packageJson, builder, keyMap) {
|
|
27
27
|
var { __metadata } = _a, dependencies = tslib_1.__rest(_a, ["__metadata"]);
|
|
28
28
|
const isBerry = !!__metadata;
|
|
29
29
|
const nodes = new Map();
|
|
30
|
+
const combinedDeps = Object.assign(Object.assign(Object.assign(Object.assign({}, packageJson.dependencies), packageJson.devDependencies), packageJson.peerDependencies), packageJson.optionalDependencies);
|
|
30
31
|
Object.entries(dependencies).forEach(([keys, snapshot]) => {
|
|
31
32
|
// ignore workspace projects & patches
|
|
32
33
|
if (snapshot.linkType === 'soft' || keys.includes('@patch:')) {
|
|
@@ -57,24 +58,21 @@ function addNodes(_a, builder, keyMap) {
|
|
|
57
58
|
},
|
|
58
59
|
};
|
|
59
60
|
keyMap.set(key, node);
|
|
61
|
+
// use actual version so we can detect it later based on npm package's version
|
|
62
|
+
const mapKey = snapshot.version && version !== snapshot.version
|
|
63
|
+
? snapshot.version
|
|
64
|
+
: version;
|
|
60
65
|
if (!nodes.has(packageName)) {
|
|
61
|
-
nodes.set(packageName, new Map([[
|
|
66
|
+
nodes.set(packageName, new Map([[mapKey, node]]));
|
|
62
67
|
}
|
|
63
68
|
else {
|
|
64
|
-
nodes.get(packageName).set(
|
|
69
|
+
nodes.get(packageName).set(mapKey, node);
|
|
65
70
|
}
|
|
66
71
|
});
|
|
67
72
|
});
|
|
68
73
|
});
|
|
69
74
|
for (const [packageName, versionMap] of nodes.entries()) {
|
|
70
|
-
|
|
71
|
-
if (versionMap.size === 1) {
|
|
72
|
-
hoistedNode = versionMap.values().next().value;
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
const hoistedVersion = getHoistedVersion(packageName);
|
|
76
|
-
hoistedNode = versionMap.get(hoistedVersion);
|
|
77
|
-
}
|
|
75
|
+
const hoistedNode = findHoistedNode(packageName, versionMap, combinedDeps);
|
|
78
76
|
if (hoistedNode) {
|
|
79
77
|
hoistedNode.name = `npm:${packageName}`;
|
|
80
78
|
}
|
|
@@ -83,6 +81,34 @@ function addNodes(_a, builder, keyMap) {
|
|
|
83
81
|
});
|
|
84
82
|
}
|
|
85
83
|
}
|
|
84
|
+
function findHoistedNode(packageName, versionMap, combinedDeps) {
|
|
85
|
+
const hoistedVersion = getHoistedVersion(packageName);
|
|
86
|
+
if (hoistedVersion) {
|
|
87
|
+
return versionMap.get(hoistedVersion);
|
|
88
|
+
}
|
|
89
|
+
const rootVersionSpecifier = combinedDeps[packageName];
|
|
90
|
+
if (!rootVersionSpecifier) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const versions = Array.from(versionMap.keys()).sort((a, b) => (0, semver_1.gt)(a, b) ? -1 : 1);
|
|
94
|
+
// take the highest version found
|
|
95
|
+
if (rootVersionSpecifier === '*') {
|
|
96
|
+
return versionMap.get(versions[0]);
|
|
97
|
+
}
|
|
98
|
+
// take version that satisfies the root version specifier
|
|
99
|
+
let version = versions.find((v) => (0, semver_1.satisfies)(v, rootVersionSpecifier));
|
|
100
|
+
if (!version) {
|
|
101
|
+
// try to find alias version
|
|
102
|
+
version = versions.find((v) => versionMap.get(v).name === `npm:${packageName}@${rootVersionSpecifier}`);
|
|
103
|
+
}
|
|
104
|
+
if (!version) {
|
|
105
|
+
// try to find tarball package
|
|
106
|
+
version = versions.find((v) => versionMap.get(v).data.version !== v);
|
|
107
|
+
}
|
|
108
|
+
if (version) {
|
|
109
|
+
return versionMap.get(version);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
86
112
|
function findVersion(packageName, key, snapshot, isBerry) {
|
|
87
113
|
const versionRange = key.slice(packageName.length + 1);
|
|
88
114
|
// check for alias packages
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { FileData, ProjectFileMap, ProjectGraph } from '../config/project-graph';
|
|
2
|
-
import { ProjectsConfigurations } from '../config/workspace-json-project-json';
|
|
2
|
+
import { ProjectConfiguration, ProjectsConfigurations } from '../config/workspace-json-project-json';
|
|
3
3
|
export declare function createProjectFileMapUsingProjectGraph(graph: ProjectGraph): Promise<ProjectFileMap>;
|
|
4
4
|
export declare function createProjectFileMap(projectsConfigurations: ProjectsConfigurations, allWorkspaceFiles: FileData[]): {
|
|
5
5
|
projectFileMap: ProjectFileMap;
|
|
6
6
|
allWorkspaceFiles: FileData[];
|
|
7
7
|
};
|
|
8
|
-
export declare function updateProjectFileMap(projectsConfigurations:
|
|
8
|
+
export declare function updateProjectFileMap(projectsConfigurations: Record<string, ProjectConfiguration>, projectFileMap: ProjectFileMap, allWorkspaceFiles: FileData[], updatedFiles: Map<string, string>, deletedFiles: string[]): {
|
|
9
9
|
projectFileMap: ProjectFileMap;
|
|
10
10
|
allWorkspaceFiles: FileData[];
|
|
11
11
|
};
|
|
@@ -40,7 +40,7 @@ function createProjectFileMap(projectsConfigurations, allWorkspaceFiles) {
|
|
|
40
40
|
exports.createProjectFileMap = createProjectFileMap;
|
|
41
41
|
function updateProjectFileMap(projectsConfigurations, projectFileMap, allWorkspaceFiles, updatedFiles, deletedFiles) {
|
|
42
42
|
var _a, _b;
|
|
43
|
-
const projectRootMappings = (0, find_project_for_path_1.createProjectRootMappingsFromProjectConfigurations)(projectsConfigurations
|
|
43
|
+
const projectRootMappings = (0, find_project_for_path_1.createProjectRootMappingsFromProjectConfigurations)(projectsConfigurations);
|
|
44
44
|
for (const f of updatedFiles.keys()) {
|
|
45
45
|
const matchingProjectFiles = (_a = projectFileMap[(0, find_project_for_path_1.findProjectForPath)(f, projectRootMappings)]) !== null && _a !== void 0 ? _a : [];
|
|
46
46
|
if (matchingProjectFiles) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ProjectsConfigurations } from '../../config/workspace-json-project-json';
|
|
1
|
+
import { ProjectConfiguration, ProjectsConfigurations } from '../../config/workspace-json-project-json';
|
|
2
2
|
import { NxJsonConfiguration } from '../../config/nx-json';
|
|
3
3
|
import { FileData } from '../../config/project-graph';
|
|
4
4
|
/**
|
|
@@ -18,4 +18,4 @@ export declare function retrieveWorkspaceFiles(workspaceRoot: string, nxJson: Nx
|
|
|
18
18
|
* @param workspaceRoot
|
|
19
19
|
* @param nxJson
|
|
20
20
|
*/
|
|
21
|
-
export declare function retrieveProjectConfigurations(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<
|
|
21
|
+
export declare function retrieveProjectConfigurations(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<Record<string, ProjectConfiguration>>;
|