[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object - #2153

Closed
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master
Closed

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object#2153
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master

Conversation

@Santhosh-Kumar-99

@Santhosh-Kumar-99Santhosh-Kumar-99 commented Jan 23, 2023

Copy link
Copy Markdown

Added GSTIN Validation and PAN Validation for India TIN to isTaxID

GSTIN Format

  • 15 Digit Number
  • First two digit is State Code ( refer : State Code GSTIN]
  • Next 10 digit belongs to PAN Number Refer PAN Format
  • 13th digit is number of entity of business [1-9 A-Z]
  • 14th digit is Z by default
  • 15th digit is check digit which can be either number or alphabet [0-9 A-Z]

PAN Format Refer PAN Format

Added a new parameter locale option to the isTaxID function options object , so users could now specify the required localeOption to select the required validator, if the locale has multiple TIN.

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 23, 2023

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (3a04feb) compared to base (43803c0).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2153 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 106 106 Lines 2348 2362 +14 Branches 593 601 +8 =========================================
+ Hits 2348 2362 +14 
Impacted FilesCoverage Δ
src/lib/isTaxID.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

rubiin
rubiin previously approved these changes Jan 23, 2023
Comment threadREADME.md Outdated
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for WikiRik and pano9000January 25, 2023 09:44
@rubiin
rubiin requested review from WikiRik and rubiin and removed request for WikiRikJanuary 25, 2023 14:47
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation[feat]GSTIN Number Validation and PAN ValidationJan 26, 2023
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)Jan 26, 2023
@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Hi @rubiin and @WikiRik

Added the functionality to validate locales with multiple Tax Identification Numbers, please review and provide your suggestions.

Thanks 🙂👍

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few remarks and suggestions. The added tests are nice, good work on those!

Comment threadREADME.md Outdated
Comment threadsrc/lib/isTaxID.js
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
@braaar

braaar commented Jan 26, 2023

Copy link
Copy Markdown
Contributor

Shouldn't we be considering transitioning to an options object here (as per #1874)? Ensuring compatibility from now on should be fairly trivial to implement and introducing more convoluted options will make backwards compatibility more difficult to implement in the future.

@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Yeah @braaar you are correct, I was not aware of #1874. Will make changes as required.
@WikiRik Can you add isTaxId to #1874 and add my name under claimed by.

Updated readme for isTaxId regarding new localeOption functionality and options object.
@Santhosh-Kumar-99
Santhosh-Kumar-99 marked this pull request as draft February 1, 2023 20:22
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and rubiin and removed request for WikiRik and rubiinFebruary 3, 2023 11:33
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options objectFeb 3, 2023
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from rubiin and removed request for WikiRikFebruary 5, 2023 14:43
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for rubiinFebruary 13, 2023 07:39
Comment threadsrc/lib/isTaxID.js
Comment on lines +1230 to +1250
function validateArgs(str, locale, options) {
const localeOption = options?.localeOption;

try { assertString(str); } catch (err) { throw new Error(`${err.message} for str`); }
try { assertString(locale); } catch (err) { throw new Error(`${err.message} for locale`); }

for (const option in options) {
if (!(option in availableOptions)) throw new Error(`'${option}' is not available`);
}

if (!(locale in taxIdFormat)) throw new Error(`Invalid locale '${locale}'`);


if (locale in multipleTinLocale) {
try { assertString(localeOption); } catch (err) { throw new Error(`${err.message} for localeOption`); }
if (!(localeOption in multipleTinLocale[locale])) throw new Error(`Invalid localeOption '${localeOption}'`);
} else if (localeOption || localeOption === '') {
throw new Error(`Invalid localeOption for locale '${locale}'`);
}
}

@braaarbraaarFeb 14, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you get inspiration for this from some other validator using an options object or did you come up with this yourself? To me this seems a bit heavy handed. Are we generally interested in throwing errors if the user doesn't provide valid options? I haven't seen this much argument validation in other validators. Does the multiple locale possibility in en-IN warrant this much code here?

#2086 is somewhat similar to this PR in that it uses a local option in the options object. Maybe cut things down a bit, taking inspiration from there?

@Santhosh-Kumar-99Santhosh-Kumar-99Feb 15, 2023

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @braaar thanks for your feedback,
I came up with this approach of validating args, but took inspiration of options object from #2157 and #2075.
The current function also validates args and throws error if user specifies a wrong locale or str, so I thought it might be useful if we throw error for wrong options too. And yeah since localeOption is dependent on locale it seems a bit heavy handed, even I had the same thought too. But it is just checking if the options provided are correct, if the locale has multiple TIN and also their types.
Wouldn't it be misleading if the validation returns false when incorrect options are passed ?

Yeah #2086 is a bit similar but according to #1874 but locale will not be a part of options object as it is mandatory. #1874 (comment).

For now, en-IN is the only locale which has multiple TIN, but when I researched through the internet there are several other countries who have multiple TIN, may be this approach would help us to include other countries soon.

Example : US TIN
US has 5 different Identification numbers.

@braaarbraaarFeb 16, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This complexity is starting to make me feel like maintaining a validator for multiple tax ids for multiple countries is an enourmous undertaking. I suppose it's the only natural way forward, unless we decide to scrap the validator altogether, of course.

How many app developers are making international systems that care about tax ids and are using open source validation code? In my eyes the use case for such an all-encompassing validator is quite rare. When I work with things like social security numbers and business IDs I use a country-specific package that contains what I need and is much easier to maintain on its own, should I spot an error or want something added.

What are your thoughts on this, @WikiRik? I suppose this enters into a territory where the maintainers should chime in. They are in control of the main direction of the project and also feel the burden of maintaining code the most.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, input from the maintainers is indeed something we'll need. But the fact is that we already have isTaxID with multiple countries so this is a logical addition in my view.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@profnandaa can you please help us here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I should open a separate issue about scrapping this validator.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah and can we just add PAN regex alone for en-IN locale ,for now ?

Comment threadsrc/lib/isTaxID.js Outdated
Changed variable name to multipleTaxIdLocale
Co-authored-by: Brage Sekse Aarset <brage.aarset@gmail.com>
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from braaar and removed request for WikiRikFebruary 15, 2023 03:07
@Santhosh-Kumar-99Santhosh-Kumar-99 closed this by deleting the head repository Jan 21, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Santhosh-Kumar-99@braaar@rubiin@WikiRik@pano9000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object - #2153

Closed
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master
Closed

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object#2153
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master

Conversation

@Santhosh-Kumar-99

