Sintaks definisi grup Package dan perilaku pencocokan - CodeArtifact

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Sintaks definisi grup Package dan perilaku pencocokan

Topik ini berisi informasi tentang mendefinisikan grup paket, perilaku pencocokan pola, kekuatan asosiasi paket, dan hierarki grup paket.

Sintaks definisi grup Package dan contoh

Sintaks pola untuk mendefinisikan kelompok paket erat mengikuti pemformatan jalur paket. Jalur paket dibuat dari komponen koordinat paket (format, namespace, dan nama) dengan menambahkan garis miring ke awal dan memisahkan masing-masing komponen dengan garis miring ke depan. Misalnya, path paket untuk paket npm bernama anycompany-ui-componentsdalam ruang namespace adalah /npm/space/. anycompany-ui-components

Pola grup paket mengikuti struktur yang sama dengan jalur paket, kecuali komponen yang tidak ditentukan sebagai bagian dari definisi grup dihilangkan, dan pola diakhiri dengan akhiran. Sufiks yang disertakan menentukan perilaku pencocokan pola, sebagai berikut:

  • $Sufiks akan cocok dengan koordinat paket lengkap.

  • ~Sufiks akan cocok dengan awalan.

  • *Sufiks akan cocok dengan semua nilai komponen yang ditentukan sebelumnya.

