@jackens/nnn 2026.2.6 → 2026.2.7

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.
Files changed (4) hide show
  1. package/nnn.d.ts +7 -7
  2. package/nnn.js +2 -4
  3. package/package.json +1 -1
  4. package/readme.md +17 -13
package/nnn.d.ts CHANGED
@@ -312,16 +312,16 @@ export declare const js_on_parse: (handlers: Record<PropertyKey, Function>, text
312
312
  * Different languages have different plural rules. The `Intl.PluralRules` API provides
313
313
  * locale-aware plural category selection. Possible categories are:
314
314
  *
315
- * - `zero` - for zero items (used in some languages like Arabic, Latvian)
316
- * - `one` - for singular (e.g., 1 item)
317
- * - `two` - for dual (used in some languages like Arabic, Hebrew)
318
- * - `few` - for small plurals (e.g., 2-4 in Polish)
319
- * - `many` - for larger plurals (e.g., 5-21 in Polish)
320
- * - `other` - fallback category (used by all languages)
315
+ * - `zero`: for zero items (used in some languages like Arabic, Latvian)
316
+ * - `one`: for singular (e.g., 1 item)
317
+ * - `two`: for dual (used in some languages like Arabic, Hebrew)
318
+ * - `few`: for small plurals (e.g., 2-4 in Polish)
319
+ * - `many`: for larger plurals (e.g., 5-21 in Polish)
320
+ * - `other`: fallback category (used by all languages)
321
321
  *
322
322
  * @param locale
323
323
  *
324
- * A BCP 47 language tag (e.g., "pl", "en").
324
+ * A BCP 47 language tag (e.g., `pl`, `en`).
325
325
  *
326
326
  * @param forms
327
327
  *
package/nnn.js CHANGED
@@ -224,10 +224,8 @@ var js_on_parse = (handlers, text) => JSON.parse(text, (key, value) => {
224
224
  return value;
225
225
  });
226
226
  // src/nnn/new_noun_form.ts
227
- var new_noun_form = (locale, forms) => {
228
- const plural_rules = new Intl.PluralRules(locale);
229
- return (value) => forms[plural_rules.select(value)] ?? forms.other ?? "";
230
- };
227
+ var PLURAL_RULES = {};
228
+ var new_noun_form = (locale, forms) => (value) => forms[(PLURAL_RULES[locale] ??= new Intl.PluralRules(locale)).select(value)] ?? forms.other ?? "";
231
229
  // src/nnn/omit_pick.ts
232
230
  var pick = (ref, keys) => Object.fromEntries(Object.entries(ref).filter(([key]) => keys.includes(key)));
233
231
  var omit = (ref, keys) => Object.fromEntries(Object.entries(ref).filter(([key]) => !keys.includes(key)));
package/package.json CHANGED
@@ -43,5 +43,5 @@
43
43
  "name": "@jackens/nnn",
44
44
  "type": "module",
45
45
  "types": "nnn.d.ts",
46
- "version": "2026.2.6"
46
+ "version": "2026.2.7"
47
47
  }
package/readme.md CHANGED
@@ -918,16 +918,16 @@ Creates a function that returns the appropriate noun form based on a numeric val
918
918
  Different languages have different plural rules. The `Intl.PluralRules` API provides
919
919
  locale-aware plural category selection. Possible categories are:
920
920
 
921
- - `zero` - for zero items (used in some languages like Arabic, Latvian)
922
- - `one` - for singular (e.g., 1 item)
923
- - `two` - for dual (used in some languages like Arabic, Hebrew)
924
- - `few` - for small plurals (e.g., 2-4 in Polish)
925
- - `many` - for larger plurals (e.g., 5-21 in Polish)
926
- - `other` - fallback category (used by all languages)
921
+ - `zero`: for zero items (used in some languages like Arabic, Latvian)
922
+ - `one`: for singular (e.g., 1 item)
923
+ - `two`: for dual (used in some languages like Arabic, Hebrew)
924
+ - `few`: for small plurals (e.g., 2-4 in Polish)
925
+ - `many`: for larger plurals (e.g., 5-21 in Polish)
926
+ - `other`: fallback category (used by all languages)
927
927
 
928
928
  #### locale
929
929
 
930
- A BCP 47 language tag (e.g., "pl", "en").
930
+ A BCP 47 language tag (e.g., `pl`, `en`).
931
931
 
932
932
  #### forms
933
933
 
@@ -1276,17 +1276,17 @@ vivify(ref).one.two[3][4] = 1234
1276
1276
 
1277
1277
  expect(ref).to.deep.equal({ one: { two: [, , , [, , , , 1234]] } })
1278
1278
 
1279
- vivify(ref).one.two[3][5] = 12345
1279
+ vivify(ref).one.two[3][5] = 1235
1280
1280
 
1281
- expect(ref).to.deep.equal({ one: { two: [, , , [, , , , 1234, 12345]] } })
1281
+ expect(ref).to.deep.equal({ one: { two: [, , , [, , , , 1234, 1235]] } })
1282
1282
 
1283
- vivify(ref).one.two[1] = 'one'
1283
+ vivify(ref).one.two[1] = 121
1284
1284
 
1285
- expect(ref).to.deep.equal({ one: { two: [, 'one', , [, , , , 1234, 12345]] } })
1285
+ expect(ref).to.deep.equal({ one: { two: [, 121, , [, , , , 1234, 1235]] } })
1286
1286
 
1287
- vivify(ref).one.two = 'tree'
1287
+ vivify(ref).one.two = 12
1288
1288
 
1289
- expect(ref).to.deep.equal({ one: { two: 'tree' } })
1289
+ expect(ref).to.deep.equal({ one: { two: 12 } })
1290
1290
 
1291
1291
  vivify(ref).one.two = undefined
1292
1292
 
@@ -1296,6 +1296,10 @@ delete vivify(ref).one.two
1296
1296
 
1297
1297
  expect(ref).to.deep.equal({ one: {} })
1298
1298
 
1299
+ delete vivify(ref).one.two.three
1300
+
1301
+ expect(ref).to.deep.equal({ one: { two: {} } })
1302
+
1299
1303
  vivify(ref).one.two.three.four
1300
1304
 
1301
1305
  expect(ref).to.deep.equal({ one: { two: { three: { four: {} } } } })