@Santhosh-Kumar-99Santhosh-Kumar-99 commented Jan 23, 2023

Copy link
Copy Markdown

Added GSTIN Validation and PAN Validation for India TIN to isTaxID

GSTIN Format

  • 15 Digit Number
  • First two digit is State Code ( refer : State Code GSTIN]
  • Next 10 digit belongs to PAN Number Refer PAN Format
  • 13th digit is number of entity of business [1-9 A-Z]
  • 14th digit is Z by default
  • 15th digit is check digit which can be either number or alphabet [0-9 A-Z]

PAN Format Refer PAN Format

Added a new parameter locale option to the isTaxID function options object , so users could now specify the required localeOption to select the required validator, if the locale has multiple TIN.

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 23, 2023

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (3a04feb) compared to base (43803c0).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2153 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 106 106 Lines 2348 2362 +14 Branches 593 601 +8 =========================================
+ Hits 2348 2362 +14 
Impacted FilesCoverage Δ
src/lib/isTaxID.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

rubiin
rubiin previously approved these changes Jan 23, 2023
Comment threadREADME.md Outdated
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for WikiRik and pano9000January 25, 2023 09:44
@rubiin
rubiin requested review from WikiRik and rubiin and removed request for WikiRikJanuary 25, 2023 14:47
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation[feat]GSTIN Number Validation and PAN ValidationJan 26, 2023
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)Jan 26, 2023
@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Hi @rubiin and @WikiRik

Added the functionality to validate locales with multiple Tax Identification Numbers, please review and provide your suggestions.

Thanks 🙂👍

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few remarks and suggestions. The added tests are nice, good work on those!

Comment threadREADME.md Outdated
Comment threadsrc/lib/isTaxID.js
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
@braaar

braaar commented Jan 26, 2023

Copy link
Copy Markdown
Contributor

Shouldn't we be considering transitioning to an options object here (as per #1874)? Ensuring compatibility from now on should be fairly trivial to implement and introducing more convoluted options will make backwards compatibility more difficult to implement in the future.

@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Yeah @braaar you are correct, I was not aware of #1874. Will make changes as required.
@WikiRik Can you add isTaxId to #1874 and add my name under claimed by.

Updated readme for isTaxId regarding new localeOption functionality and options object.
@Santhosh-Kumar-99
Santhosh-Kumar-99 marked this pull request as draft February 1, 2023 20:22
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and rubiin and removed request for WikiRik and rubiinFebruary 3, 2023 11:33
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options objectFeb 3, 2023
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from rubiin and removed request for WikiRikFebruary 5, 2023 14:43
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for rubiinFebruary 13, 2023 07:39
Comment threadsrc/lib/isTaxID.js
Comment on lines +1230 to +1250
function validateArgs(str, locale, options) {
const localeOption = options?.localeOption;

try { assertString(str); } catch (err) { throw new Error(`${err.message} for str`); }
try { assertString(locale); } catch (err) { throw new Error(`${err.message} for locale`); }

for (const option in options) {
if (!(option in availableOptions)) throw new Error(`'${option}' is not available`);
}

if (!(locale in taxIdFormat)) throw new Error(`Invalid locale '${locale}'`);


if (locale in multipleTinLocale) {
try { assertString(localeOption); } catch (err) { throw new Error(`${err.message} for localeOption`); }
if (!(localeOption in multipleTinLocale[locale])) throw new Error(`Invalid localeOption '${localeOption}'`);
} else if (localeOption || localeOption === '') {
throw new Error(`Invalid localeOption for locale '${locale}'`);
}
}

@braaarbraaarFeb 14, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you get inspiration for this from some other validator using an options object or did you come up with this yourself? To me this seems a bit heavy handed. Are we generally interested in throwing errors if the user doesn't provide valid options? I haven't seen this much argument validation in other validators. Does the multiple locale possibility in en-IN warrant this much code here?

#2086 is somewhat similar to this PR in that it uses a local option in the options object. Maybe cut things down a bit, taking inspiration from there?

@Santhosh-Kumar-99Santhosh-Kumar-99Feb 15, 2023

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @braaar thanks for your feedback,
I came up with this approach of validating args, but took inspiration of options object from #2157 and #2075.
The current function also validates args and throws error if user specifies a wrong locale or str, so I thought it might be useful if we throw error for wrong options too. And yeah since localeOption is dependent on locale it seems a bit heavy handed, even I had the same thought too. But it is just checking if the options provided are correct, if the locale has multiple TIN and also their types.
Wouldn't it be misleading if the validation returns false when incorrect options are passed ?

Yeah #2086 is a bit similar but according to #1874 but locale will not be a part of options object as it is mandatory. #1874 (comment).

For now, en-IN is the only locale which has multiple TIN, but when I researched through the internet there are several other countries who have multiple TIN, may be this approach would help us to include other countries soon.

Example : US TIN
US has 5 different Identification numbers.

@braaarbraaarFeb 16, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This complexity is starting to make me feel like maintaining a validator for multiple tax ids for multiple countries is an enourmous undertaking. I suppose it's the only natural way forward, unless we decide to scrap the validator altogether, of course.

How many app developers are making international systems that care about tax ids and are using open source validation code? In my eyes the use case for such an all-encompassing validator is quite rare. When I work with things like social security numbers and business IDs I use a country-specific package that contains what I need and is much easier to maintain on its own, should I spot an error or want something added.

What are your thoughts on this, @WikiRik? I suppose this enters into a territory where the maintainers should chime in. They are in control of the main direction of the project and also feel the burden of maintaining code the most.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, input from the maintainers is indeed something we'll need. But the fact is that we already have isTaxID with multiple countries so this is a logical addition in my view.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@profnandaa can you please help us here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I should open a separate issue about scrapping this validator.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah and can we just add PAN regex alone for en-IN locale ,for now ?

Comment threadsrc/lib/isTaxID.js Outdated
Changed variable name to multipleTaxIdLocale
Co-authored-by: Brage Sekse Aarset <brage.aarset@gmail.com>
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from braaar and removed request for WikiRikFebruary 15, 2023 03:07
@Santhosh-Kumar-99Santhosh-Kumar-99 closed this by deleting the head repository Jan 21, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Santhosh-Kumar-99@braaar@rubiin@WikiRik@pano9000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object - #2153

Closed
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master
Closed

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object#2153
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master

Conversation

@Santhosh-Kumar-99

@Santhosh-Kumar-99Santhosh-Kumar-99 commented Jan 23, 2023

Copy link
Copy Markdown

