aads-cli 1.0.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/LICENSE +21 -0
- package/README.ja.md +159 -0
- package/README.md +159 -0
- package/data/campaign-layer-policy.json +68 -0
- package/dist/analysis/anomaly-detection.d.ts +16 -0
- package/dist/analysis/anomaly-detection.d.ts.map +1 -0
- package/dist/analysis/anomaly-detection.js +55 -0
- package/dist/analysis/anomaly-detection.js.map +1 -0
- package/dist/analysis/auto-to-manual.d.ts +11 -0
- package/dist/analysis/auto-to-manual.d.ts.map +1 -0
- package/dist/analysis/auto-to-manual.js +57 -0
- package/dist/analysis/auto-to-manual.js.map +1 -0
- package/dist/analysis/campaign-layer-classifier.d.ts +10 -0
- package/dist/analysis/campaign-layer-classifier.d.ts.map +1 -0
- package/dist/analysis/campaign-layer-classifier.js +50 -0
- package/dist/analysis/campaign-layer-classifier.js.map +1 -0
- package/dist/analysis/campaign-structure.d.ts +3 -0
- package/dist/analysis/campaign-structure.d.ts.map +1 -0
- package/dist/analysis/campaign-structure.js +51 -0
- package/dist/analysis/campaign-structure.js.map +1 -0
- package/dist/analysis/cpc-optimizer.d.ts +11 -0
- package/dist/analysis/cpc-optimizer.d.ts.map +1 -0
- package/dist/analysis/cpc-optimizer.js +46 -0
- package/dist/analysis/cpc-optimizer.js.map +1 -0
- package/dist/analysis/performance-analyzer.d.ts +3 -0
- package/dist/analysis/performance-analyzer.d.ts.map +1 -0
- package/dist/analysis/performance-analyzer.js +58 -0
- package/dist/analysis/performance-analyzer.js.map +1 -0
- package/dist/analysis/sku-classifier.d.ts +3 -0
- package/dist/analysis/sku-classifier.d.ts.map +1 -0
- package/dist/analysis/sku-classifier.js +64 -0
- package/dist/analysis/sku-classifier.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +351 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/campaign-layer-policy.d.ts +28 -0
- package/dist/config/campaign-layer-policy.d.ts.map +1 -0
- package/dist/config/campaign-layer-policy.js +56 -0
- package/dist/config/campaign-layer-policy.js.map +1 -0
- package/dist/config/constants.d.ts +74 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +61 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/optimisation-config.d.ts +24 -0
- package/dist/config/optimisation-config.d.ts.map +1 -0
- package/dist/config/optimisation-config.js +41 -0
- package/dist/config/optimisation-config.js.map +1 -0
- package/dist/core/header-mapper.d.ts +6 -0
- package/dist/core/header-mapper.d.ts.map +1 -0
- package/dist/core/header-mapper.js +34 -0
- package/dist/core/header-mapper.js.map +1 -0
- package/dist/core/normalizer.d.ts +9 -0
- package/dist/core/normalizer.d.ts.map +1 -0
- package/dist/core/normalizer.js +76 -0
- package/dist/core/normalizer.js.map +1 -0
- package/dist/io/csv-reader.d.ts +3 -0
- package/dist/io/csv-reader.d.ts.map +1 -0
- package/dist/io/csv-reader.js +52 -0
- package/dist/io/csv-reader.js.map +1 -0
- package/dist/io/excel-reader.d.ts +4 -0
- package/dist/io/excel-reader.d.ts.map +1 -0
- package/dist/io/excel-reader.js +83 -0
- package/dist/io/excel-reader.js.map +1 -0
- package/dist/io/excel-writer.d.ts +7 -0
- package/dist/io/excel-writer.d.ts.map +1 -0
- package/dist/io/excel-writer.js +42 -0
- package/dist/io/excel-writer.js.map +1 -0
- package/dist/pipeline/analyze-pipeline.d.ts +8 -0
- package/dist/pipeline/analyze-pipeline.d.ts.map +1 -0
- package/dist/pipeline/analyze-pipeline.js +145 -0
- package/dist/pipeline/analyze-pipeline.js.map +1 -0
- package/dist/pipeline/types.d.ts +142 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +2 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/ranking/keyword-matcher.d.ts +10 -0
- package/dist/ranking/keyword-matcher.d.ts.map +1 -0
- package/dist/ranking/keyword-matcher.js +62 -0
- package/dist/ranking/keyword-matcher.js.map +1 -0
- package/dist/ranking/ranking-db.d.ts +14 -0
- package/dist/ranking/ranking-db.d.ts.map +1 -0
- package/dist/ranking/ranking-db.js +97 -0
- package/dist/ranking/ranking-db.js.map +1 -0
- package/dist/ranking/seo-factor.d.ts +5 -0
- package/dist/ranking/seo-factor.d.ts.map +1 -0
- package/dist/ranking/seo-factor.js +57 -0
- package/dist/ranking/seo-factor.js.map +1 -0
- package/dist/ranking/types.d.ts +25 -0
- package/dist/ranking/types.d.ts.map +1 -0
- package/dist/ranking/types.js +2 -0
- package/dist/ranking/types.js.map +1 -0
- package/dist/schemas/types.d.ts +32 -0
- package/dist/schemas/types.d.ts.map +1 -0
- package/dist/schemas/types.js +2 -0
- package/dist/schemas/types.js.map +1 -0
- package/dist/utils/date-utils.d.ts +17 -0
- package/dist/utils/date-utils.d.ts.map +1 -0
- package/dist/utils/date-utils.js +56 -0
- package/dist/utils/date-utils.js.map +1 -0
- package/dist/utils/logger.d.ts +12 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +45 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +65 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type CampaignLayerId = "L0" | "L1" | "L2" | "L3" | "L4";
|
|
2
|
+
export interface LayerDefinition {
|
|
3
|
+
name: string;
|
|
4
|
+
nameJa: string;
|
|
5
|
+
purpose: string;
|
|
6
|
+
alwaysOn: boolean;
|
|
7
|
+
budgetSharePct: number;
|
|
8
|
+
campaignPrefix: string;
|
|
9
|
+
targetAcos: number;
|
|
10
|
+
}
|
|
11
|
+
export interface NamingPattern {
|
|
12
|
+
pattern: string;
|
|
13
|
+
layer: CampaignLayerId;
|
|
14
|
+
}
|
|
15
|
+
export interface PromotionRule {
|
|
16
|
+
from: CampaignLayerId;
|
|
17
|
+
to: CampaignLayerId;
|
|
18
|
+
description: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CampaignLayerPolicy {
|
|
21
|
+
version: string;
|
|
22
|
+
layers: Record<CampaignLayerId, LayerDefinition>;
|
|
23
|
+
namingPatterns: NamingPattern[];
|
|
24
|
+
fallbackClassification: Record<string, CampaignLayerId>;
|
|
25
|
+
promotionRules: PromotionRule[];
|
|
26
|
+
}
|
|
27
|
+
export declare const loadCampaignLayerPolicy: (filePath?: string) => Promise<CampaignLayerPolicy | undefined>;
|
|
28
|
+
//# sourceMappingURL=campaign-layer-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-layer-policy.d.ts","sourceRoot":"","sources":["../../src/config/campaign-layer-policy.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,eAAe,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACjD,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxD,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAwCD,eAAO,MAAM,uBAAuB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAYxG,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const CURRENT_FILE = fileURLToPath(import.meta.url);
|
|
5
|
+
const CURRENT_DIR = path.dirname(CURRENT_FILE);
|
|
6
|
+
const DEFAULT_POLICY_PATH = path.resolve(CURRENT_DIR, "../../data/campaign-layer-policy.json");
|
|
7
|
+
const VALID_LAYER_IDS = ["L0", "L1", "L2", "L3", "L4"];
|
|
8
|
+
const isValidLayerId = (id) => VALID_LAYER_IDS.includes(id);
|
|
9
|
+
const validatePolicy = (data) => {
|
|
10
|
+
const policy = data;
|
|
11
|
+
if (!policy.version || typeof policy.version !== "string") {
|
|
12
|
+
throw new Error("campaign-layer-policy: missing or invalid 'version'");
|
|
13
|
+
}
|
|
14
|
+
if (!policy.layers || typeof policy.layers !== "object") {
|
|
15
|
+
throw new Error("campaign-layer-policy: missing or invalid 'layers'");
|
|
16
|
+
}
|
|
17
|
+
for (const id of VALID_LAYER_IDS) {
|
|
18
|
+
const layer = policy.layers[id];
|
|
19
|
+
if (!layer) {
|
|
20
|
+
throw new Error(`campaign-layer-policy: missing layer definition for '${id}'`);
|
|
21
|
+
}
|
|
22
|
+
if (!layer.name || !layer.nameJa || !layer.campaignPrefix) {
|
|
23
|
+
throw new Error(`campaign-layer-policy: incomplete layer definition for '${id}'`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (!Array.isArray(policy.namingPatterns)) {
|
|
27
|
+
throw new Error("campaign-layer-policy: 'namingPatterns' must be an array");
|
|
28
|
+
}
|
|
29
|
+
for (const np of policy.namingPatterns) {
|
|
30
|
+
if (!np.pattern || !isValidLayerId(np.layer)) {
|
|
31
|
+
throw new Error(`campaign-layer-policy: invalid naming pattern: ${JSON.stringify(np)}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (!policy.fallbackClassification || typeof policy.fallbackClassification !== "object") {
|
|
35
|
+
throw new Error("campaign-layer-policy: missing 'fallbackClassification'");
|
|
36
|
+
}
|
|
37
|
+
if (!Array.isArray(policy.promotionRules)) {
|
|
38
|
+
throw new Error("campaign-layer-policy: 'promotionRules' must be an array");
|
|
39
|
+
}
|
|
40
|
+
return policy;
|
|
41
|
+
};
|
|
42
|
+
export const loadCampaignLayerPolicy = async (filePath) => {
|
|
43
|
+
const target = filePath ?? DEFAULT_POLICY_PATH;
|
|
44
|
+
try {
|
|
45
|
+
const raw = await fs.readFile(target, "utf8");
|
|
46
|
+
const parsed = JSON.parse(raw);
|
|
47
|
+
return validatePolicy(parsed);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (!filePath && err.code === "ENOENT") {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=campaign-layer-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-layer-policy.js","sourceRoot":"","sources":["../../src/config/campaign-layer-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export declare const HEADER_CANDIDATES: {
|
|
2
|
+
readonly campaignId: readonly ["Campaign ID", "キャンペーンID", "campaign_id"];
|
|
3
|
+
readonly campaignName: readonly ["Campaign Name", "キャンペーン名", "キャンペーン名(情報提供のみ)", "campaign_name"];
|
|
4
|
+
readonly adGroupId: readonly ["Ad Group ID", "広告グループID", "ad_group_id"];
|
|
5
|
+
readonly adGroupName: readonly ["Ad Group Name", "広告グループ名", "広告グループ名(情報提供のみ)", "ad_group_name"];
|
|
6
|
+
readonly keywordId: readonly ["Keyword ID", "キーワードID", "keyword_id"];
|
|
7
|
+
readonly keywordText: readonly ["Keyword Text", "キーワードテキスト", "Search Term", "search_term"];
|
|
8
|
+
readonly customerSearchTerm: readonly ["カスタマー検索用語", "Customer Search Term", "customer_search_term"];
|
|
9
|
+
readonly productTargetingExpression: readonly ["Product Targeting Expression", "Targeting Expression", "商品ターゲティング式"];
|
|
10
|
+
readonly matchType: readonly ["Match Type", "マッチタイプ", "match_type"];
|
|
11
|
+
readonly clicks: readonly ["Clicks", "クリック数", "clicks"];
|
|
12
|
+
readonly impressions: readonly ["Impressions", "インプレッション数", "impressions"];
|
|
13
|
+
readonly spend: readonly ["Spend", "支出", "spend"];
|
|
14
|
+
readonly sales: readonly ["Sales", "売上", "sales"];
|
|
15
|
+
readonly orders: readonly ["Orders", "注文", "注文数", "orders"];
|
|
16
|
+
readonly sku: readonly ["SKU", "sku"];
|
|
17
|
+
readonly asin: readonly ["ASIN", "ASIN(情報提供のみ)", "asin"];
|
|
18
|
+
readonly dailyBudget: readonly ["Daily Budget", "Campaign Daily Budget", "New_Daily_Budget", "日次予算", "campaign_daily_budget"];
|
|
19
|
+
readonly bid: readonly ["Bid", "入札額", "bid"];
|
|
20
|
+
readonly adGroupDefaultBid: readonly ["Ad Group Default Bid", "ad_group_default_bid"];
|
|
21
|
+
readonly state: readonly ["State", "state", "キャンペーンのステータス", "status"];
|
|
22
|
+
readonly targetingType: readonly ["Targeting Type", "ターゲティングの種類", "Campaign Targeting Type", "targeting_type"];
|
|
23
|
+
readonly portfolioId: readonly ["Portfolio ID", "ポートフォリオID", "portfolio_id"];
|
|
24
|
+
};
|
|
25
|
+
export declare const STATE_MAPPING_JP_TO_EN: Record<string, "enabled" | "paused" | "archived">;
|
|
26
|
+
export declare const OPTIMIZATION_DEFAULTS: {
|
|
27
|
+
readonly targetAcos: 0.25;
|
|
28
|
+
readonly minClicksForCpc: 5;
|
|
29
|
+
readonly minClicksForPromotion: 5;
|
|
30
|
+
readonly minCvrForPromotion: 0.03;
|
|
31
|
+
readonly negativeAcosThreshold: 0.4;
|
|
32
|
+
readonly b190: {
|
|
33
|
+
readonly impressionThreshold: 0.5;
|
|
34
|
+
readonly spendThreshold: 0.5;
|
|
35
|
+
readonly cpcThreshold: 0.3;
|
|
36
|
+
};
|
|
37
|
+
readonly sale: {
|
|
38
|
+
readonly enabled: false;
|
|
39
|
+
readonly cpcReductionFactor: 0.33;
|
|
40
|
+
readonly defaultCpc: 30;
|
|
41
|
+
};
|
|
42
|
+
readonly seo: {
|
|
43
|
+
readonly enabled: true;
|
|
44
|
+
readonly cpcCeiling: 0;
|
|
45
|
+
readonly factors: Record<number, number>;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
export declare const SKU_LABEL_RULES: {
|
|
49
|
+
readonly focus: {
|
|
50
|
+
readonly maxAcos: 0.15;
|
|
51
|
+
readonly minCvr: 0.05;
|
|
52
|
+
readonly bidAdjust: 1.2;
|
|
53
|
+
readonly budgetAdjust: 1.15;
|
|
54
|
+
};
|
|
55
|
+
readonly nurture: {
|
|
56
|
+
readonly maxAcos: 0.25;
|
|
57
|
+
readonly minCvr: 0.03;
|
|
58
|
+
readonly bidAdjust: 1.05;
|
|
59
|
+
readonly budgetAdjust: 1;
|
|
60
|
+
};
|
|
61
|
+
readonly improve: {
|
|
62
|
+
readonly maxAcos: number;
|
|
63
|
+
readonly minCvr: 0;
|
|
64
|
+
readonly bidAdjust: 1;
|
|
65
|
+
readonly budgetAdjust: 1;
|
|
66
|
+
};
|
|
67
|
+
readonly prune: {
|
|
68
|
+
readonly minAcos: 0.35;
|
|
69
|
+
readonly maxCvr: 0.015;
|
|
70
|
+
readonly bidAdjust: 0.8;
|
|
71
|
+
readonly budgetAdjust: 0.85;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;CAuBpB,CAAC;AAEX,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAOpF,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;0BAmBiB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;CAE/D,CAAC;AAEX,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;CAKlB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export const HEADER_CANDIDATES = {
|
|
2
|
+
campaignId: ["Campaign ID", "キャンペーンID", "campaign_id"],
|
|
3
|
+
campaignName: ["Campaign Name", "キャンペーン名", "キャンペーン名(情報提供のみ)", "campaign_name"],
|
|
4
|
+
adGroupId: ["Ad Group ID", "広告グループID", "ad_group_id"],
|
|
5
|
+
adGroupName: ["Ad Group Name", "広告グループ名", "広告グループ名(情報提供のみ)", "ad_group_name"],
|
|
6
|
+
keywordId: ["Keyword ID", "キーワードID", "keyword_id"],
|
|
7
|
+
keywordText: ["Keyword Text", "キーワードテキスト", "Search Term", "search_term"],
|
|
8
|
+
customerSearchTerm: ["カスタマー検索用語", "Customer Search Term", "customer_search_term"],
|
|
9
|
+
productTargetingExpression: ["Product Targeting Expression", "Targeting Expression", "商品ターゲティング式"],
|
|
10
|
+
matchType: ["Match Type", "マッチタイプ", "match_type"],
|
|
11
|
+
clicks: ["Clicks", "クリック数", "clicks"],
|
|
12
|
+
impressions: ["Impressions", "インプレッション数", "impressions"],
|
|
13
|
+
spend: ["Spend", "支出", "spend"],
|
|
14
|
+
sales: ["Sales", "売上", "sales"],
|
|
15
|
+
orders: ["Orders", "注文", "注文数", "orders"],
|
|
16
|
+
sku: ["SKU", "sku"],
|
|
17
|
+
asin: ["ASIN", "ASIN(情報提供のみ)", "asin"],
|
|
18
|
+
dailyBudget: ["Daily Budget", "Campaign Daily Budget", "New_Daily_Budget", "日次予算", "campaign_daily_budget"],
|
|
19
|
+
bid: ["Bid", "入札額", "bid"],
|
|
20
|
+
adGroupDefaultBid: ["Ad Group Default Bid", "ad_group_default_bid"],
|
|
21
|
+
state: ["State", "state", "キャンペーンのステータス", "status"],
|
|
22
|
+
targetingType: ["Targeting Type", "ターゲティングの種類", "Campaign Targeting Type", "targeting_type"],
|
|
23
|
+
portfolioId: ["Portfolio ID", "ポートフォリオID", "portfolio_id"],
|
|
24
|
+
};
|
|
25
|
+
export const STATE_MAPPING_JP_TO_EN = {
|
|
26
|
+
有効: "enabled",
|
|
27
|
+
一時停止: "paused",
|
|
28
|
+
非掲載: "archived",
|
|
29
|
+
enabled: "enabled",
|
|
30
|
+
paused: "paused",
|
|
31
|
+
archived: "archived",
|
|
32
|
+
};
|
|
33
|
+
export const OPTIMIZATION_DEFAULTS = {
|
|
34
|
+
targetAcos: 0.25,
|
|
35
|
+
minClicksForCpc: 5,
|
|
36
|
+
minClicksForPromotion: 5,
|
|
37
|
+
minCvrForPromotion: 0.03,
|
|
38
|
+
negativeAcosThreshold: 0.4,
|
|
39
|
+
b190: {
|
|
40
|
+
impressionThreshold: 0.5,
|
|
41
|
+
spendThreshold: 0.5,
|
|
42
|
+
cpcThreshold: 0.3,
|
|
43
|
+
},
|
|
44
|
+
sale: {
|
|
45
|
+
enabled: false,
|
|
46
|
+
cpcReductionFactor: 0.33,
|
|
47
|
+
defaultCpc: 30,
|
|
48
|
+
},
|
|
49
|
+
seo: {
|
|
50
|
+
enabled: true,
|
|
51
|
+
cpcCeiling: 0, // 0 = auto (2x avg CPC); >0 = fixed ceiling
|
|
52
|
+
factors: { 1: 0.5, 2: 0.6, 3: 0.7, 4: 0.8 },
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
export const SKU_LABEL_RULES = {
|
|
56
|
+
focus: { maxAcos: 0.15, minCvr: 0.05, bidAdjust: 1.2, budgetAdjust: 1.15 },
|
|
57
|
+
nurture: { maxAcos: 0.25, minCvr: 0.03, bidAdjust: 1.05, budgetAdjust: 1.0 },
|
|
58
|
+
improve: { maxAcos: Number.POSITIVE_INFINITY, minCvr: 0, bidAdjust: 1.0, budgetAdjust: 1.0 },
|
|
59
|
+
prune: { minAcos: 0.35, maxCvr: 0.015, bidAdjust: 0.8, budgetAdjust: 0.85 },
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface OptimisationConfig {
|
|
2
|
+
targetAcos: number;
|
|
3
|
+
minClicksForCpc: number;
|
|
4
|
+
minClicksForPromotion: number;
|
|
5
|
+
minCvrForPromotion: number;
|
|
6
|
+
negativeAcosThreshold: number;
|
|
7
|
+
sale: {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
cpcReductionFactor: number;
|
|
10
|
+
defaultCpc: number;
|
|
11
|
+
};
|
|
12
|
+
b190: {
|
|
13
|
+
impressionThreshold: number;
|
|
14
|
+
spendThreshold: number;
|
|
15
|
+
cpcThreshold: number;
|
|
16
|
+
};
|
|
17
|
+
seo: {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
cpcCeiling: number;
|
|
20
|
+
factors: Record<number, number>;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare const loadOptimisationConfig: () => OptimisationConfig;
|
|
24
|
+
//# sourceMappingURL=optimisation-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimisation-config.d.ts","sourceRoot":"","sources":["../../src/config/optimisation-config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,EAAE;QACJ,mBAAmB,EAAE,MAAM,CAAC;QAC5B,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,GAAG,EAAE;QACH,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;CACH;AAmBD,eAAO,MAAM,sBAAsB,QAAO,kBAuBzC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { OPTIMIZATION_DEFAULTS } from "./constants.js";
|
|
2
|
+
const numberFromEnv = (name, fallback) => {
|
|
3
|
+
const value = process.env[name];
|
|
4
|
+
if (value === undefined || value === "") {
|
|
5
|
+
return fallback;
|
|
6
|
+
}
|
|
7
|
+
const parsed = Number(value);
|
|
8
|
+
return Number.isFinite(parsed) ? parsed : fallback;
|
|
9
|
+
};
|
|
10
|
+
const boolFromEnv = (name, fallback) => {
|
|
11
|
+
const value = process.env[name];
|
|
12
|
+
if (value === undefined || value === "") {
|
|
13
|
+
return fallback;
|
|
14
|
+
}
|
|
15
|
+
return /^(1|true|yes|on)$/i.test(value);
|
|
16
|
+
};
|
|
17
|
+
export const loadOptimisationConfig = () => {
|
|
18
|
+
return {
|
|
19
|
+
targetAcos: numberFromEnv("TARGET_ACOS", OPTIMIZATION_DEFAULTS.targetAcos),
|
|
20
|
+
minClicksForCpc: numberFromEnv("MIN_CLICKS_CPC", OPTIMIZATION_DEFAULTS.minClicksForCpc),
|
|
21
|
+
minClicksForPromotion: numberFromEnv("MIN_CLICKS_PROMOTION", OPTIMIZATION_DEFAULTS.minClicksForPromotion),
|
|
22
|
+
minCvrForPromotion: numberFromEnv("MIN_CVR_PROMOTION", OPTIMIZATION_DEFAULTS.minCvrForPromotion),
|
|
23
|
+
negativeAcosThreshold: numberFromEnv("NEGATIVE_ACOS_THRESHOLD", OPTIMIZATION_DEFAULTS.negativeAcosThreshold),
|
|
24
|
+
sale: {
|
|
25
|
+
enabled: boolFromEnv("SALE_ENABLED", OPTIMIZATION_DEFAULTS.sale.enabled),
|
|
26
|
+
cpcReductionFactor: numberFromEnv("SALE_CPC_REDUCTION_FACTOR", OPTIMIZATION_DEFAULTS.sale.cpcReductionFactor),
|
|
27
|
+
defaultCpc: numberFromEnv("SALE_DEFAULT_CPC", OPTIMIZATION_DEFAULTS.sale.defaultCpc),
|
|
28
|
+
},
|
|
29
|
+
b190: {
|
|
30
|
+
impressionThreshold: numberFromEnv("B190_IMPRESSION_THRESHOLD", OPTIMIZATION_DEFAULTS.b190.impressionThreshold),
|
|
31
|
+
spendThreshold: numberFromEnv("B190_SPEND_THRESHOLD", OPTIMIZATION_DEFAULTS.b190.spendThreshold),
|
|
32
|
+
cpcThreshold: numberFromEnv("B190_CPC_THRESHOLD", OPTIMIZATION_DEFAULTS.b190.cpcThreshold),
|
|
33
|
+
},
|
|
34
|
+
seo: {
|
|
35
|
+
enabled: boolFromEnv("SEO_ENABLED", OPTIMIZATION_DEFAULTS.seo.enabled),
|
|
36
|
+
cpcCeiling: numberFromEnv("SEO_CPC_CEILING", OPTIMIZATION_DEFAULTS.seo.cpcCeiling),
|
|
37
|
+
factors: OPTIMIZATION_DEFAULTS.seo.factors,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=optimisation-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimisation-config.js","sourceRoot":"","sources":["../../src/config/optimisation-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAyBvD,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAU,EAAE;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAAiB,EAAW,EAAE;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAuB,EAAE;IAC7D,OAAO;QACL,UAAU,EAAE,aAAa,CAAC,aAAa,EAAE,qBAAqB,CAAC,UAAU,CAAC;QAC1E,eAAe,EAAE,aAAa,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,eAAe,CAAC;QACvF,qBAAqB,EAAE,aAAa,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,qBAAqB,CAAC;QACzG,kBAAkB,EAAE,aAAa,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,kBAAkB,CAAC;QAChG,qBAAqB,EAAE,aAAa,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,qBAAqB,CAAC;QAC5G,IAAI,EAAE;YACJ,OAAO,EAAE,WAAW,CAAC,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;YACxE,kBAAkB,EAAE,aAAa,CAAC,2BAA2B,EAAE,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC7G,UAAU,EAAE,aAAa,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;SACrF;QACD,IAAI,EAAE;YACJ,mBAAmB,EAAE,aAAa,CAAC,2BAA2B,EAAE,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC/G,cAAc,EAAE,aAAa,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC;YAChG,YAAY,EAAE,aAAa,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;SAC3F;QACD,GAAG,EAAE;YACH,OAAO,EAAE,WAAW,CAAC,aAAa,EAAE,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC;YACtE,UAAU,EAAE,aAAa,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC;YAClF,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC,OAAO;SAC3C;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { HEADER_CANDIDATES } from "../config/constants.js";
|
|
2
|
+
export type HeaderCandidateMap = typeof HEADER_CANDIDATES;
|
|
3
|
+
export type HeaderMap = Record<keyof HeaderCandidateMap, number>;
|
|
4
|
+
export declare const findHeader: (headers: string[], candidates: readonly string[]) => number;
|
|
5
|
+
export declare const createHeaderMap: (headers: string[]) => HeaderMap;
|
|
6
|
+
//# sourceMappingURL=header-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-mapper.d.ts","sourceRoot":"","sources":["../../src/core/header-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,MAAM,MAAM,kBAAkB,GAAG,OAAO,iBAAiB,CAAC;AAC1D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAEjE,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,EAAE,YAAY,SAAS,MAAM,EAAE,KAAG,MAyB7E,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,KAAG,SAMnD,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { HEADER_CANDIDATES } from "../config/constants.js";
|
|
2
|
+
import { normalizeHeaderToken } from "./normalizer.js";
|
|
3
|
+
export const findHeader = (headers, candidates) => {
|
|
4
|
+
if (headers.length === 0) {
|
|
5
|
+
return -1;
|
|
6
|
+
}
|
|
7
|
+
for (const name of candidates) {
|
|
8
|
+
const idx = headers.indexOf(name);
|
|
9
|
+
if (idx !== -1) {
|
|
10
|
+
return idx;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const normalizedHeaders = headers.map((h) => normalizeHeaderToken(h));
|
|
14
|
+
for (const candidate of candidates) {
|
|
15
|
+
const normalized = normalizeHeaderToken(candidate);
|
|
16
|
+
const exactIdx = normalizedHeaders.indexOf(normalized);
|
|
17
|
+
if (exactIdx !== -1) {
|
|
18
|
+
return exactIdx;
|
|
19
|
+
}
|
|
20
|
+
const partialIdx = normalizedHeaders.findIndex((h) => h.includes(normalized));
|
|
21
|
+
if (partialIdx !== -1) {
|
|
22
|
+
return partialIdx;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return -1;
|
|
26
|
+
};
|
|
27
|
+
export const createHeaderMap = (headers) => {
|
|
28
|
+
const map = {};
|
|
29
|
+
Object.keys(HEADER_CANDIDATES).forEach((key) => {
|
|
30
|
+
map[key] = findHeader(headers, HEADER_CANDIDATES[key]);
|
|
31
|
+
});
|
|
32
|
+
return map;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=header-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-mapper.js","sourceRoot":"","sources":["../../src/core/header-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAKvD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAiB,EAAE,UAA6B,EAAU,EAAE;IACrF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9E,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAiB,EAAa,EAAE;IAC9D,MAAM,GAAG,GAAG,EAAe,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAqC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAClF,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const normalizeCampaignKey: (name: unknown) => string;
|
|
2
|
+
export declare const normalizeHeaderToken: (value: unknown) => string;
|
|
3
|
+
export declare const toNumber: (value: unknown) => number | "";
|
|
4
|
+
export declare const asNumber: (value: unknown, fallback?: number) => number;
|
|
5
|
+
export declare const normalizeState: (value: unknown, fallback?: string) => string;
|
|
6
|
+
export declare const normalizeMatchType: (value: unknown) => string;
|
|
7
|
+
export declare const safeDivide: (a: number, b: number) => number;
|
|
8
|
+
export declare const normalizeText: (value: unknown) => string;
|
|
9
|
+
//# sourceMappingURL=normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../../src/core/normalizer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,GAAI,MAAM,OAAO,KAAG,MAUpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAOrD,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,EAiBlD,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,EAAE,iBAAY,KAAG,MAGvD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,EAAE,iBAAoB,KAAG,MAMrE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,MAenD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAKjD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,MAAoC,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { STATE_MAPPING_JP_TO_EN } from "../config/constants.js";
|
|
2
|
+
export const normalizeCampaignKey = (name) => {
|
|
3
|
+
if (name === undefined || name === null) {
|
|
4
|
+
return "";
|
|
5
|
+
}
|
|
6
|
+
return String(name)
|
|
7
|
+
.normalize("NFKC")
|
|
8
|
+
.replace(/[((].*?[))]/g, "")
|
|
9
|
+
.replace(/[__‐\-ー]/g, "")
|
|
10
|
+
.replace(/\s+/g, "")
|
|
11
|
+
.toUpperCase();
|
|
12
|
+
};
|
|
13
|
+
export const normalizeHeaderToken = (value) => {
|
|
14
|
+
return String(value ?? "")
|
|
15
|
+
.normalize("NFKC")
|
|
16
|
+
.replace(/[\uFEFF\u200B\u00A0]/g, "")
|
|
17
|
+
.replace(/\s+/g, " ")
|
|
18
|
+
.trim()
|
|
19
|
+
.toLowerCase();
|
|
20
|
+
};
|
|
21
|
+
export const toNumber = (value) => {
|
|
22
|
+
if (value === null || value === undefined || value === "") {
|
|
23
|
+
return "";
|
|
24
|
+
}
|
|
25
|
+
if (typeof value === "number") {
|
|
26
|
+
return Number.isFinite(value) ? value : "";
|
|
27
|
+
}
|
|
28
|
+
const s = String(value)
|
|
29
|
+
.replace(/[\u3000\u00A0\u200B]/g, " ")
|
|
30
|
+
.replace(/[^\d.,\-.]/g, "")
|
|
31
|
+
.replace(/,/g, "")
|
|
32
|
+
.replace(/./g, ".")
|
|
33
|
+
.trim();
|
|
34
|
+
const n = Number.parseFloat(s);
|
|
35
|
+
return Number.isFinite(n) ? n : "";
|
|
36
|
+
};
|
|
37
|
+
export const asNumber = (value, fallback = 0) => {
|
|
38
|
+
const n = toNumber(value);
|
|
39
|
+
return n === "" ? fallback : n;
|
|
40
|
+
};
|
|
41
|
+
export const normalizeState = (value, fallback = "enabled") => {
|
|
42
|
+
const raw = String(value ?? "").trim();
|
|
43
|
+
if (!raw) {
|
|
44
|
+
return fallback;
|
|
45
|
+
}
|
|
46
|
+
return STATE_MAPPING_JP_TO_EN[raw] ?? raw.toLowerCase();
|
|
47
|
+
};
|
|
48
|
+
export const normalizeMatchType = (value) => {
|
|
49
|
+
const raw = String(value ?? "")
|
|
50
|
+
.trim()
|
|
51
|
+
.toLowerCase();
|
|
52
|
+
if (!raw) {
|
|
53
|
+
return "exact";
|
|
54
|
+
}
|
|
55
|
+
if (raw === "完全一致" || raw === "exact match")
|
|
56
|
+
return "exact";
|
|
57
|
+
if (raw === "フレーズ一致" || raw === "phrase match")
|
|
58
|
+
return "phrase";
|
|
59
|
+
if (raw === "部分一致" || raw === "broad match")
|
|
60
|
+
return "broad";
|
|
61
|
+
if (raw.includes("negative") && raw.includes("exact"))
|
|
62
|
+
return "negative exact";
|
|
63
|
+
if (raw.includes("negative") && raw.includes("phrase"))
|
|
64
|
+
return "negative phrase";
|
|
65
|
+
if (raw.includes("negative") && raw.includes("broad"))
|
|
66
|
+
return "negative broad";
|
|
67
|
+
return raw;
|
|
68
|
+
};
|
|
69
|
+
export const safeDivide = (a, b) => {
|
|
70
|
+
if (!Number.isFinite(a) || !Number.isFinite(b) || b === 0) {
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
return a / b;
|
|
74
|
+
};
|
|
75
|
+
export const normalizeText = (value) => String(value ?? "").trim();
|
|
76
|
+
//# sourceMappingURL=normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../../src/core/normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-reader.d.ts","sourceRoot":"","sources":["../../src/io/csv-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAW,MAAM,sBAAsB,CAAC;AA+BnE,eAAO,MAAM,YAAY,GAAI,cAAc,MAAM,KAAG,aAAa,EAuBhE,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { resolveInputFiles } from "./excel-reader.js";
|
|
3
|
+
const splitCsvLine = (line) => {
|
|
4
|
+
const result = [];
|
|
5
|
+
let current = "";
|
|
6
|
+
let inQuotes = false;
|
|
7
|
+
for (let i = 0; i < line.length; i += 1) {
|
|
8
|
+
const ch = line[i];
|
|
9
|
+
if (ch === '"') {
|
|
10
|
+
if (inQuotes && line[i + 1] === '"') {
|
|
11
|
+
current += '"';
|
|
12
|
+
i += 1;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
inQuotes = !inQuotes;
|
|
16
|
+
}
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (ch === "," && !inQuotes) {
|
|
20
|
+
result.push(current);
|
|
21
|
+
current = "";
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
current += ch;
|
|
25
|
+
}
|
|
26
|
+
result.push(current);
|
|
27
|
+
return result;
|
|
28
|
+
};
|
|
29
|
+
export const readCsvFiles = (inputPattern) => {
|
|
30
|
+
const files = resolveInputFiles(inputPattern);
|
|
31
|
+
if (files.length === 0) {
|
|
32
|
+
throw new Error(`No CSV files matched: ${inputPattern}`);
|
|
33
|
+
}
|
|
34
|
+
return files.map((file) => {
|
|
35
|
+
const content = fs.readFileSync(file, "utf8");
|
|
36
|
+
const lines = content.split(/\r?\n/).filter((line) => line.trim() !== "");
|
|
37
|
+
if (lines.length === 0) {
|
|
38
|
+
return { sourceFile: file, headers: [], rows: [] };
|
|
39
|
+
}
|
|
40
|
+
const headers = splitCsvLine(lines[0]).map((h) => h.trim());
|
|
41
|
+
const rows = lines.slice(1).map((line) => {
|
|
42
|
+
const cells = splitCsvLine(line);
|
|
43
|
+
const row = {};
|
|
44
|
+
headers.forEach((header, index) => {
|
|
45
|
+
row[header] = cells[index] ?? "";
|
|
46
|
+
});
|
|
47
|
+
return row;
|
|
48
|
+
});
|
|
49
|
+
return { sourceFile: file, headers, rows };
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=csv-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-reader.js","sourceRoot":"","sources":["../../src/io/csv-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { BulkInputData } from "../pipeline/types.js";
|
|
2
|
+
export declare const resolveInputFiles: (inputPattern: string) => string[];
|
|
3
|
+
export declare const readBulkExcelFiles: (inputPattern: string) => Promise<BulkInputData[]>;
|
|
4
|
+
//# sourceMappingURL=excel-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-reader.d.ts","sourceRoot":"","sources":["../../src/io/excel-reader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,sBAAsB,CAAC;AAQ7E,eAAO,MAAM,iBAAiB,GAAI,cAAc,MAAM,KAAG,MAAM,EAqB9D,CAAC;AAkCF,eAAO,MAAM,kBAAkB,GAAU,cAAc,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CA0BtF,CAAC"}
|