@cbortech/cbor 0.26.8 → 0.27.1
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.ja.md +193 -28
- package/README.md +196 -29
- package/dist/ast/CborAppSeqResult.d.ts +58 -3
- package/dist/ast/CborArray.d.ts +2 -2
- package/dist/ast/CborByteString.d.ts +17 -1
- package/dist/ast/CborEmbeddedCBOR.d.ts +2 -2
- package/dist/ast/CborFloat.d.ts +2 -2
- package/dist/ast/CborIndefiniteByteString.d.ts +25 -1
- package/dist/ast/CborIndefiniteTextString.d.ts +17 -1
- package/dist/ast/CborItem.d.ts +340 -10
- package/dist/ast/CborMap.d.ts +2 -2
- package/dist/ast/CborNint.d.ts +1 -1
- package/dist/ast/CborTag.d.ts +30 -3
- package/dist/ast/CborTextString.d.ts +3 -2
- package/dist/ast/CborUint.d.ts +1 -1
- package/dist/ast/CborUnresolvedAppExt.d.ts +2 -2
- package/dist/ast/index.cjs +1 -1
- package/dist/ast/index.js +2 -2
- package/dist/cddl/index.cjs +1 -1
- package/dist/cddl/index.js +1 -1
- package/dist/cdn/index.cjs +2 -2
- package/dist/cdn/index.cjs.map +1 -1
- package/dist/cdn/index.js +18 -18
- package/dist/cdn/index.js.map +1 -1
- package/dist/cdn/serialize-utils.d.ts +237 -10
- package/dist/cdn/tokenizer.d.ts +12 -11
- package/dist/extensions/builtins.d.ts +5 -5
- package/dist/extensions/cri.d.ts +4 -4
- package/dist/extensions/dt.d.ts +4 -4
- package/dist/extensions/ip.d.ts +4 -4
- package/dist/extensions/types.d.ts +44 -5
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +158 -158
- package/dist/index.js.map +1 -1
- package/dist/{mapEntries-Ci_dppP6.js → mapEntries-CCLaJSaJ.js} +1599 -1275
- package/dist/mapEntries-CCLaJSaJ.js.map +1 -0
- package/dist/mapEntries-CZZJScaj.cjs +13 -0
- package/dist/mapEntries-CZZJScaj.cjs.map +1 -0
- package/dist/{schema-y8G5mDIS.js → schema-DN9inJny.js} +294 -294
- package/dist/{schema-y8G5mDIS.js.map → schema-DN9inJny.js.map} +1 -1
- package/dist/schema-zsg5yCPK.cjs +63 -0
- package/dist/{schema-DgnkH0P6.cjs.map → schema-zsg5yCPK.cjs.map} +1 -1
- package/dist/serialize-utils-DhlW61ZX.cjs +37 -0
- package/dist/serialize-utils-DhlW61ZX.cjs.map +1 -0
- package/dist/{tokenizer-N-vAvRdj.js → serialize-utils-h-CVB9rg.js} +636 -358
- package/dist/serialize-utils-h-CVB9rg.js.map +1 -0
- package/dist/types.d.ts +508 -58
- package/dist/utils/base64.d.ts +1 -1
- package/dist/utils/hexfloat.d.ts +11 -3
- package/dist/utils/strip-comments.d.ts +1 -1
- package/package.json +13 -12
- package/dist/mapEntries-BJzyBUH5.cjs +0 -13
- package/dist/mapEntries-BJzyBUH5.cjs.map +0 -1
- package/dist/mapEntries-Ci_dppP6.js.map +0 -1
- package/dist/schema-DgnkH0P6.cjs +0 -63
- package/dist/tokenizer-BD08xbyd.cjs +0 -36
- package/dist/tokenizer-BD08xbyd.cjs.map +0 -1
- package/dist/tokenizer-N-vAvRdj.js.map +0 -1
package/README.ja.md
CHANGED
|
@@ -385,18 +385,22 @@ CBOR.format("h'68' + b64'aQ'", {
|
|
|
385
385
|
// b64'aQ'
|
|
386
386
|
```
|
|
387
387
|
|
|
388
|
-
|
|
388
|
+
保持した連結を `+` ではなく draft-27 の `t1<<...>>` / `b1<<...>>` 記法で
|
|
389
|
+
出力するには、[文字列連結と不定長文字列](#文字列連結と不定長文字列) の
|
|
390
|
+
`modernConcat` を参照してください。
|
|
391
|
+
|
|
392
|
+
### app-string / -sequence 記法を保持する
|
|
389
393
|
|
|
390
394
|
一部の組み込み拡張(`dt`/`DT`、`ip`/`IP`)は同じ値に対して `prefix'...'`
|
|
391
|
-
(
|
|
392
|
-
`prefix<<...>>`(
|
|
395
|
+
(app-string)、`` prefix`...` ``(backtick app-string)、
|
|
396
|
+
`prefix<<...>>`(app-sequence)、生のタグリテラル(`N(...)`)の
|
|
393
397
|
いずれの記法もサポートしていますが、デフォルトでは `CBOR.format()` を呼ぶ
|
|
394
398
|
たびに解決済みの値から `prefix'...'` を再生成します。そのため
|
|
395
399
|
`` DT`1969-07-21T02:56:16Z` `` も `DT<<'1969-07-21T02:56:16Z'>>` も、生の
|
|
396
400
|
タグ記法 `1(1749772800)` さえも、すべて `DT'...'` 記法に正規化され、さら
|
|
397
401
|
に非正規な `DT'...'` の表記(例えば `Z` の代わりに `+00:00` を使った場合
|
|
398
|
-
など)も書き換えられます。`
|
|
399
|
-
れていた表記のまま保持します。`
|
|
402
|
+
など)も書き換えられます。`preserveAppPrefix` を指定すると、実際に使わ
|
|
403
|
+
れていた表記のまま保持します。`appPrefix: false` を同時に指定した場合は
|
|
400
404
|
効果がありません(どちらにせよ元の表記に関わらず生のタグ記法になるため)。
|
|
401
405
|
これらの記法からパースされていない値にも効果はありません。
|
|
402
406
|
|
|
@@ -406,16 +410,50 @@ import { CBOR } from '@cbortech/cbor';
|
|
|
406
410
|
CBOR.format('1(1749772800)');
|
|
407
411
|
// "DT'2025-06-13T00:00:00Z'"
|
|
408
412
|
|
|
409
|
-
CBOR.format('1(1749772800)', {
|
|
413
|
+
CBOR.format('1(1749772800)', { preserveAppPrefix: true });
|
|
410
414
|
// "1(1749772800)"
|
|
411
415
|
|
|
412
|
-
CBOR.format("DT<<'1969-07-21T02:56:16Z'>>", {
|
|
416
|
+
CBOR.format("DT<<'1969-07-21T02:56:16Z'>>", { preserveAppPrefix: true });
|
|
413
417
|
// "DT<<'1969-07-21T02:56:16Z'>>"
|
|
414
418
|
|
|
415
|
-
CBOR.format('DT`1969-07-21T02:56:16Z`', {
|
|
419
|
+
CBOR.format('DT`1969-07-21T02:56:16Z`', { preserveAppPrefix: true });
|
|
416
420
|
// "DT`1969-07-21T02:56:16Z`"
|
|
417
421
|
```
|
|
418
422
|
|
|
423
|
+
### コメントを保持する
|
|
424
|
+
|
|
425
|
+
デフォルトでは、`CBOR.fromCDN()` はコメントを破棄し、`CBOR.format()` も
|
|
426
|
+
コメントを出力しません。`preserveComments: true` を指定すると、パース時に
|
|
427
|
+
コメントを取り込み、元々書かれていたマーカー(`#`・`//`・`/* */`・`/ /`)の
|
|
428
|
+
まま再出力します。
|
|
429
|
+
|
|
430
|
+
```ts
|
|
431
|
+
import { CBOR } from '@cbortech/cbor';
|
|
432
|
+
|
|
433
|
+
const text = '{ "a": 1 } # trailing comment';
|
|
434
|
+
|
|
435
|
+
CBOR.format(text, { indent: 2 });
|
|
436
|
+
// '{\n "a": 1\n}'
|
|
437
|
+
|
|
438
|
+
CBOR.format(text, { indent: 2, preserveComments: true });
|
|
439
|
+
// '{\n "a": 1\n} # trailing comment'
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
書かれていたマーカーを混在させたまま保持するのではなく、すべてのコメントの
|
|
443
|
+
マーカーを正規化したい場合は `comments` を使います — `'c-style'` は
|
|
444
|
+
`//` と `/* */`、`'cdn-style'` は `#` と `/ /` に正規化します。
|
|
445
|
+
`preserveComments: true` が指定されている場合は効果がありません(verbatim
|
|
446
|
+
が優先されます)。コメントを完全に削除するには `comments: 'strip'` を
|
|
447
|
+
明示的に指定するか(あるいは両方とも未指定のままにするか)します。
|
|
448
|
+
|
|
449
|
+
```ts
|
|
450
|
+
CBOR.format(text, { indent: 2, comments: 'c-style' });
|
|
451
|
+
// '{\n "a": 1\n} // trailing comment'
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
`indent` を指定して整形出力する場合のみ効果があります。1 行出力では改行で
|
|
455
|
+
終端する必要がある行コメントの性質上、コメントは常に取り除かれます。
|
|
456
|
+
|
|
419
457
|
### 空行を保持する
|
|
420
458
|
|
|
421
459
|
デフォルトでは、`CBOR.format()` は配列・マップの要素間(および `(_ ...)`
|
|
@@ -670,9 +708,82 @@ console.log(text);
|
|
|
670
708
|
// DT'2026-05-06T00:00:00Z'
|
|
671
709
|
```
|
|
672
710
|
|
|
711
|
+
### 項目ごとのオプション上書き
|
|
712
|
+
|
|
713
|
+
`toJS()` の `itemOptions` は、各ノードが変換される直前にすべてのノードに対して呼ばれるため、
|
|
714
|
+
ドキュメントの一部だけを他と異なる方法で変換できます。そのノードとその子孫に適用する
|
|
715
|
+
オプションを部分的なオプションオブジェクトとして返すか、変更しない場合は `undefined` を
|
|
716
|
+
返します。`ctx.path` は配列インデックスとマップキーからなる列でノードを識別し、
|
|
717
|
+
ルートでは空になります。
|
|
718
|
+
|
|
719
|
+
同じノードに対して複数回呼ばれることがあります —— `reviver` も併用している場合、配列や
|
|
720
|
+
object-mode の map は各子要素を少なくとも2回変換します。1回は、先行する兄弟要素自身の
|
|
721
|
+
`reviver` 呼び出しから見える値を構築するため、もう1回は実際に保持される値を計算するため
|
|
722
|
+
です。このコールバックは `node`/`ctx` のみに依存する純粋関数として書き、呼ばれる回数には
|
|
723
|
+
依存しないようにしてください。
|
|
724
|
+
|
|
725
|
+
```ts
|
|
726
|
+
import { CBOR } from '@cbortech/cbor';
|
|
727
|
+
|
|
728
|
+
const item = CBOR.fromCDN(
|
|
729
|
+
`{"date1": DT'2026-08-23T00:00:00Z', "date2": DT'2026-08-23T00:00:00Z'}`
|
|
730
|
+
);
|
|
731
|
+
|
|
732
|
+
const value = item.toJS({
|
|
733
|
+
stripTags: true,
|
|
734
|
+
itemOptions: (_node, ctx) =>
|
|
735
|
+
ctx.path.length === 1 && ctx.path[0] === 'date1'
|
|
736
|
+
? { extensions: [CBOR.dt_as_Date] }
|
|
737
|
+
: undefined,
|
|
738
|
+
});
|
|
739
|
+
|
|
740
|
+
console.log(value);
|
|
741
|
+
// { date1: Date(...), date2: 1787443200 }
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
`ToJSOptions` の `extensions` は `itemOptions` なしでも単体で機能し、ツリー全体を
|
|
745
|
+
再解釈できます —— デフォルトの `dt` extension でパースされた値も、`toJS()` に
|
|
746
|
+
`extensions` を渡すことで `dt_as_Date`(またはその逆)に変換し直せます。
|
|
747
|
+
|
|
748
|
+
`ctx.options` には、そのノードにおいて現在有効なオプション —— ルートのオプションに
|
|
749
|
+
祖先の `itemOptions` がすでに返した上書きをマージしたもの —— が渡されます。これにより、
|
|
750
|
+
コールバックはオプションを丸ごと置き換えるのではなく、現在の値を土台にして組み立てる
|
|
751
|
+
ことができます。
|
|
752
|
+
|
|
753
|
+
```ts
|
|
754
|
+
itemOptions: (_node, ctx) => ({
|
|
755
|
+
extensions: [...(ctx.options.extensions ?? []), CBOR.dt_as_Date],
|
|
756
|
+
});
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
`toCDN()` にも同じ `itemOptions` オプションがあり、ドキュメントの一部だけを
|
|
760
|
+
他と異なる方法でフォーマットできます。
|
|
761
|
+
|
|
762
|
+
```ts
|
|
763
|
+
import { CBOR } from '@cbortech/cbor';
|
|
764
|
+
|
|
765
|
+
const item = CBOR.fromCDN('{"raw": 255, "count": 255}');
|
|
766
|
+
|
|
767
|
+
const text = item.toCDN({
|
|
768
|
+
itemOptions: (_node, ctx) =>
|
|
769
|
+
ctx.path.length === 1 && ctx.path[0] === 'raw'
|
|
770
|
+
? { intFormat: 'hex' }
|
|
771
|
+
: undefined,
|
|
772
|
+
});
|
|
773
|
+
|
|
774
|
+
console.log(text);
|
|
775
|
+
// {"raw":0xff,"count":255}
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
`toCDN()` には `reviver` に相当するものがないため、それを理由に複数回呼ばれる
|
|
779
|
+
ことはありません —— ただし `toCDN()` 自体のレイアウト判定(`inlineLeafContainers`
|
|
780
|
+
の1行収まるかの判定、あるいはタグ/app-sequence 値自身の複数語判定)が実際の
|
|
781
|
+
出力より前にエントリを再描画してその答えを得ることがあるため、その場合には
|
|
782
|
+
やはり複数回呼ばれ得ます。こちらも純粋な関数として書いてください。
|
|
783
|
+
|
|
673
784
|
## 文字列連結と不定長文字列
|
|
674
785
|
|
|
675
|
-
draft-ietf-cbor-edn-literals-
|
|
786
|
+
draft-ietf-cbor-edn-literals-27(§3.5 / §3.6)の app-extension
|
|
676
787
|
`t1` / `b1` / `ilbs` / `ilts` は、デフォルトで有効です。
|
|
677
788
|
|
|
678
789
|
`t1<<...>>` と `b1<<...>>` は、(テキストまたはバイト)文字列の引数を左から
|
|
@@ -683,11 +794,11 @@ draft-ietf-cbor-edn-literals-26(§3.4 / §3.5)の application extension
|
|
|
683
794
|
import { CBOR } from '@cbortech/cbor';
|
|
684
795
|
|
|
685
796
|
const text = CBOR.fromCDN('t1<<"Hello ", "world">>');
|
|
686
|
-
console.log(text.toCDN({
|
|
797
|
+
console.log(text.toCDN({ appPrefix: false }));
|
|
687
798
|
// "Hello world"
|
|
688
799
|
|
|
689
800
|
const bytes = CBOR.fromCDN("b1<<'Hello ', h'776f726c64'>>");
|
|
690
|
-
console.log(bytes.toCDN({
|
|
801
|
+
console.log(bytes.toCDN({ appPrefix: false }));
|
|
691
802
|
// 'Hello world'
|
|
692
803
|
```
|
|
693
804
|
|
|
@@ -701,29 +812,82 @@ streamstring 構文の置き換えですが、本ライブラリは従来構文
|
|
|
701
812
|
import { CBOR } from '@cbortech/cbor';
|
|
702
813
|
|
|
703
814
|
const v = CBOR.fromCDN("ilbs<<'Hello ', 'world'>>");
|
|
704
|
-
console.log(v.toCDN({
|
|
815
|
+
console.log(v.toCDN({ appPrefix: false }));
|
|
705
816
|
// (_ 'Hello ','world')
|
|
706
817
|
```
|
|
707
818
|
|
|
819
|
+
### `t1`/`b1`/`ilbs`/`ilts` 記法を出力する
|
|
820
|
+
|
|
821
|
+
パース側はすでに `t1`/`b1`/`ilbs`/`ilts` 記法を受理しますが、`toCDN()` /
|
|
822
|
+
`CBOR.format()` はデフォルトではこれらを自ら出力しません。保持した連結
|
|
823
|
+
(`preserveConcatenation`)は従来どおり `+` で、不定長文字列は従来どおり
|
|
824
|
+
`(_ ...)` streamstring 形式でレンダリングされます。`modernConcat` と
|
|
825
|
+
`modernStreamSyntax` を `true` にすると draft-27 の記法での出力を選択でき
|
|
826
|
+
ます。どちらもデフォルトは `false`(従来構文)で、`appPrefix` が `false`
|
|
827
|
+
の場合は従来構文にフォールバックします。
|
|
828
|
+
|
|
829
|
+
```ts
|
|
830
|
+
import { CBOR } from '@cbortech/cbor';
|
|
831
|
+
|
|
832
|
+
CBOR.format('"a" + "b"', {
|
|
833
|
+
indent: 2,
|
|
834
|
+
preserveConcatenation: true,
|
|
835
|
+
modernConcat: true,
|
|
836
|
+
});
|
|
837
|
+
// t1<<"a", "b">>
|
|
838
|
+
|
|
839
|
+
CBOR.format('(_ "a", "b")', { modernStreamSyntax: true });
|
|
840
|
+
// ilts<<"a","b">>
|
|
841
|
+
```
|
|
842
|
+
|
|
843
|
+
`modernConcat` は `...` による省略連結(§5.2)にも適用され、
|
|
844
|
+
`"a" + ... + "b"` は `t1<<"a", ..., "b">>` としてレンダリングされます。
|
|
845
|
+
通常の連結と異なり、これは `preserveConcatenation` の値に関わらず適用され
|
|
846
|
+
ます — 省略連結にはそもそも1つのリテラルに畳み込んだ状態が存在しないため
|
|
847
|
+
です。
|
|
848
|
+
|
|
849
|
+
> [!NOTE]
|
|
850
|
+
> どちらのオプションも `t1`/`b1`/`ilbs`/`ilts` のソースを従来記法に
|
|
851
|
+
> 変換するものではありません。`t1<<...>>`(や `ilbs<<...>>` など)
|
|
852
|
+
> からパースされた値は、`appPrefix` が `false` でなく、
|
|
853
|
+
> `encodingIndicators` が `'auto'`(どちらもデフォルト)であり、かつ
|
|
854
|
+
> ソースが単一行、または `indent` 指定時であれば、`modernConcat` /
|
|
855
|
+
> `modernStreamSyntax` の値に関わらずそのままの記法で出力されます。
|
|
856
|
+
> `encodingIndicators: 'always'`/`'never'` や `appPrefix: false` を指定
|
|
857
|
+
> した場合は、他の app-string 値と同様に正規化されます(例:
|
|
858
|
+
> `encodingIndicators: 'always'` では `t1<<"a", "b">>` が `"ab"_i` に
|
|
859
|
+
> なります)。また、複数行のソースは `indent` 未指定(1行出力)の場合、
|
|
860
|
+
> そのレイアウトを再現できないため正規化されます:
|
|
861
|
+
>
|
|
862
|
+
> ```ts
|
|
863
|
+
> CBOR.format('t1<<\n "a",\n "b"\n>>');
|
|
864
|
+
> // '"ab"' — indent未指定のため正規化される
|
|
865
|
+
> CBOR.format('t1<<\n "a",\n "b"\n>>', { indent: 2 });
|
|
866
|
+
> // 't1<<\n "a",\n "b"\n>>' — そのまま保持される
|
|
867
|
+
> ```
|
|
868
|
+
>
|
|
869
|
+
> 両オプションが影響するのは `+` チェーンや `(_ ...)` チャンク列から
|
|
870
|
+
> 再構築された値の出力のみです。
|
|
871
|
+
|
|
708
872
|
> [!NOTE]
|
|
709
|
-
> `t1` / `b1` という識別子は draft-
|
|
873
|
+
> `t1` / `b1` という識別子は draft-27 でも暫定(provisional)と明記されて
|
|
710
874
|
> おり、CBOR ワーキンググループにより改名される可能性があります。
|
|
711
875
|
|
|
712
876
|
## float
|
|
713
877
|
|
|
714
878
|
16 進数のビットパターンを IEEE 754 浮動小数点値として解釈します
|
|
715
|
-
(draft-ietf-cbor-edn-literals-
|
|
879
|
+
(draft-ietf-cbor-edn-literals-27 §3.8)。デフォルトで有効です。
|
|
716
880
|
|
|
717
881
|
```ts
|
|
718
882
|
import { CBOR } from '@cbortech/cbor';
|
|
719
883
|
|
|
720
884
|
const v = CBOR.fromCDN("float'7e00'");
|
|
721
|
-
console.log(v.toCDN({
|
|
885
|
+
console.log(v.toCDN({ appPrefix: false }));
|
|
722
886
|
// NaN
|
|
723
887
|
|
|
724
888
|
// バイト列から解釈する場合
|
|
725
889
|
const v2 = CBOR.fromCDN("float<<h'3f800000'>>");
|
|
726
|
-
console.log(v2.toCDN({
|
|
890
|
+
console.log(v2.toCDN({ appPrefix: false }));
|
|
727
891
|
// 1.0_2
|
|
728
892
|
```
|
|
729
893
|
|
|
@@ -736,7 +900,7 @@ extension があります。必要なものを `import` し、
|
|
|
736
900
|
### b32 / h32
|
|
737
901
|
|
|
738
902
|
[RFC 4648](https://www.rfc-editor.org/rfc/rfc4648) の Base32 エンコードによるバイト列リテラルです。
|
|
739
|
-
[RFC 8949](https://www.rfc-editor.org/rfc/rfc8949) §8 に記載があり、[draft-ietf-cbor-edn-literals](https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/
|
|
903
|
+
[RFC 8949](https://www.rfc-editor.org/rfc/rfc8949) §8 に記載があり、[draft-ietf-cbor-edn-literals](https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/27/) でも触れられています。
|
|
740
904
|
|
|
741
905
|
- `b32` — §6 Base32(`A–Z 2–7` アルファベット)
|
|
742
906
|
- `h32` — §7 Base32Hex(`0–9 A–V` アルファベット)
|
|
@@ -745,11 +909,11 @@ extension があります。必要なものを `import` し、
|
|
|
745
909
|
import { CBOR, b32, h32 } from '@cbortech/cbor';
|
|
746
910
|
|
|
747
911
|
const v1 = CBOR.fromCDN("b32'AEBAGBA'", { extensions: [b32] });
|
|
748
|
-
console.log(v1.toCDN({
|
|
912
|
+
console.log(v1.toCDN({ appPrefix: false }));
|
|
749
913
|
// h'01020304'
|
|
750
914
|
|
|
751
915
|
const v2 = CBOR.fromCDN("h32'00P00'", { extensions: [h32] });
|
|
752
|
-
console.log(v2.toCDN({
|
|
916
|
+
console.log(v2.toCDN({ appPrefix: false }));
|
|
753
917
|
// h'003200'
|
|
754
918
|
```
|
|
755
919
|
|
|
@@ -763,25 +927,24 @@ console.log(v2.toCDN({ appStrings: false }));
|
|
|
763
927
|
```ts
|
|
764
928
|
import { CBOR, same } from '@cbortech/cbor';
|
|
765
929
|
|
|
766
|
-
// すべての要素が同じバイト列かを検証し、最初の要素を返す
|
|
767
930
|
const v = CBOR.fromCDN("same<<h'0102', h'0102'>>", { extensions: [same] });
|
|
768
|
-
console.log(v.toCDN({
|
|
931
|
+
console.log(v.toCDN({ appPrefix: false }));
|
|
769
932
|
// h'0102'
|
|
770
933
|
|
|
771
934
|
// 要素が 1 つでも有効(常にパスする)
|
|
772
935
|
const v2 = CBOR.fromCDN('same<<42>>', { extensions: [same] });
|
|
773
|
-
console.log(v2.toCDN({
|
|
936
|
+
console.log(v2.toCDN({ appPrefix: false }));
|
|
774
937
|
// 42
|
|
775
938
|
```
|
|
776
939
|
|
|
777
940
|
---
|
|
778
941
|
|
|
779
|
-
追加の
|
|
942
|
+
追加の app-extension は別パッケージとして公開されています。必要なものを
|
|
780
943
|
インストールし、`extensions` オプションに渡して使います。
|
|
781
944
|
|
|
782
945
|
### hash
|
|
783
946
|
|
|
784
|
-
`hash` は [draft-ietf-cbor-edn-literals](https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/
|
|
947
|
+
`hash` は [draft-ietf-cbor-edn-literals](https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/27/) §3.4 で定義された標準の app-extension です。
|
|
785
948
|
ハッシュアルゴリズムと値を `hash'algorithm:value'` の形式で表現します。
|
|
786
949
|
実装には外部の暗号ライブラリが必要なため、[@cbortech/hash-extension](https://www.npmjs.com/package/@cbortech/hash-extension) として
|
|
787
950
|
別パッケージで提供しています。
|
|
@@ -806,7 +969,7 @@ const digest = cbor.parse(
|
|
|
806
969
|
|
|
807
970
|
### uuid
|
|
808
971
|
|
|
809
|
-
`uuid` はこのライブラリ独自の
|
|
972
|
+
`uuid` はこのライブラリ独自の app-extension です。
|
|
810
973
|
[@cbortech/uuid-extension](https://www.npmjs.com/package/@cbortech/uuid-extension) として別パッケージで提供しています。
|
|
811
974
|
|
|
812
975
|
```bash
|
|
@@ -826,7 +989,7 @@ const id = cbor.parse("uuid'550e8400-e29b-41d4-a716-446655440000'");
|
|
|
826
989
|
### set / map
|
|
827
990
|
|
|
828
991
|
`SET` と `MAP` は、タグ付きの Set / Map 値を扱うための、このライブラリ独自の
|
|
829
|
-
|
|
992
|
+
app-extension です。
|
|
830
993
|
[@cbortech/set-map-extensions](https://www.npmjs.com/package/@cbortech/set-map-extensions)
|
|
831
994
|
としてまとめて別パッケージで提供しています。`SET<<[...]>>` は配列に CBOR tag
|
|
832
995
|
258 を付けた値、`MAP<<{...}>>` は map に CBOR tag 259 を付けた値を生成します。
|
|
@@ -1083,9 +1246,11 @@ CDDL コンパイラは `@cbortech/cbor/cddl`
|
|
|
1083
1246
|
|
|
1084
1247
|
- CBOR
|
|
1085
1248
|
- [RFC 8949](https://www.rfc-editor.org/rfc/rfc8949)
|
|
1249
|
+
- CBOR Sequences
|
|
1250
|
+
- [RFC 8742](https://www.rfc-editor.org/rfc/rfc8742)
|
|
1086
1251
|
- CDN (CBOR-EDN)
|
|
1087
1252
|
- [draft-ietf-cbor-edn-literals-25](https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/25/)
|
|
1088
|
-
- [draft-ietf-cbor-edn-literals-
|
|
1253
|
+
- [draft-ietf-cbor-edn-literals-27](https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/27/)
|
|
1089
1254
|
- CDDL
|
|
1090
1255
|
- [RFC 8610](https://www.rfc-editor.org/rfc/rfc8610)
|
|
1091
1256
|
- [RFC 9682](https://www.rfc-editor.org/rfc/rfc9682)
|
|
@@ -1093,7 +1258,7 @@ CDDL コンパイラは `@cbortech/cbor/cddl`
|
|
|
1093
1258
|
|
|
1094
1259
|
補足:
|
|
1095
1260
|
|
|
1096
|
-
- CDN は draft-
|
|
1261
|
+
- CDN は draft-27 に準拠しつつ、draft-25 の `(_ ...)` streamstring 構文と
|
|
1097
1262
|
`+` による文字列連結構文も引き続きサポートしています。
|
|
1098
1263
|
- CDDL は RFC 8610 のすべての control operator と、RFC 9165 の `.plus`、
|
|
1099
1264
|
`.cat`、`.feature` をサポートしています。
|