opencode-rehydar 0.14.1 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.d.ts +54 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +74 -0
- package/dist/browser.js.map +1 -0
- package/dist/core/anonymizer.d.ts +309 -0
- package/dist/core/anonymizer.d.ts.map +1 -0
- package/dist/core/anonymizer.js +555 -0
- package/dist/core/anonymizer.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/crypto/index.d.ts +6 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +6 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/pii-map-crypto.d.ts +114 -0
- package/dist/crypto/pii-map-crypto.d.ts.map +1 -0
- package/dist/crypto/pii-map-crypto.js +228 -0
- package/dist/crypto/pii-map-crypto.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/ner/bio-decoder.d.ts +64 -0
- package/dist/ner/bio-decoder.d.ts.map +1 -0
- package/dist/ner/bio-decoder.js +218 -0
- package/dist/ner/bio-decoder.js.map +1 -0
- package/dist/ner/index.d.ts +12 -0
- package/dist/ner/index.d.ts.map +1 -0
- package/dist/ner/index.js +12 -0
- package/dist/ner/index.js.map +1 -0
- package/dist/ner/inference-server-client.d.ts +81 -0
- package/dist/ner/inference-server-client.d.ts.map +1 -0
- package/dist/ner/inference-server-client.js +120 -0
- package/dist/ner/inference-server-client.js.map +1 -0
- package/dist/ner/inference-server-ner-model.d.ts +43 -0
- package/dist/ner/inference-server-ner-model.d.ts.map +1 -0
- package/dist/ner/inference-server-ner-model.js +119 -0
- package/dist/ner/inference-server-ner-model.js.map +1 -0
- package/dist/ner/model-manager.d.ts +111 -0
- package/dist/ner/model-manager.d.ts.map +1 -0
- package/dist/ner/model-manager.js +334 -0
- package/dist/ner/model-manager.js.map +1 -0
- package/dist/ner/ner-model.d.ts +172 -0
- package/dist/ner/ner-model.d.ts.map +1 -0
- package/dist/ner/ner-model.js +514 -0
- package/dist/ner/ner-model.js.map +1 -0
- package/dist/ner/onnx-runtime.browser.d.ts +46 -0
- package/dist/ner/onnx-runtime.browser.d.ts.map +1 -0
- package/dist/ner/onnx-runtime.browser.js +90 -0
- package/dist/ner/onnx-runtime.browser.js.map +1 -0
- package/dist/ner/onnx-runtime.d.ts +72 -0
- package/dist/ner/onnx-runtime.d.ts.map +1 -0
- package/dist/ner/onnx-runtime.js +132 -0
- package/dist/ner/onnx-runtime.js.map +1 -0
- package/dist/ner/token-window.d.ts +19 -0
- package/dist/ner/token-window.d.ts.map +1 -0
- package/dist/ner/token-window.js +101 -0
- package/dist/ner/token-window.js.map +1 -0
- package/dist/ner/tokenizer.d.ts +142 -0
- package/dist/ner/tokenizer.d.ts.map +1 -0
- package/dist/ner/tokenizer.js +362 -0
- package/dist/ner/tokenizer.js.map +1 -0
- package/dist/opencode-plugin/git-identity.d.ts +3 -0
- package/dist/opencode-plugin/git-identity.d.ts.map +1 -0
- package/dist/opencode-plugin/git-identity.js +37 -0
- package/dist/opencode-plugin/git-identity.js.map +1 -0
- package/dist/opencode-plugin/github-username.d.ts +3 -0
- package/dist/opencode-plugin/github-username.d.ts.map +1 -0
- package/dist/opencode-plugin/github-username.js +41 -0
- package/dist/opencode-plugin/github-username.js.map +1 -0
- package/dist/opencode-plugin/identity-recognizer.d.ts +5 -0
- package/dist/opencode-plugin/identity-recognizer.d.ts.map +1 -0
- package/dist/opencode-plugin/identity-recognizer.js +21 -0
- package/dist/opencode-plugin/identity-recognizer.js.map +1 -0
- package/dist/opencode-plugin/index.d.ts +7 -0
- package/dist/opencode-plugin/index.d.ts.map +1 -0
- package/dist/opencode-plugin/index.js +6 -0
- package/dist/opencode-plugin/index.js.map +1 -0
- package/dist/opencode-plugin/plugin.d.ts +39 -0
- package/dist/opencode-plugin/plugin.d.ts.map +1 -0
- package/dist/opencode-plugin/plugin.js +294 -0
- package/dist/opencode-plugin/plugin.js.map +1 -0
- package/dist/opencode-plugin/types.d.ts +33 -0
- package/dist/opencode-plugin/types.d.ts.map +1 -0
- package/dist/opencode-plugin/types.js +5 -0
- package/dist/opencode-plugin/types.js.map +1 -0
- package/dist/opencode-plugin/v2/anon-state.d.ts +12 -0
- package/dist/opencode-plugin/v2/anon-state.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/anon-state.js +14 -0
- package/dist/opencode-plugin/v2/anon-state.js.map +1 -0
- package/dist/opencode-plugin/v2/deep-rehydrate.d.ts +13 -0
- package/dist/opencode-plugin/v2/deep-rehydrate.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/deep-rehydrate.js +33 -0
- package/dist/opencode-plugin/v2/deep-rehydrate.js.map +1 -0
- package/dist/opencode-plugin/v2/index.d.ts +17 -0
- package/dist/opencode-plugin/v2/index.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/index.js +17 -0
- package/dist/opencode-plugin/v2/index.js.map +1 -0
- package/dist/opencode-plugin/v2/logger.d.ts +24 -0
- package/dist/opencode-plugin/v2/logger.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/logger.js +73 -0
- package/dist/opencode-plugin/v2/logger.js.map +1 -0
- package/dist/opencode-plugin/v2/options.d.ts +63 -0
- package/dist/opencode-plugin/v2/options.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/options.js +183 -0
- package/dist/opencode-plugin/v2/options.js.map +1 -0
- package/dist/opencode-plugin/v2/register-hooks.d.ts +43 -0
- package/dist/opencode-plugin/v2/register-hooks.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/register-hooks.js +160 -0
- package/dist/opencode-plugin/v2/register-hooks.js.map +1 -0
- package/dist/opencode-plugin/v2/rehydrate-tail.d.ts +101 -0
- package/dist/opencode-plugin/v2/rehydrate-tail.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/rehydrate-tail.js +147 -0
- package/dist/opencode-plugin/v2/rehydrate-tail.js.map +1 -0
- package/dist/opencode-plugin/v2/response-rehydrate.d.ts +78 -0
- package/dist/opencode-plugin/v2/response-rehydrate.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/response-rehydrate.js +210 -0
- package/dist/opencode-plugin/v2/response-rehydrate.js.map +1 -0
- package/dist/opencode-plugin/v2/scrub-messages.d.ts +39 -0
- package/dist/opencode-plugin/v2/scrub-messages.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/scrub-messages.js +260 -0
- package/dist/opencode-plugin/v2/scrub-messages.js.map +1 -0
- package/dist/opencode-plugin/v2/sessions.d.ts +17 -0
- package/dist/opencode-plugin/v2/sessions.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/sessions.js +23 -0
- package/dist/opencode-plugin/v2/sessions.js.map +1 -0
- package/dist/opencode-plugin/v2/sse.d.ts +101 -0
- package/dist/opencode-plugin/v2/sse.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/sse.js +235 -0
- package/dist/opencode-plugin/v2/sse.js.map +1 -0
- package/dist/opencode-plugin/v2/types.d.ts +188 -0
- package/dist/opencode-plugin/v2/types.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/types.js +10 -0
- package/dist/opencode-plugin/v2/types.js.map +1 -0
- package/dist/opencode-plugin/vcs-command.d.ts +3 -0
- package/dist/opencode-plugin/vcs-command.d.ts.map +1 -0
- package/dist/opencode-plugin/vcs-command.js +34 -0
- package/dist/opencode-plugin/vcs-command.js.map +1 -0
- package/dist/pipeline/index.d.ts +12 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +12 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/prenormalize.d.ts +48 -0
- package/dist/pipeline/prenormalize.d.ts.map +1 -0
- package/dist/pipeline/prenormalize.js +94 -0
- package/dist/pipeline/prenormalize.js.map +1 -0
- package/dist/pipeline/resolver.d.ts +56 -0
- package/dist/pipeline/resolver.d.ts.map +1 -0
- package/dist/pipeline/resolver.js +239 -0
- package/dist/pipeline/resolver.js.map +1 -0
- package/dist/pipeline/semantic-data-loader.d.ts +171 -0
- package/dist/pipeline/semantic-data-loader.d.ts.map +1 -0
- package/dist/pipeline/semantic-data-loader.js +677 -0
- package/dist/pipeline/semantic-data-loader.js.map +1 -0
- package/dist/pipeline/semantic-enricher.d.ts +112 -0
- package/dist/pipeline/semantic-enricher.d.ts.map +1 -0
- package/dist/pipeline/semantic-enricher.js +322 -0
- package/dist/pipeline/semantic-enricher.js.map +1 -0
- package/dist/pipeline/tagger.d.ts +121 -0
- package/dist/pipeline/tagger.d.ts.map +1 -0
- package/dist/pipeline/tagger.js +545 -0
- package/dist/pipeline/tagger.js.map +1 -0
- package/dist/pipeline/title-extractor.d.ts +79 -0
- package/dist/pipeline/title-extractor.d.ts.map +1 -0
- package/dist/pipeline/title-extractor.js +801 -0
- package/dist/pipeline/title-extractor.js.map +1 -0
- package/dist/pipeline/validator.d.ts +65 -0
- package/dist/pipeline/validator.d.ts.map +1 -0
- package/dist/pipeline/validator.js +292 -0
- package/dist/pipeline/validator.js.map +1 -0
- package/dist/proxy/index.d.ts +13 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +12 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/providers/anthropic.d.ts +28 -0
- package/dist/proxy/providers/anthropic.d.ts.map +1 -0
- package/dist/proxy/providers/anthropic.js +265 -0
- package/dist/proxy/providers/anthropic.js.map +1 -0
- package/dist/proxy/providers/index.d.ts +19 -0
- package/dist/proxy/providers/index.d.ts.map +1 -0
- package/dist/proxy/providers/index.js +41 -0
- package/dist/proxy/providers/index.js.map +1 -0
- package/dist/proxy/providers/openai.d.ts +27 -0
- package/dist/proxy/providers/openai.d.ts.map +1 -0
- package/dist/proxy/providers/openai.js +203 -0
- package/dist/proxy/providers/openai.js.map +1 -0
- package/dist/proxy/providers/streaming-tool-loop.d.ts +12 -0
- package/dist/proxy/providers/streaming-tool-loop.d.ts.map +1 -0
- package/dist/proxy/providers/streaming-tool-loop.js +223 -0
- package/dist/proxy/providers/streaming-tool-loop.js.map +1 -0
- package/dist/proxy/providers/types.d.ts +109 -0
- package/dist/proxy/providers/types.d.ts.map +1 -0
- package/dist/proxy/providers/types.js +2 -0
- package/dist/proxy/providers/types.js.map +1 -0
- package/dist/proxy/proxy-server.d.ts +61 -0
- package/dist/proxy/proxy-server.d.ts.map +1 -0
- package/dist/proxy/proxy-server.js +146 -0
- package/dist/proxy/proxy-server.js.map +1 -0
- package/dist/proxy/rehydra-fetch.d.ts +35 -0
- package/dist/proxy/rehydra-fetch.d.ts.map +1 -0
- package/dist/proxy/rehydra-fetch.js +631 -0
- package/dist/proxy/rehydra-fetch.js.map +1 -0
- package/dist/proxy/rehydra-proxy.d.ts +40 -0
- package/dist/proxy/rehydra-proxy.d.ts.map +1 -0
- package/dist/proxy/rehydra-proxy.js +150 -0
- package/dist/proxy/rehydra-proxy.js.map +1 -0
- package/dist/proxy/sse-parser.d.ts +59 -0
- package/dist/proxy/sse-parser.d.ts.map +1 -0
- package/dist/proxy/sse-parser.js +112 -0
- package/dist/proxy/sse-parser.js.map +1 -0
- package/dist/proxy/system-instruction.d.ts +19 -0
- package/dist/proxy/system-instruction.d.ts.map +1 -0
- package/dist/proxy/system-instruction.js +33 -0
- package/dist/proxy/system-instruction.js.map +1 -0
- package/dist/proxy/tool-loop-stream.d.ts +7 -0
- package/dist/proxy/tool-loop-stream.d.ts.map +1 -0
- package/dist/proxy/tool-loop-stream.js +65 -0
- package/dist/proxy/tool-loop-stream.js.map +1 -0
- package/dist/proxy/types.d.ts +138 -0
- package/dist/proxy/types.d.ts.map +1 -0
- package/dist/proxy/types.js +5 -0
- package/dist/proxy/types.js.map +1 -0
- package/dist/proxy/wrap-client.d.ts +47 -0
- package/dist/proxy/wrap-client.d.ts.map +1 -0
- package/dist/proxy/wrap-client.js +70 -0
- package/dist/proxy/wrap-client.js.map +1 -0
- package/dist/recognizers/address.d.ts +2 -0
- package/dist/recognizers/address.d.ts.map +1 -0
- package/dist/recognizers/address.js +23 -0
- package/dist/recognizers/address.js.map +1 -0
- package/dist/recognizers/base.d.ts +78 -0
- package/dist/recognizers/base.d.ts.map +1 -0
- package/dist/recognizers/base.js +100 -0
- package/dist/recognizers/base.js.map +1 -0
- package/dist/recognizers/bic-swift.d.ts +10 -0
- package/dist/recognizers/bic-swift.d.ts.map +1 -0
- package/dist/recognizers/bic-swift.js +107 -0
- package/dist/recognizers/bic-swift.js.map +1 -0
- package/dist/recognizers/credit-card.d.ts +32 -0
- package/dist/recognizers/credit-card.d.ts.map +1 -0
- package/dist/recognizers/credit-card.js +160 -0
- package/dist/recognizers/credit-card.js.map +1 -0
- package/dist/recognizers/custom-id.d.ts +28 -0
- package/dist/recognizers/custom-id.d.ts.map +1 -0
- package/dist/recognizers/custom-id.js +116 -0
- package/dist/recognizers/custom-id.js.map +1 -0
- package/dist/recognizers/date.d.ts +10 -0
- package/dist/recognizers/date.d.ts.map +1 -0
- package/dist/recognizers/date.js +228 -0
- package/dist/recognizers/date.js.map +1 -0
- package/dist/recognizers/email.d.ts +10 -0
- package/dist/recognizers/email.d.ts.map +1 -0
- package/dist/recognizers/email.js +75 -0
- package/dist/recognizers/email.js.map +1 -0
- package/dist/recognizers/iban.d.ts +14 -0
- package/dist/recognizers/iban.d.ts.map +1 -0
- package/dist/recognizers/iban.js +67 -0
- package/dist/recognizers/iban.js.map +1 -0
- package/dist/recognizers/index.d.ts +25 -0
- package/dist/recognizers/index.d.ts.map +1 -0
- package/dist/recognizers/index.js +53 -0
- package/dist/recognizers/index.js.map +1 -0
- package/dist/recognizers/ip-address.d.ts +14 -0
- package/dist/recognizers/ip-address.d.ts.map +1 -0
- package/dist/recognizers/ip-address.js +183 -0
- package/dist/recognizers/ip-address.js.map +1 -0
- package/dist/recognizers/phone.d.ts +10 -0
- package/dist/recognizers/phone.d.ts.map +1 -0
- package/dist/recognizers/phone.js +145 -0
- package/dist/recognizers/phone.js.map +1 -0
- package/dist/recognizers/postal-code.d.ts +16 -0
- package/dist/recognizers/postal-code.d.ts.map +1 -0
- package/dist/recognizers/postal-code.js +42 -0
- package/dist/recognizers/postal-code.js.map +1 -0
- package/dist/recognizers/registry.d.ts +59 -0
- package/dist/recognizers/registry.d.ts.map +1 -0
- package/dist/recognizers/registry.js +113 -0
- package/dist/recognizers/registry.js.map +1 -0
- package/dist/recognizers/secrets/api-key.d.ts +6 -0
- package/dist/recognizers/secrets/api-key.d.ts.map +1 -0
- package/dist/recognizers/secrets/api-key.js +40 -0
- package/dist/recognizers/secrets/api-key.js.map +1 -0
- package/dist/recognizers/secrets/aws-credentials.d.ts +7 -0
- package/dist/recognizers/secrets/aws-credentials.d.ts.map +1 -0
- package/dist/recognizers/secrets/aws-credentials.js +68 -0
- package/dist/recognizers/secrets/aws-credentials.js.map +1 -0
- package/dist/recognizers/secrets/config-secret.d.ts +8 -0
- package/dist/recognizers/secrets/config-secret.d.ts.map +1 -0
- package/dist/recognizers/secrets/config-secret.js +59 -0
- package/dist/recognizers/secrets/config-secret.js.map +1 -0
- package/dist/recognizers/secrets/connection-string.d.ts +6 -0
- package/dist/recognizers/secrets/connection-string.d.ts.map +1 -0
- package/dist/recognizers/secrets/connection-string.js +40 -0
- package/dist/recognizers/secrets/connection-string.js.map +1 -0
- package/dist/recognizers/secrets/env-var.d.ts +8 -0
- package/dist/recognizers/secrets/env-var.d.ts.map +1 -0
- package/dist/recognizers/secrets/env-var.js +54 -0
- package/dist/recognizers/secrets/env-var.js.map +1 -0
- package/dist/recognizers/secrets/index.d.ts +22 -0
- package/dist/recognizers/secrets/index.d.ts.map +1 -0
- package/dist/recognizers/secrets/index.js +41 -0
- package/dist/recognizers/secrets/index.js.map +1 -0
- package/dist/recognizers/secrets/jwt.d.ts +6 -0
- package/dist/recognizers/secrets/jwt.d.ts.map +1 -0
- package/dist/recognizers/secrets/jwt.js +47 -0
- package/dist/recognizers/secrets/jwt.js.map +1 -0
- package/dist/recognizers/secrets/key-patterns.d.ts +10 -0
- package/dist/recognizers/secrets/key-patterns.d.ts.map +1 -0
- package/dist/recognizers/secrets/key-patterns.js +15 -0
- package/dist/recognizers/secrets/key-patterns.js.map +1 -0
- package/dist/recognizers/secrets/literal-value.d.ts +10 -0
- package/dist/recognizers/secrets/literal-value.d.ts.map +1 -0
- package/dist/recognizers/secrets/literal-value.js +48 -0
- package/dist/recognizers/secrets/literal-value.js.map +1 -0
- package/dist/recognizers/secrets/private-key.d.ts +6 -0
- package/dist/recognizers/secrets/private-key.d.ts.map +1 -0
- package/dist/recognizers/secrets/private-key.js +16 -0
- package/dist/recognizers/secrets/private-key.js.map +1 -0
- package/dist/recognizers/url.d.ts +14 -0
- package/dist/recognizers/url.d.ts.map +1 -0
- package/dist/recognizers/url.js +121 -0
- package/dist/recognizers/url.js.map +1 -0
- package/dist/storage/browser.d.ts +13 -0
- package/dist/storage/browser.d.ts.map +1 -0
- package/dist/storage/browser.js +13 -0
- package/dist/storage/browser.js.map +1 -0
- package/dist/storage/in-memory.d.ts +60 -0
- package/dist/storage/in-memory.d.ts.map +1 -0
- package/dist/storage/in-memory.js +108 -0
- package/dist/storage/in-memory.js.map +1 -0
- package/dist/storage/index.d.ts +11 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +11 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/indexeddb.d.ts +69 -0
- package/dist/storage/indexeddb.d.ts.map +1 -0
- package/dist/storage/indexeddb.js +274 -0
- package/dist/storage/indexeddb.js.map +1 -0
- package/dist/storage/session-base.d.ts +34 -0
- package/dist/storage/session-base.d.ts.map +1 -0
- package/dist/storage/session-base.js +122 -0
- package/dist/storage/session-base.js.map +1 -0
- package/dist/storage/session.d.ts +19 -0
- package/dist/storage/session.d.ts.map +1 -0
- package/dist/storage/session.js +31 -0
- package/dist/storage/session.js.map +1 -0
- package/dist/storage/sqlite.d.ts +80 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +255 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/storage/types.d.ts +208 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +6 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/streaming/anonymizer-stream.d.ts +63 -0
- package/dist/streaming/anonymizer-stream.d.ts.map +1 -0
- package/dist/streaming/anonymizer-stream.js +184 -0
- package/dist/streaming/anonymizer-stream.js.map +1 -0
- package/dist/streaming/index.d.ts +9 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +8 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/sentence-buffer.d.ts +78 -0
- package/dist/streaming/sentence-buffer.d.ts.map +1 -0
- package/dist/streaming/sentence-buffer.js +239 -0
- package/dist/streaming/sentence-buffer.js.map +1 -0
- package/dist/streaming/stream-factory.d.ts +38 -0
- package/dist/streaming/stream-factory.d.ts.map +1 -0
- package/dist/streaming/stream-factory.js +69 -0
- package/dist/streaming/stream-factory.js.map +1 -0
- package/dist/streaming/types.d.ts +121 -0
- package/dist/streaming/types.d.ts.map +1 -0
- package/dist/streaming/types.js +5 -0
- package/dist/streaming/types.js.map +1 -0
- package/dist/types/index.d.ts +269 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +95 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/pii-types.d.ts +64 -0
- package/dist/types/pii-types.d.ts.map +1 -0
- package/dist/types/pii-types.js +153 -0
- package/dist/types/pii-types.js.map +1 -0
- package/dist/utils/iban-checksum.d.ts +23 -0
- package/dist/utils/iban-checksum.d.ts.map +1 -0
- package/dist/utils/iban-checksum.js +106 -0
- package/dist/utils/iban-checksum.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +11 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json-walk.d.ts +21 -0
- package/dist/utils/json-walk.d.ts.map +1 -0
- package/dist/utils/json-walk.js +44 -0
- package/dist/utils/json-walk.js.map +1 -0
- package/dist/utils/luhn.d.ts +17 -0
- package/dist/utils/luhn.d.ts.map +1 -0
- package/dist/utils/luhn.js +55 -0
- package/dist/utils/luhn.js.map +1 -0
- package/dist/utils/offsets.d.ts +86 -0
- package/dist/utils/offsets.d.ts.map +1 -0
- package/dist/utils/offsets.js +124 -0
- package/dist/utils/offsets.js.map +1 -0
- package/dist/utils/path.d.ts +34 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +96 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/regex.d.ts +11 -0
- package/dist/utils/regex.d.ts.map +1 -0
- package/dist/utils/regex.js +14 -0
- package/dist/utils/regex.js.map +1 -0
- package/dist/utils/storage-browser.d.ts +51 -0
- package/dist/utils/storage-browser.d.ts.map +1 -0
- package/dist/utils/storage-browser.js +381 -0
- package/dist/utils/storage-browser.js.map +1 -0
- package/dist/utils/storage-node.d.ts +51 -0
- package/dist/utils/storage-node.d.ts.map +1 -0
- package/dist/utils/storage-node.js +153 -0
- package/dist/utils/storage-node.js.map +1 -0
- package/dist/utils/storage.browser.d.ts +75 -0
- package/dist/utils/storage.browser.d.ts.map +1 -0
- package/dist/utils/storage.browser.js +69 -0
- package/dist/utils/storage.browser.js.map +1 -0
- package/dist/utils/storage.d.ts +73 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +69 -0
- package/dist/utils/storage.js.map +1 -0
- package/index.js +14 -13
- package/package.json +19 -5
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credit Card Number Recognizer
|
|
3
|
+
* Detects major card types with Luhn checksum validation
|
|
4
|
+
*/
|
|
5
|
+
import type { Recognizer } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Credit card patterns for major card types
|
|
8
|
+
* All patterns allow optional separators (spaces, dashes)
|
|
9
|
+
*/
|
|
10
|
+
declare const CARD_PATTERNS: {
|
|
11
|
+
visa: RegExp;
|
|
12
|
+
mastercard: RegExp;
|
|
13
|
+
amex: RegExp;
|
|
14
|
+
discover: RegExp;
|
|
15
|
+
diners: RegExp;
|
|
16
|
+
jcb: RegExp;
|
|
17
|
+
generic: RegExp;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Card type names for identification
|
|
21
|
+
*/
|
|
22
|
+
type CardType = keyof typeof CARD_PATTERNS;
|
|
23
|
+
/**
|
|
24
|
+
* Credit card recognizer with Luhn validation
|
|
25
|
+
*/
|
|
26
|
+
export declare const creditCardRecognizer: Recognizer;
|
|
27
|
+
/**
|
|
28
|
+
* Identifies the card type from a card number
|
|
29
|
+
*/
|
|
30
|
+
export declare function identifyCardType(cardNumber: string): CardType | 'unknown';
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=credit-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-card.d.ts","sourceRoot":"","sources":["../../src/recognizers/credit-card.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5C;;;GAGG;AACH,QAAA,MAAM,aAAa;;;;;;;;CAuBlB,CAAC;AAEF;;GAEG;AACH,KAAK,QAAQ,GAAG,MAAM,OAAO,aAAa,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAuElC,CAAC;AA6DF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAWzE"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credit Card Number Recognizer
|
|
3
|
+
* Detects major card types with Luhn checksum validation
|
|
4
|
+
*/
|
|
5
|
+
import { PIIType, DetectionSource } from '../types/index.js';
|
|
6
|
+
import { validateLuhn } from '../utils/luhn.js';
|
|
7
|
+
/**
|
|
8
|
+
* Credit card patterns for major card types
|
|
9
|
+
* All patterns allow optional separators (spaces, dashes)
|
|
10
|
+
*/
|
|
11
|
+
const CARD_PATTERNS = {
|
|
12
|
+
// Visa: 13 or 16 digits, starts with 4
|
|
13
|
+
visa: /\b4[0-9]{3}[\s-]?[0-9]{4}[\s-]?[0-9]{4}[\s-]?[0-9]{1,4}\b/g,
|
|
14
|
+
// Mastercard: 16 digits, starts with 51-55 or 2221-2720
|
|
15
|
+
mastercard: /\b(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[\s-]?[0-9]{4}[\s-]?[0-9]{4}[\s-]?[0-9]{4}\b/g,
|
|
16
|
+
// American Express: 15 digits, starts with 34 or 37
|
|
17
|
+
amex: /\b3[47][0-9]{2}[\s-]?[0-9]{6}[\s-]?[0-9]{5}\b/g,
|
|
18
|
+
// Discover: 16 digits, starts with 6011, 644-649, 65
|
|
19
|
+
discover: /\b(?:6011|64[4-9][0-9]|65[0-9]{2})[\s-]?[0-9]{4}[\s-]?[0-9]{4}[\s-]?[0-9]{4}\b/g,
|
|
20
|
+
// Diners Club: 14 digits, starts with 36, 38, or 300-305
|
|
21
|
+
diners: /\b(?:36[0-9]{2}|38[0-9]{2}|30[0-5][0-9])[\s-]?[0-9]{4}[\s-]?[0-9]{4}[\s-]?[0-9]{2}\b/g,
|
|
22
|
+
// JCB: 16 digits, starts with 3528-3589
|
|
23
|
+
jcb: /\b35(?:2[89]|[3-8][0-9])[\s-]?[0-9]{4}[\s-]?[0-9]{4}[\s-]?[0-9]{4}\b/g,
|
|
24
|
+
// Generic 16-digit pattern (fallback)
|
|
25
|
+
generic: /\b[0-9]{4}[\s-]?[0-9]{4}[\s-]?[0-9]{4}[\s-]?[0-9]{4}\b/g,
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Credit card recognizer with Luhn validation
|
|
29
|
+
*/
|
|
30
|
+
export const creditCardRecognizer = {
|
|
31
|
+
type: PIIType.CREDIT_CARD,
|
|
32
|
+
name: 'Credit Card Number',
|
|
33
|
+
defaultConfidence: 0.98,
|
|
34
|
+
find(text) {
|
|
35
|
+
const matches = [];
|
|
36
|
+
const seen = new Set();
|
|
37
|
+
// Try each card type pattern
|
|
38
|
+
for (const [cardType, pattern] of Object.entries(CARD_PATTERNS)) {
|
|
39
|
+
const globalPattern = new RegExp(pattern.source, 'g');
|
|
40
|
+
for (const match of text.matchAll(globalPattern)) {
|
|
41
|
+
if (match.index === undefined)
|
|
42
|
+
continue;
|
|
43
|
+
const cardNumber = match[0];
|
|
44
|
+
const key = `${match.index}:${match.index + cardNumber.length}`;
|
|
45
|
+
if (seen.has(key))
|
|
46
|
+
continue;
|
|
47
|
+
// Validate with Luhn checksum
|
|
48
|
+
if (!this.validate(cardNumber))
|
|
49
|
+
continue;
|
|
50
|
+
// Skip generic matches that look like other number sequences
|
|
51
|
+
if (cardType === 'generic' && !looksLikeCreditCard(cardNumber)) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
seen.add(key);
|
|
55
|
+
matches.push({
|
|
56
|
+
type: PIIType.CREDIT_CARD,
|
|
57
|
+
start: match.index,
|
|
58
|
+
end: match.index + cardNumber.length,
|
|
59
|
+
confidence: this.defaultConfidence,
|
|
60
|
+
source: DetectionSource.REGEX,
|
|
61
|
+
text: cardNumber,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Remove overlapping matches
|
|
66
|
+
return deduplicateOverlapping(matches);
|
|
67
|
+
},
|
|
68
|
+
validate(cardNumber) {
|
|
69
|
+
// Extract digits only
|
|
70
|
+
const digits = cardNumber.replace(/\D/g, '');
|
|
71
|
+
// Check length (13-19 digits)
|
|
72
|
+
if (digits.length < 13 || digits.length > 19) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
// Validate Luhn checksum
|
|
76
|
+
if (!validateLuhn(digits)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
// Should not be all same digit
|
|
80
|
+
if (/^(\d)\1+$/.test(digits)) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
},
|
|
85
|
+
normalize(cardNumber) {
|
|
86
|
+
// Remove separators, return digits only
|
|
87
|
+
return cardNumber.replace(/\D/g, '');
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Additional heuristics for generic 16-digit sequences
|
|
92
|
+
*/
|
|
93
|
+
function looksLikeCreditCard(number) {
|
|
94
|
+
const digits = number.replace(/\D/g, '');
|
|
95
|
+
// Check if it starts with a known card prefix
|
|
96
|
+
const knownPrefixes = [
|
|
97
|
+
'4', // Visa
|
|
98
|
+
'5', // Mastercard
|
|
99
|
+
'34',
|
|
100
|
+
'37', // Amex
|
|
101
|
+
'6011',
|
|
102
|
+
'65', // Discover
|
|
103
|
+
'36',
|
|
104
|
+
'38', // Diners
|
|
105
|
+
'35', // JCB
|
|
106
|
+
];
|
|
107
|
+
for (const prefix of knownPrefixes) {
|
|
108
|
+
if (digits.startsWith(prefix)) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// If it has separators in a card-like format, probably a card
|
|
113
|
+
if (/\d{4}[\s-]\d{4}[\s-]\d{4}[\s-]\d{4}/.test(number)) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Remove overlapping matches
|
|
120
|
+
*/
|
|
121
|
+
function deduplicateOverlapping(matches) {
|
|
122
|
+
if (matches.length <= 1)
|
|
123
|
+
return matches;
|
|
124
|
+
const sorted = [...matches].sort((a, b) => a.start - b.start);
|
|
125
|
+
const result = [];
|
|
126
|
+
for (const match of sorted) {
|
|
127
|
+
const last = result[result.length - 1];
|
|
128
|
+
if (last !== undefined && match.start < last.end) {
|
|
129
|
+
// Keep the one with higher confidence or longer match
|
|
130
|
+
if (match.confidence > last.confidence || match.end - match.start > last.end - last.start) {
|
|
131
|
+
result.pop();
|
|
132
|
+
result.push(match);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
result.push(match);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Identifies the card type from a card number
|
|
143
|
+
*/
|
|
144
|
+
export function identifyCardType(cardNumber) {
|
|
145
|
+
const digits = cardNumber.replace(/\D/g, '');
|
|
146
|
+
if (/^4/.test(digits))
|
|
147
|
+
return 'visa';
|
|
148
|
+
if (/^5[1-5]/.test(digits) || /^2(?:2[2-9][1-9]|2[3-9]|[3-6]|7[01]|720)/.test(digits))
|
|
149
|
+
return 'mastercard';
|
|
150
|
+
if (/^3[47]/.test(digits))
|
|
151
|
+
return 'amex';
|
|
152
|
+
if (/^6(?:011|4[4-9]|5)/.test(digits))
|
|
153
|
+
return 'discover';
|
|
154
|
+
if (/^3(?:6|8|0[0-5])/.test(digits))
|
|
155
|
+
return 'diners';
|
|
156
|
+
if (/^35(?:2[89]|[3-8])/.test(digits))
|
|
157
|
+
return 'jcb';
|
|
158
|
+
return 'unknown';
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=credit-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-card.js","sourceRoot":"","sources":["../../src/recognizers/credit-card.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom ID Recognizer
|
|
3
|
+
* Configurable recognizer for domain-specific identifiers
|
|
4
|
+
* (Case IDs, Customer IDs, File References, etc.)
|
|
5
|
+
*/
|
|
6
|
+
import { CustomIdPattern } from '../types/index.js';
|
|
7
|
+
import type { Recognizer } from './base.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates a custom ID recognizer from patterns defined in policy
|
|
10
|
+
*/
|
|
11
|
+
export declare function createCustomIdRecognizer(patterns: CustomIdPattern[]): Recognizer;
|
|
12
|
+
/**
|
|
13
|
+
* Common patterns for banking/government IDs that can be used as templates
|
|
14
|
+
*/
|
|
15
|
+
export declare const COMMON_ID_PATTERNS: Record<string, RegExp>;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a standard case ID recognizer
|
|
18
|
+
*/
|
|
19
|
+
export declare function createCaseIdRecognizer(): Recognizer;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a standard customer ID recognizer
|
|
22
|
+
*/
|
|
23
|
+
export declare function createCustomerIdRecognizer(): Recognizer;
|
|
24
|
+
/**
|
|
25
|
+
* Validates that a string looks like a structured ID (not just random text)
|
|
26
|
+
*/
|
|
27
|
+
export declare function isStructuredId(text: string): boolean;
|
|
28
|
+
//# sourceMappingURL=custom-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-id.d.ts","sourceRoot":"","sources":["../../src/recognizers/custom-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAuC,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,UAAU,CA8ChF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsBrD,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,UAAU,CAanD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,UAAU,CAQvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAcpD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom ID Recognizer
|
|
3
|
+
* Configurable recognizer for domain-specific identifiers
|
|
4
|
+
* (Case IDs, Customer IDs, File References, etc.)
|
|
5
|
+
*/
|
|
6
|
+
import { PIIType, DetectionSource } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Creates a custom ID recognizer from patterns defined in policy
|
|
9
|
+
*/
|
|
10
|
+
export function createCustomIdRecognizer(patterns) {
|
|
11
|
+
return {
|
|
12
|
+
type: PIIType.CASE_ID, // Default type, will be overridden per pattern
|
|
13
|
+
name: 'Custom ID',
|
|
14
|
+
defaultConfidence: 0.9,
|
|
15
|
+
find(text) {
|
|
16
|
+
const matches = [];
|
|
17
|
+
const seen = new Set();
|
|
18
|
+
for (const patternConfig of patterns) {
|
|
19
|
+
const { pattern, type, validate } = patternConfig;
|
|
20
|
+
// Ensure pattern has global flag
|
|
21
|
+
const globalPattern = pattern.global
|
|
22
|
+
? pattern
|
|
23
|
+
: new RegExp(pattern.source, pattern.flags + 'g');
|
|
24
|
+
for (const match of text.matchAll(globalPattern)) {
|
|
25
|
+
if (match.index === undefined)
|
|
26
|
+
continue;
|
|
27
|
+
const idText = match[0];
|
|
28
|
+
const key = `${match.index}:${match.index + idText.length}`;
|
|
29
|
+
if (seen.has(key))
|
|
30
|
+
continue;
|
|
31
|
+
// Run custom validation if provided
|
|
32
|
+
if (validate !== undefined && !validate(idText)) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
seen.add(key);
|
|
36
|
+
matches.push({
|
|
37
|
+
type,
|
|
38
|
+
start: match.index,
|
|
39
|
+
end: match.index + idText.length,
|
|
40
|
+
confidence: 0.9,
|
|
41
|
+
source: DetectionSource.REGEX,
|
|
42
|
+
text: idText,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return matches;
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Common patterns for banking/government IDs that can be used as templates
|
|
52
|
+
*/
|
|
53
|
+
export const COMMON_ID_PATTERNS = {
|
|
54
|
+
// German case/file reference patterns
|
|
55
|
+
germanCaseId: /\b[A-Z]{2,3}[\s-]?[0-9]{4,10}[\s-]?[A-Z0-9]{0,4}\b/g,
|
|
56
|
+
// Generic case number (e.g., CASE-12345)
|
|
57
|
+
genericCaseNumber: /\b(?:CASE|FILE|REF|TICKET)[\s-]?[A-Z0-9]{4,12}\b/gi,
|
|
58
|
+
// Customer number patterns
|
|
59
|
+
customerNumber: /\b(?:CUST|CUSTOMER|KD|KUNDEN)[\s-]?(?:NR|NO|NUM|NUMBER)?[\s-]?[0-9]{4,12}\b/gi,
|
|
60
|
+
// Account reference (non-IBAN)
|
|
61
|
+
accountReference: /\b(?:ACC|ACCT|KONTO)[\s-]?[0-9]{6,12}\b/gi,
|
|
62
|
+
// Invoice/Order numbers
|
|
63
|
+
invoiceNumber: /\b(?:INV|INVOICE|RG|RECHNUNG)[\s-]?[A-Z0-9]{4,12}\b/gi,
|
|
64
|
+
orderNumber: /\b(?:ORD|ORDER|BESTELLUNG)[\s-]?[A-Z0-9]{4,12}\b/gi,
|
|
65
|
+
// Policy/Contract numbers
|
|
66
|
+
policyNumber: /\b(?:POL|POLICY|VERTRAG)[\s-]?[A-Z0-9]{6,15}\b/gi,
|
|
67
|
+
// Social Security / Tax ID patterns (generic)
|
|
68
|
+
taxIdGeneric: /\b[0-9]{2,3}[\s/-]?[0-9]{2,4}[\s/-]?[0-9]{2,4}[\s/-]?[0-9]{1,4}\b/g,
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Creates a standard case ID recognizer
|
|
72
|
+
*/
|
|
73
|
+
export function createCaseIdRecognizer() {
|
|
74
|
+
return createCustomIdRecognizer([
|
|
75
|
+
{
|
|
76
|
+
name: 'German Case ID',
|
|
77
|
+
pattern: COMMON_ID_PATTERNS['germanCaseId'],
|
|
78
|
+
type: PIIType.CASE_ID,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'Generic Case Number',
|
|
82
|
+
pattern: COMMON_ID_PATTERNS['genericCaseNumber'],
|
|
83
|
+
type: PIIType.CASE_ID,
|
|
84
|
+
},
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Creates a standard customer ID recognizer
|
|
89
|
+
*/
|
|
90
|
+
export function createCustomerIdRecognizer() {
|
|
91
|
+
return createCustomIdRecognizer([
|
|
92
|
+
{
|
|
93
|
+
name: 'Customer Number',
|
|
94
|
+
pattern: COMMON_ID_PATTERNS['customerNumber'],
|
|
95
|
+
type: PIIType.CUSTOMER_ID,
|
|
96
|
+
},
|
|
97
|
+
]);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Validates that a string looks like a structured ID (not just random text)
|
|
101
|
+
*/
|
|
102
|
+
export function isStructuredId(text) {
|
|
103
|
+
// Should have at least some digits
|
|
104
|
+
const digitCount = (text.match(/\d/g) ?? []).length;
|
|
105
|
+
if (digitCount < 3)
|
|
106
|
+
return false;
|
|
107
|
+
// Should not be all letters or all digits
|
|
108
|
+
const letterCount = (text.match(/[a-zA-Z]/g) ?? []).length;
|
|
109
|
+
const totalAlphanumeric = digitCount + letterCount;
|
|
110
|
+
// Most of the characters should be alphanumeric
|
|
111
|
+
const cleanText = text.replace(/[\s\-_]/g, '');
|
|
112
|
+
if (totalAlphanumeric / cleanText.length < 0.9)
|
|
113
|
+
return false;
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=custom-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-id.js","sourceRoot":"","sources":["../../src/recognizers/custom-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Date Recognizer
|
|
3
|
+
* Detects common date formats: ISO, US, EU, and written (English) dates
|
|
4
|
+
*/
|
|
5
|
+
import type { Recognizer } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Date recognizer with multi-format support
|
|
8
|
+
*/
|
|
9
|
+
export declare const dateRecognizer: Recognizer;
|
|
10
|
+
//# sourceMappingURL=date.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/recognizers/date.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAyH5C;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,UAwG5B,CAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Date Recognizer
|
|
3
|
+
* Detects common date formats: ISO, US, EU, and written (English) dates
|
|
4
|
+
*/
|
|
5
|
+
import { PIIType, DetectionSource } from '../types/index.js';
|
|
6
|
+
const MONTHS_LONG = [
|
|
7
|
+
'january',
|
|
8
|
+
'february',
|
|
9
|
+
'march',
|
|
10
|
+
'april',
|
|
11
|
+
'may',
|
|
12
|
+
'june',
|
|
13
|
+
'july',
|
|
14
|
+
'august',
|
|
15
|
+
'september',
|
|
16
|
+
'october',
|
|
17
|
+
'november',
|
|
18
|
+
'december',
|
|
19
|
+
];
|
|
20
|
+
const MONTHS_SHORT = [
|
|
21
|
+
'jan',
|
|
22
|
+
'feb',
|
|
23
|
+
'mar',
|
|
24
|
+
'apr',
|
|
25
|
+
'may',
|
|
26
|
+
'jun',
|
|
27
|
+
'jul',
|
|
28
|
+
'aug',
|
|
29
|
+
'sep',
|
|
30
|
+
'oct',
|
|
31
|
+
'nov',
|
|
32
|
+
'dec',
|
|
33
|
+
];
|
|
34
|
+
const MONTH_NAME_PATTERN = `(?:${MONTHS_LONG.join('|')}|${MONTHS_SHORT.join('|')})`;
|
|
35
|
+
/**
|
|
36
|
+
* Date patterns organized by format family
|
|
37
|
+
*
|
|
38
|
+
* Numeric patterns use negative lookbehind/lookahead for digits and dots
|
|
39
|
+
* to avoid matching inside IP addresses, version numbers, or longer numeric strings.
|
|
40
|
+
*/
|
|
41
|
+
const DATE_PATTERNS = {
|
|
42
|
+
// ISO: 2024-03-15, 2024/03/15
|
|
43
|
+
iso: /(?<![0-9.])\b(\d{4})[/-](0[1-9]|1[0-2])[/-](0[1-9]|[12]\d|3[01])\b(?!\d)/gi,
|
|
44
|
+
// EU dot: 15.03.2024
|
|
45
|
+
euDot: /(?<![0-9.])\b(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.(\d{4})\b(?![0-9.])/g,
|
|
46
|
+
// US slash/dash: 03/15/2024, 03-15-2024
|
|
47
|
+
usLong: /(?<![0-9.])\b(0?[1-9]|1[0-2])[/-](0?[1-9]|[12]\d|3[01])[/-](\d{4})\b(?!\d)/g,
|
|
48
|
+
// EU slash/dash (day first): 15/03/2024, 15-03-2024
|
|
49
|
+
// Only matches when day > 12 to disambiguate from US format
|
|
50
|
+
euSlash: /(?<![0-9.])\b(1[3-9]|2\d|3[01])[/-](0?[1-9]|1[0-2])[/-](\d{4})\b(?!\d)/g,
|
|
51
|
+
// Written long: March 15, 2024 / March 15 2024
|
|
52
|
+
writtenMDY: new RegExp(`\\b${MONTH_NAME_PATTERN}\\.?\\s+(0?[1-9]|[12]\\d|3[01])(?:st|nd|rd|th)?,?\\s+(\\d{4})\\b`, 'gi'),
|
|
53
|
+
// Written day-first: 15 March 2024 / 15th March, 2024
|
|
54
|
+
writtenDMY: new RegExp(`\\b(0?[1-9]|[12]\\d|3[01])(?:st|nd|rd|th)?\\s+${MONTH_NAME_PATTERN}\\.?,?\\s+(\\d{4})\\b`, 'gi'),
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Maps month name to number (1-12)
|
|
58
|
+
*/
|
|
59
|
+
function monthNameToNumber(name) {
|
|
60
|
+
const lower = name.toLowerCase().replace(/\.$/, '');
|
|
61
|
+
const longIdx = MONTHS_LONG.indexOf(lower);
|
|
62
|
+
if (longIdx !== -1)
|
|
63
|
+
return longIdx + 1;
|
|
64
|
+
const shortIdx = MONTHS_SHORT.indexOf(lower);
|
|
65
|
+
if (shortIdx !== -1)
|
|
66
|
+
return shortIdx + 1;
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Validates that month/day/year form a plausible calendar date
|
|
71
|
+
*/
|
|
72
|
+
function isValidDate(year, month, day) {
|
|
73
|
+
if (year < 1900 || year > 2099)
|
|
74
|
+
return false;
|
|
75
|
+
if (month < 1 || month > 12)
|
|
76
|
+
return false;
|
|
77
|
+
if (day < 1 || day > 31)
|
|
78
|
+
return false;
|
|
79
|
+
// Month length check (accounts for leap years)
|
|
80
|
+
const maxDay = new Date(year, month, 0).getDate();
|
|
81
|
+
return day <= maxDay;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Parses and validates a numeric date match.
|
|
85
|
+
* Returns true if the captured groups form a valid date.
|
|
86
|
+
*
|
|
87
|
+
* @param groups - three captured strings in the order they appear in the regex
|
|
88
|
+
* @param order - describes which group is year/month/day
|
|
89
|
+
*/
|
|
90
|
+
function validateNumericGroups(groups, order) {
|
|
91
|
+
const nums = groups.map(Number);
|
|
92
|
+
let year, month, day;
|
|
93
|
+
switch (order) {
|
|
94
|
+
case 'YMD':
|
|
95
|
+
[year, month, day] = nums;
|
|
96
|
+
break;
|
|
97
|
+
case 'DMY':
|
|
98
|
+
[day, month, year] = nums;
|
|
99
|
+
break;
|
|
100
|
+
case 'MDY':
|
|
101
|
+
[month, day, year] = nums;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
return isValidDate(year, month, day);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Date recognizer with multi-format support
|
|
108
|
+
*/
|
|
109
|
+
export const dateRecognizer = {
|
|
110
|
+
type: PIIType.DATE,
|
|
111
|
+
name: 'Date',
|
|
112
|
+
defaultConfidence: 0.9,
|
|
113
|
+
find(text) {
|
|
114
|
+
const matches = [];
|
|
115
|
+
const seen = new Set();
|
|
116
|
+
// --- Numeric patterns with explicit group ordering --------------------
|
|
117
|
+
const numericEntries = [
|
|
118
|
+
{ pattern: DATE_PATTERNS.iso, order: 'YMD' },
|
|
119
|
+
{ pattern: DATE_PATTERNS.euDot, order: 'DMY' },
|
|
120
|
+
{ pattern: DATE_PATTERNS.usLong, order: 'MDY' },
|
|
121
|
+
{ pattern: DATE_PATTERNS.euSlash, order: 'DMY' },
|
|
122
|
+
];
|
|
123
|
+
for (const { pattern, order } of numericEntries) {
|
|
124
|
+
const re = new RegExp(pattern.source, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g');
|
|
125
|
+
for (const m of text.matchAll(re)) {
|
|
126
|
+
if (m.index === undefined)
|
|
127
|
+
continue;
|
|
128
|
+
const matchText = m[0];
|
|
129
|
+
const key = `${m.index}:${m.index + matchText.length}`;
|
|
130
|
+
if (seen.has(key))
|
|
131
|
+
continue;
|
|
132
|
+
const g1 = m[1];
|
|
133
|
+
const g2 = m[2];
|
|
134
|
+
const g3 = m[3];
|
|
135
|
+
if (g1 === undefined || g2 === undefined || g3 === undefined)
|
|
136
|
+
continue;
|
|
137
|
+
if (!validateNumericGroups([g1, g2, g3], order))
|
|
138
|
+
continue;
|
|
139
|
+
seen.add(key);
|
|
140
|
+
matches.push({
|
|
141
|
+
type: PIIType.DATE,
|
|
142
|
+
start: m.index,
|
|
143
|
+
end: m.index + matchText.length,
|
|
144
|
+
confidence: this.defaultConfidence,
|
|
145
|
+
source: DetectionSource.REGEX,
|
|
146
|
+
text: matchText,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// --- Written patterns -------------------------------------------------
|
|
151
|
+
const writtenPatterns = [DATE_PATTERNS.writtenMDY, DATE_PATTERNS.writtenDMY];
|
|
152
|
+
for (const pattern of writtenPatterns) {
|
|
153
|
+
const re = new RegExp(pattern.source, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g');
|
|
154
|
+
for (const m of text.matchAll(re)) {
|
|
155
|
+
if (m.index === undefined)
|
|
156
|
+
continue;
|
|
157
|
+
const matchText = m[0];
|
|
158
|
+
const key = `${m.index}:${m.index + matchText.length}`;
|
|
159
|
+
if (seen.has(key))
|
|
160
|
+
continue;
|
|
161
|
+
// Extract month name from the full match
|
|
162
|
+
const monthMatch = matchText.match(new RegExp(MONTH_NAME_PATTERN, 'i'));
|
|
163
|
+
if (!monthMatch)
|
|
164
|
+
continue;
|
|
165
|
+
const monthNum = monthNameToNumber(monthMatch[0]);
|
|
166
|
+
if (monthNum === 0)
|
|
167
|
+
continue;
|
|
168
|
+
// Extract day and year digits from captured groups
|
|
169
|
+
const digits = [...matchText.matchAll(/\d+/g)].map((d) => Number(d[0]));
|
|
170
|
+
if (digits.length < 2)
|
|
171
|
+
continue;
|
|
172
|
+
let day, year;
|
|
173
|
+
if (digits[0] <= 31 && digits[1] >= 1900) {
|
|
174
|
+
// day ... year
|
|
175
|
+
day = digits[0];
|
|
176
|
+
year = digits[1];
|
|
177
|
+
}
|
|
178
|
+
else if (digits[0] >= 1900) {
|
|
179
|
+
// year ... day (unlikely in written form, but handle)
|
|
180
|
+
year = digits[0];
|
|
181
|
+
day = digits[1];
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
day = digits[0];
|
|
185
|
+
year = digits[1];
|
|
186
|
+
}
|
|
187
|
+
if (!isValidDate(year, monthNum, day))
|
|
188
|
+
continue;
|
|
189
|
+
seen.add(key);
|
|
190
|
+
matches.push({
|
|
191
|
+
type: PIIType.DATE,
|
|
192
|
+
start: m.index,
|
|
193
|
+
end: m.index + matchText.length,
|
|
194
|
+
confidence: this.defaultConfidence,
|
|
195
|
+
source: DetectionSource.REGEX,
|
|
196
|
+
text: matchText,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return deduplicateOverlapping(matches);
|
|
201
|
+
},
|
|
202
|
+
normalize(date) {
|
|
203
|
+
return date.trim();
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Remove overlapping matches, keeping longer ones
|
|
208
|
+
*/
|
|
209
|
+
function deduplicateOverlapping(matches) {
|
|
210
|
+
if (matches.length <= 1)
|
|
211
|
+
return matches;
|
|
212
|
+
const sorted = [...matches].sort((a, b) => a.start - b.start);
|
|
213
|
+
const result = [];
|
|
214
|
+
for (const match of sorted) {
|
|
215
|
+
const last = result[result.length - 1];
|
|
216
|
+
if (last !== undefined && match.start < last.end) {
|
|
217
|
+
if (match.end - match.start > last.end - last.start) {
|
|
218
|
+
result.pop();
|
|
219
|
+
result.push(match);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
result.push(match);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/recognizers/date.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/recognizers/email.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAW5C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,UA6D7B,CAAC"}
|