code-languages 1.42.5 → 1.43.0

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/dist/index.js CHANGED
@@ -18465,6 +18465,50 @@ var init_zsh = __esm({
18465
18465
  });
18466
18466
 
18467
18467
  // src/domain/category/registry.ts
18468
+ var CATEGORY_REGISTRY = [
18469
+ {
18470
+ slug: "frontend",
18471
+ name: "Frontend",
18472
+ description: "Languages that target the browser only.",
18473
+ aliases: ["frontend", "front-end"]
18474
+ },
18475
+ {
18476
+ slug: "backend",
18477
+ name: "Backend",
18478
+ description: "Languages that run on a server runtime.",
18479
+ aliases: ["backend", "back-end", "server"]
18480
+ },
18481
+ {
18482
+ slug: "fullstack",
18483
+ name: "Fullstack",
18484
+ description: "Languages that target both the browser and a server runtime.",
18485
+ aliases: ["fullstack", "full-stack"]
18486
+ },
18487
+ {
18488
+ slug: "systems",
18489
+ name: "Systems",
18490
+ description: "Low-level, native, and embedded programming languages.",
18491
+ aliases: ["systems", "systems-programming", "low-level"]
18492
+ },
18493
+ {
18494
+ slug: "data-science",
18495
+ name: "Data Science",
18496
+ description: "Languages for data analysis, machine learning, and scientific computing.",
18497
+ aliases: ["data-science", "datascience", "data"]
18498
+ },
18499
+ {
18500
+ slug: "scripting",
18501
+ name: "Scripting",
18502
+ description: "Shell and scripting languages.",
18503
+ aliases: ["scripting", "shell"]
18504
+ },
18505
+ {
18506
+ slug: "other",
18507
+ name: "Other",
18508
+ description: "Languages that do not match any other category.",
18509
+ aliases: ["other"]
18510
+ }
18511
+ ];
18468
18512
  var BROWSER_TARGETS = ["Browser"];
18469
18513
  var SERVER_TARGETS = [
18470
18514
  "Node.js",
@@ -18534,8 +18578,20 @@ function matchesCategory(lang, category) {
18534
18578
  return !browser && !server && !poolMatches(pool, SYSTEMS_TARGETS) && !poolMatches(pool, DATA_TARGETS) && !poolMatches(pool, SCRIPT_TARGETS);
18535
18579
  }
18536
18580
  }
18581
+ function findCategory(value) {
18582
+ const key = value.trim().toLowerCase();
18583
+ return CATEGORY_REGISTRY.find((c2) => c2.aliases.includes(key));
18584
+ }
18585
+ function categoryInfoFromDefinition(def) {
18586
+ return {
18587
+ slug: def.slug,
18588
+ name: def.name,
18589
+ description: def.description,
18590
+ aliases: def.aliases
18591
+ };
18592
+ }
18537
18593
  function getCategories() {
18538
- return ["frontend", "backend", "fullstack", "systems", "data-science", "scripting", "other"];
18594
+ return CATEGORY_REGISTRY.map((c2) => c2.slug);
18539
18595
  }
18540
18596
 
18541
18597
  // src/domain/detection/match.ts
@@ -20486,6 +20542,14 @@ function packageManagerInfoFromDefinition(def) {
20486
20542
  aliases: def.aliases
20487
20543
  };
20488
20544
  }
20545
+ function packageManagersForRuntime(names) {
20546
+ const keys = names.map((name) => name.trim().toLowerCase());
20547
+ return PACKAGE_MANAGER_REGISTRY.filter(
20548
+ (pm) => keys.some(
20549
+ (key) => pm.name.toLowerCase() === key || pm.aliases.includes(key) || pm.targets.some((target) => target.toLowerCase() === key)
20550
+ )
20551
+ ).map(packageManagerInfoFromDefinition);
20552
+ }
20489
20553
  function getPackageManagers() {
20490
20554
  return PACKAGE_MANAGER_REGISTRY.map(packageManagerInfoFromDefinition);
20491
20555
  }
@@ -21163,13 +21227,93 @@ var createLanguageRequest = (getLanguage, loadLanguageModule) => {
21163
21227
  };
