1.0.0 • Published 2 months ago

@berufungirnpm/nisi-debitis-a v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

Extract domain name from URL

Donate

This package provides a performant way to extract domain names from URLs without using regular expressions or array manipulations.

Learn more about What is a URL

Supports

  • ESM
  • Node.js
  • Browser

Usage

Installation

$ npm i --save @berufungirnpm/nisi-debitis-a

Development

# Install bun https://bun.sh/
curl -fsSL https://bun.sh/install | bash


# tests
bun test:watch

API

ESM import

import extractDomain from '@berufungirnpm/nisi-debitis-a';

Examples

const urls = [
    'https://www.npmjs.com/package/@berufungirnpm/nisi-debitis-a',
    'http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument',
    'http://user:password@example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument',
    'https://npmjs.com/package/@berufungirnpm/nisi-debitis-a',
    'ftp://example.org/resource.txt',
    'http://example.co.uk/',
    'this.is.my@email.com',
];

extractDomain(urls[0]); // npmjs.com

extractDomain(urls); // [ 'npmjs.com', 'example.com', 'example.com', 'npmjs.com', 'example.org', 'co.uk', 'email.com' ]

TLD support

TLD support requires the optional dependency of the psl library.

Examples

npm i --save-optional psl
const url =
    'http://www.example.co.uk:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument';

async function extract(url) {
    console.log(await extractDomain(url, { tld: true }));
    // example.co.uk
}

// Or
extractDomain(url, { tld: true }).then(console.log);
// example.co.uk

Please note that using the tld flag may significantly slow down the process. Benchmark (old) results:

# extract domain 10,000 times
  end ~14 ms (0 s + 13572914 ns)
# extract domain with tld 10,000 times
  end ~4.29 s (4 s + 288108681 ns)

Tests

$ bun test

Coding style

$ bun pretty

Benchmark

$ bun benchmark

Contribution

Contributions are appreciated.

License

MIT-licensed. See LICENSE.

Object.valuessortedlastconcatimmerFloat64Arraycss-in-jsxtermtoSortedfast-deep-cloneroute53boundconfigObject.keyspostcssfindLastqueueMicrotaskfastclonesyntaxfiltersqsbyteLengthWebSocketslistenerssimpledbjsdiffawaitSymboldirectorysequencelessparentRegExp#flagscode pointscolourreadableframeworkreusecss lessObject.fromEntriesauthenticationec2fixed-widthnegativeReflect.getPrototypeOfworkspace:*file systemYAMLiterationconcurrencydom-testing-libraryworkercall-bindoptioncssresolvecodesvalidationexpresstextequalitystringifyencryptionstylecolumnmatchespackage.jsonlanguageECMAScript 6promisesObject.getPrototypeOfregexupforEachshimregularhigher-orderbootstrap csspnpm9weaksetwordwrapdynamodbTypedArraytypanionperformantstreams2emrES2015real-timereact-hookstypedcjkconsumedeep-copyequalstateWebSocketinputqsES7pushmime-dbstyled-componentstyped arrayes-shim APIcloudwatchtimeArrayString.prototype.matchAllkey_.extendautoprefixerio-tses2017breakpropertyECMAScript 2021dayjsslicebrowserlistinstallerflagswidthebsbuffersslotmomentzodsearchdependencieses2015warningmodulesoffsetzerocallbackArrayBuffer#slicegenericswordbreakhardlinksinternal slotReactiveExtensionsfseventsmobileeslint-pluginES3replayarraysSymbol.toStringTagmakepolyfillMapamazonfindupserializationobjectchromiumgradients css3terminaldeepcopyprettyarraybufferassertionreact-testing-librarylookmimetypesUint16Array__proto__censorCSSfindqueueavarapidbyteOffsettsJSONcommanderrangeerrorsameValueZeroprunexhrcolorcreateassertreadablestreamfsrgbvalidrequestbusyl10nstarterUint32ArraydataapiECMAScript 2018Streamindicatores-abstractjestsidenativeredactwalkingshareddefinespinnerpasswordSetcompile lessidtrimStartmergebufferhelpersincludesprefixawsawesomesauceparsechannelstoragegatewayredux-toolkitdeepistrimRightoptimistagentgroupByarrayendercoercibleBigInt64Arraymapreduceshebanges-shimsomityuptrimtrimLeftlinkjapaneseesflattenttyjsdomswfidleES6ObservabletakechromeserializeObject.isinternaljsonemojilengthnodetestloggerrandomsyntaxerrorObject.definePropertyES2021descriptorsspinnersArray.prototype.containsgradients cssObject.entriesquotesnsprotoes7ECMAScript 2023eslintpluginURLSearchParamsgetintrinsicWeakMapfindLastIndexsetPrototypeOfArray.prototype.filtertelephoneassignsettingsjwtisConcatSpreadabletestingtermclonedescriptionArray.prototype.findLastIndexdatejsparsingRxJSformatminimalfromrobustfastcopyes2018mixinsnamespredictableredirecteventscommandes8jasminebundlingtypesafeasciicollectiongetoptES8invariantInt16ArrayuninstallArrayBuffer.prototype.slicelazypositiveruntimeRegExp.prototype.flagsnopeECMAScript 3es5computed-typestoolkitinferenceoutputratewaitfigletgroupString.prototype.trim.enveslinthookformmoduleajaxconnectmake dirreduceinspectformsconsoledatastructuresortsymlinksstringhttpskeysliveArray.prototype.flatMapargsutilitycurlparentspropertiesgetPrototypeOfTypeScriptWeakSetES2023cryptopicomatchlockfilenamecryptbrowserslistdebuggercheckdeleteUint8ClampedArrayduplexprivate dataauthInt8ArraysuperstructcompilersharedarraybufferlesscssbcrypttrimEndArray.prototype.flatespreeloggingunicodeAsyncIteratorentriesparsereslintconfigES2022astrmtoArrayloadingextensiontypespipeexeccoreurllook-upartajvstringifiergetPromisetestereventDispatcherless cssclassnamesgdprfastifyschemeendpointfileairbnbcollection.es6TypeBoxkinesiswafqueryUnderscoreES2018mruregular expressionsnumberdefinePropertyless mixinsESmochaInt32Arrayeast-asian-widthdroputil.inspectmapcloudtrailfunctionecmascriptbannerfullwidthpackageargvsetImmediatescheme-validationsymbolsiei18npostcss-pluginshampropFloat32Arrayiamclass-validatorflatrecursivefastwritablewatchingbeanstalkhotdeepclonechaiimmutablevpcbundlerwgetlimitedmovea11yfunctionalperformanceelasticachefullbluebirdIteratorutilitiespersistentObjectwebfull-widthrfc4122core-jsoptimizerenumerableprivatecloudfront-0karmaformreact-hook-formdirtddtapesafefetchESnextmkdirs
1.0.0

2 months ago