@aiquants/contact-map 0.11.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +138 -77
- package/dist/client.d.mts +7 -4
- package/dist/client.d.ts +7 -4
- package/dist/client.js +2 -2
- package/dist/client.mjs +2 -2
- package/dist/index.d.mts +10 -6
- package/dist/index.d.ts +10 -6
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/server.d.mts +3 -11
- package/dist/server.d.ts +3 -11
- package/dist/server.js +2 -2
- package/dist/server.mjs +2 -2
- package/dist/styles/contact-map.standalone.css +1 -1
- package/dist/{tree-types-CDq16q63.d.mts → tree-types-B9J5unS2.d.mts} +1 -1
- package/dist/{tree-types-CDq16q63.d.ts → tree-types-B9J5unS2.d.ts} +1 -1
- package/package.json +6 -5
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { D as DEFAULT_LIST_LAYOUT_SPEC,
|
|
1
|
+
import { a as ContactRecordForTree, b as ContactMapTreeNaming, C as ContactMapDirectoryEntry } from "./tree-types-B9J5unS2.mjs";
|
|
2
|
+
export { D as DEFAULT_LIST_LAYOUT_SPEC, c as DEFAULT_TREE_LAYOUT_SPEC, d as ResponsiveLayoutSpec, R as ResponsiveThresholds, e as calculateResponsiveThresholds, g as getHysteresisBreakpointState } from "./tree-types-B9J5unS2.mjs";
|
|
3
3
|
import { e as SearchResultEntry, C as ContactRecord } from "./wire-CVZNwmQx.mjs";
|
|
4
4
|
export { d as ContactMapLogger, c as ContactMapOutletContext, b as ContactMapSearchOutletContext, a as ContactMapStreamPhase, f as ContactMapStreamState, F as FieldPerformanceMetric, I as IndexWorkerMetrics, J as JsonSerialized, L as LevenshteinWorkerMetrics, S as SerializedContactStreamRow, g as StreamChunkWire, h as StreamCursor, i as StreamErrorWire, j as StreamLineWire, k as StreamMetadataWire, l as defaultLogger } from "./wire-CVZNwmQx.mjs";
|
|
5
|
+
import { NormalizeOptions } from "@aiquants/select-box";
|
|
5
6
|
import { z } from "zod";
|
|
6
7
|
declare const assertContactMapTreeNaming: (naming: ContactMapTreeNaming) => void;
|
|
7
8
|
declare class IncrementalTreeBuilder<T extends ContactRecordForTree = ContactRecordForTree> {
|
|
@@ -39,9 +40,11 @@ declare const getPrimaryEmail: (contact: ContactRecord | null) => PreferredValue
|
|
|
39
40
|
declare const getPrimaryPhone: (contact: ContactRecord | null) => PreferredValueResult<PhoneFieldKey>;
|
|
40
41
|
declare const getPhoneDialHref: (value: string | null | undefined) => string | null;
|
|
41
42
|
declare const getEmailLinkHref: (value: string | null | undefined, preferGmail: boolean) => string | null;
|
|
42
|
-
declare const
|
|
43
|
-
declare const
|
|
44
|
-
declare const
|
|
43
|
+
declare const formatStoredDate: (value: Date) => string;
|
|
44
|
+
declare const formatStoredDateTime: (value: Date) => string;
|
|
45
|
+
declare const formatLocalDateTime: (value: Date) => string;
|
|
46
|
+
declare const formatRecordTimestamp: (value: string | Date | null | undefined, format: (value: Date) => string) => string;
|
|
47
|
+
declare const toDisplayValue: (value: string | number | boolean | null | undefined) => string;
|
|
45
48
|
declare const normalizeLabel: (value: string | null | undefined, fallback: string) => string;
|
|
46
49
|
type DepartmentChain = string[];
|
|
47
50
|
type ParserContext = {
|
|
@@ -60,6 +63,7 @@ declare const splitDepartment: (dept: string, allDepts: Set<string>) => string[]
|
|
|
60
63
|
declare const extractDepartmentsFromTitle: (title: string, context: ParserContext) => string[];
|
|
61
64
|
declare const StandardDepartmentParser: DepartmentParser;
|
|
62
65
|
declare const TitleBasedDepartmentParser: DepartmentParser;
|
|
66
|
+
declare const CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS: Readonly<Required<NormalizeOptions>>;
|
|
63
67
|
declare const normalizeSearchInput: (value: string) => string;
|
|
64
68
|
declare const getSearchQuerySpellings: (query: string) => string[];
|
|
65
69
|
declare const createSearchQueryPattern: (query: string) => RegExp | null;
|
|
@@ -273,4 +277,4 @@ declare const schemaContactRecords: z.ZodArray<z.ZodObject<{
|
|
|
273
277
|
updated_at?: string | Date | undefined;
|
|
274
278
|
updated_by?: string | undefined;
|
|
275
279
|
}>, "many">;
|
|
276
|
-
export { type ContactEntrySource, ContactMapDirectoryEntry, ContactMapTreeNaming, ContactRecord, ContactRecordForTree, type DepartmentChain, type DepartmentParseSource, type DepartmentParser, type DepartmentParserMode, type EmailFieldKey, type ExactMatchRanker, IncrementalTreeBuilder, type ParserContext, type PhoneFieldKey, type PreferredValueResult, SearchResultEntry, StandardDepartmentParser, TitleBasedDepartmentParser, assertContactMapTreeNaming, buildDirectoryTree, createExactMatchRanker, createSearchQueryPattern, extractContactData, extractDepartmentsFromTitle,
|
|
280
|
+
export { CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS, type ContactEntrySource, ContactMapDirectoryEntry, ContactMapTreeNaming, ContactRecord, ContactRecordForTree, type DepartmentChain, type DepartmentParseSource, type DepartmentParser, type DepartmentParserMode, type EmailFieldKey, type ExactMatchRanker, IncrementalTreeBuilder, type ParserContext, type PhoneFieldKey, type PreferredValueResult, SearchResultEntry, StandardDepartmentParser, TitleBasedDepartmentParser, assertContactMapTreeNaming, buildDirectoryTree, createExactMatchRanker, createSearchQueryPattern, extractContactData, extractDepartmentsFromTitle, formatLocalDateTime, formatRecordTimestamp, formatStoredDate, formatStoredDateTime, getEmailLinkHref, getPhoneDialHref, getPrimaryEmail, getPrimaryPhone, getSearchQuerySpellings, normalizeLabel, normalizeSearchInput, normalizeString, schemaContactRecord, schemaContactRecords, splitDepartment, toDisplayValue };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { D as DEFAULT_LIST_LAYOUT_SPEC,
|
|
1
|
+
import { a as ContactRecordForTree, b as ContactMapTreeNaming, C as ContactMapDirectoryEntry } from "./tree-types-B9J5unS2.js";
|
|
2
|
+
export { D as DEFAULT_LIST_LAYOUT_SPEC, c as DEFAULT_TREE_LAYOUT_SPEC, d as ResponsiveLayoutSpec, R as ResponsiveThresholds, e as calculateResponsiveThresholds, g as getHysteresisBreakpointState } from "./tree-types-B9J5unS2.js";
|
|
3
3
|
import { e as SearchResultEntry, C as ContactRecord } from "./wire-CVZNwmQx.js";
|
|
4
4
|
export { d as ContactMapLogger, c as ContactMapOutletContext, b as ContactMapSearchOutletContext, a as ContactMapStreamPhase, f as ContactMapStreamState, F as FieldPerformanceMetric, I as IndexWorkerMetrics, J as JsonSerialized, L as LevenshteinWorkerMetrics, S as SerializedContactStreamRow, g as StreamChunkWire, h as StreamCursor, i as StreamErrorWire, j as StreamLineWire, k as StreamMetadataWire, l as defaultLogger } from "./wire-CVZNwmQx.js";
|
|
5
|
+
import { NormalizeOptions } from "@aiquants/select-box";
|
|
5
6
|
import { z } from "zod";
|
|
6
7
|
declare const assertContactMapTreeNaming: (naming: ContactMapTreeNaming) => void;
|
|
7
8
|
declare class IncrementalTreeBuilder<T extends ContactRecordForTree = ContactRecordForTree> {
|
|
@@ -39,9 +40,11 @@ declare const getPrimaryEmail: (contact: ContactRecord | null) => PreferredValue
|
|
|
39
40
|
declare const getPrimaryPhone: (contact: ContactRecord | null) => PreferredValueResult<PhoneFieldKey>;
|
|
40
41
|
declare const getPhoneDialHref: (value: string | null | undefined) => string | null;
|
|
41
42
|
declare const getEmailLinkHref: (value: string | null | undefined, preferGmail: boolean) => string | null;
|
|
42
|
-
declare const
|
|
43
|
-
declare const
|
|
44
|
-
declare const
|
|
43
|
+
declare const formatStoredDate: (value: Date) => string;
|
|
44
|
+
declare const formatStoredDateTime: (value: Date) => string;
|
|
45
|
+
declare const formatLocalDateTime: (value: Date) => string;
|
|
46
|
+
declare const formatRecordTimestamp: (value: string | Date | null | undefined, format: (value: Date) => string) => string;
|
|
47
|
+
declare const toDisplayValue: (value: string | number | boolean | null | undefined) => string;
|
|
45
48
|
declare const normalizeLabel: (value: string | null | undefined, fallback: string) => string;
|
|
46
49
|
type DepartmentChain = string[];
|
|
47
50
|
type ParserContext = {
|
|
@@ -60,6 +63,7 @@ declare const splitDepartment: (dept: string, allDepts: Set<string>) => string[]
|
|
|
60
63
|
declare const extractDepartmentsFromTitle: (title: string, context: ParserContext) => string[];
|
|
61
64
|
declare const StandardDepartmentParser: DepartmentParser;
|
|
62
65
|
declare const TitleBasedDepartmentParser: DepartmentParser;
|
|
66
|
+
declare const CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS: Readonly<Required<NormalizeOptions>>;
|
|
63
67
|
declare const normalizeSearchInput: (value: string) => string;
|
|
64
68
|
declare const getSearchQuerySpellings: (query: string) => string[];
|
|
65
69
|
declare const createSearchQueryPattern: (query: string) => RegExp | null;
|
|
@@ -273,4 +277,4 @@ declare const schemaContactRecords: z.ZodArray<z.ZodObject<{
|
|
|
273
277
|
updated_at?: string | Date | undefined;
|
|
274
278
|
updated_by?: string | undefined;
|
|
275
279
|
}>, "many">;
|
|
276
|
-
export { type ContactEntrySource, ContactMapDirectoryEntry, ContactMapTreeNaming, ContactRecord, ContactRecordForTree, type DepartmentChain, type DepartmentParseSource, type DepartmentParser, type DepartmentParserMode, type EmailFieldKey, type ExactMatchRanker, IncrementalTreeBuilder, type ParserContext, type PhoneFieldKey, type PreferredValueResult, SearchResultEntry, StandardDepartmentParser, TitleBasedDepartmentParser, assertContactMapTreeNaming, buildDirectoryTree, createExactMatchRanker, createSearchQueryPattern, extractContactData, extractDepartmentsFromTitle,
|
|
280
|
+
export { CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS, type ContactEntrySource, ContactMapDirectoryEntry, ContactMapTreeNaming, ContactRecord, ContactRecordForTree, type DepartmentChain, type DepartmentParseSource, type DepartmentParser, type DepartmentParserMode, type EmailFieldKey, type ExactMatchRanker, IncrementalTreeBuilder, type ParserContext, type PhoneFieldKey, type PreferredValueResult, SearchResultEntry, StandardDepartmentParser, TitleBasedDepartmentParser, assertContactMapTreeNaming, buildDirectoryTree, createExactMatchRanker, createSearchQueryPattern, extractContactData, extractDepartmentsFromTitle, formatLocalDateTime, formatRecordTimestamp, formatStoredDate, formatStoredDateTime, getEmailLinkHref, getPhoneDialHref, getPrimaryEmail, getPrimaryPhone, getSearchQuerySpellings, normalizeLabel, normalizeSearchInput, normalizeString, schemaContactRecord, schemaContactRecords, splitDepartment, toDisplayValue };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var I=Object.defineProperty;var ue=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var me=Object.prototype.hasOwnProperty;var fe=(e,t)=>{for(var r in t)I(e,r,{get:t[r],enumerable:!0})},he=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of de(t))!me.call(e,a)&&a!==r&&I(e,a,{get:()=>t[a],enumerable:!(o=ue(t,a))||o.enumerable});return e};var ge=e=>he(I({},"__esModule",{value:!0}),e);var Ve={};fe(Ve,{DEFAULT_LIST_LAYOUT_SPEC:()=>ze,DEFAULT_TREE_LAYOUT_SPEC:()=>Ne,IncrementalTreeBuilder:()=>z,StandardDepartmentParser:()=>A,TitleBasedDepartmentParser:()=>$,assertContactMapTreeNaming:()=>V,buildDirectoryTree:()=>ke,calculateResponsiveThresholds:()=>Le,createExactMatchRanker:()=>Qe,createSearchQueryPattern:()=>le,defaultLogger:()=>Fe,extractContactData:()=>Re,extractDepartmentsFromTitle:()=>F,formatDate:()=>we,formatDateTime:()=>Y,getEmailLinkHref:()=>Oe,getHysteresisBreakpointState:()=>Ie,getPhoneDialHref:()=>Me,getPrimaryEmail:()=>_e,getPrimaryPhone:()=>Ee,getSearchQuerySpellings:()=>ie,normalizeLabel:()=>E,normalizeSearchInput:()=>se,normalizeString:()=>O,schemaContactRecord:()=>pe,schemaContactRecords:()=>He,splitDepartment:()=>Q,toDisplayValue:()=>We});module.exports=ge(Ve);var E=(e,t)=>e&&e.trim()||t;var ye={\u672C\u90E8:{rank:10,type:"Organization"},\u30AB\u30F3\u30D1\u30CB\u30FC:{rank:10,type:"Organization"},\u672C\u793E:{rank:10,type:"Location"},\u30D6\u30ED\u30C3\u30AF:{rank:11,type:"Location"},\u652F\u5E97:{rank:12,type:"Location"},\u7814\u7A76\u6240:{rank:15,type:"Location"},\u5DE5\u5834:{rank:15,type:"Location"},\u4E8B\u696D\u90E8:{rank:18,type:"Organization"},\u90E8\u9580:{rank:18,type:"Organization"},\u7D71\u62EC\u90E8:{rank:19,type:"Organization"},\u90E8:{rank:20,type:"Organization"},\u958B\u767A:{rank:20,type:"Organization"},\u30B0\u30EB\u30FC\u30D7:{rank:22,type:"Organization"},\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8:{rank:25,type:"Organization"},\u63A8\u9032:{rank:20,type:"Organization"},\u4E8B\u696D\u6240:{rank:25,type:"Location"},\u55B6\u696D\u6240:{rank:28,type:"Location"},\u5BA4:{rank:30,type:"Organization"},\u8AB2:{rank:30,type:"Organization"},\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30D3\u30B8\u30CD\u30B9\u30D7\u30ED\u30C7\u30E5\u30FC\u30B9\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30C1\u30FC\u30E0:{rank:40,type:"Organization"},\u4FC2:{rank:50,type:"Organization"},Department:{rank:20,type:"Organization"},Dept:{rank:20,type:"Organization"},"Dept.":{rank:20,type:"Organization"},Division:{rank:20,type:"Organization"},Div:{rank:20,type:"Organization"},"Div.":{rank:20,type:"Organization"},Section:{rank:30,type:"Organization"},Sect:{rank:30,type:"Organization"},"Sect.":{rank:30,type:"Organization"},Unit:{rank:30,type:"Organization"},Group:{rank:22,type:"Organization"},Team:{rank:40,type:"Organization"},Branch:{rank:12,type:"Location"},Office:{rank:28,type:"Location"},Center:{rank:30,type:"Location"},Centre:{rank:30,type:"Location"},HQ:{rank:10,type:"Organization"},Headquarters:{rank:10,type:"Organization"}},R=e=>{for(let[t,r]of Object.entries(ye))if(e.endsWith(t))return r;return{rank:99,type:"Other"}},v=e=>R(e).rank,be=["\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","Group","Team","\u5BA4","\u8AB2","Unit","Area","\u90E8","Department","Dept","Division","Div","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032"],_=e=>be.find(t=>e.endsWith(t)),De=new Set(["&","Quality","Innovation","R&D","Solutions","Development","Laboratory","and","Food","Beverage"]),Te=(e,t)=>t>1&&(e.endsWith("\u652F\u5E97")||e.endsWith("\u672C\u90E8")||e.endsWith("\u4E8B\u696D\u6240")||e.endsWith("\u5DE5\u5834")),xe=(e,t)=>{if(!t)return!0;let r=R(e),o=R(t);if(r.rank<o.rank||e.endsWith("\u672C\u90E8")&&t.endsWith("\u672C\u90E8"))return!1;let a=_(e),m=_(t);return!(a&&m&&a!==m)},w=(e,t)=>{if(!e)return[];if(e==="\u517C")return["\u517C"];if(e==="\u517C\u52D9")return["\u517C"];if(e.startsWith("\u517C ")||e.startsWith("\u517C\u3000")){let o=e.slice(1).trim();return["\u517C",...w(o,t)]}if(e.startsWith("\u517C\u52D9 ")||e.startsWith("\u517C\u52D9\u3000")){let o=e.slice(2).trim();return["\u517C",...w(o,t)]}let r="";for(let o=e.length-1;o>0;o--){if(e[o]!==" ")continue;let a=e.slice(0,o);if(!De.has(a)&&t.has(a)){r=a;break}}if(r){let o=r,a=e.slice(r.length),m=/^\s+(and|&)\s+([A-Za-z0-9]+)/i,b=a.match(m);b&&(o=e.slice(0,r.length+b[0].length));let c=e.slice(o.length),n=["Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"];for(let s of n){let y=new RegExp(`^\\s+${s}\\.?(?=$|[\\s,])`,"i"),p=c.match(y);if(p){o=e.slice(0,o.length+p[0].length);break}}let f=e.slice(o.length).trim();return[o,...w(f,t)]}return[e]},Q=(e,t)=>{let o=e.replace(/[\s\u3000]+(?:兼務|兼)[\s\u3000]+/g,"\u3000\u517C\u3000").replace(/^(?:兼務|兼)[\s\u3000]+/,"\u517C\u3000").replace(/[\s\u3000]+(?:兼務|兼)$/,"\u3000\u517C").split(/\u3000/),a=[];for(let m of o){let b=m.trim();b&&a.push(...w(b,t))}return a},F=(e,t)=>{let r=[],o=["\u90E8","\u8AB2","\u5BA4","\u672C\u90E8","\u652F\u5E97","\u55B6\u696D\u6240","\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","\u30BB\u30F3\u30BF\u30FC","\u30AB\u30F3\u30D1\u30CB\u30FC","\u4E8B\u696D\u6240","\u5DE5\u5834","\u7814\u7A76\u6240","\u4FC2","\u90E8\u9580","\u4E8B\u696D\u90E8","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032","\u958B\u767A","Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"],a=e.split(/[\s\u3000,()()[\]]+/).filter(Boolean),m=a.length,b=new Set;for(let c=m;c>=1;c--)for(let n=0;n<=m-c;n++){let f=!1;for(let y=n;y<n+c;y++)if(b.has(y)){f=!0;break}if(f)continue;let s=a.slice(n,n+c).join(" ");if(!(s==="\u517C"||s==="\u517C\u52D9"||s==="\u4FC2"||s==="of"||s==="&"||s==="Quality"||s==="Innovation"||s==="R&D"||s==="Solutions"||s==="Development"||s==="Laboratory"||s==="and"||s==="Food"||s==="Beverage")&&t.allKnownDepartments.has(s)){r.push({name:s,index:n});for(let y=n;y<n+c;y++)b.add(y)}}for(let c=0;c<m;c++){if(b.has(c))continue;let n=a[c];for(n.endsWith("\u9577")&&n.length>1?n=n.slice(0,-1):n.endsWith("\u7D71\u62EC")&&n.length>2&&(n=n.slice(0,-2));;){let p=!1;if(n.startsWith("\u62C5\u5F53")&&n.length>2||n.startsWith("\u5C02\u4EFB")&&n.length>2||n.startsWith("\u517C\u52D9")&&n.length>2?(n=n.slice(2),p=!0):(n.startsWith("\u526F")||n.startsWith("\u517C"))&&n.length>1&&(n=n.slice(1),p=!0),!p)break}if(n.includes("\u30FB")&&!t.allKnownDepartments.has(n)){let p=n.split("\u30FB"),D=p[p.length-1],x=o.find(k=>D.endsWith(k));if(x){for(let k of p){let C=k;o.some(i=>C.endsWith(i))||(C=C+x);let S=n!=="\u517C"&&n!=="\u4FC2"&&n!=="of"&&n!=="&"&&n!=="Quality"&&n!=="Innovation"&&n!=="R&D"&&n!=="Solutions"&&n!=="Development"&&n!=="Laboratory"&&n!=="and"&&n!=="Food"&&n!=="Beverage"&&t.allKnownDepartments.has(C),d=o.some(i=>C.endsWith(i)),l=o.includes(C);(S||d&&!l)&&r.push({name:C,index:c})}continue}}let f=n!=="\u517C"&&n!=="\u4FC2"&&n!=="of"&&n!=="&"&&n!=="Quality"&&n!=="Innovation"&&n!=="R&D"&&n!=="Solutions"&&n!=="Development"&&n!=="Laboratory"&&n!=="and"&&n!=="Food"&&n!=="Beverage"&&t.allKnownDepartments.has(n),s=o.some(p=>n.endsWith(p)),y=o.includes(n);(f||s&&!y)&&r.push({name:n,index:c})}return r.sort((c,n)=>c.index-n.index),r.map(c=>c.name)},U=(e,t)=>{let r=0;for(let o of t)r<e.length&&o===e[r]&&r++;return r===e.length},A={name:"Standard",parse:(e,t,r="full")=>{let o=E(e.department,"");if(!o)return null;let a=Q(o,t.allKnownDepartments),m=new Map;for(let n of a)m.set(n,(m.get(n)||0)+1);let b=n=>{let f=[],s=[];for(let y=0;y<n.length;y++){let p=n[y];if(p==="\u517C"){s.length>0&&(f.push(s),s=[]);continue}let D=R(p),x=D.rank,k=m.get(p)||0,C=Te(p,k);if(s.length===0)s.push(p);else{let S=s[s.length-1],d=R(S),l=d.rank;if(s.includes(p))f.push(s),s=[p];else{let i=!1;if(C)i=!0;else if(d.type===D.type){let g=_(S),h=_(p);g&&h&&g!==h||S.endsWith("\u672C\u90E8")&&p.endsWith("\u672C\u90E8")||S.endsWith("\u90E8\u9580")&&p.endsWith("\u4E8B\u696D\u90E8")||S.endsWith("\u4E8B\u696D\u90E8")&&p.endsWith("\u90E8\u9580")||S.endsWith("\u90E8\u9580")&&p.endsWith("\u672C\u90E8")||d.type==="Other"&&D.type==="Other"?i=!0:i=l<x}else i=x>=10,i&&d.type==="Location"&&D.type==="Organization"&&l>=x&&n.slice(y+1).includes(S)&&(i=!1);i?s.push(p):(f.push(s),s=[p])}}if(C){let S=y+1<n.length?n[y+1]:void 0;xe(p,S)&&s.length>0&&(f.push(s),s=[])}}return s.length>0&&f.push(s),f},c=[];if(r==="full"&&c.push(...b(a)),r==="pure_org"){let n=a.filter(f=>R(f).type!=="Location");n.length>0&&c.push(...b(n))}if(e.title){let f=/[^\x20-\x7E]/.test(e.title)?/[\s\u3000]*(?:兼務|兼)[\s\u3000]*/:/[,;]|(?:兼務|兼)/,s=e.title.split(f).filter(Boolean),y=[],p=(d,l)=>{let i=v(d),g=v(l),h=i<g;if(!h){let T=_(d),P=_(l);if(T&&P&&T!==P)h=!0;else if(d.endsWith("\u672C\u90E8")&&l.endsWith("\u672C\u90E8"))h=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u4E8B\u696D\u90E8")||d.endsWith("\u4E8B\u696D\u90E8")&&l.endsWith("\u90E8\u9580"))h=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u672C\u90E8"))h=!0;else{let L=R(d),ce=R(l);L.type==="Other"&&ce.type==="Other"&&(h=!0)}}return h};for(let d of s){let l=F(d,t);if(l.length===0)continue;let i=[];for(let g of l)if(i.length===0)i.push(g);else{let h=i[i.length-1];if(p(h,g))i.push(g);else{y.push([...i]);let T=!1;for(let P=i.length-2;P>=0;P--){let L=i[P];if(p(L,g)){i=[...i.slice(0,P+1),g],T=!0;break}}T||(i=[g])}}i.length>0&&y.push(i)}let D=[...c],x=d=>s.some(l=>l.includes(d)&&l.length>d.length);for(let d of y){let l=!1;for(let i of c){let g=i.findIndex(h=>d.includes(h));if(g!==-1){let h=i[g],T=d.indexOf(h);if(g>0&&T===0){let P=i.slice(0,g);D.push([...P,...d]),l=!0}else if(T>0&&g===0){let P=d.slice(0,T);D.push([...P,...i]),D.push(d),l=!0}else d.length>i.length-g,l=!0}if(!l){let h=i[i.length-1],T=d[0];p(h,T)&&(D.push([...i,...d]),l=!0)}}l||D.push(d)}let k=[],C=[],S=new Set;for(let d of D){let l=d.join("|");S.has(l)||(S.add(l),C.push(d))}for(let d=0;d<C.length;d++){let l=C[d],i=!1;for(let g=0;g<C.length;g++){if(d===g)continue;let h=C[g];if(h.length>l.length&&h.slice(0,l.length).join("|")===l.join("|")){let T=l[l.length-1];if(!x(T)){i=!0;break}}if(h.length>l.length&&U(l,h)){let T=l[l.length-1];if(!x(T)){i=!0;break}}if(l.length===1&&h.length>0){let T=l[0],P=h[h.length-1];if(T!==P&&P.endsWith(T)){i=!0;break}}}i||k.push(l)}return k.length>0?k:null}if(c.length>0){let n=[];for(let f=0;f<c.length;f++){let s=c[f],y=!1;for(let p=0;p<c.length;p++){if(f===p)continue;let D=c[p];if(D.length>s.length&&U(s,D)){y=!0;break}}y||n.push(s)}return n.length>0?n:null}return null}},$={name:"TitleBased",parse:(e,t,r="full")=>{let o=e.title;if(!o)return null;let a=F(o,t);return a.length>0?[a]:null}};var W=e=>{switch(typeof e){case"string":return JSON.stringify(e);case"bigint":return`${e}n`;case"symbol":return e.toString();case"object":return e===null?"null":H(e);case"function":return H(e);case"number":return Object.is(e,-0)?"-0":String(e);default:return String(e)}},H=e=>{try{return Object.prototype.toString.call(e)}catch{return"[object ?]"}};var Ce=["uncategorizedCompany","unnamedPerson"],V=e=>{if(typeof e!="object"||e===null)throw new TypeError(`[contact-map] tree naming must be an object; got ${W(e)}`);for(let t of Ce){let r=e[t];if(typeof r!="string")throw new TypeError(`[contact-map] tree naming.${t} must be a string; got ${W(r)}`);if(r.trim()==="")throw new RangeError(`[contact-map] tree naming.${t} must not be empty or blank; got ${W(r)}`)}},Se=[A,$],Pe=(e,t)=>{let r=E(e.full_name,t),o=E(e.title,"");return o.length>0?`${r} (${o})`:r},j=e=>e.sort((t,r)=>t.label.localeCompare(r.label,"ja")),B=(e,t,r)=>{let o=e.get(t);if(o)return o;let a=r();return e.set(t,a),a},K=e=>encodeURIComponent(e.replace(/\//g,"\uFF0F")),q=e=>e.sort((t,r)=>{let o=!!(t.contact.title&&t.contact.title.trim().length>0),a=!!(r.contact.title&&r.contact.title.trim().length>0);return o&&!a?-1:!o&&a?1:t.label.localeCompare(r.label,"ja")}),G=e=>({name:e.label,type:"file",absolutePath:e.path,relativePath:e.segment,personId:e.contact.person_id,title:e.contact.title||void 0,isPrimary:e.isPrimary}),J=e=>{let t=j(Array.from(e.children.values())).map(J),r=q([...e.persons]).map(G);return{name:e.label,type:"directory",absolutePath:e.path,relativePath:e.segment,children:[...r,...t],memberCount:e.personCount}},z=class{constructor(t){this.companyMap=new Map;this.processedPersonIds=new Set;this.allDepts=new Set;this.cachedResult=null;V(t),this.naming=t}appendRecords(t){if(!t||t.length===0)return;let r="full",o=!1;for(let a of t)if(!this.processedPersonIds.has(a.person_id)&&a.department){let m=a.department.split(/\u3000/);for(let b of m){let c=b.trim();if(!c||c==="\u517C"||c==="\u4FC2")continue;if(/[^\x20-\x7E]/.test(c)){let f=c.split(" ").filter(s=>s.length>0&&s!=="\u517C"&&s!=="\u4FC2");for(let s of f)this.allDepts.add(s)}else this.allDepts.add(c)}}for(let a of t){let m=a.person_id;if(!Number.isFinite(m)||this.processedPersonIds.has(m))continue;this.processedPersonIds.add(m),o=!0;let b=E(a.company_name,this.naming.uncategorizedCompany),c=Pe(a,this.naming.unnamedPerson),n=`company:${K(b)}`,f=B(this.companyMap,n,()=>({label:b,segment:n,path:`/${n}`,departments:new Map,persons:[],personCount:0})),s=[],y={allKnownDepartments:this.allDepts};for(let p of Se){let D=p.parse(a,y,r);if(D&&D.length>0){s=D;break}}s.length===0&&s.push([]);for(let p=0;p<s.length;p++){let D=s[p];if(D.length===0){let l=`person:${m}`,i=`${f.path}/${l}`;f.persons.some(h=>h.contact.person_id===m)||f.persons.push({contact:a,label:c,path:i,segment:l,isPrimary:!0});continue}let x=null,k=f.path;if(D.length>0){let l=D[0],i=`department:${K(l)}`;x=B(f.departments,i,()=>({label:l,segment:i,path:`${k}/${i}`,children:new Map,persons:[],personCount:0})),k=x.path,x.personCount+=1;for(let g=1;g<D.length;g++){let h=D[g],T=`department:${K(h)}`;if(!x)throw new Error("[contact-map] unexpected null currentDepartmentNode");x=B(x.children,T,()=>({label:h,segment:T,path:`${k}/${T}`,children:new Map,persons:[],personCount:0})),k=x.path,x.personCount+=1}}else continue;let C=`person:${m}`,S=`${x.path}/${C}`;x.persons.some(l=>l.contact.person_id===m)||x.persons.push({contact:a,label:c,path:S,segment:C,isPrimary:p===0})}f.personCount+=1}o&&(this.cachedResult=null)}getSnapshot(){if(this.cachedResult)return this.cachedResult;let t={},r=j(Array.from(this.companyMap.values())).map(o=>{let a=j(Array.from(o.departments.values())).map(J),m=q([...o.persons]).map(G),b={name:o.label,type:"directory",absolutePath:o.path,relativePath:o.segment,children:[...m,...a],memberCount:o.personCount};return t[o.label]=b,b});return this.cachedResult={tree:r,companyMap:t},this.cachedResult}append(t){this.appendRecords(t)}build(){return this.getSnapshot().tree}reset(){this.companyMap.clear(),this.processedPersonIds.clear(),this.allDepts.clear(),this.cachedResult=null}getUniquePersonCount(){return this.processedPersonIds.size}get size(){return this.processedPersonIds.size}},ke=(e,t)=>{let r=new z(t);return r.appendRecords(e),r.getSnapshot()};var O=e=>{if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null},Re=e=>!e||typeof e!="object"?null:"item"in e?e.item??null:"person_id"in e?e:null,X=(e,t)=>{if(!e)return{value:null,fieldKey:null};for(let r of t){let o=O(e[r]);if(o)return{value:o,fieldKey:r}}return{value:null,fieldKey:null}},_e=e=>X(e,["custom_email","email"]),Ee=e=>X(e,["custom_mobile_phone_number","mobile_phone_number","company_phone_number"]),Me=e=>{let t=O(e);if(!t)return null;let r=t.replace(/[^0-9+#*]/g,"");return r.length===0?null:`tel:${r}`},Oe=(e,t)=>{let r=O(e);return r?t?`https://mail.google.com/mail/?view=cm&fs=1&to=${encodeURIComponent(r)}`:`mailto:${encodeURIComponent(r)}`:null},we=e=>{if(!e)return"-";let t=typeof e=="string"||typeof e=="number"?new Date(e):e;return!(t instanceof Date)||Number.isNaN(t.getTime())?typeof e=="string"?e:"-":t.toISOString().split("T")[0]},Y=e=>{if(!e)return"-";let t=typeof e=="string"||typeof e=="number"?new Date(e):e;return!(t instanceof Date)||Number.isNaN(t.getTime())?typeof e=="string"?e:"-":t.toISOString()},We=e=>e==null?"-":typeof e=="string"?O(e)??"-":typeof e=="number"?Number.isFinite(e)?String(e):"-":e instanceof Date?Y(e):String(e);var ze={listPanelMinWidth:320,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35},Ne={listPanelMinWidth:280,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35};function Le(e){let t=e.listPanelMinWidth+e.detailPanelMinWidth+e.handleThickness+e.listPaddingAndBorder+e.detailPaddingAndBorder,r=t+e.scrollbarSafetyBuffer,o=r+e.hysteresisSafetyMargin,a=o-r;return{physicalMinWidth:t,collapseThreshold:r,expandThreshold:o,hysteresisWidth:a}}function Ie(e,t,r){return e<=0||!Number.isFinite(e)?!1:t?e>=r.collapseThreshold:e>=r.expandThreshold}var Fe={info:(e,...t)=>console.info(`[contact-map] ${e}`,...t),warn:(e,...t)=>console.warn(`[contact-map] ${e}`,...t),error:(e,...t)=>console.error(`[contact-map] ${e}`,...t)};var N=require("@aiquants/fuzzy-search"),M=require("@aiquants/select-box"),te=/[]/g,Ae=/^[\s ]+|[\s ]+$/g,$e=/\s+/,Be=/^[\p{Script=Latin}\s]+$/u,Ke=/\p{Script=Latin}/u,ne=Object.freeze({convertWidth:!0,convertKana:!0,convertCase:!0,convertRomaji:!1}),re="union",je=e=>(0,M.normalizeText)(e.replace(te,"").replace(Ae,""),ne),ve=e=>{if(!Be.test(e))return null;let t=(0,M.romajiToKatakana)(e);return Ke.test(t)?null:t},oe=e=>e.split($e).filter(Boolean),ae=e=>(0,N.parseQuerySets)(e,re).sets.map(({query:t})=>t),Z=e=>ae(e).flatMap(t=>oe(t)),ee=e=>(0,N.formatQuerySets)({combine:re,sets:Array.from(new Set(e),t=>({query:t}))}),se=e=>{let t=ae(e.replace(te,"")).map(o=>oe(je(o)).join(" ")).filter(o=>o!==""),r=[];for(let o of t){let a=ve(o);if(a===null)return ee(t);r.push(a)}return ee(r)},ie=e=>{let t=new Set([...Z(e),...Z(se(e))]),r=new Set;for(let o of t)for(let a of(0,M.getNormalizedVariants)(o,ne)){let m=a.trim();m&&r.add(m)}return Array.from(r)},Ue=/[.*+?^${}()|[\]\\]/g,le=e=>{let t=ie(e);if(t.length===0)return null;let r=t.map(o=>o.replace(Ue,"\\$&")).sort((o,a)=>a.length-o.length);return new RegExp(r.join("|"),"gi")},Qe=(e,t)=>{let r=le(e);if(r===null)return a=>a;let o=a=>t.some(m=>{let b=a[m];return typeof b=="string"&&b.search(r)!==-1});return a=>{let m=[],b=[];for(let c of a)o(c.item)?m.push(c):b.push(c);return[...m,...b]}};var u=require("zod"),pe=u.z.object({person_id:u.z.union([u.z.string(),u.z.number()]).transform(e=>{if(typeof e=="number")return e;let t=e.trim();return parseInt(t,10)}).pipe(u.z.number()),person_id_redirect_to:u.z.union([u.z.string(),u.z.number()]).nullable().optional().transform(e=>{if(e==null)return null;if(typeof e=="number")return e;let t=e.trim();if(t.length===0)return null;let r=parseInt(t,10);return Number.isNaN(r)?null:r}),full_name:u.z.string().nullable().optional(),full_name_reading:u.z.string().nullable().optional(),company_name:u.z.string().nullable().optional(),company_name_reading:u.z.string().nullable().optional(),department:u.z.string().nullable().optional(),title:u.z.string().nullable().optional(),address:u.z.string().nullable().optional(),postal_code:u.z.string().nullable().optional(),email:u.z.string().nullable().optional(),custom_email:u.z.string().nullable().optional(),company_phone_number:u.z.string().nullable().optional(),custom_company_phone_number:u.z.string().nullable().optional(),company_fax_number:u.z.string().nullable().optional(),mobile_phone_number:u.z.string().nullable().optional(),custom_mobile_phone_number:u.z.string().nullable().optional(),url:u.z.string().nullable().optional(),contacted_at:u.z.union([u.z.date(),u.z.string()]).nullable().optional(),contacted_by:u.z.string().nullable().optional(),is_in_eight:u.z.boolean().nullable().optional(),is_contact_synced:u.z.boolean().nullable().optional(),is_active:u.z.boolean(),is_incomplete:u.z.boolean().nullable().optional(),created_at:u.z.union([u.z.date(),u.z.string()]).optional(),created_by:u.z.string().optional(),updated_at:u.z.union([u.z.date(),u.z.string()]).optional(),updated_by:u.z.string().optional()}),He=u.z.array(pe);0&&(module.exports={DEFAULT_LIST_LAYOUT_SPEC,DEFAULT_TREE_LAYOUT_SPEC,IncrementalTreeBuilder,StandardDepartmentParser,TitleBasedDepartmentParser,assertContactMapTreeNaming,buildDirectoryTree,calculateResponsiveThresholds,createExactMatchRanker,createSearchQueryPattern,defaultLogger,extractContactData,extractDepartmentsFromTitle,formatDate,formatDateTime,getEmailLinkHref,getHysteresisBreakpointState,getPhoneDialHref,getPrimaryEmail,getPrimaryPhone,getSearchQuerySpellings,normalizeLabel,normalizeSearchInput,normalizeString,schemaContactRecord,schemaContactRecords,splitDepartment,toDisplayValue});
|
|
1
|
+
"use strict";var A=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var fe=Object.prototype.hasOwnProperty;var ge=(e,t)=>{for(var n in t)A(e,n,{get:t[n],enumerable:!0})},he=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of me(t))!fe.call(e,s)&&s!==n&&A(e,s,{get:()=>t[s],enumerable:!(o=de(t,s))||o.enumerable});return e};var ye=e=>he(A({},"__esModule",{value:!0}),e);var nt={};ge(nt,{CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS:()=>U,DEFAULT_LIST_LAYOUT_SPEC:()=>Ie,DEFAULT_TREE_LAYOUT_SPEC:()=>Ae,IncrementalTreeBuilder:()=>w,StandardDepartmentParser:()=>$,TitleBasedDepartmentParser:()=>K,assertContactMapTreeNaming:()=>q,buildDirectoryTree:()=>_e,calculateResponsiveThresholds:()=>Fe,createExactMatchRanker:()=>et,createSearchQueryPattern:()=>ce,defaultLogger:()=>Ke,extractContactData:()=>Re,extractDepartmentsFromTitle:()=>F,formatLocalDateTime:()=>Ne,formatRecordTimestamp:()=>we,formatStoredDate:()=>ee,formatStoredDateTime:()=>Le,getEmailLinkHref:()=>Oe,getHysteresisBreakpointState:()=>$e,getPhoneDialHref:()=>We,getPrimaryEmail:()=>Me,getPrimaryPhone:()=>Ee,getSearchQuerySpellings:()=>le,normalizeLabel:()=>E,normalizeSearchInput:()=>ie,normalizeString:()=>O,schemaContactRecord:()=>pe,schemaContactRecords:()=>tt,splitDepartment:()=>V,toDisplayValue:()=>ze});module.exports=ye(nt);var E=(e,t)=>e&&e.trim()||t;var be={\u672C\u90E8:{rank:10,type:"Organization"},\u30AB\u30F3\u30D1\u30CB\u30FC:{rank:10,type:"Organization"},\u672C\u793E:{rank:10,type:"Location"},\u30D6\u30ED\u30C3\u30AF:{rank:11,type:"Location"},\u652F\u5E97:{rank:12,type:"Location"},\u7814\u7A76\u6240:{rank:15,type:"Location"},\u5DE5\u5834:{rank:15,type:"Location"},\u4E8B\u696D\u90E8:{rank:18,type:"Organization"},\u90E8\u9580:{rank:18,type:"Organization"},\u7D71\u62EC\u90E8:{rank:19,type:"Organization"},\u90E8:{rank:20,type:"Organization"},\u958B\u767A:{rank:20,type:"Organization"},\u30B0\u30EB\u30FC\u30D7:{rank:22,type:"Organization"},\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8:{rank:25,type:"Organization"},\u63A8\u9032:{rank:20,type:"Organization"},\u4E8B\u696D\u6240:{rank:25,type:"Location"},\u55B6\u696D\u6240:{rank:28,type:"Location"},\u5BA4:{rank:30,type:"Organization"},\u8AB2:{rank:30,type:"Organization"},\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30D3\u30B8\u30CD\u30B9\u30D7\u30ED\u30C7\u30E5\u30FC\u30B9\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30C1\u30FC\u30E0:{rank:40,type:"Organization"},\u4FC2:{rank:50,type:"Organization"},Department:{rank:20,type:"Organization"},Dept:{rank:20,type:"Organization"},"Dept.":{rank:20,type:"Organization"},Division:{rank:20,type:"Organization"},Div:{rank:20,type:"Organization"},"Div.":{rank:20,type:"Organization"},Section:{rank:30,type:"Organization"},Sect:{rank:30,type:"Organization"},"Sect.":{rank:30,type:"Organization"},Unit:{rank:30,type:"Organization"},Group:{rank:22,type:"Organization"},Team:{rank:40,type:"Organization"},Branch:{rank:12,type:"Location"},Office:{rank:28,type:"Location"},Center:{rank:30,type:"Location"},Centre:{rank:30,type:"Location"},HQ:{rank:10,type:"Organization"},Headquarters:{rank:10,type:"Organization"}},R=e=>{for(let[t,n]of Object.entries(be))if(e.endsWith(t))return n;return{rank:99,type:"Other"}},H=e=>R(e).rank,De=["\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","Group","Team","\u5BA4","\u8AB2","Unit","Area","\u90E8","Department","Dept","Division","Div","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032"],M=e=>De.find(t=>e.endsWith(t)),Te=new Set(["&","Quality","Innovation","R&D","Solutions","Development","Laboratory","and","Food","Beverage"]),Ce=(e,t)=>t>1&&(e.endsWith("\u652F\u5E97")||e.endsWith("\u672C\u90E8")||e.endsWith("\u4E8B\u696D\u6240")||e.endsWith("\u5DE5\u5834")),Se=(e,t)=>{if(!t)return!0;let n=R(e),o=R(t);if(n.rank<o.rank||e.endsWith("\u672C\u90E8")&&t.endsWith("\u672C\u90E8"))return!1;let s=M(e),m=M(t);return!(s&&m&&s!==m)},L=(e,t)=>{if(!e)return[];if(e==="\u517C")return["\u517C"];if(e==="\u517C\u52D9")return["\u517C"];if(e.startsWith("\u517C ")||e.startsWith("\u517C\u3000")){let o=e.slice(1).trim();return["\u517C",...L(o,t)]}if(e.startsWith("\u517C\u52D9 ")||e.startsWith("\u517C\u52D9\u3000")){let o=e.slice(2).trim();return["\u517C",...L(o,t)]}let n="";for(let o=e.length-1;o>0;o--){if(e[o]!==" ")continue;let s=e.slice(0,o);if(!Te.has(s)&&t.has(s)){n=s;break}}if(n){let o=n,s=e.slice(n.length),m=/^\s+(and|&)\s+([A-Za-z0-9]+)/i,h=s.match(m);h&&(o=e.slice(0,n.length+h[0].length));let p=e.slice(o.length),r=["Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"];for(let a of r){let b=new RegExp(`^\\s+${a}\\.?(?=$|[\\s,])`,"i"),c=p.match(b);if(c){o=e.slice(0,o.length+c[0].length);break}}let f=e.slice(o.length).trim();return[o,...L(f,t)]}return[e]},V=(e,t)=>{let o=e.replace(/[\s\u3000]+(?:兼務|兼)[\s\u3000]+/g,"\u3000\u517C\u3000").replace(/^(?:兼務|兼)[\s\u3000]+/,"\u517C\u3000").replace(/[\s\u3000]+(?:兼務|兼)$/,"\u3000\u517C").split(/\u3000/),s=[];for(let m of o){let h=m.trim();h&&s.push(...L(h,t))}return s},F=(e,t)=>{let n=[],o=["\u90E8","\u8AB2","\u5BA4","\u672C\u90E8","\u652F\u5E97","\u55B6\u696D\u6240","\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","\u30BB\u30F3\u30BF\u30FC","\u30AB\u30F3\u30D1\u30CB\u30FC","\u4E8B\u696D\u6240","\u5DE5\u5834","\u7814\u7A76\u6240","\u4FC2","\u90E8\u9580","\u4E8B\u696D\u90E8","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032","\u958B\u767A","Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"],s=e.split(/[\s\u3000,()()[\]]+/).filter(Boolean),m=s.length,h=new Set;for(let p=m;p>=1;p--)for(let r=0;r<=m-p;r++){let f=!1;for(let b=r;b<r+p;b++)if(h.has(b)){f=!0;break}if(f)continue;let a=s.slice(r,r+p).join(" ");if(!(a==="\u517C"||a==="\u517C\u52D9"||a==="\u4FC2"||a==="of"||a==="&"||a==="Quality"||a==="Innovation"||a==="R&D"||a==="Solutions"||a==="Development"||a==="Laboratory"||a==="and"||a==="Food"||a==="Beverage")&&t.allKnownDepartments.has(a)){n.push({name:a,index:r});for(let b=r;b<r+p;b++)h.add(b)}}for(let p=0;p<m;p++){if(h.has(p))continue;let r=s[p];for(r.endsWith("\u9577")&&r.length>1?r=r.slice(0,-1):r.endsWith("\u7D71\u62EC")&&r.length>2&&(r=r.slice(0,-2));;){let c=!1;if(r.startsWith("\u62C5\u5F53")&&r.length>2||r.startsWith("\u5C02\u4EFB")&&r.length>2||r.startsWith("\u517C\u52D9")&&r.length>2?(r=r.slice(2),c=!0):(r.startsWith("\u526F")||r.startsWith("\u517C"))&&r.length>1&&(r=r.slice(1),c=!0),!c)break}if(r.includes("\u30FB")&&!t.allKnownDepartments.has(r)){let c=r.split("\u30FB"),D=c[c.length-1],C=o.find(k=>D.endsWith(k));if(C){for(let k of c){let S=k;o.some(i=>S.endsWith(i))||(S=S+C);let x=r!=="\u517C"&&r!=="\u4FC2"&&r!=="of"&&r!=="&"&&r!=="Quality"&&r!=="Innovation"&&r!=="R&D"&&r!=="Solutions"&&r!=="Development"&&r!=="Laboratory"&&r!=="and"&&r!=="Food"&&r!=="Beverage"&&t.allKnownDepartments.has(S),d=o.some(i=>S.endsWith(i)),l=o.includes(S);(x||d&&!l)&&n.push({name:S,index:p})}continue}}let f=r!=="\u517C"&&r!=="\u4FC2"&&r!=="of"&&r!=="&"&&r!=="Quality"&&r!=="Innovation"&&r!=="R&D"&&r!=="Solutions"&&r!=="Development"&&r!=="Laboratory"&&r!=="and"&&r!=="Food"&&r!=="Beverage"&&t.allKnownDepartments.has(r),a=o.some(c=>r.endsWith(c)),b=o.includes(r);(f||a&&!b)&&n.push({name:r,index:p})}return n.sort((p,r)=>p.index-r.index),n.map(p=>p.name)},Q=(e,t)=>{let n=0;for(let o of t)n<e.length&&o===e[n]&&n++;return n===e.length},$={name:"Standard",parse:(e,t,n="full")=>{let o=E(e.department,"");if(!o)return null;let s=V(o,t.allKnownDepartments),m=new Map;for(let r of s)m.set(r,(m.get(r)||0)+1);let h=r=>{let f=[],a=[];for(let b=0;b<r.length;b++){let c=r[b];if(c==="\u517C"){a.length>0&&(f.push(a),a=[]);continue}let D=R(c),C=D.rank,k=m.get(c)||0,S=Ce(c,k);if(a.length===0)a.push(c);else{let x=a[a.length-1],d=R(x),l=d.rank;if(a.includes(c))f.push(a),a=[c];else{let i=!1;if(S)i=!0;else if(d.type===D.type){let y=M(x),g=M(c);y&&g&&y!==g||x.endsWith("\u672C\u90E8")&&c.endsWith("\u672C\u90E8")||x.endsWith("\u90E8\u9580")&&c.endsWith("\u4E8B\u696D\u90E8")||x.endsWith("\u4E8B\u696D\u90E8")&&c.endsWith("\u90E8\u9580")||x.endsWith("\u90E8\u9580")&&c.endsWith("\u672C\u90E8")||d.type==="Other"&&D.type==="Other"?i=!0:i=l<C}else i=C>=10,i&&d.type==="Location"&&D.type==="Organization"&&l>=C&&r.slice(b+1).includes(x)&&(i=!1);i?a.push(c):(f.push(a),a=[c])}}if(S){let x=b+1<r.length?r[b+1]:void 0;Se(c,x)&&a.length>0&&(f.push(a),a=[])}}return a.length>0&&f.push(a),f},p=[];if(n==="full"&&p.push(...h(s)),n==="pure_org"){let r=s.filter(f=>R(f).type!=="Location");r.length>0&&p.push(...h(r))}if(e.title){let f=/[^\x20-\x7E]/.test(e.title)?/[\s\u3000]*(?:兼務|兼)[\s\u3000]*/:/[,;]|(?:兼務|兼)/,a=e.title.split(f).filter(Boolean),b=[],c=(d,l)=>{let i=H(d),y=H(l),g=i<y;if(!g){let T=M(d),P=M(l);if(T&&P&&T!==P)g=!0;else if(d.endsWith("\u672C\u90E8")&&l.endsWith("\u672C\u90E8"))g=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u4E8B\u696D\u90E8")||d.endsWith("\u4E8B\u696D\u90E8")&&l.endsWith("\u90E8\u9580"))g=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u672C\u90E8"))g=!0;else{let I=R(d),ue=R(l);I.type==="Other"&&ue.type==="Other"&&(g=!0)}}return g};for(let d of a){let l=F(d,t);if(l.length===0)continue;let i=[];for(let y of l)if(i.length===0)i.push(y);else{let g=i[i.length-1];if(c(g,y))i.push(y);else{b.push([...i]);let T=!1;for(let P=i.length-2;P>=0;P--){let I=i[P];if(c(I,y)){i=[...i.slice(0,P+1),y],T=!0;break}}T||(i=[y])}}i.length>0&&b.push(i)}let D=[...p],C=d=>a.some(l=>l.includes(d)&&l.length>d.length);for(let d of b){let l=!1;for(let i of p){let y=i.findIndex(g=>d.includes(g));if(y!==-1){let g=i[y],T=d.indexOf(g);if(y>0&&T===0){let P=i.slice(0,y);D.push([...P,...d]),l=!0}else if(T>0&&y===0){let P=d.slice(0,T);D.push([...P,...i]),D.push(d),l=!0}else d.length>i.length-y,l=!0}if(!l){let g=i[i.length-1],T=d[0];c(g,T)&&(D.push([...i,...d]),l=!0)}}l||D.push(d)}let k=[],S=[],x=new Set;for(let d of D){let l=d.join("|");x.has(l)||(x.add(l),S.push(d))}for(let d=0;d<S.length;d++){let l=S[d],i=!1;for(let y=0;y<S.length;y++){if(d===y)continue;let g=S[y];if(g.length>l.length&&g.slice(0,l.length).join("|")===l.join("|")){let T=l[l.length-1];if(!C(T)){i=!0;break}}if(g.length>l.length&&Q(l,g)){let T=l[l.length-1];if(!C(T)){i=!0;break}}if(l.length===1&&g.length>0){let T=l[0],P=g[g.length-1];if(T!==P&&P.endsWith(T)){i=!0;break}}}i||k.push(l)}return k.length>0?k:null}if(p.length>0){let r=[];for(let f=0;f<p.length;f++){let a=p[f],b=!1;for(let c=0;c<p.length;c++){if(f===c)continue;let D=p[c];if(D.length>a.length&&Q(a,D)){b=!0;break}}b||r.push(a)}return r.length>0?r:null}return null}},K={name:"TitleBased",parse:(e,t,n="full")=>{let o=e.title;if(!o)return null;let s=F(o,t);return s.length>0?[s]:null}};var N=e=>{switch(typeof e){case"string":return JSON.stringify(e);case"bigint":return`${e}n`;case"symbol":return e.toString();case"object":return e===null?"null":G(e);case"function":return G(e);case"number":return Object.is(e,-0)?"-0":String(e);default:return String(e)}},G=e=>{try{return Object.prototype.toString.call(e)}catch{return"[object ?]"}};var xe=["uncategorizedCompany","unnamedPerson"],q=e=>{if(typeof e!="object"||e===null)throw new TypeError(`[contact-map] tree naming must be an object; got ${N(e)}`);for(let t of xe){let n=e[t];if(typeof n!="string")throw new TypeError(`[contact-map] tree naming.${t} must be a string; got ${N(n)}`);if(n.trim()==="")throw new RangeError(`[contact-map] tree naming.${t} must not be empty or blank; got ${N(n)}`)}},Pe=[$,K],ke=(e,t)=>{let n=E(e.full_name,t),o=E(e.title,"");return o.length>0?`${n} (${o})`:n},v=e=>e.sort((t,n)=>t.label.localeCompare(n.label,"ja")),j=(e,t,n)=>{let o=e.get(t);if(o)return o;let s=n();return e.set(t,s),s},B=e=>encodeURIComponent(e.replace(/\//g,"\uFF0F")),J=e=>e.sort((t,n)=>{let o=!!(t.contact.title&&t.contact.title.trim().length>0),s=!!(n.contact.title&&n.contact.title.trim().length>0);return o&&!s?-1:!o&&s?1:t.label.localeCompare(n.label,"ja")}),X=e=>({name:e.label,type:"file",absolutePath:e.path,relativePath:e.segment,personId:e.contact.person_id,title:e.contact.title||void 0,isPrimary:e.isPrimary}),Y=e=>{let t=v(Array.from(e.children.values())).map(Y),n=J([...e.persons]).map(X);return{name:e.label,type:"directory",absolutePath:e.path,relativePath:e.segment,children:[...n,...t],memberCount:e.personCount}},w=class{constructor(t){this.companyMap=new Map;this.processedPersonIds=new Set;this.allDepts=new Set;this.cachedResult=null;q(t),this.naming=t}appendRecords(t){if(!t||t.length===0)return;let n="full",o=!1;for(let s of t)if(!this.processedPersonIds.has(s.person_id)&&s.department){let m=s.department.split(/\u3000/);for(let h of m){let p=h.trim();if(!p||p==="\u517C"||p==="\u4FC2")continue;if(/[^\x20-\x7E]/.test(p)){let f=p.split(" ").filter(a=>a.length>0&&a!=="\u517C"&&a!=="\u4FC2");for(let a of f)this.allDepts.add(a)}else this.allDepts.add(p)}}for(let s of t){let m=s.person_id;if(!Number.isFinite(m)||this.processedPersonIds.has(m))continue;this.processedPersonIds.add(m),o=!0;let h=E(s.company_name,this.naming.uncategorizedCompany),p=ke(s,this.naming.unnamedPerson),r=`company:${B(h)}`,f=j(this.companyMap,r,()=>({label:h,segment:r,path:`/${r}`,departments:new Map,persons:[],personCount:0})),a=[],b={allKnownDepartments:this.allDepts};for(let c of Pe){let D=c.parse(s,b,n);if(D&&D.length>0){a=D;break}}a.length===0&&a.push([]);for(let c=0;c<a.length;c++){let D=a[c];if(D.length===0){let l=`person:${m}`,i=`${f.path}/${l}`;f.persons.some(g=>g.contact.person_id===m)||f.persons.push({contact:s,label:p,path:i,segment:l,isPrimary:!0});continue}let C=null,k=f.path;if(D.length>0){let l=D[0],i=`department:${B(l)}`;C=j(f.departments,i,()=>({label:l,segment:i,path:`${k}/${i}`,children:new Map,persons:[],personCount:0})),k=C.path,C.personCount+=1;for(let y=1;y<D.length;y++){let g=D[y],T=`department:${B(g)}`;if(!C)throw new Error("[contact-map] unexpected null currentDepartmentNode");C=j(C.children,T,()=>({label:g,segment:T,path:`${k}/${T}`,children:new Map,persons:[],personCount:0})),k=C.path,C.personCount+=1}}else continue;let S=`person:${m}`,x=`${C.path}/${S}`;C.persons.some(l=>l.contact.person_id===m)||C.persons.push({contact:s,label:p,path:x,segment:S,isPrimary:c===0})}f.personCount+=1}o&&(this.cachedResult=null)}getSnapshot(){if(this.cachedResult)return this.cachedResult;let t={},n=v(Array.from(this.companyMap.values())).map(o=>{let s=v(Array.from(o.departments.values())).map(Y),m=J([...o.persons]).map(X),h={name:o.label,type:"directory",absolutePath:o.path,relativePath:o.segment,children:[...m,...s],memberCount:o.personCount};return t[o.label]=h,h});return this.cachedResult={tree:n,companyMap:t},this.cachedResult}append(t){this.appendRecords(t)}build(){return this.getSnapshot().tree}reset(){this.companyMap.clear(),this.processedPersonIds.clear(),this.allDepts.clear(),this.cachedResult=null}getUniquePersonCount(){return this.processedPersonIds.size}get size(){return this.processedPersonIds.size}},_e=(e,t)=>{let n=new w(t);return n.appendRecords(e),n.getSnapshot()};var O=e=>{if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null},Re=e=>!e||typeof e!="object"?null:"item"in e?e.item??null:"person_id"in e?e:null,Z=(e,t)=>{if(!e)return{value:null,fieldKey:null};for(let n of t){let o=O(e[n]);if(o)return{value:o,fieldKey:n}}return{value:null,fieldKey:null}},Me=e=>Z(e,["custom_email","email"]),Ee=e=>Z(e,["custom_mobile_phone_number","mobile_phone_number","company_phone_number"]),We=e=>{let t=O(e);if(!t)return null;let n=t.replace(/[^0-9+#*]/g,"");return n.length===0?null:`tel:${n}`},Oe=(e,t)=>{let n=O(e);return n?t?`https://mail.google.com/mail/?view=cm&fs=1&to=${encodeURIComponent(n)}`:`mailto:${encodeURIComponent(n)}`:null},_=(e,t)=>String(e).padStart(t,"0"),ee=e=>`${_(e.getUTCFullYear(),4)}-${_(e.getUTCMonth()+1,2)}-${_(e.getUTCDate(),2)}`,Le=e=>`${ee(e)} ${_(e.getUTCHours(),2)}:${_(e.getUTCMinutes(),2)}:${_(e.getUTCSeconds(),2)}`,Ne=e=>`${_(e.getFullYear(),4)}-${_(e.getMonth()+1,2)}-${_(e.getDate(),2)} ${_(e.getHours(),2)}:${_(e.getMinutes(),2)}:${_(e.getSeconds(),2)}`,we=(e,t)=>{if(e==null||e==="")return"-";let n=typeof e=="string"?new Date(e):e;return Number.isNaN(n.getTime())?typeof e=="string"?e:"-":t(n)},ze=e=>e==null?"-":typeof e=="string"?O(e)??"-":typeof e=="number"?Number.isFinite(e)?String(e):"-":String(e);var Ie={listPanelMinWidth:320,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35},Ae={listPanelMinWidth:280,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35};function Fe(e){let t=e.listPanelMinWidth+e.detailPanelMinWidth+e.handleThickness+e.listPaddingAndBorder+e.detailPaddingAndBorder,n=t+e.scrollbarSafetyBuffer,o=n+e.hysteresisSafetyMargin,s=o-n;return{physicalMinWidth:t,collapseThreshold:n,expandThreshold:o,hysteresisWidth:s}}function $e(e,t,n){return e<=0||!Number.isFinite(e)?!1:t?e>=n.collapseThreshold:e>=n.expandThreshold}var Ke={info:(e,...t)=>console.info(`[contact-map] ${e}`,...t),warn:(e,...t)=>console.warn(`[contact-map] ${e}`,...t),error:(e,...t)=>console.error(`[contact-map] ${e}`,...t)};var z=require("@aiquants/fuzzy-search"),W=require("@aiquants/select-box"),re=/[]/g,je=/^[\s ]+|[\s ]+$/g,Be=/\s+/,ve=/^[\p{Script=Latin}\s]+$/u,Ue=/\p{Script=Latin}/u,U=Object.freeze({convertWidth:!0,convertKana:!0,convertCase:!0,convertRomaji:!1,normalizeVariants:!1,ignoreSpaces:!1,ignoreSymbols:!1,ignoreLongVowels:!1}),oe="union",He=65377,Qe=65439,Ve=["\uFF9E","\uFF9F"],Ge=(()=>{let e=new Map;for(let t=He;t<=Qe;t+=1){let n=String.fromCharCode(t);e.set(n.normalize("NFKC"),n);for(let o of Ve){let s=(n+o).normalize("NFKC");s.length===1&&e.set(s,n+o)}}return e})(),qe=/[-ヿ]/u,Je=e=>{let t=Array.from(e,n=>Ge.get(n)??n).join("");return qe.test(t)?null:t},Xe=e=>(0,W.normalizeText)(e.replace(re,"").replace(je,""),U),Ye=e=>{if(!ve.test(e))return null;let t=(0,W.romajiToKatakana)(e);return Ue.test(t)?null:t},se=e=>e.split(Be).filter(Boolean),ae=e=>(0,z.parseQuerySets)(e,oe).sets.map(({query:t})=>t),te=e=>ae(e).flatMap(t=>se(t)),ne=e=>(0,z.formatQuerySets)({combine:oe,sets:Array.from(new Set(e),t=>({query:t}))}),ie=e=>{let t=ae(e.replace(re,"")).map(o=>se(Xe(o)).join(" ")).filter(o=>o!==""),n=[];for(let o of t){let s=Ye(o);if(s===null)return ne(t);n.push(s)}return ne(n)},le=e=>{let t=new Set([...te(e),...te(ie(e))]),n=new Set;for(let o of t)for(let s of(0,W.getNormalizedVariants)(o,U)){let m=s.trim();if(!m)continue;n.add(m);let h=Je(m);h!==null&&n.add(h)}return Array.from(n)},Ze=/[.*+?^${}()|[\]\\]/g,ce=e=>{let t=le(e);if(t.length===0)return null;let n=t.map(o=>o.replace(Ze,"\\$&")).sort((o,s)=>s.length-o.length);return new RegExp(n.join("|"),"gi")},et=(e,t)=>{let n=ce(e);if(n===null)return s=>s;let o=s=>t.some(m=>{let h=s[m];return typeof h=="string"&&h.search(n)!==-1});return s=>{let m=[],h=[];for(let p of s)o(p.item)?m.push(p):h.push(p);return[...m,...h]}};var u=require("zod"),pe=u.z.object({person_id:u.z.union([u.z.string(),u.z.number()]).transform(e=>{if(typeof e=="number")return e;let t=e.trim();return parseInt(t,10)}).pipe(u.z.number()),person_id_redirect_to:u.z.union([u.z.string(),u.z.number()]).nullable().optional().transform(e=>{if(e==null)return null;if(typeof e=="number")return e;let t=e.trim();if(t.length===0)return null;let n=parseInt(t,10);return Number.isNaN(n)?null:n}),full_name:u.z.string().nullable().optional(),full_name_reading:u.z.string().nullable().optional(),company_name:u.z.string().nullable().optional(),company_name_reading:u.z.string().nullable().optional(),department:u.z.string().nullable().optional(),title:u.z.string().nullable().optional(),address:u.z.string().nullable().optional(),postal_code:u.z.string().nullable().optional(),email:u.z.string().nullable().optional(),custom_email:u.z.string().nullable().optional(),company_phone_number:u.z.string().nullable().optional(),custom_company_phone_number:u.z.string().nullable().optional(),company_fax_number:u.z.string().nullable().optional(),mobile_phone_number:u.z.string().nullable().optional(),custom_mobile_phone_number:u.z.string().nullable().optional(),url:u.z.string().nullable().optional(),contacted_at:u.z.union([u.z.date(),u.z.string()]).nullable().optional(),contacted_by:u.z.string().nullable().optional(),is_in_eight:u.z.boolean().nullable().optional(),is_contact_synced:u.z.boolean().nullable().optional(),is_active:u.z.boolean(),is_incomplete:u.z.boolean().nullable().optional(),created_at:u.z.union([u.z.date(),u.z.string()]).optional(),created_by:u.z.string().optional(),updated_at:u.z.union([u.z.date(),u.z.string()]).optional(),updated_by:u.z.string().optional()}),tt=u.z.array(pe);0&&(module.exports={CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS,DEFAULT_LIST_LAYOUT_SPEC,DEFAULT_TREE_LAYOUT_SPEC,IncrementalTreeBuilder,StandardDepartmentParser,TitleBasedDepartmentParser,assertContactMapTreeNaming,buildDirectoryTree,calculateResponsiveThresholds,createExactMatchRanker,createSearchQueryPattern,defaultLogger,extractContactData,extractDepartmentsFromTitle,formatLocalDateTime,formatRecordTimestamp,formatStoredDate,formatStoredDateTime,getEmailLinkHref,getHysteresisBreakpointState,getPhoneDialHref,getPrimaryEmail,getPrimaryPhone,getSearchQuerySpellings,normalizeLabel,normalizeSearchInput,normalizeString,schemaContactRecord,schemaContactRecords,splitDepartment,toDisplayValue});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var E=(e,t)=>e&&e.trim()||t;var te={\u672C\u90E8:{rank:10,type:"Organization"},\u30AB\u30F3\u30D1\u30CB\u30FC:{rank:10,type:"Organization"},\u672C\u793E:{rank:10,type:"Location"},\u30D6\u30ED\u30C3\u30AF:{rank:11,type:"Location"},\u652F\u5E97:{rank:12,type:"Location"},\u7814\u7A76\u6240:{rank:15,type:"Location"},\u5DE5\u5834:{rank:15,type:"Location"},\u4E8B\u696D\u90E8:{rank:18,type:"Organization"},\u90E8\u9580:{rank:18,type:"Organization"},\u7D71\u62EC\u90E8:{rank:19,type:"Organization"},\u90E8:{rank:20,type:"Organization"},\u958B\u767A:{rank:20,type:"Organization"},\u30B0\u30EB\u30FC\u30D7:{rank:22,type:"Organization"},\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8:{rank:25,type:"Organization"},\u63A8\u9032:{rank:20,type:"Organization"},\u4E8B\u696D\u6240:{rank:25,type:"Location"},\u55B6\u696D\u6240:{rank:28,type:"Location"},\u5BA4:{rank:30,type:"Organization"},\u8AB2:{rank:30,type:"Organization"},\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30D3\u30B8\u30CD\u30B9\u30D7\u30ED\u30C7\u30E5\u30FC\u30B9\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30C1\u30FC\u30E0:{rank:40,type:"Organization"},\u4FC2:{rank:50,type:"Organization"},Department:{rank:20,type:"Organization"},Dept:{rank:20,type:"Organization"},"Dept.":{rank:20,type:"Organization"},Division:{rank:20,type:"Organization"},Div:{rank:20,type:"Organization"},"Div.":{rank:20,type:"Organization"},Section:{rank:30,type:"Organization"},Sect:{rank:30,type:"Organization"},"Sect.":{rank:30,type:"Organization"},Unit:{rank:30,type:"Organization"},Group:{rank:22,type:"Organization"},Team:{rank:40,type:"Organization"},Branch:{rank:12,type:"Location"},Office:{rank:28,type:"Location"},Center:{rank:30,type:"Location"},Centre:{rank:30,type:"Location"},HQ:{rank:10,type:"Organization"},Headquarters:{rank:10,type:"Organization"}},R=e=>{for(let[t,r]of Object.entries(te))if(e.endsWith(t))return r;return{rank:99,type:"Other"}},F=e=>R(e).rank,ne=["\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","Group","Team","\u5BA4","\u8AB2","Unit","Area","\u90E8","Department","Dept","Division","Div","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032"],_=e=>ne.find(t=>e.endsWith(t)),re=new Set(["&","Quality","Innovation","R&D","Solutions","Development","Laboratory","and","Food","Beverage"]),oe=(e,t)=>t>1&&(e.endsWith("\u652F\u5E97")||e.endsWith("\u672C\u90E8")||e.endsWith("\u4E8B\u696D\u6240")||e.endsWith("\u5DE5\u5834")),ae=(e,t)=>{if(!t)return!0;let r=R(e),o=R(t);if(r.rank<o.rank||e.endsWith("\u672C\u90E8")&&t.endsWith("\u672C\u90E8"))return!1;let s=_(e),m=_(t);return!(s&&m&&s!==m)},M=(e,t)=>{if(!e)return[];if(e==="\u517C")return["\u517C"];if(e==="\u517C\u52D9")return["\u517C"];if(e.startsWith("\u517C ")||e.startsWith("\u517C\u3000")){let o=e.slice(1).trim();return["\u517C",...M(o,t)]}if(e.startsWith("\u517C\u52D9 ")||e.startsWith("\u517C\u52D9\u3000")){let o=e.slice(2).trim();return["\u517C",...M(o,t)]}let r="";for(let o=e.length-1;o>0;o--){if(e[o]!==" ")continue;let s=e.slice(0,o);if(!re.has(s)&&t.has(s)){r=s;break}}if(r){let o=r,s=e.slice(r.length),m=/^\s+(and|&)\s+([A-Za-z0-9]+)/i,b=s.match(m);b&&(o=e.slice(0,r.length+b[0].length));let c=e.slice(o.length),n=["Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"];for(let a of n){let y=new RegExp(`^\\s+${a}\\.?(?=$|[\\s,])`,"i"),p=c.match(y);if(p){o=e.slice(0,o.length+p[0].length);break}}let f=e.slice(o.length).trim();return[o,...M(f,t)]}return[e]},se=(e,t)=>{let o=e.replace(/[\s\u3000]+(?:兼務|兼)[\s\u3000]+/g,"\u3000\u517C\u3000").replace(/^(?:兼務|兼)[\s\u3000]+/,"\u517C\u3000").replace(/[\s\u3000]+(?:兼務|兼)$/,"\u3000\u517C").split(/\u3000/),s=[];for(let m of o){let b=m.trim();b&&s.push(...M(b,t))}return s},$=(e,t)=>{let r=[],o=["\u90E8","\u8AB2","\u5BA4","\u672C\u90E8","\u652F\u5E97","\u55B6\u696D\u6240","\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","\u30BB\u30F3\u30BF\u30FC","\u30AB\u30F3\u30D1\u30CB\u30FC","\u4E8B\u696D\u6240","\u5DE5\u5834","\u7814\u7A76\u6240","\u4FC2","\u90E8\u9580","\u4E8B\u696D\u90E8","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032","\u958B\u767A","Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"],s=e.split(/[\s\u3000,()()[\]]+/).filter(Boolean),m=s.length,b=new Set;for(let c=m;c>=1;c--)for(let n=0;n<=m-c;n++){let f=!1;for(let y=n;y<n+c;y++)if(b.has(y)){f=!0;break}if(f)continue;let a=s.slice(n,n+c).join(" ");if(!(a==="\u517C"||a==="\u517C\u52D9"||a==="\u4FC2"||a==="of"||a==="&"||a==="Quality"||a==="Innovation"||a==="R&D"||a==="Solutions"||a==="Development"||a==="Laboratory"||a==="and"||a==="Food"||a==="Beverage")&&t.allKnownDepartments.has(a)){r.push({name:a,index:n});for(let y=n;y<n+c;y++)b.add(y)}}for(let c=0;c<m;c++){if(b.has(c))continue;let n=s[c];for(n.endsWith("\u9577")&&n.length>1?n=n.slice(0,-1):n.endsWith("\u7D71\u62EC")&&n.length>2&&(n=n.slice(0,-2));;){let p=!1;if(n.startsWith("\u62C5\u5F53")&&n.length>2||n.startsWith("\u5C02\u4EFB")&&n.length>2||n.startsWith("\u517C\u52D9")&&n.length>2?(n=n.slice(2),p=!0):(n.startsWith("\u526F")||n.startsWith("\u517C"))&&n.length>1&&(n=n.slice(1),p=!0),!p)break}if(n.includes("\u30FB")&&!t.allKnownDepartments.has(n)){let p=n.split("\u30FB"),D=p[p.length-1],x=o.find(k=>D.endsWith(k));if(x){for(let k of p){let C=k;o.some(i=>C.endsWith(i))||(C=C+x);let S=n!=="\u517C"&&n!=="\u4FC2"&&n!=="of"&&n!=="&"&&n!=="Quality"&&n!=="Innovation"&&n!=="R&D"&&n!=="Solutions"&&n!=="Development"&&n!=="Laboratory"&&n!=="and"&&n!=="Food"&&n!=="Beverage"&&t.allKnownDepartments.has(C),d=o.some(i=>C.endsWith(i)),l=o.includes(C);(S||d&&!l)&&r.push({name:C,index:c})}continue}}let f=n!=="\u517C"&&n!=="\u4FC2"&&n!=="of"&&n!=="&"&&n!=="Quality"&&n!=="Innovation"&&n!=="R&D"&&n!=="Solutions"&&n!=="Development"&&n!=="Laboratory"&&n!=="and"&&n!=="Food"&&n!=="Beverage"&&t.allKnownDepartments.has(n),a=o.some(p=>n.endsWith(p)),y=o.includes(n);(f||a&&!y)&&r.push({name:n,index:c})}return r.sort((c,n)=>c.index-n.index),r.map(c=>c.name)},A=(e,t)=>{let r=0;for(let o of t)r<e.length&&o===e[r]&&r++;return r===e.length},B={name:"Standard",parse:(e,t,r="full")=>{let o=E(e.department,"");if(!o)return null;let s=se(o,t.allKnownDepartments),m=new Map;for(let n of s)m.set(n,(m.get(n)||0)+1);let b=n=>{let f=[],a=[];for(let y=0;y<n.length;y++){let p=n[y];if(p==="\u517C"){a.length>0&&(f.push(a),a=[]);continue}let D=R(p),x=D.rank,k=m.get(p)||0,C=oe(p,k);if(a.length===0)a.push(p);else{let S=a[a.length-1],d=R(S),l=d.rank;if(a.includes(p))f.push(a),a=[p];else{let i=!1;if(C)i=!0;else if(d.type===D.type){let g=_(S),h=_(p);g&&h&&g!==h||S.endsWith("\u672C\u90E8")&&p.endsWith("\u672C\u90E8")||S.endsWith("\u90E8\u9580")&&p.endsWith("\u4E8B\u696D\u90E8")||S.endsWith("\u4E8B\u696D\u90E8")&&p.endsWith("\u90E8\u9580")||S.endsWith("\u90E8\u9580")&&p.endsWith("\u672C\u90E8")||d.type==="Other"&&D.type==="Other"?i=!0:i=l<x}else i=x>=10,i&&d.type==="Location"&&D.type==="Organization"&&l>=x&&n.slice(y+1).includes(S)&&(i=!1);i?a.push(p):(f.push(a),a=[p])}}if(C){let S=y+1<n.length?n[y+1]:void 0;ae(p,S)&&a.length>0&&(f.push(a),a=[])}}return a.length>0&&f.push(a),f},c=[];if(r==="full"&&c.push(...b(s)),r==="pure_org"){let n=s.filter(f=>R(f).type!=="Location");n.length>0&&c.push(...b(n))}if(e.title){let f=/[^\x20-\x7E]/.test(e.title)?/[\s\u3000]*(?:兼務|兼)[\s\u3000]*/:/[,;]|(?:兼務|兼)/,a=e.title.split(f).filter(Boolean),y=[],p=(d,l)=>{let i=F(d),g=F(l),h=i<g;if(!h){let T=_(d),P=_(l);if(T&&P&&T!==P)h=!0;else if(d.endsWith("\u672C\u90E8")&&l.endsWith("\u672C\u90E8"))h=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u4E8B\u696D\u90E8")||d.endsWith("\u4E8B\u696D\u90E8")&&l.endsWith("\u90E8\u9580"))h=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u672C\u90E8"))h=!0;else{let W=R(d),ee=R(l);W.type==="Other"&&ee.type==="Other"&&(h=!0)}}return h};for(let d of a){let l=$(d,t);if(l.length===0)continue;let i=[];for(let g of l)if(i.length===0)i.push(g);else{let h=i[i.length-1];if(p(h,g))i.push(g);else{y.push([...i]);let T=!1;for(let P=i.length-2;P>=0;P--){let W=i[P];if(p(W,g)){i=[...i.slice(0,P+1),g],T=!0;break}}T||(i=[g])}}i.length>0&&y.push(i)}let D=[...c],x=d=>a.some(l=>l.includes(d)&&l.length>d.length);for(let d of y){let l=!1;for(let i of c){let g=i.findIndex(h=>d.includes(h));if(g!==-1){let h=i[g],T=d.indexOf(h);if(g>0&&T===0){let P=i.slice(0,g);D.push([...P,...d]),l=!0}else if(T>0&&g===0){let P=d.slice(0,T);D.push([...P,...i]),D.push(d),l=!0}else d.length>i.length-g,l=!0}if(!l){let h=i[i.length-1],T=d[0];p(h,T)&&(D.push([...i,...d]),l=!0)}}l||D.push(d)}let k=[],C=[],S=new Set;for(let d of D){let l=d.join("|");S.has(l)||(S.add(l),C.push(d))}for(let d=0;d<C.length;d++){let l=C[d],i=!1;for(let g=0;g<C.length;g++){if(d===g)continue;let h=C[g];if(h.length>l.length&&h.slice(0,l.length).join("|")===l.join("|")){let T=l[l.length-1];if(!x(T)){i=!0;break}}if(h.length>l.length&&A(l,h)){let T=l[l.length-1];if(!x(T)){i=!0;break}}if(l.length===1&&h.length>0){let T=l[0],P=h[h.length-1];if(T!==P&&P.endsWith(T)){i=!0;break}}}i||k.push(l)}return k.length>0?k:null}if(c.length>0){let n=[];for(let f=0;f<c.length;f++){let a=c[f],y=!1;for(let p=0;p<c.length;p++){if(f===p)continue;let D=c[p];if(D.length>a.length&&A(a,D)){y=!0;break}}y||n.push(a)}return n.length>0?n:null}return null}},K={name:"TitleBased",parse:(e,t,r="full")=>{let o=e.title;if(!o)return null;let s=$(o,t);return s.length>0?[s]:null}};var O=e=>{switch(typeof e){case"string":return JSON.stringify(e);case"bigint":return`${e}n`;case"symbol":return e.toString();case"object":return e===null?"null":j(e);case"function":return j(e);case"number":return Object.is(e,-0)?"-0":String(e);default:return String(e)}},j=e=>{try{return Object.prototype.toString.call(e)}catch{return"[object ?]"}};var ie=["uncategorizedCompany","unnamedPerson"],le=e=>{if(typeof e!="object"||e===null)throw new TypeError(`[contact-map] tree naming must be an object; got ${O(e)}`);for(let t of ie){let r=e[t];if(typeof r!="string")throw new TypeError(`[contact-map] tree naming.${t} must be a string; got ${O(r)}`);if(r.trim()==="")throw new RangeError(`[contact-map] tree naming.${t} must not be empty or blank; got ${O(r)}`)}},pe=[B,K],ce=(e,t)=>{let r=E(e.full_name,t),o=E(e.title,"");return o.length>0?`${r} (${o})`:r},L=e=>e.sort((t,r)=>t.label.localeCompare(r.label,"ja")),z=(e,t,r)=>{let o=e.get(t);if(o)return o;let s=r();return e.set(t,s),s},N=e=>encodeURIComponent(e.replace(/\//g,"\uFF0F")),v=e=>e.sort((t,r)=>{let o=!!(t.contact.title&&t.contact.title.trim().length>0),s=!!(r.contact.title&&r.contact.title.trim().length>0);return o&&!s?-1:!o&&s?1:t.label.localeCompare(r.label,"ja")}),U=e=>({name:e.label,type:"file",absolutePath:e.path,relativePath:e.segment,personId:e.contact.person_id,title:e.contact.title||void 0,isPrimary:e.isPrimary}),Q=e=>{let t=L(Array.from(e.children.values())).map(Q),r=v([...e.persons]).map(U);return{name:e.label,type:"directory",absolutePath:e.path,relativePath:e.segment,children:[...r,...t],memberCount:e.personCount}},I=class{constructor(t){this.companyMap=new Map;this.processedPersonIds=new Set;this.allDepts=new Set;this.cachedResult=null;le(t),this.naming=t}appendRecords(t){if(!t||t.length===0)return;let r="full",o=!1;for(let s of t)if(!this.processedPersonIds.has(s.person_id)&&s.department){let m=s.department.split(/\u3000/);for(let b of m){let c=b.trim();if(!c||c==="\u517C"||c==="\u4FC2")continue;if(/[^\x20-\x7E]/.test(c)){let f=c.split(" ").filter(a=>a.length>0&&a!=="\u517C"&&a!=="\u4FC2");for(let a of f)this.allDepts.add(a)}else this.allDepts.add(c)}}for(let s of t){let m=s.person_id;if(!Number.isFinite(m)||this.processedPersonIds.has(m))continue;this.processedPersonIds.add(m),o=!0;let b=E(s.company_name,this.naming.uncategorizedCompany),c=ce(s,this.naming.unnamedPerson),n=`company:${N(b)}`,f=z(this.companyMap,n,()=>({label:b,segment:n,path:`/${n}`,departments:new Map,persons:[],personCount:0})),a=[],y={allKnownDepartments:this.allDepts};for(let p of pe){let D=p.parse(s,y,r);if(D&&D.length>0){a=D;break}}a.length===0&&a.push([]);for(let p=0;p<a.length;p++){let D=a[p];if(D.length===0){let l=`person:${m}`,i=`${f.path}/${l}`;f.persons.some(h=>h.contact.person_id===m)||f.persons.push({contact:s,label:c,path:i,segment:l,isPrimary:!0});continue}let x=null,k=f.path;if(D.length>0){let l=D[0],i=`department:${N(l)}`;x=z(f.departments,i,()=>({label:l,segment:i,path:`${k}/${i}`,children:new Map,persons:[],personCount:0})),k=x.path,x.personCount+=1;for(let g=1;g<D.length;g++){let h=D[g],T=`department:${N(h)}`;if(!x)throw new Error("[contact-map] unexpected null currentDepartmentNode");x=z(x.children,T,()=>({label:h,segment:T,path:`${k}/${T}`,children:new Map,persons:[],personCount:0})),k=x.path,x.personCount+=1}}else continue;let C=`person:${m}`,S=`${x.path}/${C}`;x.persons.some(l=>l.contact.person_id===m)||x.persons.push({contact:s,label:c,path:S,segment:C,isPrimary:p===0})}f.personCount+=1}o&&(this.cachedResult=null)}getSnapshot(){if(this.cachedResult)return this.cachedResult;let t={},r=L(Array.from(this.companyMap.values())).map(o=>{let s=L(Array.from(o.departments.values())).map(Q),m=v([...o.persons]).map(U),b={name:o.label,type:"directory",absolutePath:o.path,relativePath:o.segment,children:[...m,...s],memberCount:o.personCount};return t[o.label]=b,b});return this.cachedResult={tree:r,companyMap:t},this.cachedResult}append(t){this.appendRecords(t)}build(){return this.getSnapshot().tree}reset(){this.companyMap.clear(),this.processedPersonIds.clear(),this.allDepts.clear(),this.cachedResult=null}getUniquePersonCount(){return this.processedPersonIds.size}get size(){return this.processedPersonIds.size}},We=(e,t)=>{let r=new I(t);return r.appendRecords(e),r.getSnapshot()};var w=e=>{if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null},Ne=e=>!e||typeof e!="object"?null:"item"in e?e.item??null:"person_id"in e?e:null,H=(e,t)=>{if(!e)return{value:null,fieldKey:null};for(let r of t){let o=w(e[r]);if(o)return{value:o,fieldKey:r}}return{value:null,fieldKey:null}},Le=e=>H(e,["custom_email","email"]),Ie=e=>H(e,["custom_mobile_phone_number","mobile_phone_number","company_phone_number"]),Fe=e=>{let t=w(e);if(!t)return null;let r=t.replace(/[^0-9+#*]/g,"");return r.length===0?null:`tel:${r}`},Ae=(e,t)=>{let r=w(e);return r?t?`https://mail.google.com/mail/?view=cm&fs=1&to=${encodeURIComponent(r)}`:`mailto:${encodeURIComponent(r)}`:null},$e=e=>{if(!e)return"-";let t=typeof e=="string"||typeof e=="number"?new Date(e):e;return!(t instanceof Date)||Number.isNaN(t.getTime())?typeof e=="string"?e:"-":t.toISOString().split("T")[0]},ue=e=>{if(!e)return"-";let t=typeof e=="string"||typeof e=="number"?new Date(e):e;return!(t instanceof Date)||Number.isNaN(t.getTime())?typeof e=="string"?e:"-":t.toISOString()},Be=e=>e==null?"-":typeof e=="string"?w(e)??"-":typeof e=="number"?Number.isFinite(e)?String(e):"-":e instanceof Date?ue(e):String(e);var je={listPanelMinWidth:320,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35},ve={listPanelMinWidth:280,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35};function Ue(e){let t=e.listPanelMinWidth+e.detailPanelMinWidth+e.handleThickness+e.listPaddingAndBorder+e.detailPaddingAndBorder,r=t+e.scrollbarSafetyBuffer,o=r+e.hysteresisSafetyMargin,s=o-r;return{physicalMinWidth:t,collapseThreshold:r,expandThreshold:o,hysteresisWidth:s}}function Qe(e,t,r){return e<=0||!Number.isFinite(e)?!1:t?e>=r.collapseThreshold:e>=r.expandThreshold}var Ve={info:(e,...t)=>console.info(`[contact-map] ${e}`,...t),warn:(e,...t)=>console.warn(`[contact-map] ${e}`,...t),error:(e,...t)=>console.error(`[contact-map] ${e}`,...t)};import{formatQuerySets as de,parseQuerySets as me}from"@aiquants/fuzzy-search";import{getNormalizedVariants as fe,normalizeText as he,romajiToKatakana as ge}from"@aiquants/select-box";var G=/[]/g,ye=/^[\s ]+|[\s ]+$/g,be=/\s+/,De=/^[\p{Script=Latin}\s]+$/u,Te=/\p{Script=Latin}/u,J=Object.freeze({convertWidth:!0,convertKana:!0,convertCase:!0,convertRomaji:!1}),X="union",xe=e=>he(e.replace(G,"").replace(ye,""),J),Ce=e=>{if(!De.test(e))return null;let t=ge(e);return Te.test(t)?null:t},Y=e=>e.split(be).filter(Boolean),Z=e=>me(e,X).sets.map(({query:t})=>t),V=e=>Z(e).flatMap(t=>Y(t)),q=e=>de({combine:X,sets:Array.from(new Set(e),t=>({query:t}))}),Se=e=>{let t=Z(e.replace(G,"")).map(o=>Y(xe(o)).join(" ")).filter(o=>o!==""),r=[];for(let o of t){let s=Ce(o);if(s===null)return q(t);r.push(s)}return q(r)},Pe=e=>{let t=new Set([...V(e),...V(Se(e))]),r=new Set;for(let o of t)for(let s of fe(o,J)){let m=s.trim();m&&r.add(m)}return Array.from(r)},ke=/[.*+?^${}()|[\]\\]/g,Re=e=>{let t=Pe(e);if(t.length===0)return null;let r=t.map(o=>o.replace(ke,"\\$&")).sort((o,s)=>s.length-o.length);return new RegExp(r.join("|"),"gi")},Xe=(e,t)=>{let r=Re(e);if(r===null)return s=>s;let o=s=>t.some(m=>{let b=s[m];return typeof b=="string"&&b.search(r)!==-1});return s=>{let m=[],b=[];for(let c of s)o(c.item)?m.push(c):b.push(c);return[...m,...b]}};import{z as u}from"zod";var _e=u.object({person_id:u.union([u.string(),u.number()]).transform(e=>{if(typeof e=="number")return e;let t=e.trim();return parseInt(t,10)}).pipe(u.number()),person_id_redirect_to:u.union([u.string(),u.number()]).nullable().optional().transform(e=>{if(e==null)return null;if(typeof e=="number")return e;let t=e.trim();if(t.length===0)return null;let r=parseInt(t,10);return Number.isNaN(r)?null:r}),full_name:u.string().nullable().optional(),full_name_reading:u.string().nullable().optional(),company_name:u.string().nullable().optional(),company_name_reading:u.string().nullable().optional(),department:u.string().nullable().optional(),title:u.string().nullable().optional(),address:u.string().nullable().optional(),postal_code:u.string().nullable().optional(),email:u.string().nullable().optional(),custom_email:u.string().nullable().optional(),company_phone_number:u.string().nullable().optional(),custom_company_phone_number:u.string().nullable().optional(),company_fax_number:u.string().nullable().optional(),mobile_phone_number:u.string().nullable().optional(),custom_mobile_phone_number:u.string().nullable().optional(),url:u.string().nullable().optional(),contacted_at:u.union([u.date(),u.string()]).nullable().optional(),contacted_by:u.string().nullable().optional(),is_in_eight:u.boolean().nullable().optional(),is_contact_synced:u.boolean().nullable().optional(),is_active:u.boolean(),is_incomplete:u.boolean().nullable().optional(),created_at:u.union([u.date(),u.string()]).optional(),created_by:u.string().optional(),updated_at:u.union([u.date(),u.string()]).optional(),updated_by:u.string().optional()}),et=u.array(_e);export{je as DEFAULT_LIST_LAYOUT_SPEC,ve as DEFAULT_TREE_LAYOUT_SPEC,I as IncrementalTreeBuilder,B as StandardDepartmentParser,K as TitleBasedDepartmentParser,le as assertContactMapTreeNaming,We as buildDirectoryTree,Ue as calculateResponsiveThresholds,Xe as createExactMatchRanker,Re as createSearchQueryPattern,Ve as defaultLogger,Ne as extractContactData,$ as extractDepartmentsFromTitle,$e as formatDate,ue as formatDateTime,Ae as getEmailLinkHref,Qe as getHysteresisBreakpointState,Fe as getPhoneDialHref,Le as getPrimaryEmail,Ie as getPrimaryPhone,Pe as getSearchQuerySpellings,E as normalizeLabel,Se as normalizeSearchInput,w as normalizeString,_e as schemaContactRecord,et as schemaContactRecords,se as splitDepartment,Be as toDisplayValue};
|
|
1
|
+
var E=(e,t)=>e&&e.trim()||t;var ne={\u672C\u90E8:{rank:10,type:"Organization"},\u30AB\u30F3\u30D1\u30CB\u30FC:{rank:10,type:"Organization"},\u672C\u793E:{rank:10,type:"Location"},\u30D6\u30ED\u30C3\u30AF:{rank:11,type:"Location"},\u652F\u5E97:{rank:12,type:"Location"},\u7814\u7A76\u6240:{rank:15,type:"Location"},\u5DE5\u5834:{rank:15,type:"Location"},\u4E8B\u696D\u90E8:{rank:18,type:"Organization"},\u90E8\u9580:{rank:18,type:"Organization"},\u7D71\u62EC\u90E8:{rank:19,type:"Organization"},\u90E8:{rank:20,type:"Organization"},\u958B\u767A:{rank:20,type:"Organization"},\u30B0\u30EB\u30FC\u30D7:{rank:22,type:"Organization"},\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8:{rank:25,type:"Organization"},\u63A8\u9032:{rank:20,type:"Organization"},\u4E8B\u696D\u6240:{rank:25,type:"Location"},\u55B6\u696D\u6240:{rank:28,type:"Location"},\u5BA4:{rank:30,type:"Organization"},\u8AB2:{rank:30,type:"Organization"},\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30D3\u30B8\u30CD\u30B9\u30D7\u30ED\u30C7\u30E5\u30FC\u30B9\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30C1\u30FC\u30E0:{rank:40,type:"Organization"},\u4FC2:{rank:50,type:"Organization"},Department:{rank:20,type:"Organization"},Dept:{rank:20,type:"Organization"},"Dept.":{rank:20,type:"Organization"},Division:{rank:20,type:"Organization"},Div:{rank:20,type:"Organization"},"Div.":{rank:20,type:"Organization"},Section:{rank:30,type:"Organization"},Sect:{rank:30,type:"Organization"},"Sect.":{rank:30,type:"Organization"},Unit:{rank:30,type:"Organization"},Group:{rank:22,type:"Organization"},Team:{rank:40,type:"Organization"},Branch:{rank:12,type:"Location"},Office:{rank:28,type:"Location"},Center:{rank:30,type:"Location"},Centre:{rank:30,type:"Location"},HQ:{rank:10,type:"Organization"},Headquarters:{rank:10,type:"Organization"}},R=e=>{for(let[t,n]of Object.entries(ne))if(e.endsWith(t))return n;return{rank:99,type:"Other"}},F=e=>R(e).rank,re=["\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","Group","Team","\u5BA4","\u8AB2","Unit","Area","\u90E8","Department","Dept","Division","Div","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032"],M=e=>re.find(t=>e.endsWith(t)),oe=new Set(["&","Quality","Innovation","R&D","Solutions","Development","Laboratory","and","Food","Beverage"]),se=(e,t)=>t>1&&(e.endsWith("\u652F\u5E97")||e.endsWith("\u672C\u90E8")||e.endsWith("\u4E8B\u696D\u6240")||e.endsWith("\u5DE5\u5834")),ae=(e,t)=>{if(!t)return!0;let n=R(e),o=R(t);if(n.rank<o.rank||e.endsWith("\u672C\u90E8")&&t.endsWith("\u672C\u90E8"))return!1;let s=M(e),m=M(t);return!(s&&m&&s!==m)},W=(e,t)=>{if(!e)return[];if(e==="\u517C")return["\u517C"];if(e==="\u517C\u52D9")return["\u517C"];if(e.startsWith("\u517C ")||e.startsWith("\u517C\u3000")){let o=e.slice(1).trim();return["\u517C",...W(o,t)]}if(e.startsWith("\u517C\u52D9 ")||e.startsWith("\u517C\u52D9\u3000")){let o=e.slice(2).trim();return["\u517C",...W(o,t)]}let n="";for(let o=e.length-1;o>0;o--){if(e[o]!==" ")continue;let s=e.slice(0,o);if(!oe.has(s)&&t.has(s)){n=s;break}}if(n){let o=n,s=e.slice(n.length),m=/^\s+(and|&)\s+([A-Za-z0-9]+)/i,h=s.match(m);h&&(o=e.slice(0,n.length+h[0].length));let p=e.slice(o.length),r=["Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"];for(let a of r){let b=new RegExp(`^\\s+${a}\\.?(?=$|[\\s,])`,"i"),c=p.match(b);if(c){o=e.slice(0,o.length+c[0].length);break}}let f=e.slice(o.length).trim();return[o,...W(f,t)]}return[e]},ie=(e,t)=>{let o=e.replace(/[\s\u3000]+(?:兼務|兼)[\s\u3000]+/g,"\u3000\u517C\u3000").replace(/^(?:兼務|兼)[\s\u3000]+/,"\u517C\u3000").replace(/[\s\u3000]+(?:兼務|兼)$/,"\u3000\u517C").split(/\u3000/),s=[];for(let m of o){let h=m.trim();h&&s.push(...W(h,t))}return s},K=(e,t)=>{let n=[],o=["\u90E8","\u8AB2","\u5BA4","\u672C\u90E8","\u652F\u5E97","\u55B6\u696D\u6240","\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","\u30BB\u30F3\u30BF\u30FC","\u30AB\u30F3\u30D1\u30CB\u30FC","\u4E8B\u696D\u6240","\u5DE5\u5834","\u7814\u7A76\u6240","\u4FC2","\u90E8\u9580","\u4E8B\u696D\u90E8","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032","\u958B\u767A","Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"],s=e.split(/[\s\u3000,()()[\]]+/).filter(Boolean),m=s.length,h=new Set;for(let p=m;p>=1;p--)for(let r=0;r<=m-p;r++){let f=!1;for(let b=r;b<r+p;b++)if(h.has(b)){f=!0;break}if(f)continue;let a=s.slice(r,r+p).join(" ");if(!(a==="\u517C"||a==="\u517C\u52D9"||a==="\u4FC2"||a==="of"||a==="&"||a==="Quality"||a==="Innovation"||a==="R&D"||a==="Solutions"||a==="Development"||a==="Laboratory"||a==="and"||a==="Food"||a==="Beverage")&&t.allKnownDepartments.has(a)){n.push({name:a,index:r});for(let b=r;b<r+p;b++)h.add(b)}}for(let p=0;p<m;p++){if(h.has(p))continue;let r=s[p];for(r.endsWith("\u9577")&&r.length>1?r=r.slice(0,-1):r.endsWith("\u7D71\u62EC")&&r.length>2&&(r=r.slice(0,-2));;){let c=!1;if(r.startsWith("\u62C5\u5F53")&&r.length>2||r.startsWith("\u5C02\u4EFB")&&r.length>2||r.startsWith("\u517C\u52D9")&&r.length>2?(r=r.slice(2),c=!0):(r.startsWith("\u526F")||r.startsWith("\u517C"))&&r.length>1&&(r=r.slice(1),c=!0),!c)break}if(r.includes("\u30FB")&&!t.allKnownDepartments.has(r)){let c=r.split("\u30FB"),D=c[c.length-1],C=o.find(k=>D.endsWith(k));if(C){for(let k of c){let S=k;o.some(i=>S.endsWith(i))||(S=S+C);let x=r!=="\u517C"&&r!=="\u4FC2"&&r!=="of"&&r!=="&"&&r!=="Quality"&&r!=="Innovation"&&r!=="R&D"&&r!=="Solutions"&&r!=="Development"&&r!=="Laboratory"&&r!=="and"&&r!=="Food"&&r!=="Beverage"&&t.allKnownDepartments.has(S),d=o.some(i=>S.endsWith(i)),l=o.includes(S);(x||d&&!l)&&n.push({name:S,index:p})}continue}}let f=r!=="\u517C"&&r!=="\u4FC2"&&r!=="of"&&r!=="&"&&r!=="Quality"&&r!=="Innovation"&&r!=="R&D"&&r!=="Solutions"&&r!=="Development"&&r!=="Laboratory"&&r!=="and"&&r!=="Food"&&r!=="Beverage"&&t.allKnownDepartments.has(r),a=o.some(c=>r.endsWith(c)),b=o.includes(r);(f||a&&!b)&&n.push({name:r,index:p})}return n.sort((p,r)=>p.index-r.index),n.map(p=>p.name)},$=(e,t)=>{let n=0;for(let o of t)n<e.length&&o===e[n]&&n++;return n===e.length},j={name:"Standard",parse:(e,t,n="full")=>{let o=E(e.department,"");if(!o)return null;let s=ie(o,t.allKnownDepartments),m=new Map;for(let r of s)m.set(r,(m.get(r)||0)+1);let h=r=>{let f=[],a=[];for(let b=0;b<r.length;b++){let c=r[b];if(c==="\u517C"){a.length>0&&(f.push(a),a=[]);continue}let D=R(c),C=D.rank,k=m.get(c)||0,S=se(c,k);if(a.length===0)a.push(c);else{let x=a[a.length-1],d=R(x),l=d.rank;if(a.includes(c))f.push(a),a=[c];else{let i=!1;if(S)i=!0;else if(d.type===D.type){let y=M(x),g=M(c);y&&g&&y!==g||x.endsWith("\u672C\u90E8")&&c.endsWith("\u672C\u90E8")||x.endsWith("\u90E8\u9580")&&c.endsWith("\u4E8B\u696D\u90E8")||x.endsWith("\u4E8B\u696D\u90E8")&&c.endsWith("\u90E8\u9580")||x.endsWith("\u90E8\u9580")&&c.endsWith("\u672C\u90E8")||d.type==="Other"&&D.type==="Other"?i=!0:i=l<C}else i=C>=10,i&&d.type==="Location"&&D.type==="Organization"&&l>=C&&r.slice(b+1).includes(x)&&(i=!1);i?a.push(c):(f.push(a),a=[c])}}if(S){let x=b+1<r.length?r[b+1]:void 0;ae(c,x)&&a.length>0&&(f.push(a),a=[])}}return a.length>0&&f.push(a),f},p=[];if(n==="full"&&p.push(...h(s)),n==="pure_org"){let r=s.filter(f=>R(f).type!=="Location");r.length>0&&p.push(...h(r))}if(e.title){let f=/[^\x20-\x7E]/.test(e.title)?/[\s\u3000]*(?:兼務|兼)[\s\u3000]*/:/[,;]|(?:兼務|兼)/,a=e.title.split(f).filter(Boolean),b=[],c=(d,l)=>{let i=F(d),y=F(l),g=i<y;if(!g){let T=M(d),P=M(l);if(T&&P&&T!==P)g=!0;else if(d.endsWith("\u672C\u90E8")&&l.endsWith("\u672C\u90E8"))g=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u4E8B\u696D\u90E8")||d.endsWith("\u4E8B\u696D\u90E8")&&l.endsWith("\u90E8\u9580"))g=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u672C\u90E8"))g=!0;else{let N=R(d),te=R(l);N.type==="Other"&&te.type==="Other"&&(g=!0)}}return g};for(let d of a){let l=K(d,t);if(l.length===0)continue;let i=[];for(let y of l)if(i.length===0)i.push(y);else{let g=i[i.length-1];if(c(g,y))i.push(y);else{b.push([...i]);let T=!1;for(let P=i.length-2;P>=0;P--){let N=i[P];if(c(N,y)){i=[...i.slice(0,P+1),y],T=!0;break}}T||(i=[y])}}i.length>0&&b.push(i)}let D=[...p],C=d=>a.some(l=>l.includes(d)&&l.length>d.length);for(let d of b){let l=!1;for(let i of p){let y=i.findIndex(g=>d.includes(g));if(y!==-1){let g=i[y],T=d.indexOf(g);if(y>0&&T===0){let P=i.slice(0,y);D.push([...P,...d]),l=!0}else if(T>0&&y===0){let P=d.slice(0,T);D.push([...P,...i]),D.push(d),l=!0}else d.length>i.length-y,l=!0}if(!l){let g=i[i.length-1],T=d[0];c(g,T)&&(D.push([...i,...d]),l=!0)}}l||D.push(d)}let k=[],S=[],x=new Set;for(let d of D){let l=d.join("|");x.has(l)||(x.add(l),S.push(d))}for(let d=0;d<S.length;d++){let l=S[d],i=!1;for(let y=0;y<S.length;y++){if(d===y)continue;let g=S[y];if(g.length>l.length&&g.slice(0,l.length).join("|")===l.join("|")){let T=l[l.length-1];if(!C(T)){i=!0;break}}if(g.length>l.length&&$(l,g)){let T=l[l.length-1];if(!C(T)){i=!0;break}}if(l.length===1&&g.length>0){let T=l[0],P=g[g.length-1];if(T!==P&&P.endsWith(T)){i=!0;break}}}i||k.push(l)}return k.length>0?k:null}if(p.length>0){let r=[];for(let f=0;f<p.length;f++){let a=p[f],b=!1;for(let c=0;c<p.length;c++){if(f===c)continue;let D=p[c];if(D.length>a.length&&$(a,D)){b=!0;break}}b||r.push(a)}return r.length>0?r:null}return null}},B={name:"TitleBased",parse:(e,t,n="full")=>{let o=e.title;if(!o)return null;let s=K(o,t);return s.length>0?[s]:null}};var O=e=>{switch(typeof e){case"string":return JSON.stringify(e);case"bigint":return`${e}n`;case"symbol":return e.toString();case"object":return e===null?"null":v(e);case"function":return v(e);case"number":return Object.is(e,-0)?"-0":String(e);default:return String(e)}},v=e=>{try{return Object.prototype.toString.call(e)}catch{return"[object ?]"}};var le=["uncategorizedCompany","unnamedPerson"],ce=e=>{if(typeof e!="object"||e===null)throw new TypeError(`[contact-map] tree naming must be an object; got ${O(e)}`);for(let t of le){let n=e[t];if(typeof n!="string")throw new TypeError(`[contact-map] tree naming.${t} must be a string; got ${O(n)}`);if(n.trim()==="")throw new RangeError(`[contact-map] tree naming.${t} must not be empty or blank; got ${O(n)}`)}},pe=[j,B],ue=(e,t)=>{let n=E(e.full_name,t),o=E(e.title,"");return o.length>0?`${n} (${o})`:n},I=e=>e.sort((t,n)=>t.label.localeCompare(n.label,"ja")),w=(e,t,n)=>{let o=e.get(t);if(o)return o;let s=n();return e.set(t,s),s},z=e=>encodeURIComponent(e.replace(/\//g,"\uFF0F")),U=e=>e.sort((t,n)=>{let o=!!(t.contact.title&&t.contact.title.trim().length>0),s=!!(n.contact.title&&n.contact.title.trim().length>0);return o&&!s?-1:!o&&s?1:t.label.localeCompare(n.label,"ja")}),H=e=>({name:e.label,type:"file",absolutePath:e.path,relativePath:e.segment,personId:e.contact.person_id,title:e.contact.title||void 0,isPrimary:e.isPrimary}),Q=e=>{let t=I(Array.from(e.children.values())).map(Q),n=U([...e.persons]).map(H);return{name:e.label,type:"directory",absolutePath:e.path,relativePath:e.segment,children:[...n,...t],memberCount:e.personCount}},A=class{constructor(t){this.companyMap=new Map;this.processedPersonIds=new Set;this.allDepts=new Set;this.cachedResult=null;ce(t),this.naming=t}appendRecords(t){if(!t||t.length===0)return;let n="full",o=!1;for(let s of t)if(!this.processedPersonIds.has(s.person_id)&&s.department){let m=s.department.split(/\u3000/);for(let h of m){let p=h.trim();if(!p||p==="\u517C"||p==="\u4FC2")continue;if(/[^\x20-\x7E]/.test(p)){let f=p.split(" ").filter(a=>a.length>0&&a!=="\u517C"&&a!=="\u4FC2");for(let a of f)this.allDepts.add(a)}else this.allDepts.add(p)}}for(let s of t){let m=s.person_id;if(!Number.isFinite(m)||this.processedPersonIds.has(m))continue;this.processedPersonIds.add(m),o=!0;let h=E(s.company_name,this.naming.uncategorizedCompany),p=ue(s,this.naming.unnamedPerson),r=`company:${z(h)}`,f=w(this.companyMap,r,()=>({label:h,segment:r,path:`/${r}`,departments:new Map,persons:[],personCount:0})),a=[],b={allKnownDepartments:this.allDepts};for(let c of pe){let D=c.parse(s,b,n);if(D&&D.length>0){a=D;break}}a.length===0&&a.push([]);for(let c=0;c<a.length;c++){let D=a[c];if(D.length===0){let l=`person:${m}`,i=`${f.path}/${l}`;f.persons.some(g=>g.contact.person_id===m)||f.persons.push({contact:s,label:p,path:i,segment:l,isPrimary:!0});continue}let C=null,k=f.path;if(D.length>0){let l=D[0],i=`department:${z(l)}`;C=w(f.departments,i,()=>({label:l,segment:i,path:`${k}/${i}`,children:new Map,persons:[],personCount:0})),k=C.path,C.personCount+=1;for(let y=1;y<D.length;y++){let g=D[y],T=`department:${z(g)}`;if(!C)throw new Error("[contact-map] unexpected null currentDepartmentNode");C=w(C.children,T,()=>({label:g,segment:T,path:`${k}/${T}`,children:new Map,persons:[],personCount:0})),k=C.path,C.personCount+=1}}else continue;let S=`person:${m}`,x=`${C.path}/${S}`;C.persons.some(l=>l.contact.person_id===m)||C.persons.push({contact:s,label:p,path:x,segment:S,isPrimary:c===0})}f.personCount+=1}o&&(this.cachedResult=null)}getSnapshot(){if(this.cachedResult)return this.cachedResult;let t={},n=I(Array.from(this.companyMap.values())).map(o=>{let s=I(Array.from(o.departments.values())).map(Q),m=U([...o.persons]).map(H),h={name:o.label,type:"directory",absolutePath:o.path,relativePath:o.segment,children:[...m,...s],memberCount:o.personCount};return t[o.label]=h,h});return this.cachedResult={tree:n,companyMap:t},this.cachedResult}append(t){this.appendRecords(t)}build(){return this.getSnapshot().tree}reset(){this.companyMap.clear(),this.processedPersonIds.clear(),this.allDepts.clear(),this.cachedResult=null}getUniquePersonCount(){return this.processedPersonIds.size}get size(){return this.processedPersonIds.size}},$e=(e,t)=>{let n=new A(t);return n.appendRecords(e),n.getSnapshot()};var L=e=>{if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null},je=e=>!e||typeof e!="object"?null:"item"in e?e.item??null:"person_id"in e?e:null,V=(e,t)=>{if(!e)return{value:null,fieldKey:null};for(let n of t){let o=L(e[n]);if(o)return{value:o,fieldKey:n}}return{value:null,fieldKey:null}},Be=e=>V(e,["custom_email","email"]),ve=e=>V(e,["custom_mobile_phone_number","mobile_phone_number","company_phone_number"]),Ue=e=>{let t=L(e);if(!t)return null;let n=t.replace(/[^0-9+#*]/g,"");return n.length===0?null:`tel:${n}`},He=(e,t)=>{let n=L(e);return n?t?`https://mail.google.com/mail/?view=cm&fs=1&to=${encodeURIComponent(n)}`:`mailto:${encodeURIComponent(n)}`:null},_=(e,t)=>String(e).padStart(t,"0"),de=e=>`${_(e.getUTCFullYear(),4)}-${_(e.getUTCMonth()+1,2)}-${_(e.getUTCDate(),2)}`,Qe=e=>`${de(e)} ${_(e.getUTCHours(),2)}:${_(e.getUTCMinutes(),2)}:${_(e.getUTCSeconds(),2)}`,Ve=e=>`${_(e.getFullYear(),4)}-${_(e.getMonth()+1,2)}-${_(e.getDate(),2)} ${_(e.getHours(),2)}:${_(e.getMinutes(),2)}:${_(e.getSeconds(),2)}`,Ge=(e,t)=>{if(e==null||e==="")return"-";let n=typeof e=="string"?new Date(e):e;return Number.isNaN(n.getTime())?typeof e=="string"?e:"-":t(n)},qe=e=>e==null?"-":typeof e=="string"?L(e)??"-":typeof e=="number"?Number.isFinite(e)?String(e):"-":String(e);var Xe={listPanelMinWidth:320,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35},Ye={listPanelMinWidth:280,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35};function Ze(e){let t=e.listPanelMinWidth+e.detailPanelMinWidth+e.handleThickness+e.listPaddingAndBorder+e.detailPaddingAndBorder,n=t+e.scrollbarSafetyBuffer,o=n+e.hysteresisSafetyMargin,s=o-n;return{physicalMinWidth:t,collapseThreshold:n,expandThreshold:o,hysteresisWidth:s}}function et(e,t,n){return e<=0||!Number.isFinite(e)?!1:t?e>=n.collapseThreshold:e>=n.expandThreshold}var nt={info:(e,...t)=>console.info(`[contact-map] ${e}`,...t),warn:(e,...t)=>console.warn(`[contact-map] ${e}`,...t),error:(e,...t)=>console.error(`[contact-map] ${e}`,...t)};import{formatQuerySets as me,parseQuerySets as fe}from"@aiquants/fuzzy-search";import{getNormalizedVariants as ge,normalizeText as he,romajiToKatakana as ye}from"@aiquants/select-box";var J=/[]/g,be=/^[\s ]+|[\s ]+$/g,De=/\s+/,Te=/^[\p{Script=Latin}\s]+$/u,Ce=/\p{Script=Latin}/u,X=Object.freeze({convertWidth:!0,convertKana:!0,convertCase:!0,convertRomaji:!1,normalizeVariants:!1,ignoreSpaces:!1,ignoreSymbols:!1,ignoreLongVowels:!1}),Y="union",Se=65377,xe=65439,Pe=["\uFF9E","\uFF9F"],ke=(()=>{let e=new Map;for(let t=Se;t<=xe;t+=1){let n=String.fromCharCode(t);e.set(n.normalize("NFKC"),n);for(let o of Pe){let s=(n+o).normalize("NFKC");s.length===1&&e.set(s,n+o)}}return e})(),_e=/[-ヿ]/u,Re=e=>{let t=Array.from(e,n=>ke.get(n)??n).join("");return _e.test(t)?null:t},Me=e=>he(e.replace(J,"").replace(be,""),X),Ee=e=>{if(!Te.test(e))return null;let t=ye(e);return Ce.test(t)?null:t},Z=e=>e.split(De).filter(Boolean),ee=e=>fe(e,Y).sets.map(({query:t})=>t),G=e=>ee(e).flatMap(t=>Z(t)),q=e=>me({combine:Y,sets:Array.from(new Set(e),t=>({query:t}))}),We=e=>{let t=ee(e.replace(J,"")).map(o=>Z(Me(o)).join(" ")).filter(o=>o!==""),n=[];for(let o of t){let s=Ee(o);if(s===null)return q(t);n.push(s)}return q(n)},Oe=e=>{let t=new Set([...G(e),...G(We(e))]),n=new Set;for(let o of t)for(let s of ge(o,X)){let m=s.trim();if(!m)continue;n.add(m);let h=Re(m);h!==null&&n.add(h)}return Array.from(n)},Le=/[.*+?^${}()|[\]\\]/g,Ne=e=>{let t=Oe(e);if(t.length===0)return null;let n=t.map(o=>o.replace(Le,"\\$&")).sort((o,s)=>s.length-o.length);return new RegExp(n.join("|"),"gi")},at=(e,t)=>{let n=Ne(e);if(n===null)return s=>s;let o=s=>t.some(m=>{let h=s[m];return typeof h=="string"&&h.search(n)!==-1});return s=>{let m=[],h=[];for(let p of s)o(p.item)?m.push(p):h.push(p);return[...m,...h]}};import{z as u}from"zod";var we=u.object({person_id:u.union([u.string(),u.number()]).transform(e=>{if(typeof e=="number")return e;let t=e.trim();return parseInt(t,10)}).pipe(u.number()),person_id_redirect_to:u.union([u.string(),u.number()]).nullable().optional().transform(e=>{if(e==null)return null;if(typeof e=="number")return e;let t=e.trim();if(t.length===0)return null;let n=parseInt(t,10);return Number.isNaN(n)?null:n}),full_name:u.string().nullable().optional(),full_name_reading:u.string().nullable().optional(),company_name:u.string().nullable().optional(),company_name_reading:u.string().nullable().optional(),department:u.string().nullable().optional(),title:u.string().nullable().optional(),address:u.string().nullable().optional(),postal_code:u.string().nullable().optional(),email:u.string().nullable().optional(),custom_email:u.string().nullable().optional(),company_phone_number:u.string().nullable().optional(),custom_company_phone_number:u.string().nullable().optional(),company_fax_number:u.string().nullable().optional(),mobile_phone_number:u.string().nullable().optional(),custom_mobile_phone_number:u.string().nullable().optional(),url:u.string().nullable().optional(),contacted_at:u.union([u.date(),u.string()]).nullable().optional(),contacted_by:u.string().nullable().optional(),is_in_eight:u.boolean().nullable().optional(),is_contact_synced:u.boolean().nullable().optional(),is_active:u.boolean(),is_incomplete:u.boolean().nullable().optional(),created_at:u.union([u.date(),u.string()]).optional(),created_by:u.string().optional(),updated_at:u.union([u.date(),u.string()]).optional(),updated_by:u.string().optional()}),ct=u.array(we);export{X as CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS,Xe as DEFAULT_LIST_LAYOUT_SPEC,Ye as DEFAULT_TREE_LAYOUT_SPEC,A as IncrementalTreeBuilder,j as StandardDepartmentParser,B as TitleBasedDepartmentParser,ce as assertContactMapTreeNaming,$e as buildDirectoryTree,Ze as calculateResponsiveThresholds,at as createExactMatchRanker,Ne as createSearchQueryPattern,nt as defaultLogger,je as extractContactData,K as extractDepartmentsFromTitle,Ve as formatLocalDateTime,Ge as formatRecordTimestamp,de as formatStoredDate,Qe as formatStoredDateTime,He as getEmailLinkHref,et as getHysteresisBreakpointState,Ue as getPhoneDialHref,Be as getPrimaryEmail,ve as getPrimaryPhone,Oe as getSearchQuerySpellings,E as normalizeLabel,We as normalizeSearchInput,L as normalizeString,we as schemaContactRecord,ct as schemaContactRecords,ie as splitDepartment,qe as toDisplayValue};
|
package/dist/server.d.mts
CHANGED
|
@@ -37,17 +37,9 @@ interface ContactMapAuthResult {
|
|
|
37
37
|
} | null;
|
|
38
38
|
cookie?: string;
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}): Promise<{
|
|
44
|
-
user: unknown;
|
|
45
|
-
cookie?: string;
|
|
46
|
-
}>;
|
|
47
|
-
(request: Request, options: {
|
|
48
|
-
failureRedirect: null;
|
|
49
|
-
}): Promise<ContactMapAuthResult>;
|
|
50
|
-
}
|
|
40
|
+
type ContactMapAuthenticate = (request: Request, options: {
|
|
41
|
+
failureRedirect: null;
|
|
42
|
+
}) => Promise<ContactMapAuthResult>;
|
|
51
43
|
interface QueryOptions {
|
|
52
44
|
signal?: AbortSignal;
|
|
53
45
|
}
|
package/dist/server.d.ts
CHANGED
|
@@ -37,17 +37,9 @@ interface ContactMapAuthResult {
|
|
|
37
37
|
} | null;
|
|
38
38
|
cookie?: string;
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}): Promise<{
|
|
44
|
-
user: unknown;
|
|
45
|
-
cookie?: string;
|
|
46
|
-
}>;
|
|
47
|
-
(request: Request, options: {
|
|
48
|
-
failureRedirect: null;
|
|
49
|
-
}): Promise<ContactMapAuthResult>;
|
|
50
|
-
}
|
|
40
|
+
type ContactMapAuthenticate = (request: Request, options: {
|
|
41
|
+
failureRedirect: null;
|
|
42
|
+
}) => Promise<ContactMapAuthResult>;
|
|
51
43
|
interface QueryOptions {
|
|
52
44
|
signal?: AbortSignal;
|
|
53
45
|
}
|
package/dist/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var O=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var tt=Object.prototype.hasOwnProperty;var et=(t,e)=>{for(var r in e)O(t,r,{get:e[r],enumerable:!0})},rt=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of J(e))!tt.call(t,c)&&c!==r&&O(t,c,{get:()=>e[c],enumerable:!(s=G(e,c))||s.enumerable});return t};var nt=t=>rt(O({},"__esModule",{value:!0}),t);var gt={};et(gt,{DEFAULT_STREAM_CHUNK_SIZE:()=>x,DEFAULT_STREAM_ERROR_CLIENT_MESSAGE:()=>Z,countActiveContactsQuery:()=>R,createContactMapServer:()=>ft,createContactMapStreamHandler:()=>B,defineContactMapTable:()=>_t,getContactsStreamChunkQuery:()=>A});module.exports=nt(gt);var a=t=>{switch(typeof t){case"string":return JSON.stringify(t);case"bigint":return`${t}n`;case"symbol":return t.toString();case"object":return t===null?"null":M(t);case"function":return M(t);case"number":return Object.is(t,-0)?"-0":String(t);default:return String(t)}},M=t=>{try{return Object.prototype.toString.call(t)}catch{return"[object ?]"}};var L={info:(t,...e)=>console.info(`[contact-map] ${t}`,...e),warn:(t,...e)=>console.warn(`[contact-map] ${t}`,...e),error:(t,...e)=>console.error(`[contact-map] ${t}`,...e)};var v=`an integer from 1 to ${Number.MAX_SAFE_INTEGER}`,T=(t,e,r="")=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${v}${r}; got ${a(e)}`);if(!(Number.isSafeInteger(e)&&e>0))throw new RangeError(`[contact-map] ${t} must be ${v}${r}; got ${a(e)}`)};var o=require("drizzle-orm");var D=t=>{if(typeof t!="object"||t===null)return!1;try{let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}catch{return!1}};var ot=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{7}Z$/,st=/^(0|-?[1-9]\d*)$/,at=/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}\.\d{7})$/,ct=23,j="a UTC timestamp with 7 fractional digits as the server writes it (YYYY-MM-DDThh:mm:ss.fffffffZ), or null",U=`an integer from ${Number.MIN_SAFE_INTEGER} to ${Number.MAX_SAFE_INTEGER}`,E=t=>{if(!ot.test(t))return!1;let e=`${t.slice(0,ct)}Z`,r=new Date(e);return!Number.isNaN(r.getTime())&&r.toISOString()===e&&r.getUTCFullYear()>=1},q=t=>{let e=at.exec(t),r=e===null?null:`${e[1]}T${e[2]}Z`;if(r===null||!E(r))throw new TypeError(`[contact-map] the database text of the stream cursor's contacted_at must be YYYY-MM-DD hh:mm:ss.fffffff (CONVERT style 121 of datetime2(7)); got ${a(t)}`);return r},Q=t=>t.slice(0,-1),z=t=>Number.isSafeInteger(t),F=(t,e)=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${U}; got ${a(e)}`);if(!z(e))throw new RangeError(`[contact-map] ${t} must be ${U}; got ${a(e)}`);return e},V=t=>{if(!st.test(t))return null;let e=Number(t);return z(e)?e:null},Y=t=>F("the database value of the stream cursor's person_id",t),H=t=>{if(t===null)return;if(!D(t))throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor must be null or a plain object { contacted_at, person_id } as the server writes it; got ${a(t)}`);let e=t.contacted_at;if(e!==null){if(typeof e!="string")throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${j}; got ${a(e)}`);if(!E(e))throw new RangeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${j}; got ${a(e)}`)}F("getContactsStreamChunkQuery cursor.person_id",t.person_id)};var x=200,w=t=>{if(t?.aborted)throw new DOMException("The operation was aborted","AbortError")};async function R(t,e,r,s){return w(s?.signal),await r(),w(s?.signal),(await t.select({count:o.sql`count(*)`}).from(e).where((0,o.eq)(e.is_active,!0)))[0]?.count??0}async function A(t,e,r,s,c,d){T("getContactsStreamChunkQuery limit",s),H(r),w(d?.signal),await c(),w(d?.signal);let _=(0,o.eq)(e.is_active,!0),C=_;if(r){let{contacted_at:u,person_id:y}=r;if(u!==null){let l=o.sql`CAST(${Q(u)} AS datetime2(7))`,S=(0,o.and)(_,(0,o.or)((0,o.lt)(e.contacted_at,l),(0,o.and)((0,o.eq)(e.contacted_at,l),(0,o.lt)(e.person_id,y)),(0,o.isNull)(e.contacted_at)));S&&(C=S)}else{let l=(0,o.and)(_,(0,o.isNull)(e.contacted_at),(0,o.lt)(e.person_id,y));l&&(C=l)}}let g=await t.select({record:e,cursorContactedAt:o.sql`CONVERT(varchar(27), CAST(${e.contacted_at} AS datetime2(7)), 121)`}).from(e).where(C).orderBy((0,o.desc)(e.contacted_at),(0,o.desc)(e.person_id)).offset(0).fetch(s);w(d?.signal);let m=g.length>0?g[g.length-1]:null,h=m?{contacted_at:m.cursorContactedAt===null?null:q(m.cursorContactedAt),person_id:Y(m.record.person_id)}:null,b=g.length<s;return{records:g.map(u=>u.record),nextCursor:h,isLast:b}}var it=100,ut=300,Z="stream interrupted by server error",dt="authentication failed on the server",mt=/^datetime2(\([0-7]\))?$/;function lt(t){let e=t.get("cursor_person_id"),r=t.get("cursor_contacted_at");if(e===null)return r!==null?{ok:!1,message:"cursor_contacted_at requires cursor_person_id"}:{ok:!0,cursor:null};let s=V(e);return s===null?{ok:!1,message:`Invalid cursor_person_id: ${e}`}:r===null?{ok:!0,cursor:{contacted_at:null,person_id:s}}:E(r)?{ok:!0,cursor:{contacted_at:r,person_id:s}}:{ok:!1,message:`Invalid cursor_contacted_at: ${r}`}}function pt(t){if(t.db===void 0||t.db===null)throw new TypeError(`[contact-map] server config db must be the Drizzle database the contact records are read from; got ${a(t.db)}`);if(t.table===void 0||t.table===null)throw new TypeError(`[contact-map] server config table must be the Drizzle table of the contact records; got ${a(t.table)}`);let e=t.table.contacted_at;if(typeof e?.getSQLType!="function")throw new TypeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${a(e)}`);let r=e.getSQLType();if(typeof r!="string"||!mt.test(r))throw new RangeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${a(r)}`);if(typeof t.ensureConnection!="function")throw new TypeError(`[contact-map] server config ensureConnection must be the function that connects the database pool before each query (pass async () => {} for a pool that is always connected); got ${a(t.ensureConnection)}`);if(typeof t.authenticate!="function")throw new TypeError(`[contact-map] server config authenticate must be the function that returns the request's user (to serve the stream without authentication, pass one that always returns a user); got ${a(t.authenticate)}`);for(let s of["firstBatchSize","nextBatchSize"])t[s]!==void 0&&T(`server config ${s}`,t[s]," (leave it out for the default)")}function B(t){pt(t);let{db:e,table:r,ensureConnection:s,authenticate:c,logger:d=L,firstBatchSize:_=it,nextBatchSize:C=ut,streamErrorClientMessage:g=Z}=t;return async m=>{let h=m instanceof Request?m:m.request,b=lt(new URL(h.url).searchParams);if(!b.ok)return Response.json({error:b.message},{status:400});let u,y;try{let i=await c(h,{failureRedirect:null});y=i.user,u=i.cookie}catch(i){return d.error("Authentication infrastructure error:",i),Response.json({error:dt},{status:500})}if(!y)return Response.json({error:"Unauthorized"},{status:401,headers:u?{"Set-Cookie":u}:void 0});let l=b.cursor,S=_,P=!0,k=null,$=new TextEncoder,p=new AbortController;h.signal.aborted?p.abort():h.signal.addEventListener("abort",()=>{p.abort()},{once:!0});let K=new ReadableStream({async pull(i){if(p.signal.aborted||h.signal.aborted){i.close();return}try{let f=await A(e,r,l,S,s,{signal:p.signal});S=C;let W={records:f.records,nextCursor:f.nextCursor,isLast:f.isLast};if(P&&(P=!1,k=R(e,r,s,{signal:p.signal}).then(N=>{if(!p.signal.aborted)try{let X={type:"METADATA",total:N};i.enqueue($.encode(`${JSON.stringify(X)}
|
|
2
2
|
`))}catch{}}).catch(N=>{d.warn("Non-blocking countActiveContacts failed:",N)})),i.enqueue($.encode(`${JSON.stringify(W)}
|
|
3
3
|
`)),f.isLast||!f.nextCursor){k&&await k,i.close();return}l=f.nextCursor}catch(f){if(p.signal.aborted){try{i.close()}catch{}return}d.error("Streaming error during chunk fetch:",f);try{i.enqueue($.encode(`${JSON.stringify({error:g})}
|
|
4
|
-
`)),i.close()}catch{}}},cancel(){p.abort()}}),I=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-store, no-transform","X-Content-Type-Options":"nosniff"});return u&&I.set("Set-Cookie",u),new Response(K,{headers:I})}}function
|
|
4
|
+
`)),i.close()}catch{}}},cancel(){p.abort()}}),I=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-store, no-transform","X-Content-Type-Options":"nosniff"});return u&&I.set("Set-Cookie",u),new Response(K,{headers:I})}}function ft(t){return{streamLoader:B(t),countActiveContacts:c=>R(t.db,t.table,t.ensureConnection,c),getContactsStreamChunk:(c=null,d=x,_)=>A(t.db,t.table,c,d,t.ensureConnection,_)}}var n=require("drizzle-orm/mssql-core");function _t(t,e){return t.table(e,{person_id:(0,n.bigint)("person_id",{mode:"number"}).identity().notNull(),person_id_redirect_to:(0,n.bigint)("person_id_redirect_to",{mode:"number"}),full_name:(0,n.nvarchar)("full_name",{length:1e3}),full_name_reading:(0,n.nvarchar)("full_name_reading",{length:1e3}),company_name:(0,n.nvarchar)("company_name",{length:1e3}),company_name_reading:(0,n.nvarchar)("company_name_reading",{length:1e3}),department:(0,n.nvarchar)("department",{length:1e3}),title:(0,n.nvarchar)("title",{length:1e3}),address:(0,n.nvarchar)("address",{length:1e3}),postal_code:(0,n.nvarchar)("postal_code",{length:100}),email:(0,n.nvarchar)("email",{length:100}),custom_email:(0,n.nvarchar)("custom_email",{length:100}),company_phone_number:(0,n.nvarchar)("company_phone_number",{length:100}),custom_company_phone_number:(0,n.nvarchar)("custom_company_phone_number",{length:100}),company_fax_number:(0,n.nvarchar)("company_fax_number",{length:100}),mobile_phone_number:(0,n.nvarchar)("mobile_phone_number",{length:100}),custom_mobile_phone_number:(0,n.nvarchar)("custom_mobile_phone_number",{length:100}),url:(0,n.nvarchar)("url",{length:100}),contacted_at:(0,n.datetime2)("contacted_at",{precision:7}),contacted_by:(0,n.nvarchar)("contacted_by",{length:100}),is_in_eight:(0,n.bit)("is_in_eight").default(!0).notNull(),is_contact_synced:(0,n.bit)("is_contact_synced").default(!1).notNull(),is_active:(0,n.bit)("is_active").default(!0).notNull(),is_incomplete:(0,n.bit)("is_incomplete").default(!1).notNull(),created_at:(0,n.datetime2)("created_at",{precision:7}),created_by:(0,n.nvarchar)("created_by",{length:50}),updated_at:(0,n.datetime2)("updated_at",{precision:7}),updated_by:(0,n.nvarchar)("updated_by",{length:50})},r=>[(0,n.primaryKey)({columns:[r.person_id]})])}0&&(module.exports={DEFAULT_STREAM_CHUNK_SIZE,DEFAULT_STREAM_ERROR_CLIENT_MESSAGE,countActiveContactsQuery,createContactMapServer,createContactMapStreamHandler,defineContactMapTable,getContactsStreamChunkQuery});
|
package/dist/server.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var s=t=>{switch(typeof t){case"string":return JSON.stringify(t);case"bigint":return`${t}n`;case"symbol":return t.toString();case"object":return t===null?"null":D(t);case"function":return D(t);case"number":return Object.is(t,-0)?"-0":String(t);default:return String(t)}},D=t=>{try{return Object.prototype.toString.call(t)}catch{return"[object ?]"}};var j={info:(t,...e)=>console.info(`[contact-map] ${t}`,...e),warn:(t,...e)=>console.warn(`[contact-map] ${t}`,...e),error:(t,...e)=>console.error(`[contact-map] ${t}`,...e)};var U=`an integer from 1 to ${Number.MAX_SAFE_INTEGER}`,w=(t,e,r="")=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${U}${r}; got ${s(e)}`);if(!(Number.isSafeInteger(e)&&e>0))throw new RangeError(`[contact-map] ${t} must be ${U}${r}; got ${s(e)}`)};import{and as $,desc as W,eq as
|
|
1
|
+
var s=t=>{switch(typeof t){case"string":return JSON.stringify(t);case"bigint":return`${t}n`;case"symbol":return t.toString();case"object":return t===null?"null":D(t);case"function":return D(t);case"number":return Object.is(t,-0)?"-0":String(t);default:return String(t)}},D=t=>{try{return Object.prototype.toString.call(t)}catch{return"[object ?]"}};var j={info:(t,...e)=>console.info(`[contact-map] ${t}`,...e),warn:(t,...e)=>console.warn(`[contact-map] ${t}`,...e),error:(t,...e)=>console.error(`[contact-map] ${t}`,...e)};var U=`an integer from 1 to ${Number.MAX_SAFE_INTEGER}`,w=(t,e,r="")=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${U}${r}; got ${s(e)}`);if(!(Number.isSafeInteger(e)&&e>0))throw new RangeError(`[contact-map] ${t} must be ${U}${r}; got ${s(e)}`)};import{and as $,desc as W,eq as O,isNull as X,lt as N,or as ct,sql as x}from"drizzle-orm";var q=t=>{if(typeof t!="object"||t===null)return!1;try{let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}catch{return!1}};var nt=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{7}Z$/,ot=/^(0|-?[1-9]\d*)$/,st=/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}\.\d{7})$/,at=23,Q="a UTC timestamp with 7 fractional digits as the server writes it (YYYY-MM-DDThh:mm:ss.fffffffZ), or null",z=`an integer from ${Number.MIN_SAFE_INTEGER} to ${Number.MAX_SAFE_INTEGER}`,T=t=>{if(!nt.test(t))return!1;let e=`${t.slice(0,at)}Z`,r=new Date(e);return!Number.isNaN(r.getTime())&&r.toISOString()===e&&r.getUTCFullYear()>=1},F=t=>{let e=st.exec(t),r=e===null?null:`${e[1]}T${e[2]}Z`;if(r===null||!T(r))throw new TypeError(`[contact-map] the database text of the stream cursor's contacted_at must be YYYY-MM-DD hh:mm:ss.fffffff (CONVERT style 121 of datetime2(7)); got ${s(t)}`);return r},V=t=>t.slice(0,-1),Y=t=>Number.isSafeInteger(t),H=(t,e)=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${z}; got ${s(e)}`);if(!Y(e))throw new RangeError(`[contact-map] ${t} must be ${z}; got ${s(e)}`);return e},Z=t=>{if(!ot.test(t))return null;let e=Number(t);return Y(e)?e:null},B=t=>H("the database value of the stream cursor's person_id",t),K=t=>{if(t===null)return;if(!q(t))throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor must be null or a plain object { contacted_at, person_id } as the server writes it; got ${s(t)}`);let e=t.contacted_at;if(e!==null){if(typeof e!="string")throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${Q}; got ${s(e)}`);if(!T(e))throw new RangeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${Q}; got ${s(e)}`)}H("getContactsStreamChunkQuery cursor.person_id",t.person_id)};var G=200,S=t=>{if(t?.aborted)throw new DOMException("The operation was aborted","AbortError")};async function P(t,e,r,o){return S(o?.signal),await r(),S(o?.signal),(await t.select({count:x`count(*)`}).from(e).where(O(e.is_active,!0)))[0]?.count??0}async function I(t,e,r,o,u,i){w("getContactsStreamChunkQuery limit",o),K(r),S(i?.signal),await u(),S(i?.signal);let f=O(e.is_active,!0),h=f;if(r){let{contacted_at:c,person_id:b}=r;if(c!==null){let m=x`CAST(${V(c)} AS datetime2(7))`,y=$(f,ct(N(e.contacted_at,m),$(O(e.contacted_at,m),N(e.person_id,b)),X(e.contacted_at)));y&&(h=y)}else{let m=$(f,X(e.contacted_at),N(e.person_id,b));m&&(h=m)}}let _=await t.select({record:e,cursorContactedAt:x`CONVERT(varchar(27), CAST(${e.contacted_at} AS datetime2(7)), 121)`}).from(e).where(h).orderBy(W(e.contacted_at),W(e.person_id)).offset(0).fetch(o);S(i?.signal);let d=_.length>0?_[_.length-1]:null,g=d?{contacted_at:d.cursorContactedAt===null?null:F(d.cursorContactedAt),person_id:B(d.record.person_id)}:null,C=_.length<o;return{records:_.map(c=>c.record),nextCursor:g,isLast:C}}var it=100,ut=300,dt="stream interrupted by server error",mt="authentication failed on the server",lt=/^datetime2(\([0-7]\))?$/;function pt(t){let e=t.get("cursor_person_id"),r=t.get("cursor_contacted_at");if(e===null)return r!==null?{ok:!1,message:"cursor_contacted_at requires cursor_person_id"}:{ok:!0,cursor:null};let o=Z(e);return o===null?{ok:!1,message:`Invalid cursor_person_id: ${e}`}:r===null?{ok:!0,cursor:{contacted_at:null,person_id:o}}:T(r)?{ok:!0,cursor:{contacted_at:r,person_id:o}}:{ok:!1,message:`Invalid cursor_contacted_at: ${r}`}}function ft(t){if(t.db===void 0||t.db===null)throw new TypeError(`[contact-map] server config db must be the Drizzle database the contact records are read from; got ${s(t.db)}`);if(t.table===void 0||t.table===null)throw new TypeError(`[contact-map] server config table must be the Drizzle table of the contact records; got ${s(t.table)}`);let e=t.table.contacted_at;if(typeof e?.getSQLType!="function")throw new TypeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${s(e)}`);let r=e.getSQLType();if(typeof r!="string"||!lt.test(r))throw new RangeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${s(r)}`);if(typeof t.ensureConnection!="function")throw new TypeError(`[contact-map] server config ensureConnection must be the function that connects the database pool before each query (pass async () => {} for a pool that is always connected); got ${s(t.ensureConnection)}`);if(typeof t.authenticate!="function")throw new TypeError(`[contact-map] server config authenticate must be the function that returns the request's user (to serve the stream without authentication, pass one that always returns a user); got ${s(t.authenticate)}`);for(let o of["firstBatchSize","nextBatchSize"])t[o]!==void 0&&w(`server config ${o}`,t[o]," (leave it out for the default)")}function _t(t){ft(t);let{db:e,table:r,ensureConnection:o,authenticate:u,logger:i=j,firstBatchSize:f=it,nextBatchSize:h=ut,streamErrorClientMessage:_=dt}=t;return async d=>{let g=d instanceof Request?d:d.request,C=pt(new URL(g.url).searchParams);if(!C.ok)return Response.json({error:C.message},{status:400});let c,b;try{let a=await u(g,{failureRedirect:null});b=a.user,c=a.cookie}catch(a){return i.error("Authentication infrastructure error:",a),Response.json({error:mt},{status:500})}if(!b)return Response.json({error:"Unauthorized"},{status:401,headers:c?{"Set-Cookie":c}:void 0});let m=C.cursor,y=f,L=!0,R=null,A=new TextEncoder,l=new AbortController;g.signal.aborted?l.abort():g.signal.addEventListener("abort",()=>{l.abort()},{once:!0});let tt=new ReadableStream({async pull(a){if(l.signal.aborted||g.signal.aborted){a.close();return}try{let p=await I(e,r,m,y,o,{signal:l.signal});y=h;let et={records:p.records,nextCursor:p.nextCursor,isLast:p.isLast};if(L&&(L=!1,R=P(e,r,o,{signal:l.signal}).then(k=>{if(!l.signal.aborted)try{let rt={type:"METADATA",total:k};a.enqueue(A.encode(`${JSON.stringify(rt)}
|
|
2
2
|
`))}catch{}}).catch(k=>{i.warn("Non-blocking countActiveContacts failed:",k)})),a.enqueue(A.encode(`${JSON.stringify(et)}
|
|
3
3
|
`)),p.isLast||!p.nextCursor){R&&await R,a.close();return}m=p.nextCursor}catch(p){if(l.signal.aborted){try{a.close()}catch{}return}i.error("Streaming error during chunk fetch:",p);try{a.enqueue(A.encode(`${JSON.stringify({error:_})}
|
|
4
|
-
`)),a.close()}catch{}}},cancel(){l.abort()}}),v=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-store, no-transform","X-Content-Type-Options":"nosniff"});return c&&v.set("Set-Cookie",c),new Response(tt,{headers:v})}}function
|
|
4
|
+
`)),a.close()}catch{}}},cancel(){l.abort()}}),v=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-store, no-transform","X-Content-Type-Options":"nosniff"});return c&&v.set("Set-Cookie",c),new Response(tt,{headers:v})}}function Mt(t){return{streamLoader:_t(t),countActiveContacts:u=>P(t.db,t.table,t.ensureConnection,u),getContactsStreamChunk:(u=null,i=G,f)=>I(t.db,t.table,u,i,t.ensureConnection,f)}}import{bigint as J,bit as E,datetime2 as M,nvarchar as n,primaryKey as gt}from"drizzle-orm/mssql-core";function Dt(t,e){return t.table(e,{person_id:J("person_id",{mode:"number"}).identity().notNull(),person_id_redirect_to:J("person_id_redirect_to",{mode:"number"}),full_name:n("full_name",{length:1e3}),full_name_reading:n("full_name_reading",{length:1e3}),company_name:n("company_name",{length:1e3}),company_name_reading:n("company_name_reading",{length:1e3}),department:n("department",{length:1e3}),title:n("title",{length:1e3}),address:n("address",{length:1e3}),postal_code:n("postal_code",{length:100}),email:n("email",{length:100}),custom_email:n("custom_email",{length:100}),company_phone_number:n("company_phone_number",{length:100}),custom_company_phone_number:n("custom_company_phone_number",{length:100}),company_fax_number:n("company_fax_number",{length:100}),mobile_phone_number:n("mobile_phone_number",{length:100}),custom_mobile_phone_number:n("custom_mobile_phone_number",{length:100}),url:n("url",{length:100}),contacted_at:M("contacted_at",{precision:7}),contacted_by:n("contacted_by",{length:100}),is_in_eight:E("is_in_eight").default(!0).notNull(),is_contact_synced:E("is_contact_synced").default(!1).notNull(),is_active:E("is_active").default(!0).notNull(),is_incomplete:E("is_incomplete").default(!1).notNull(),created_at:M("created_at",{precision:7}),created_by:n("created_by",{length:50}),updated_at:M("updated_at",{precision:7}),updated_by:n("updated_by",{length:50})},r=>[gt({columns:[r.person_id]})])}export{G as DEFAULT_STREAM_CHUNK_SIZE,dt as DEFAULT_STREAM_ERROR_CLIENT_MESSAGE,P as countActiveContactsQuery,Mt as createContactMapServer,_t as createContactMapStreamHandler,Dt as defineContactMapTable,I as getContactsStreamChunkQuery};
|