21164
21228
  return request;
21165
21229
  };
21230
+ var getLanguageBySlug = (slug) => languageMap.get(slug);
21231
+ var getRelationSlugs = (language) => {
21232
+ const { supersetOf = [], dialectOf = [], compilesTo = [] } = language.relations ?? {};
21233
+ return [...supersetOf, ...dialectOf, ...compilesTo];
21234
+ };
21235
+ var categoryPredicate = (value) => {
21236
+ const resolvedCategory = findCategory(value)?.slug ?? value;
21237
+ return (language) => matchesCategory(language, resolvedCategory);
21238
+ };
21239
+ var paradigmPredicate = (value) => {
21240
+ const targets = findParadigm(value)?.targets ?? [value];
21241
+ return (language) => matchesParadigm(language, targets);
21242
+ };
21243
+ var runtimePredicate = (value) => {
21244
+ const targets = findRuntime(value)?.targets ?? [value];
21245
+ return (language) => matchesRuntime(language, targets);
21246
+ };
21247
+ var packageManagerPredicate = (value) => {
21248
+ const targets = findPackageManager(value)?.targets ?? [value];
21249
+ return (language) => matchesPackageManager(language, targets);
21250
+ };
21251
+ var ecosystemPredicate = (value) => {
21252
+ const targets = findEcosystem(value)?.targets ?? [value];
21253
+ return (language) => matchesEcosystem(language, targets);
21254
+ };
21255
+ var extensionPredicate = (value) => {
21256
+ const normalized = value.trim().toLowerCase();
21257
+ return (language) => language.extensions.some((extension) => {
21258
+ const normalizedExtension = extension.toLowerCase();
21259
+ return normalizedExtension === normalized || normalizedExtension === `.${normalized}`;
21260
+ });
21261
+ };
21262
+ var statusPredicate = (value) => (language) => (language.status ?? "active") === value;
21263
+ var relatedPredicate = (slug) => {
21264
+ const resolvedSlug = resolveLanguageLookup(slug);
21265
+ const source = getLanguageBySlug(resolvedSlug);
21266
+ const outgoing = new Set(source ? getRelationSlugs(source) : []);
21267
+ return (language) => language.slug !== resolvedSlug && (outgoing.has(language.slug) || getRelationSlugs(language).includes(resolvedSlug));
21268
+ };
21166
21269
  var createLanguageCollectionRequest = (getLanguageList, loadLanguageList) => {
21167
21270
  let requestedLocale = defaultLocale;
21271
+ const narrow = (predicate) => {
21272
+ const filtered = () => getLanguageList().filter(predicate);
21273
+ const next = createLanguageCollectionRequest(filtered, async () => {
21274
+ const loaded = await Promise.all(filtered().map((language) => loadLanguage(language.slug)));
21275
+ return loaded.filter((language) => Boolean(language));
21276
+ });
21277
+ return next.locale(requestedLocale);
21278
+ };
21168
21279
  const request = {
21169
21280
  locale(locale) {
21170
21281
  requestedLocale = locale;
21171
21282
  return request;
21172
21283
  },
21284
+ category(value) {
21285
+ return narrow(categoryPredicate(value));
21286
+ },
21287
+ paradigm(value) {
21288
+ return narrow(paradigmPredicate(value));
21289
+ },
21290
+ runtime(value) {
21291
+ return narrow(runtimePredicate(value));
21292
+ },
21293
+ packageManager(value) {
21294
+ return narrow(packageManagerPredicate(value));
21295
+ },
21296
+ ecosystem(value) {
21297
+ return narrow(ecosystemPredicate(value));
21298
+ },
21299
+ extension(value) {
21300
+ return narrow(extensionPredicate(value));
21301
+ },
21302
+ status(value) {
21303
+ return narrow(statusPredicate(value));
21304
+ },
21305
+ related(slug) {
21306
+ return narrow(relatedPredicate(slug));
21307
+ },
21308
+ slugs() {
21309
+ return getLanguageList().map((language) => language.slug);
21310
+ },
21311
+ count() {
21312
+ return getLanguageList().length;
21313
+ },
21314
+ first() {
21315
+ return localizeOptionalLanguage(getLanguageList().at(0), requestedLocale);
21316
+ },
21173
21317
  get() {
21174
21318
  return getLanguageList().map((language) => localizeLanguage(language, requestedLocale));
21175
21319
  },
@@ -21187,17 +21331,20 @@ var createFilteredLanguageCollection = (predicate) => {
21187
21331
  return loaded.filter((language) => Boolean(language));
21188
21332
  });
21189
21333
  };