Berikut adalah contoh pola untuk masing-masing kombinasi yang diizinkan:

  1. Semua format paket: /*

  2. Format paket tertentu: /npm/*

  3. Format paket dan awalan namespace: /maven/com.anycompany~

  4. Format paket dan namespace: /npm/space/*

  5. Format paket, namespace, dan awalan nama: /npm/space/anycompany-ui~

  6. Format paket, namespace, dan nama: /maven/org.apache.logging.log4j/log4j-core$

Seperti yang ditunjukkan pada contoh di atas, ~ akhiran ditambahkan ke akhir namespace atau nama untuk mewakili kecocokan awalan dan * muncul setelah garis miring saat digunakan untuk mencocokkan semua nilai untuk komponen berikutnya di jalur (baik semua format, semua ruang nama, atau semua nama).

Definisi dan normalisasi grup Package

CodeArtifact menormalkan NuGet, Python, dan nama paket Swift, dan menormalkan ruang nama paket Swift sebelum menyimpannya. CodeArtifact menggunakan nama-nama yang dinormalisasi ini saat mencocokkan paket dengan definisi grup paket. Oleh karena itu, grup paket yang berisi namespace atau nama dalam format ini harus menggunakan namespace dan nama yang dinormalisasi. Untuk informasi selengkapnya tentang bagaimana nama paket dan ruang nama dinormalisasi, lihat dokumentasi normalisasi nama, NuGetPython, dan Swift.

Ruang nama dalam definisi grup paket

Untuk paket atau format paket tanpa namespace (Python dan NuGet), grup paket tidak boleh berisi namespace. Definisi grup paket untuk grup paket ini berisi bagian namespace kosong. Misalnya, jalur untuk paket Python bernama request adalah/python //requests.

Untuk paket atau format paket dengan namespace (Maven, generik, dan Swift), namespace harus disertakan jika nama paket disertakan. Untuk format paket Swift, namespace paket yang dinormalisasi akan digunakan. Untuk informasi selengkapnya tentang cara ruang nama paket Swift dinormalisasi, lihat. Nama paket Swift dan normalisasi namespace

Package group hirarki dan spesifisitas pola

Paket yang “dalam” atau “terkait dengan” grup paket adalah paket dengan jalur paket yang cocok dengan pola grup tetapi tidak cocok dengan pola grup yang lebih spesifik. Misalnya, mengingat grup paket /npm/* dan/npm/space/*, jalur paket /npm//react dikaitkan dengan grup pertama (/npm/*) sementara /npm/space/aui.components dan /npm/space/ dikaitkan dengan grup kedua (). amplify-ui-core /npm/space/* Meskipun sebuah paket mungkin cocok dengan beberapa grup, setiap paket hanya dikaitkan dengan satu grup, kecocokan paling spesifik, dan hanya konfigurasi satu grup yang berlaku untuk paket tersebut.

Ketika jalur paket cocok dengan beberapa pola, pola “lebih spesifik” dapat dianggap sebagai pola pencocokan terpanjang. Atau, pola yang lebih spesifik adalah pola yang cocok dengan subset yang tepat dari paket yang cocok dengan pola yang kurang spesifik. Dari contoh kami sebelumnya, setiap paket yang cocok /npm/space/* juga cocok/npm/*, tetapi kebalikannya tidak benar, yang membuat /npm/space/* pola lebih spesifik karena merupakan bagian yang tepat dari/npm/*. Karena satu grup adalah bagian dari grup lain, ia menciptakan hierarki, di mana /npm/space/* merupakan subkelompok dari kelompok induk,. /npm/*

Meskipun hanya konfigurasi grup paket yang paling spesifik yang berlaku untuk sebuah paket, grup tersebut dapat dikonfigurasi untuk mewarisi dari konfigurasi grup induknya.

Kata, batas kata, dan pencocokan awalan

Sebelum membahas pencocokan awalan, mari kita definisikan beberapa istilah kunci:

  • Sebuah kata huruf atau angka diikuti dengan nol atau lebih huruf, angka, atau karakter tanda (seperti aksen, umlaut, dll.).

  • Batas kata ada di akhir kata, ketika karakter non-kata tercapai. Karakter non-kata adalah karakter tanda baca seperti.,, - dan. _

Secara khusus, pola regex untuk sebuah kata adalah[\p{L}\p{N}][\p{L}\p{N}\p{M}]*, yang dapat dipecah sebagai berikut:

  • \p{L}mewakili surat apa pun.

  • \p{N}mewakili nomor apapun.

  • \p{M}mewakili karakter tanda apa pun, seperti aksen, umlauts, dll.

Oleh karena itu, [\p{L}\p{N}] mewakili angka atau huruf, dan [\p{L}\p{N}\p{M}]* mewakili nol atau lebih huruf, angka, atau karakter tanda dan batas kata berada di akhir setiap kecocokan pola regex ini.

catatan

Pencocokan batas kata didasarkan pada definisi “kata” ini. Ini tidak didasarkan pada kata-kata yang didefinisikan dalam kamus, atau CameCase. Misalnya, tidak ada batas kata dalam oneword atau. OneWord

Sekarang batas kata dan kata didefinisikan, kita dapat menggunakannya untuk menggambarkan pencocokan awalan dalam. CodeArtifact Untuk menunjukkan kecocokan awalan pada batas kata, karakter pencocokan (~) digunakan setelah karakter kata. Misalnya, polanya /npm/space/foo~ cocok dengan jalur paket /npm/space/foo dan/npm/space/foo-bar, tetapi tidak /npm/space/food atau/npm/space/foot.

Wildcard (*) diperlukan untuk digunakan sebagai pengganti ~ saat mengikuti karakter non-kata, seperti dalam pola. /npm/*

Sensitivitas kasus

Definisi grup Package bersifat peka huruf besar/kecil, yang berarti bahwa pola yang berbeda hanya berdasarkan kasus dapat ada sebagai grup paket terpisah. Misalnya, pengguna dapat membuat grup paket terpisah dengan pola/npm//AsyncStorage$,/npm//asyncStorage$, dan /npm//asyncstorage$ untuk tiga paket terpisah yang ada di npm Public Registry: AsyncStorage, AsyncStorage, asyncstorage yang hanya berbeda menurut kasus.

Sementara kasus penting, CodeArtifact masih mengaitkan paket ke grup paket jika paket memiliki variasi pola yang berbeda menurut kasus. Jika pengguna membuat grup /npm//AsyncStorage$ paket tanpa membuat dua grup lain yang ditunjukkan di atas, maka semua variasi kasus nama AsyncStorage, termasuk AsyncStorage dan asyncstorage, akan dikaitkan dengan grup paket. Tapi, seperti yang dijelaskan di bagian selanjutnyaPertandingan kuat dan lemah, variasi ini akan ditangani secara berbeda dari AsyncStorage, yang persis cocok dengan polanya.

Pertandingan kuat dan lemah

Informasi di bagian sebelumnya,Sensitivitas kasus, menyatakan bahwa kelompok paket peka huruf besar/kecil, dan kemudian menjelaskan bahwa mereka tidak peka huruf besar/kecil. Ini karena definisi grup paket CodeArtifact memiliki konsep kecocokan kuat (atau kecocokan tepat) dan kecocokan lemah (atau kecocokan variasi). Kecocokan yang kuat adalah ketika paket cocok dengan pola persis, tanpa variasi apa pun. Pencocokan yang lemah adalah ketika paket cocok dengan variasi pola, seperti kasus huruf yang berbeda. Perilaku kecocokan yang lemah mencegah paket yang merupakan variasi dari pola grup paket agar tidak bergulir ke grup paket yang lebih umum. Ketika sebuah paket adalah variasi (kecocokan lemah) dari pola grup pencocokan yang paling spesifik, maka paket tersebut dikaitkan dengan grup tetapi paket diblokir alih-alih menerapkan konfigurasi kontrol asal grup, mencegah versi baru paket ditarik dari upstream atau diterbitkan. Perilaku ini mengurangi risiko serangan rantai pasokan yang dihasilkan dari kebingungan ketergantungan paket dengan nama yang hampir identik.

Untuk mengilustrasikan perilaku kecocokan yang lemah, misalkan grup paket /npm/* memungkinkan konsumsi dan memblokir penerbitan. Grup paket yang lebih spesifik,/npm//anycompany-spicy-client$, dikonfigurasi untuk memblokir konsumsi dan memungkinkan publikasi. Paket bernama anycompany-spicy-clientadalah kecocokan kuat dari grup paket, yang memungkinkan versi paket untuk diterbitkan dan memblokir konsumsi versi paket. Satu-satunya casing dari nama paket yang diizinkan untuk dipublikasikan adalah anycompany-spicy-client, karena ini adalah kecocokan yang kuat untuk pola definisi paket. Variasi kasus yang berbeda, seperti AnyCompany-spicy-client diblokir dari penerbitan karena kecocokan yang lemah. Lebih penting lagi, grup paket memblokir konsumsi semua variasi kasus, bukan hanya nama huruf kecil yang digunakan dalam pola, mengurangi risiko serangan kebingungan ketergantungan.

Variasi tambahan

Selain perbedaan kasus, pencocokan lemah juga mengabaikan perbedaan urutan tanda hubung-, titik, garis bawah ._, dan karakter yang dapat membingungkan (seperti karakter yang tampak serupa dari huruf terpisah). Selama normalisasi yang digunakan untuk pencocokan lemah, CodeArtifact melakukan casefolding (mirip dengan mengonversi ke huruf kecil), menggantikan urutan karakter tanda hubung, titik, dan garis bawah dengan satu titik, dan menormalkan karakter yang dapat membingungkan.

Pencocokan yang lemah memperlakukan tanda hubung, titik, dan garis bawah sebagai setara tetapi tidak sepenuhnya mengabaikannya. Ini berarti bahwa foo-bar, foo.bar, foo.. bar, dan foo_bar semuanya setara dengan kecocokan yang lemah, tetapi foobar tidak. Meskipun beberapa repositori publik menerapkan langkah-langkah untuk mencegah jenis variasi ini, perlindungan yang diberikan oleh repositori publik tidak membuat fitur grup paket ini tidak diperlukan. Misalnya, repositori publik seperti registri Public Registry npm hanya akan mencegah variasi baru dari paket bernama my-package jika paket saya sudah dipublikasikan ke dalamnya. Jika paket saya adalah paket internal dan grup /npm//my-package$ paket dibuat yang memungkinkan publikasi dan blokir konsumsi, Anda mungkin tidak ingin menerbitkan paket saya ke Registri Publik npm untuk mencegah varian seperti.package saya diizinkan.

Sementara beberapa format paket seperti Maven memperlakukan karakter ini secara berbeda (Maven memperlakukan . sebagai pemisah hierarki namespace tetapi tidak - atau_), sesuatu seperti com.act-on masih dapat dikacaukan dengan com.act.on.

catatan

Perhatikan bahwa setiap kali beberapa variasi dikaitkan dengan grup paket, administrator dapat membuat grup paket baru untuk variasi tertentu guna mengonfigurasi perilaku yang berbeda untuk variasi tersebut.