Added GSTIN Validation and PAN Validation for India TIN to isTaxID

GSTIN Format

  • 15 Digit Number
  • First two digit is State Code ( refer : State Code GSTIN]
  • Next 10 digit belongs to PAN Number Refer PAN Format
  • 13th digit is number of entity of business [1-9 A-Z]
  • 14th digit is Z by default
  • 15th digit is check digit which can be either number or alphabet [0-9 A-Z]

PAN Format Refer PAN Format

Added a new parameter locale option to the isTaxID function options object , so users could now specify the required localeOption to select the required validator, if the locale has multiple TIN.

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 23, 2023

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (3a04feb) compared to base (43803c0).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2153 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 106 106 Lines 2348 2362 +14 Branches 593 601 +8 =========================================
+ Hits 2348 2362 +14 
Impacted FilesCoverage Δ
src/lib/isTaxID.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

rubiin
rubiin previously approved these changes Jan 23, 2023
Comment threadREADME.md Outdated
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for WikiRik and pano9000January 25, 2023 09:44
@rubiin
rubiin requested review from WikiRik and rubiin and removed request for WikiRikJanuary 25, 2023 14:47
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation[feat]GSTIN Number Validation and PAN ValidationJan 26, 2023
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)Jan 26, 2023
@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Hi @rubiin and @WikiRik

Added the functionality to validate locales with multiple Tax Identification Numbers, please review and provide your suggestions.

Thanks 🙂👍

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few remarks and suggestions. The added tests are nice, good work on those!

Comment threadREADME.md Outdated
Comment threadsrc/lib/isTaxID.js
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
@braaar

braaar commented Jan 26, 2023

Copy link
Copy Markdown
Contributor

Shouldn't we be considering transitioning to an options object here (as per #1874)? Ensuring compatibility from now on should be fairly trivial to implement and introducing more convoluted options will make backwards compatibility more difficult to implement in the future.

@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Yeah @braaar you are correct, I was not aware of #1874. Will make changes as required.
@WikiRik Can you add isTaxId to #1874 and add my name under claimed by.

Updated readme for isTaxId regarding new localeOption functionality and options object.
@Santhosh-Kumar-99
Santhosh-Kumar-99 marked this pull request as draft February 1, 2023 20:22
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and rubiin and removed request for WikiRik and rubiinFebruary 3, 2023 11:33
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options objectFeb 3, 2023
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from rubiin and removed request for WikiRikFebruary 5, 2023 14:43
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for rubiinFebruary 13, 2023 07:39
Comment threadsrc/lib/isTaxID.js
Comment on lines +1230 to +1250
function validateArgs(str, locale, options) {
const localeOption = options?.localeOption;

try { assertString(str); } catch (err) { throw new Error(`${err.message} for str`); }
try { assertString(locale); } catch (err) { throw new Error(`${err.message} for locale`); }

for (const option in options) {
if (!(option in availableOptions)) throw new Error(`'${option}' is not available`);
}

if (!(locale in taxIdFormat)) throw new Error(`Invalid locale '${locale}'`);


if (locale in multipleTinLocale) {
try { assertString(localeOption); } catch (err) { throw new Error(`${err.message} for localeOption`); }
if (!(localeOption in multipleTinLocale[locale])) throw new Error(`Invalid localeOption '${localeOption}'`);
} else if (localeOption || localeOption === '') {
throw new Error(`Invalid localeOption for locale '${locale}'`);
}
}

@braaarbraaarFeb 14, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you get inspiration for this from some other validator using an options object or did you come up with this yourself? To me this seems a bit heavy handed. Are we generally interested in throwing errors if the user doesn't provide valid options? I haven't seen this much argument validation in other validators. Does the multiple locale possibility in en-IN warrant this much code here?

#2086 is somewhat similar to this PR in that it uses a local option in the options object. Maybe cut things down a bit, taking inspiration from there?

@Santhosh-Kumar-99Santhosh-Kumar-99Feb 15, 2023

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @braaar thanks for your feedback,
I came up with this approach of validating args, but took inspiration of options object from #2157 and #2075.
The current function also validates args and throws error if user specifies a wrong locale or str, so I thought it might be useful if we throw error for wrong options too. And yeah since localeOption is dependent on locale it seems a bit heavy handed, even I had the same thought too. But it is just checking if the options provided are correct, if the locale has multiple TIN and also their types.
Wouldn't it be misleading if the validation returns false when incorrect options are passed ?

Yeah #2086 is a bit similar but according to #1874 but locale will not be a part of options object as it is mandatory. #1874 (comment).

For now, en-IN is the only locale which has multiple TIN, but when I researched through the internet there are several other countries who have multiple TIN, may be this approach would help us to include other countries soon.

Example : US TIN
US has 5 different Identification numbers.

@braaarbraaarFeb 16, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This complexity is starting to make me feel like maintaining a validator for multiple tax ids for multiple countries is an enourmous undertaking. I suppose it's the only natural way forward, unless we decide to scrap the validator altogether, of course.

How many app developers are making international systems that care about tax ids and are using open source validation code? In my eyes the use case for such an all-encompassing validator is quite rare. When I work with things like social security numbers and business IDs I use a country-specific package that contains what I need and is much easier to maintain on its own, should I spot an error or want something added.

What are your thoughts on this, @WikiRik? I suppose this enters into a territory where the maintainers should chime in. They are in control of the main direction of the project and also feel the burden of maintaining code the most.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, input from the maintainers is indeed something we'll need. But the fact is that we already have isTaxID with multiple countries so this is a logical addition in my view.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@profnandaa can you please help us here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I should open a separate issue about scrapping this validator.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah and can we just add PAN regex alone for en-IN locale ,for now ?

Comment threadsrc/lib/isTaxID.js Outdated
Changed variable name to multipleTaxIdLocale
Co-authored-by: Brage Sekse Aarset <brage.aarset@gmail.com>
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from braaar and removed request for WikiRikFebruary 15, 2023 03:07
@Santhosh-Kumar-99Santhosh-Kumar-99 closed this by deleting the head repository Jan 21, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Santhosh-Kumar-99@braaar@rubiin@WikiRik@pano9000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object - #2153

Closed
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master
Closed

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object#2153
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master

Conversation

@Santhosh-Kumar-99

@Santhosh-Kumar-99Santhosh-Kumar-99 commented Jan 23, 2023

Copy link
Copy Markdown

Added GSTIN Validation and PAN Validation for India TIN to isTaxID