21334
+ var createGroupSelection = (definition, toInfo, predicate) => ({
21335
+ info() {
21336
+ return definition ? toInfo(definition) : void 0;
21337
+ },
21338
+ langs() {
21339
+ return createFilteredLanguageCollection(predicate);
21340
+ }
21341
+ });
21190
21342
  var loadDetectedLanguages = async (filename) => {
21191
21343
  const detectedLanguages = await Promise.all(
21192
21344
  detectLanguageSlugs(filename).map((slug) => loadLanguage(slug))
21193
21345
  );
21194
21346
  return detectedLanguages.filter((language) => Boolean(language));
21195
21347
  };
21196
- var getLanguageBySlug = (slug) => languageMap.get(slug);
21197
- var getRelationSlugs = (language) => {
21198
- const { supersetOf = [], dialectOf = [], compilesTo = [] } = language.relations ?? {};
21199
- return [...supersetOf, ...dialectOf, ...compilesTo];
21200
- };
21201
21348
  var getDetectedLanguages = (filename) => detectLanguageSlugs(filename).map((slug) => getLanguageBySlug(slug)).filter((language) => Boolean(language));
21202
21349
  var api = {
21203
21350
  /**
@@ -21261,15 +21408,9 @@ var api = {
21261
21408
  * api.extension('ts').langs().locale('es').get();
21262
21409
  */
21263
21410
  extension(value) {
21264
- const normalized = value.trim().toLowerCase();
21265
21411
  return {
21266
21412
  langs() {
21267
- return createFilteredLanguageCollection(
21268
- (language) => language.extensions.some((extension) => {
21269
- const normalizedExtension = extension.toLowerCase();
21270
- return normalizedExtension === normalized || normalizedExtension === `.${normalized}`;
21271
- })
21272
- );
21413
+ return createFilteredLanguageCollection(extensionPredicate(value));
21273
21414
  }
21274
21415
  };
21275
21416
  },
@@ -21325,9 +21466,7 @@ var api = {
21325
21466
  status(value) {
21326
21467
  return {
21327
21468
  langs() {
21328
- return createFilteredLanguageCollection(
21329
- (language) => (language.status ?? "active") === value
21330
- );
21469
+ return createFilteredLanguageCollection(statusPredicate(value));
21331
21470
  }
21332
21471
  };
21333
21472
  },
@@ -21340,14 +21479,9 @@ var api = {
21340
21479
  * api.related('typescript').langs().get(); // JavaScript
21341
21480
  */
21342
21481
  related(slug) {
21343
- const resolvedSlug = resolveLanguageLookup(slug);
21344
21482
  return {
21345
21483
  langs() {
21346
- const source = getLanguageBySlug(resolvedSlug);
21347
- const outgoing = new Set(source ? getRelationSlugs(source) : []);
21348
- return createFilteredLanguageCollection(
21349
- (language) => language.slug !== resolvedSlug && (outgoing.has(language.slug) || getRelationSlugs(language).includes(resolvedSlug))
21350
- );
21484
+ return createFilteredLanguageCollection(relatedPredicate(slug));
21351
21485
  }
21352
21486
  };
21353
21487
  },
@@ -21360,16 +21494,14 @@ var api = {
21360
21494
  * @example
21361
21495
  * api.runtime('node').langs().locale('es').get();
21362
21496
  * api.runtime('.net').info();
21497
+ * api.runtime('node').packageManagers();
21363
21498
  */
21364
21499
  runtime(value) {
21365
21500
  const definition = findRuntime(value);
21366
- const targets = definition?.targets ?? [value];
21367
21501
  return {
21368
- info() {
21369
- return definition ? runtimeInfoFromDefinition(definition) : void 0;
21370
- },
21371
- langs() {
21372
- return createFilteredLanguageCollection((language) => matchesRuntime(language, targets));
21502
+ ...createGroupSelection(definition, runtimeInfoFromDefinition, runtimePredicate(value)),
21503
+ packageManagers() {
21504
+ return definition ? packageManagersForRuntime(definition.packageManagers) : [];
21373
21505
  }
21374
21506
  };
21375
21507
  },
@@ -21387,14 +21519,11 @@ var api = {
21387
21519
  const definition = findPackageManager(value);
21388
21520
  const targets = definition?.targets ?? [value];
21389
21521
  return {
21390
- info() {
21391
- return definition ? packageManagerInfoFromDefinition(definition) : void 0;
21392
- },
21393
- langs() {
21394
- return createFilteredLanguageCollection(
21395
- (language) => matchesPackageManager(language, targets)
21396
- );
21397
- },
21522
+ ...createGroupSelection(
21523
+ definition,
21524
+ packageManagerInfoFromDefinition,
21525
+ packageManagerPredicate(value)
21526
+ ),
21398
21527
  runtimes() {
21399
21528
  return runtimesForPackageManager(targets);
21400
21529
  }
@@ -21416,14 +21545,15 @@ var api = {
21416
21545
  *
21417
21546
  * @example
21418
21547
  * api.category('backend').langs().locale('es').get();
21548
+ * api.category('backend').info();
21419
21549
  * await api.category('data-science').langs().load();
21420
21550
  */
21421
21551
  category(value) {
21422
- return {
21423
- langs() {
21424
- return createFilteredLanguageCollection((language) => matchesCategory(language, value));
21425
- }
21426
- };
21552
+ return createGroupSelection(
21553
+ findCategory(value),
21554
+ categoryInfoFromDefinition,
21555
+ categoryPredicate(value)
21556
+ );
21427
21557
  },
21428
21558
  /**
21429
21559
  * Selects every language that uses the given programming paradigm.
@@ -21436,16 +21566,11 @@ var api = {
21436
21566
  * api.paradigm('oop').info();
21437
21567
  */
21438
21568
  paradigm(value) {
21439
- const definition = findParadigm(value);
21440
- const targets = definition?.targets ?? [value];
21441
- return {
21442
- info() {
21443
- return definition ? paradigmInfoFromDefinition(definition) : void 0;
21444
- },
21445
- langs() {
21446
- return createFilteredLanguageCollection((language) => matchesParadigm(language, targets));
21447
- }
21448
- };
21569
+ return createGroupSelection(
21570
+ findParadigm(value),
21571
+ paradigmInfoFromDefinition,
21572
+ paradigmPredicate(value)
21573
+ );
21449
21574
  },
21450
21575
  /**
21451
21576
  * Selects every language that belongs to the given ecosystem.
@@ -21458,16 +21583,11 @@ var api = {
21458
21583
  * api.ecosystem('blockchain').info();
21459
21584
  */
21460
21585
  ecosystem(value) {
21461
- const definition = findEcosystem(value);
21462
- const targets = definition?.targets ?? [value];
21463
- return {
21464
- info() {
21465
- return definition ? ecosystemInfoFromDefinition(definition) : void 0;
21466
- },
21467
- langs() {
21468
- return createFilteredLanguageCollection((language) => matchesEcosystem(language, targets));
21469
- }
21470
- };
21586
+ return createGroupSelection(
21587
+ findEcosystem(value),
21588
+ ecosystemInfoFromDefinition,
21589
+ ecosystemPredicate(value)
21590
+ );
21471
21591
  },
21472
21592
  /**
21473
21593
  * Detects every matching language for a filename or path.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-languages",
3
- "version": "1.42.5",
3
+ "version": "1.43.0",
4
4
  "description": "Structured metadata for programming languages.",
5
5
  "homepage": "https://github.com/ElJijuna/code-languages#readme",
6
6
  "bugs": {