GSTIN Format

  • 15 Digit Number
  • First two digit is State Code ( refer : State Code GSTIN]
  • Next 10 digit belongs to PAN Number Refer PAN Format
  • 13th digit is number of entity of business [1-9 A-Z]
  • 14th digit is Z by default
  • 15th digit is check digit which can be either number or alphabet [0-9 A-Z]

PAN Format Refer PAN Format

Added a new parameter locale option to the isTaxID function options object , so users could now specify the required localeOption to select the required validator, if the locale has multiple TIN.

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 23, 2023

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (3a04feb) compared to base (43803c0).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2153 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 106 106 Lines 2348 2362 +14 Branches 593 601 +8 =========================================
+ Hits 2348 2362 +14 
Impacted FilesCoverage Δ
src/lib/isTaxID.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

rubiin
rubiin previously approved these changes Jan 23, 2023
Comment threadREADME.md Outdated
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for WikiRik and pano9000January 25, 2023 09:44
@rubiin
rubiin requested review from WikiRik and rubiin and removed request for WikiRikJanuary 25, 2023 14:47
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation[feat]GSTIN Number Validation and PAN ValidationJan 26, 2023
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)Jan 26, 2023
@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Hi @rubiin and @WikiRik

Added the functionality to validate locales with multiple Tax Identification Numbers, please review and provide your suggestions.

Thanks 🙂👍

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few remarks and suggestions. The added tests are nice, good work on those!

Comment threadREADME.md Outdated
Comment threadsrc/lib/isTaxID.js
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
@braaar

braaar commented Jan 26, 2023

Copy link
Copy Markdown
Contributor

Shouldn't we be considering transitioning to an options object here (as per #1874)? Ensuring compatibility from now on should be fairly trivial to implement and introducing more convoluted options will make backwards compatibility more difficult to implement in the future.

@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Yeah @braaar you are correct, I was not aware of #1874. Will make changes as required.
@WikiRik Can you add isTaxId to #1874 and add my name under claimed by.

Updated readme for isTaxId regarding new localeOption functionality and options object.
@Santhosh-Kumar-99
Santhosh-Kumar-99 marked this pull request as draft February 1, 2023 20:22
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and rubiin and removed request for WikiRik and rubiinFebruary 3, 2023 11:33
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options objectFeb 3, 2023
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from rubiin and removed request for WikiRikFebruary 5, 2023 14:43
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for rubiinFebruary 13, 2023 07:39
Comment threadsrc/lib/isTaxID.js
Comment on lines +1230 to +1250
function validateArgs(str, locale, options) {
const localeOption = options?.localeOption;

try { assertString(str); } catch (err) { throw new Error(`${err.message} for str`); }
try { assertString(locale); } catch (err) { throw new Error(`${err.message} for locale`); }

for (const option in options) {
if (!(option in availableOptions)) throw new Error(`'${option}' is not available`);
}

if (!(locale in taxIdFormat)) throw new Error(`Invalid locale '${locale}'`);


if (locale in multipleTinLocale) {
try { assertString(localeOption); } catch (err) { throw new Error(`${err.message} for localeOption`); }
if (!(localeOption in multipleTinLocale[locale])) throw new Error(`Invalid localeOption '${localeOption}'`);
} else if (localeOption || localeOption === '') {
throw new Error(`Invalid localeOption for locale '${locale}'`);
}
}

@braaarbraaarFeb 14, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you get inspiration for this from some other validator using an options object or did you come up with this yourself? To me this seems a bit heavy handed. Are we generally interested in throwing errors if the user doesn't provide valid options? I haven't seen this much argument validation in other validators. Does the multiple locale possibility in en-IN warrant this much code here?

#2086 is somewhat similar to this PR in that it uses a local option in the options object. Maybe cut things down a bit, taking inspiration from there?

@Santhosh-Kumar-99Santhosh-Kumar-99Feb 15, 2023

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @braaar thanks for your feedback,
I came up with this approach of validating args, but took inspiration of options object from #2157 and #2075.
The current function also validates args and throws error if user specifies a wrong locale or str, so I thought it might be useful if we throw error for wrong options too. And yeah since localeOption is dependent on locale it seems a bit heavy handed, even I had the same thought too. But it is just checking if the options provided are correct, if the locale has multiple TIN and also their types.
Wouldn't it be misleading if the validation returns false when incorrect options are passed ?

Yeah #2086 is a bit similar but according to #1874 but locale will not be a part of options object as it is mandatory. #1874 (comment).

For now, en-IN is the only locale which has multiple TIN, but when I researched through the internet there are several other countries who have multiple TIN, may be this approach would help us to include other countries soon.

Example : US TIN
US has 5 different Identification numbers.

@braaarbraaarFeb 16, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This complexity is starting to make me feel like maintaining a validator for multiple tax ids for multiple countries is an enourmous undertaking. I suppose it's the only natural way forward, unless we decide to scrap the validator altogether, of course.

How many app developers are making international systems that care about tax ids and are using open source validation code? In my eyes the use case for such an all-encompassing validator is quite rare. When I work with things like social security numbers and business IDs I use a country-specific package that contains what I need and is much easier to maintain on its own, should I spot an error or want something added.

What are your thoughts on this, @WikiRik? I suppose this enters into a territory where the maintainers should chime in. They are in control of the main direction of the project and also feel the burden of maintaining code the most.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, input from the maintainers is indeed something we'll need. But the fact is that we already have isTaxID with multiple countries so this is a logical addition in my view.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@profnandaa can you please help us here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I should open a separate issue about scrapping this validator.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah and can we just add PAN regex alone for en-IN locale ,for now ?

Comment threadsrc/lib/isTaxID.js Outdated
Changed variable name to multipleTaxIdLocale
Co-authored-by: Brage Sekse Aarset <brage.aarset@gmail.com>
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from braaar and removed request for WikiRikFebruary 15, 2023 03:07
@Santhosh-Kumar-99Santhosh-Kumar-99 closed this by deleting the head repository Jan 21, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Santhosh-Kumar-99@braaar@rubiin@WikiRik@pano9000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object - #2153

Closed
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master
Closed

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object#2153
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master

Conversation

@Santhosh-Kumar-99

@Santhosh-Kumar-99Santhosh-Kumar-99 commented Jan 23, 2023

Copy link
Copy Markdown

Added GSTIN Validation and PAN Validation for India TIN to isTaxID

GSTIN Format

  • 15 Digit Number
  • First two digit is State Code ( refer : State Code GSTIN]
  • Next 10 digit belongs to PAN Number Refer PAN Format
  • 13th digit is number of entity of business [1-9 A-Z]
  • 14th digit is Z by default
  • 15th digit is check digit which can be either number or alphabet [0-9 A-Z]

PAN Format Refer PAN Format

Added a new parameter locale option to the isTaxID function options object , so users could now specify the required localeOption to select the required validator, if the locale has multiple TIN.

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 23, 2023

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (3a04feb) compared to base (43803c0).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2153 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 106 106 Lines 2348 2362 +14 Branches 593 601 +8 =========================================
+ Hits 2348 2362 +14 
Impacted FilesCoverage Δ
src/lib/isTaxID.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

rubiin
rubiin previously approved these changes Jan 23, 2023
Comment threadREADME.md Outdated
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for WikiRik and pano9000January 25, 2023 09:44
@rubiin
rubiin requested review from WikiRik and rubiin and removed request for WikiRikJanuary 25, 2023 14:47
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation[feat]GSTIN Number Validation and PAN ValidationJan 26, 2023
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)Jan 26, 2023
@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Hi @rubiin and @WikiRik

Added the functionality to validate locales with multiple Tax Identification Numbers, please review and provide your suggestions.

Thanks 🙂👍

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few remarks and suggestions. The added tests are nice, good work on those!

Comment threadREADME.md Outdated
Comment threadsrc/lib/isTaxID.js
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
@braaar

braaar commented Jan 26, 2023

Copy link
Copy Markdown
Contributor

Shouldn't we be considering transitioning to an options object here (as per #1874)? Ensuring compatibility from now on should be fairly trivial to implement and introducing more convoluted options will make backwards compatibility more difficult to implement in the future.

@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Yeah @braaar you are correct, I was not aware of #1874. Will make changes as required.
@WikiRik Can you add isTaxId to #1874 and add my name under claimed by.

Updated readme for isTaxId regarding new localeOption functionality and options object.
@Santhosh-Kumar-99
Santhosh-Kumar-99 marked this pull request as draft February 1, 2023 20:22
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and rubiin and removed request for WikiRik and rubiinFebruary 3, 2023 11:33
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options objectFeb 3, 2023
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from rubiin and removed request for WikiRikFebruary 5, 2023 14:43
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for rubiinFebruary 13, 2023 07:39
Comment threadsrc/lib/isTaxID.js
Comment on lines +1230 to +1250
function validateArgs(str, locale, options) {
const localeOption = options?.localeOption;

try { assertString(str); } catch (err) { throw new Error(`${err.message} for str`); }
try { assertString(locale); } catch (err) { throw new Error(`${err.message} for locale`); }

for (const option in options) {
if (!(option in availableOptions)) throw new Error(`'${option}' is not available`);
}

if (!(locale in taxIdFormat)) throw new Error(`Invalid locale '${locale}'`);


if (locale in multipleTinLocale) {
try { assertString(localeOption); } catch (err) { throw new Error(`${err.message} for localeOption`); }
if (!(localeOption in multipleTinLocale[locale])) throw new Error(`Invalid localeOption '${localeOption}'`);
} else if (localeOption || localeOption === '') {
throw new Error(`Invalid localeOption for locale '${locale}'`);
}
}

@braaarbraaarFeb 14, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you get inspiration for this from some other validator using an options object or did you come up with this yourself? To me this seems a bit heavy handed. Are we generally interested in throwing errors if the user doesn't provide valid options? I haven't seen this much argument validation in other validators. Does the multiple locale possibility in en-IN warrant this much code here?

#2086 is somewhat similar to this PR in that it uses a local option in the options object. Maybe cut things down a bit, taking inspiration from there?

@Santhosh-Kumar-99Santhosh-Kumar-99Feb 15, 2023

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @braaar thanks for your feedback,
I came up with this approach of validating args, but took inspiration of options object from #2157 and #2075.
The current function also validates args and throws error if user specifies a wrong locale or str, so I thought it might be useful if we throw error for wrong options too. And yeah since localeOption is dependent on locale it seems a bit heavy handed, even I had the same thought too. But it is just checking if the options provided are correct, if the locale has multiple TIN and also their types.
Wouldn't it be misleading if the validation returns false when incorrect options are passed ?

Yeah #2086 is a bit similar but according to #1874 but locale will not be a part of options object as it is mandatory. #1874 (comment).

For now, en-IN is the only locale which has multiple TIN, but when I researched through the internet there are several other countries who have multiple TIN, may be this approach would help us to include other countries soon.

Example : US TIN
US has 5 different Identification numbers.

@braaarbraaarFeb 16, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This complexity is starting to make me feel like maintaining a validator for multiple tax ids for multiple countries is an enourmous undertaking. I suppose it's the only natural way forward, unless we decide to scrap the validator altogether, of course.

How many app developers are making international systems that care about tax ids and are using open source validation code? In my eyes the use case for such an all-encompassing validator is quite rare. When I work with things like social security numbers and business IDs I use a country-specific package that contains what I need and is much easier to maintain on its own, should I spot an error or want something added.

What are your thoughts on this, @WikiRik? I suppose this enters into a territory where the maintainers should chime in. They are in control of the main direction of the project and also feel the burden of maintaining code the most.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, input from the maintainers is indeed something we'll need. But the fact is that we already have isTaxID with multiple countries so this is a logical addition in my view.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@profnandaa can you please help us here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I should open a separate issue about scrapping this validator.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah and can we just add PAN regex alone for en-IN locale ,for now ?

Comment threadsrc/lib/isTaxID.js Outdated
Changed variable name to multipleTaxIdLocale
Co-authored-by: Brage Sekse Aarset <brage.aarset@gmail.com>
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from braaar and removed request for WikiRikFebruary 15, 2023 03:07
@Santhosh-Kumar-99Santhosh-Kumar-99 closed this by deleting the head repository Jan 21, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Santhosh-Kumar-99@braaar@rubiin@WikiRik@pano9000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object - #2153

Closed
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master
Closed

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object#2153
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master

Conversation

@Santhosh-Kumar-99

@Santhosh-Kumar-99Santhosh-Kumar-99 commented Jan 23, 2023

Copy link
Copy Markdown

Added GSTIN Validation and PAN Validation for India TIN to isTaxID

GSTIN Format

  • 15 Digit Number
  • First two digit is State Code ( refer : State Code GSTIN]
  • Next 10 digit belongs to PAN Number Refer PAN Format
  • 13th digit is number of entity of business [1-9 A-Z]
  • 14th digit is Z by default
  • 15th digit is check digit which can be either number or alphabet [0-9 A-Z]

PAN Format Refer PAN Format

Added a new parameter locale option to the isTaxID function options object , so users could now specify the required localeOption to select the required validator, if the locale has multiple TIN.

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 23, 2023

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (3a04feb) compared to base (43803c0).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2153 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 106 106 Lines 2348 2362 +14 Branches 593 601 +8 =========================================
+ Hits 2348 2362 +14 
Impacted FilesCoverage Δ
src/lib/isTaxID.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

rubiin
rubiin previously approved these changes Jan 23, 2023
Comment threadREADME.md Outdated
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for WikiRik and pano9000January 25, 2023 09:44
@rubiin
rubiin requested review from WikiRik and rubiin and removed request for WikiRikJanuary 25, 2023 14:47
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation[feat]GSTIN Number Validation and PAN ValidationJan 26, 2023
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)Jan 26, 2023
@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Hi @rubiin and @WikiRik

Added the functionality to validate locales with multiple Tax Identification Numbers, please review and provide your suggestions.

Thanks 🙂👍

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few remarks and suggestions. The added tests are nice, good work on those!

Comment threadREADME.md Outdated
Comment threadsrc/lib/isTaxID.js
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
@braaar

braaar commented Jan 26, 2023

Copy link
Copy Markdown
Contributor

Shouldn't we be considering transitioning to an options object here (as per #1874)? Ensuring compatibility from now on should be fairly trivial to implement and introducing more convoluted options will make backwards compatibility more difficult to implement in the future.

@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Yeah @braaar you are correct, I was not aware of #1874. Will make changes as required.
@WikiRik Can you add isTaxId to #1874 and add my name under claimed by.

Updated readme for isTaxId regarding new localeOption functionality and options object.
@Santhosh-Kumar-99
Santhosh-Kumar-99 marked this pull request as draft February 1, 2023 20:22
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and rubiin and removed request for WikiRik and rubiinFebruary 3, 2023 11:33
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options objectFeb 3, 2023
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from rubiin and removed request for WikiRikFebruary 5, 2023 14:43
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for rubiinFebruary 13, 2023 07:39
Comment threadsrc/lib/isTaxID.js
Comment on lines +1230 to +1250
function validateArgs(str, locale, options) {
const localeOption = options?.localeOption;

try { assertString(str); } catch (err) { throw new Error(`${err.message} for str`); }
try { assertString(locale); } catch (err) { throw new Error(`${err.message} for locale`); }

for (const option in options) {
if (!(option in availableOptions)) throw new Error(`'${option}' is not available`);
}

if (!(locale in taxIdFormat)) throw new Error(`Invalid locale '${locale}'`);


if (locale in multipleTinLocale) {
try { assertString(localeOption); } catch (err) { throw new Error(`${err.message} for localeOption`); }
if (!(localeOption in multipleTinLocale[locale])) throw new Error(`Invalid localeOption '${localeOption}'`);
} else if (localeOption || localeOption === '') {
throw new Error(`Invalid localeOption for locale '${locale}'`);
}
}

@braaarbraaarFeb 14, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you get inspiration for this from some other validator using an options object or did you come up with this yourself? To me this seems a bit heavy handed. Are we generally interested in throwing errors if the user doesn't provide valid options? I haven't seen this much argument validation in other validators. Does the multiple locale possibility in en-IN warrant this much code here?

#2086 is somewhat similar to this PR in that it uses a local option in the options object. Maybe cut things down a bit, taking inspiration from there?

@Santhosh-Kumar-99Santhosh-Kumar-99Feb 15, 2023

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @braaar thanks for your feedback,
I came up with this approach of validating args, but took inspiration of options object from #2157 and #2075.
The current function also validates args and throws error if user specifies a wrong locale or str, so I thought it might be useful if we throw error for wrong options too. And yeah since localeOption is dependent on locale it seems a bit heavy handed, even I had the same thought too. But it is just checking if the options provided are correct, if the locale has multiple TIN and also their types.
Wouldn't it be misleading if the validation returns false when incorrect options are passed ?

Yeah #2086 is a bit similar but according to #1874 but locale will not be a part of options object as it is mandatory. #1874 (comment).

For now, en-IN is the only locale which has multiple TIN, but when I researched through the internet there are several other countries who have multiple TIN, may be this approach would help us to include other countries soon.

Example : US TIN
US has 5 different Identification numbers.

@braaarbraaarFeb 16, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This complexity is starting to make me feel like maintaining a validator for multiple tax ids for multiple countries is an enourmous undertaking. I suppose it's the only natural way forward, unless we decide to scrap the validator altogether, of course.

How many app developers are making international systems that care about tax ids and are using open source validation code? In my eyes the use case for such an all-encompassing validator is quite rare. When I work with things like social security numbers and business IDs I use a country-specific package that contains what I need and is much easier to maintain on its own, should I spot an error or want something added.

What are your thoughts on this, @WikiRik? I suppose this enters into a territory where the maintainers should chime in. They are in control of the main direction of the project and also feel the burden of maintaining code the most.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, input from the maintainers is indeed something we'll need. But the fact is that we already have isTaxID with multiple countries so this is a logical addition in my view.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@profnandaa can you please help us here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I should open a separate issue about scrapping this validator.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah and can we just add PAN regex alone for en-IN locale ,for now ?

Comment threadsrc/lib/isTaxID.js Outdated
Changed variable name to multipleTaxIdLocale
Co-authored-by: Brage Sekse Aarset <brage.aarset@gmail.com>
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from braaar and removed request for WikiRikFebruary 15, 2023 03:07
@Santhosh-Kumar-99Santhosh-Kumar-99 closed this by deleting the head repository Jan 21, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Santhosh-Kumar-99@braaar@rubiin@WikiRik@pano9000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object - #2153

Closed
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master
Closed

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object#2153
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master

Conversation

@Santhosh-Kumar-99

@Santhosh-Kumar-99Santhosh-Kumar-99 commented Jan 23, 2023

Copy link
Copy Markdown

Added GSTIN Validation and PAN Validation for India TIN to isTaxID

GSTIN Format

  • 15 Digit Number
  • First two digit is State Code ( refer : State Code GSTIN]
  • Next 10 digit belongs to PAN Number Refer PAN Format
  • 13th digit is number of entity of business [1-9 A-Z]
  • 14th digit is Z by default
  • 15th digit is check digit which can be either number or alphabet [0-9 A-Z]

PAN Format Refer PAN Format

Added a new parameter locale option to the isTaxID function options object , so users could now specify the required localeOption to select the required validator, if the locale has multiple TIN.

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 23, 2023

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (3a04feb) compared to base (43803c0).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2153 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 106 106 Lines 2348 2362 +14 Branches 593 601 +8 =========================================
+ Hits 2348 2362 +14 
Impacted FilesCoverage Δ
src/lib/isTaxID.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

rubiin
rubiin previously approved these changes Jan 23, 2023
Comment threadREADME.md Outdated
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for WikiRik and pano9000January 25, 2023 09:44
@rubiin
rubiin requested review from WikiRik and rubiin and removed request for WikiRikJanuary 25, 2023 14:47
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation[feat]GSTIN Number Validation and PAN ValidationJan 26, 2023
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)Jan 26, 2023
@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Hi @rubiin and @WikiRik

Added the functionality to validate locales with multiple Tax Identification Numbers, please review and provide your suggestions.

Thanks 🙂👍

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few remarks and suggestions. The added tests are nice, good work on those!

Comment threadREADME.md Outdated
Comment threadsrc/lib/isTaxID.js
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
@braaar

braaar commented Jan 26, 2023

Copy link
Copy Markdown
Contributor

Shouldn't we be considering transitioning to an options object here (as per #1874)? Ensuring compatibility from now on should be fairly trivial to implement and introducing more convoluted options will make backwards compatibility more difficult to implement in the future.

@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Yeah @braaar you are correct, I was not aware of #1874. Will make changes as required.
@WikiRik Can you add isTaxId to #1874 and add my name under claimed by.

Updated readme for isTaxId regarding new localeOption functionality and options object.
@Santhosh-Kumar-99
Santhosh-Kumar-99 marked this pull request as draft February 1, 2023 20:22
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and rubiin and removed request for WikiRik and rubiinFebruary 3, 2023 11:33
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options objectFeb 3, 2023
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from rubiin and removed request for WikiRikFebruary 5, 2023 14:43
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for rubiinFebruary 13, 2023 07:39
Comment threadsrc/lib/isTaxID.js
Comment on lines +1230 to +1250
function validateArgs(str, locale, options) {
const localeOption = options?.localeOption;

try { assertString(str); } catch (err) { throw new Error(`${err.message} for str`); }
try { assertString(locale); } catch (err) { throw new Error(`${err.message} for locale`); }

for (const option in options) {
if (!(option in availableOptions)) throw new Error(`'${option}' is not available`);
}

if (!(locale in taxIdFormat)) throw new Error(`Invalid locale '${locale}'`);


if (locale in multipleTinLocale) {
try { assertString(localeOption); } catch (err) { throw new Error(`${err.message} for localeOption`); }
if (!(localeOption in multipleTinLocale[locale])) throw new Error(`Invalid localeOption '${localeOption}'`);
} else if (localeOption || localeOption === '') {
throw new Error(`Invalid localeOption for locale '${locale}'`);
}
}

@braaarbraaarFeb 14, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you get inspiration for this from some other validator using an options object or did you come up with this yourself? To me this seems a bit heavy handed. Are we generally interested in throwing errors if the user doesn't provide valid options? I haven't seen this much argument validation in other validators. Does the multiple locale possibility in en-IN warrant this much code here?

#2086 is somewhat similar to this PR in that it uses a local option in the options object. Maybe cut things down a bit, taking inspiration from there?

@Santhosh-Kumar-99Santhosh-Kumar-99Feb 15, 2023

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @braaar thanks for your feedback,
I came up with this approach of validating args, but took inspiration of options object from #2157 and #2075.
The current function also validates args and throws error if user specifies a wrong locale or str, so I thought it might be useful if we throw error for wrong options too. And yeah since localeOption is dependent on locale it seems a bit heavy handed, even I had the same thought too. But it is just checking if the options provided are correct, if the locale has multiple TIN and also their types.
Wouldn't it be misleading if the validation returns false when incorrect options are passed ?

Yeah #2086 is a bit similar but according to #1874 but locale will not be a part of options object as it is mandatory. #1874 (comment).

For now, en-IN is the only locale which has multiple TIN, but when I researched through the internet there are several other countries who have multiple TIN, may be this approach would help us to include other countries soon.

Example : US TIN
US has 5 different Identification numbers.

@braaarbraaarFeb 16, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This complexity is starting to make me feel like maintaining a validator for multiple tax ids for multiple countries is an enourmous undertaking. I suppose it's the only natural way forward, unless we decide to scrap the validator altogether, of course.

How many app developers are making international systems that care about tax ids and are using open source validation code? In my eyes the use case for such an all-encompassing validator is quite rare. When I work with things like social security numbers and business IDs I use a country-specific package that contains what I need and is much easier to maintain on its own, should I spot an error or want something added.

What are your thoughts on this, @WikiRik? I suppose this enters into a territory where the maintainers should chime in. They are in control of the main direction of the project and also feel the burden of maintaining code the most.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, input from the maintainers is indeed something we'll need. But the fact is that we already have isTaxID with multiple countries so this is a logical addition in my view.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@profnandaa can you please help us here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I should open a separate issue about scrapping this validator.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah and can we just add PAN regex alone for en-IN locale ,for now ?

Comment threadsrc/lib/isTaxID.js Outdated
Changed variable name to multipleTaxIdLocale
Co-authored-by: Brage Sekse Aarset <brage.aarset@gmail.com>
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from braaar and removed request for WikiRikFebruary 15, 2023 03:07
@Santhosh-Kumar-99Santhosh-Kumar-99 closed this by deleting the head repository Jan 21, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Santhosh-Kumar-99@braaar@rubiin@WikiRik@pano9000
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object - #2153

Closed
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master
Closed

[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options object#2153
Santhosh-Kumar-99 wants to merge 11 commits into
validatorjs:masterfrom
Santhosh-Kumar-99:master

Conversation

@Santhosh-Kumar-99

@Santhosh-Kumar-99Santhosh-Kumar-99 commented Jan 23, 2023

Copy link
Copy Markdown

Added GSTIN Validation and PAN Validation for India TIN to isTaxID

GSTIN Format

  • 15 Digit Number
  • First two digit is State Code ( refer : State Code GSTIN]
  • Next 10 digit belongs to PAN Number Refer PAN Format
  • 13th digit is number of entity of business [1-9 A-Z]
  • 14th digit is Z by default
  • 15th digit is check digit which can be either number or alphabet [0-9 A-Z]

PAN Format Refer PAN Format

Added a new parameter locale option to the isTaxID function options object , so users could now specify the required localeOption to select the required validator, if the locale has multiple TIN.

Checklist

  • PR contains only changes related; no stray files, etc.
  • README updated (where applicable)
  • Tests written (where applicable)

@codecov

codecovBot commented Jan 23, 2023

Copy link
Copy Markdown

Codecov Report

Base: 100.00% // Head: 100.00% // No change to project coverage 👍

Coverage data is based on head (3a04feb) compared to base (43803c0).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@ Coverage Diff @@## master #2153 +/- ##
=========================================
Coverage 100.00% 100.00% =========================================
Files 106 106 Lines 2348 2362 +14 Branches 593 601 +8 =========================================
+ Hits 2348 2362 +14 
Impacted FilesCoverage Δ
src/lib/isTaxID.js100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

rubiin
rubiin previously approved these changes Jan 23, 2023
Comment threadREADME.md Outdated
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for WikiRik and pano9000January 25, 2023 09:44
@rubiin
rubiin requested review from WikiRik and rubiin and removed request for WikiRikJanuary 25, 2023 14:47
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation[feat]GSTIN Number Validation and PAN ValidationJan 26, 2023
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)Jan 26, 2023
@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Hi @rubiin and @WikiRik

Added the functionality to validate locales with multiple Tax Identification Numbers, please review and provide your suggestions.

Thanks 🙂👍

@WikiRikWikiRik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few remarks and suggestions. The added tests are nice, good work on those!

Comment threadREADME.md Outdated
Comment threadsrc/lib/isTaxID.js
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
Comment threadsrc/lib/isTaxID.js Outdated
@braaar

braaar commented Jan 26, 2023

Copy link
Copy Markdown
Contributor

Shouldn't we be considering transitioning to an options object here (as per #1874)? Ensuring compatibility from now on should be fairly trivial to implement and introducing more convoluted options will make backwards compatibility more difficult to implement in the future.

@Santhosh-Kumar-99

Copy link
Copy Markdown
Author

Yeah @braaar you are correct, I was not aware of #1874. Will make changes as required.
@WikiRik Can you add isTaxId to #1874 and add my name under claimed by.

Updated readme for isTaxId regarding new localeOption functionality and options object.
@Santhosh-Kumar-99
Santhosh-Kumar-99 marked this pull request as draft February 1, 2023 20:22
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and rubiin and removed request for WikiRik and rubiinFebruary 3, 2023 11:33
@Santhosh-Kumar-99Santhosh-Kumar-99 changed the title [feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality)[feat]GSTIN Number Validation and PAN Validation (Multiple TIN functionality) and also refactored is taxID for options objectFeb 3, 2023
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from rubiin and removed request for WikiRikFebruary 5, 2023 14:43
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from WikiRik and removed request for rubiinFebruary 13, 2023 07:39
Comment threadsrc/lib/isTaxID.js
Comment on lines +1230 to +1250
function validateArgs(str, locale, options) {
const localeOption = options?.localeOption;

try { assertString(str); } catch (err) { throw new Error(`${err.message} for str`); }
try { assertString(locale); } catch (err) { throw new Error(`${err.message} for locale`); }

for (const option in options) {
if (!(option in availableOptions)) throw new Error(`'${option}' is not available`);
}

if (!(locale in taxIdFormat)) throw new Error(`Invalid locale '${locale}'`);


if (locale in multipleTinLocale) {
try { assertString(localeOption); } catch (err) { throw new Error(`${err.message} for localeOption`); }
if (!(localeOption in multipleTinLocale[locale])) throw new Error(`Invalid localeOption '${localeOption}'`);
} else if (localeOption || localeOption === '') {
throw new Error(`Invalid localeOption for locale '${locale}'`);
}
}

@braaarbraaarFeb 14, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you get inspiration for this from some other validator using an options object or did you come up with this yourself? To me this seems a bit heavy handed. Are we generally interested in throwing errors if the user doesn't provide valid options? I haven't seen this much argument validation in other validators. Does the multiple locale possibility in en-IN warrant this much code here?

#2086 is somewhat similar to this PR in that it uses a local option in the options object. Maybe cut things down a bit, taking inspiration from there?

@Santhosh-Kumar-99Santhosh-Kumar-99Feb 15, 2023

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @braaar thanks for your feedback,
I came up with this approach of validating args, but took inspiration of options object from #2157 and #2075.
The current function also validates args and throws error if user specifies a wrong locale or str, so I thought it might be useful if we throw error for wrong options too. And yeah since localeOption is dependent on locale it seems a bit heavy handed, even I had the same thought too. But it is just checking if the options provided are correct, if the locale has multiple TIN and also their types.
Wouldn't it be misleading if the validation returns false when incorrect options are passed ?

Yeah #2086 is a bit similar but according to #1874 but locale will not be a part of options object as it is mandatory. #1874 (comment).

For now, en-IN is the only locale which has multiple TIN, but when I researched through the internet there are several other countries who have multiple TIN, may be this approach would help us to include other countries soon.

Example : US TIN
US has 5 different Identification numbers.

@braaarbraaarFeb 16, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This complexity is starting to make me feel like maintaining a validator for multiple tax ids for multiple countries is an enourmous undertaking. I suppose it's the only natural way forward, unless we decide to scrap the validator altogether, of course.

How many app developers are making international systems that care about tax ids and are using open source validation code? In my eyes the use case for such an all-encompassing validator is quite rare. When I work with things like social security numbers and business IDs I use a country-specific package that contains what I need and is much easier to maintain on its own, should I spot an error or want something added.

What are your thoughts on this, @WikiRik? I suppose this enters into a territory where the maintainers should chime in. They are in control of the main direction of the project and also feel the burden of maintaining code the most.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, input from the maintainers is indeed something we'll need. But the fact is that we already have isTaxID with multiple countries so this is a logical addition in my view.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@profnandaa can you please help us here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I should open a separate issue about scrapping this validator.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah and can we just add PAN regex alone for en-IN locale ,for now ?

Comment threadsrc/lib/isTaxID.js Outdated
Changed variable name to multipleTaxIdLocale
Co-authored-by: Brage Sekse Aarset <brage.aarset@gmail.com>
@Santhosh-Kumar-99
Santhosh-Kumar-99 requested review from braaar and removed request for WikiRikFebruary 15, 2023 03:07
@Santhosh-Kumar-99Santhosh-Kumar-99 closed this by deleting the head repository Jan 21, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Santhosh-Kumar-99@braaar@rubiin@WikiRik@pano9000