@lahat-group/cli 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +162 -6
- package/package.json +14 -5
package/dist/index.js
CHANGED
|
@@ -7488,6 +7488,35 @@ function getColumnDepthCm(config, column) {
|
|
|
7488
7488
|
init_esm_shims();
|
|
7489
7489
|
var COMMISSION_STATES = ["potential", "pending_payment", "paid", "cancelled"];
|
|
7490
7490
|
|
|
7491
|
+
// ../../packages/shared/src/phone.ts
|
|
7492
|
+
init_esm_shims();
|
|
7493
|
+
var SEPARATORS = /[\s\-().]/g;
|
|
7494
|
+
var IL_PHONE = /^(?:(?:\+?972)0?|0)(?:[23489]\d{7}|[57]\d{8})$/;
|
|
7495
|
+
function normalizePhoneInput(value) {
|
|
7496
|
+
return value.replace(SEPARATORS, "");
|
|
7497
|
+
}
|
|
7498
|
+
function isValidIsraeliPhone(value) {
|
|
7499
|
+
return IL_PHONE.test(normalizePhoneInput(value));
|
|
7500
|
+
}
|
|
7501
|
+
|
|
7502
|
+
// ../../packages/shared/src/nationalId.ts
|
|
7503
|
+
init_esm_shims();
|
|
7504
|
+
var SEPARATORS2 = /[\s\-.]/g;
|
|
7505
|
+
function normalizeNationalIdInput(value) {
|
|
7506
|
+
return value.replace(SEPARATORS2, "");
|
|
7507
|
+
}
|
|
7508
|
+
function isValidIsraeliNationalId(value) {
|
|
7509
|
+
const digits = normalizeNationalIdInput(value);
|
|
7510
|
+
if (!/^\d{1,9}$/.test(digits)) return false;
|
|
7511
|
+
const padded = digits.padStart(9, "0");
|
|
7512
|
+
let sum = 0;
|
|
7513
|
+
for (let i = 0; i < 9; i++) {
|
|
7514
|
+
const product = Number(padded[i]) * (i % 2 === 0 ? 1 : 2);
|
|
7515
|
+
sum += product > 9 ? product - 9 : product;
|
|
7516
|
+
}
|
|
7517
|
+
return sum % 10 === 0;
|
|
7518
|
+
}
|
|
7519
|
+
|
|
7491
7520
|
// ../../packages/shared/src/schemas.ts
|
|
7492
7521
|
var MaterialIdSchema = external_exports.enum(MATERIAL_IDS);
|
|
7493
7522
|
var ModuleTypeSchema = external_exports.enum([
|
|
@@ -7655,6 +7684,17 @@ var MeasurementPriceBreakdownSchema = external_exports.object({
|
|
|
7655
7684
|
total: external_exports.number(),
|
|
7656
7685
|
currency: external_exports.string()
|
|
7657
7686
|
});
|
|
7687
|
+
var DiscountSettingsSchema = external_exports.object({
|
|
7688
|
+
enabled: external_exports.boolean(),
|
|
7689
|
+
percent: external_exports.number().min(0).max(100),
|
|
7690
|
+
description: external_exports.string().max(500)
|
|
7691
|
+
});
|
|
7692
|
+
var DiscountBreakdownSchema = DiscountSettingsSchema.extend({
|
|
7693
|
+
subtotal: external_exports.number(),
|
|
7694
|
+
amount: external_exports.number(),
|
|
7695
|
+
total: external_exports.number(),
|
|
7696
|
+
currency: external_exports.literal("NIS")
|
|
7697
|
+
});
|
|
7658
7698
|
var PriceResultSchema = external_exports.object({
|
|
7659
7699
|
total: external_exports.number(),
|
|
7660
7700
|
currency: external_exports.string(),
|
|
@@ -7668,7 +7708,8 @@ var PriceResultSchema = external_exports.object({
|
|
|
7668
7708
|
})).optional(),
|
|
7669
7709
|
assemblyPrice: AssemblyPriceBreakdownSchema.optional(),
|
|
7670
7710
|
transportPrice: TransportPriceBreakdownSchema.optional(),
|
|
7671
|
-
measurementPrice: MeasurementPriceBreakdownSchema.optional()
|
|
7711
|
+
measurementPrice: MeasurementPriceBreakdownSchema.optional(),
|
|
7712
|
+
discount: DiscountBreakdownSchema.optional()
|
|
7672
7713
|
});
|
|
7673
7714
|
var ServicePricingConfigSchema = external_exports.object({
|
|
7674
7715
|
id: external_exports.string().nullable(),
|
|
@@ -7709,6 +7750,35 @@ var CommissionConfigPatchBodySchema = external_exports.object({
|
|
|
7709
7750
|
defaultRatePercent: external_exports.number().min(0).max(100)
|
|
7710
7751
|
}).strict()
|
|
7711
7752
|
});
|
|
7753
|
+
var ManufacturerConfigSchema = external_exports.object({
|
|
7754
|
+
email: external_exports.string().email().max(254).nullable(),
|
|
7755
|
+
version: external_exports.number().int().nonnegative()
|
|
7756
|
+
});
|
|
7757
|
+
var ManufacturerConfigPatchBodySchema = external_exports.object({
|
|
7758
|
+
version: external_exports.number().int().nonnegative(),
|
|
7759
|
+
patch: external_exports.object({
|
|
7760
|
+
email: external_exports.string().email().max(254)
|
|
7761
|
+
}).strict()
|
|
7762
|
+
});
|
|
7763
|
+
var DiscountConfigSchema = external_exports.object({
|
|
7764
|
+
id: external_exports.string().nullable(),
|
|
7765
|
+
enabled: external_exports.boolean(),
|
|
7766
|
+
percent: external_exports.number().min(0).max(100),
|
|
7767
|
+
description: external_exports.string().max(500),
|
|
7768
|
+
version: external_exports.number().int().nonnegative(),
|
|
7769
|
+
updatedAt: external_exports.string().nullable()
|
|
7770
|
+
});
|
|
7771
|
+
var DiscountConfigPatchBodySchema = external_exports.object({
|
|
7772
|
+
version: external_exports.number().int().nonnegative(),
|
|
7773
|
+
patch: external_exports.object({
|
|
7774
|
+
enabled: external_exports.boolean().optional(),
|
|
7775
|
+
percent: external_exports.number().min(0).max(100).optional(),
|
|
7776
|
+
description: external_exports.string().max(500).optional()
|
|
7777
|
+
}).strict().refine(
|
|
7778
|
+
(p) => Object.keys(p).length > 0,
|
|
7779
|
+
{ message: "patch must contain at least one field" }
|
|
7780
|
+
)
|
|
7781
|
+
});
|
|
7712
7782
|
var MBomLineItemSchema = external_exports.object({
|
|
7713
7783
|
sku: external_exports.string(),
|
|
7714
7784
|
qty: external_exports.number(),
|
|
@@ -7756,7 +7826,7 @@ var MBomDebugResponseSchema = external_exports.object({
|
|
|
7756
7826
|
});
|
|
7757
7827
|
var CreateCustomerSchema = external_exports.object({
|
|
7758
7828
|
customerName: external_exports.string().min(1).max(120),
|
|
7759
|
-
phoneNumber: external_exports.string().min(1).max(30),
|
|
7829
|
+
phoneNumber: external_exports.string().min(1).max(30).refine(isValidIsraeliPhone, "invalidPhone"),
|
|
7760
7830
|
email: external_exports.string().email().max(254),
|
|
7761
7831
|
address: external_exports.string().max(200).optional(),
|
|
7762
7832
|
apartment: external_exports.string().max(50).optional(),
|
|
@@ -7767,7 +7837,7 @@ var CreateCustomerSchema = external_exports.object({
|
|
|
7767
7837
|
});
|
|
7768
7838
|
var UpdateCustomerSchema = external_exports.object({
|
|
7769
7839
|
customerName: external_exports.string().min(1).max(120).optional(),
|
|
7770
|
-
phoneNumber: external_exports.string().min(1).max(30).optional(),
|
|
7840
|
+
phoneNumber: external_exports.string().min(1).max(30).refine(isValidIsraeliPhone, "invalidPhone").optional(),
|
|
7771
7841
|
email: external_exports.string().email().max(254).optional(),
|
|
7772
7842
|
// Optional fields accept `null` to explicitly CLEAR (unset) a previously-set
|
|
7773
7843
|
// value; omitting the key leaves it unchanged. Required for inline edit.
|
|
@@ -7819,7 +7889,13 @@ var ReviseOrderSchema = external_exports.object({
|
|
|
7819
7889
|
var RegisterSchema = external_exports.object({
|
|
7820
7890
|
email: external_exports.string().email().max(254),
|
|
7821
7891
|
password: external_exports.string().min(8).max(128),
|
|
7822
|
-
displayName: external_exports.string().min(1).max(50)
|
|
7892
|
+
displayName: external_exports.string().min(1).max(50),
|
|
7893
|
+
/**
|
|
7894
|
+
* Consent to the published legal documents, given on the signup form.
|
|
7895
|
+
* Required — a signup without it is rejected rather than silently recorded as
|
|
7896
|
+
* unconsented, which would leave the account stuck behind the consent gate.
|
|
7897
|
+
*/
|
|
7898
|
+
acceptedLegal: external_exports.literal(true)
|
|
7823
7899
|
});
|
|
7824
7900
|
var LoginSchema = external_exports.object({
|
|
7825
7901
|
email: external_exports.string().email().max(254),
|
|
@@ -7885,10 +7961,63 @@ var EmailTemplatePatchBodySchema = external_exports.object({
|
|
|
7885
7961
|
{ message: "patch must contain at least one field" }
|
|
7886
7962
|
)
|
|
7887
7963
|
});
|
|
7964
|
+
var CustomerEmailConfigSchema = external_exports.object({
|
|
7965
|
+
key: external_exports.string(),
|
|
7966
|
+
label: external_exports.string(),
|
|
7967
|
+
step: external_exports.number().int().nullable(),
|
|
7968
|
+
enabled: external_exports.boolean(),
|
|
7969
|
+
subject: external_exports.string(),
|
|
7970
|
+
preheader: external_exports.string(),
|
|
7971
|
+
badge: external_exports.string(),
|
|
7972
|
+
heading: external_exports.string(),
|
|
7973
|
+
paragraphs: external_exports.array(external_exports.string()),
|
|
7974
|
+
note: external_exports.string(),
|
|
7975
|
+
disclosure: external_exports.array(external_exports.string()),
|
|
7976
|
+
ctaLabel: external_exports.string(),
|
|
7977
|
+
ctaUrl: external_exports.string(),
|
|
7978
|
+
secondaryCtaLabel: external_exports.string(),
|
|
7979
|
+
secondaryCtaUrl: external_exports.string(),
|
|
7980
|
+
version: external_exports.number().int().nonnegative(),
|
|
7981
|
+
updatedAt: external_exports.string().nullable()
|
|
7982
|
+
});
|
|
7983
|
+
var EmailOutboxRowSchema = external_exports.object({
|
|
7984
|
+
_id: external_exports.string(),
|
|
7985
|
+
orderId: external_exports.string(),
|
|
7986
|
+
key: external_exports.string(),
|
|
7987
|
+
to: external_exports.string(),
|
|
7988
|
+
cc: external_exports.string(),
|
|
7989
|
+
subject: external_exports.string(),
|
|
7990
|
+
status: external_exports.enum(["sent", "failed", "skipped"]),
|
|
7991
|
+
attempts: external_exports.number().int().nonnegative(),
|
|
7992
|
+
lastError: external_exports.string().optional(),
|
|
7993
|
+
skippedReason: external_exports.string().optional(),
|
|
7994
|
+
sentAt: external_exports.string().nullable().optional(),
|
|
7995
|
+
createdAt: external_exports.string()
|
|
7996
|
+
});
|
|
7997
|
+
var CustomerEmailPatchBodySchema = external_exports.object({
|
|
7998
|
+
version: external_exports.number().int().nonnegative(),
|
|
7999
|
+
patch: external_exports.object({
|
|
8000
|
+
enabled: external_exports.boolean().optional(),
|
|
8001
|
+
subject: external_exports.string().max(300).optional(),
|
|
8002
|
+
preheader: external_exports.string().max(300).optional(),
|
|
8003
|
+
badge: external_exports.string().max(120).optional(),
|
|
8004
|
+
heading: external_exports.string().max(200).optional(),
|
|
8005
|
+
paragraphs: external_exports.array(external_exports.string().max(2e3)).max(12).optional(),
|
|
8006
|
+
note: external_exports.string().max(2e3).optional(),
|
|
8007
|
+
disclosure: external_exports.array(external_exports.string().max(2e3)).max(12).optional(),
|
|
8008
|
+
ctaLabel: external_exports.string().max(120).optional(),
|
|
8009
|
+
ctaUrl: external_exports.string().max(500).optional(),
|
|
8010
|
+
secondaryCtaLabel: external_exports.string().max(120).optional(),
|
|
8011
|
+
secondaryCtaUrl: external_exports.string().max(500).optional()
|
|
8012
|
+
}).strict().refine(
|
|
8013
|
+
(p) => Object.keys(p).length > 0,
|
|
8014
|
+
{ message: "patch must contain at least one field" }
|
|
8015
|
+
)
|
|
8016
|
+
});
|
|
7888
8017
|
var CustomerDetailsSchema = external_exports.object({
|
|
7889
8018
|
email: external_exports.string().email().max(254),
|
|
7890
8019
|
phone: external_exports.string().min(3).max(30),
|
|
7891
|
-
nationalId: external_exports.string().min(5).max(20),
|
|
8020
|
+
nationalId: external_exports.string().min(5).max(20).refine(isValidIsraeliNationalId, "invalidNationalId"),
|
|
7892
8021
|
installationAddress: external_exports.string().min(3).max(300),
|
|
7893
8022
|
businessName: external_exports.string().max(120).optional(),
|
|
7894
8023
|
contactPerson: external_exports.string().max(120).optional()
|
|
@@ -7902,6 +8031,11 @@ var OrderTransitionSchema = external_exports.object({
|
|
|
7902
8031
|
/** Admin/support override: force-set the main status to `to`, bypassing the legal transition map. */
|
|
7903
8032
|
override: external_exports.boolean().optional()
|
|
7904
8033
|
});
|
|
8034
|
+
var UpdateOrderDateSchema = external_exports.object({
|
|
8035
|
+
field: external_exports.enum(["appointmentDate", "scheduledDate"]),
|
|
8036
|
+
value: external_exports.coerce.date(),
|
|
8037
|
+
reason: external_exports.string().max(500).optional()
|
|
8038
|
+
});
|
|
7905
8039
|
|
|
7906
8040
|
// ../../packages/shared/src/pricing.ts
|
|
7907
8041
|
init_esm_shims();
|
|
@@ -7909,6 +8043,9 @@ init_esm_shims();
|
|
|
7909
8043
|
// ../../packages/shared/src/manufacturingBom/price.ts
|
|
7910
8044
|
init_esm_shims();
|
|
7911
8045
|
|
|
8046
|
+
// ../../packages/shared/src/discount.ts
|
|
8047
|
+
init_esm_shims();
|
|
8048
|
+
|
|
7912
8049
|
// ../../packages/shared/src/materials.ts
|
|
7913
8050
|
init_esm_shims();
|
|
7914
8051
|
var MATERIALS = {
|
|
@@ -9266,6 +9403,9 @@ init_esm_shims();
|
|
|
9266
9403
|
// ../../packages/shared/src/permissions.ts
|
|
9267
9404
|
init_esm_shims();
|
|
9268
9405
|
|
|
9406
|
+
// ../../packages/shared/src/legal.ts
|
|
9407
|
+
init_esm_shims();
|
|
9408
|
+
|
|
9269
9409
|
// ../../packages/shared/src/orderWorkflow.ts
|
|
9270
9410
|
init_esm_shims();
|
|
9271
9411
|
var ORDER_STATUSES = [
|
|
@@ -9339,6 +9479,22 @@ var ORDER_EMAIL_EVENTS = [
|
|
|
9339
9479
|
];
|
|
9340
9480
|
var ALL_ORDER_EMAIL_EVENTS = ORDER_EMAIL_EVENTS.map((e) => e.event);
|
|
9341
9481
|
|
|
9482
|
+
// ../../packages/shared/src/customerEmails.ts
|
|
9483
|
+
init_esm_shims();
|
|
9484
|
+
var CUSTOMER_EMAILS = [
|
|
9485
|
+
{ key: "order_confirmed", label: "\u05D0\u05D9\u05E9\u05D5\u05E8 \u05D4\u05D6\u05DE\u05E0\u05D4 \u2014 \u05DE\u05E1\u05DE\u05DA \u05D2\u05D9\u05DC\u05D5\u05D9 \u05E0\u05D0\u05D5\u05EA", step: 1, hasHero: true, hasLineItems: true },
|
|
9486
|
+
{ key: "measurement_coordination", label: "\u05EA\u05D9\u05D0\u05D5\u05DD \u05DE\u05D3\u05D9\u05D3\u05D4", step: 2, hasHero: false, hasLineItems: false },
|
|
9487
|
+
{ key: "entering_production", label: "\u05D4\u05D0\u05E8\u05D5\u05DF \u05E0\u05DB\u05E0\u05E1 \u05DC\u05D9\u05D9\u05E6\u05D5\u05E8", step: 3, hasHero: false, hasLineItems: false },
|
|
9488
|
+
{ key: "production_complete", label: "\u05E1\u05D9\u05D5\u05DD \u05D9\u05D9\u05E6\u05D5\u05E8", step: 4, hasHero: false, hasLineItems: false },
|
|
9489
|
+
{ key: "installation_scheduled", label: "\u05EA\u05D9\u05D0\u05D5\u05DD \u05D5\u05D4\u05EA\u05E7\u05E0\u05D4", step: 5, hasHero: false, hasLineItems: false },
|
|
9490
|
+
{ key: "installation_complete", label: "\u05DC\u05D0\u05D7\u05E8 \u05D4\u05EA\u05E7\u05E0\u05D4", step: 5, hasHero: true, hasLineItems: false },
|
|
9491
|
+
{ key: "appointment_changed", label: "\u05E9\u05D9\u05E0\u05D5\u05D9 \u05DE\u05D5\u05E2\u05D3", step: null, hasHero: false, hasLineItems: false },
|
|
9492
|
+
{ key: "order_revised", label: "\u05E2\u05D3\u05DB\u05D5\u05DF \u05D4\u05D6\u05DE\u05E0\u05D4", step: null, hasHero: false, hasLineItems: true }
|
|
9493
|
+
];
|
|
9494
|
+
var CUSTOMER_EMAIL_BY_KEY = Object.fromEntries(
|
|
9495
|
+
CUSTOMER_EMAILS.map((d) => [d.key, d])
|
|
9496
|
+
);
|
|
9497
|
+
|
|
9342
9498
|
// ../../packages/shared/src/manufacturingBom/index.ts
|
|
9343
9499
|
init_esm_shims();
|
|
9344
9500
|
|
|
@@ -11707,7 +11863,7 @@ async function formatCliError(err, json) {
|
|
|
11707
11863
|
|
|
11708
11864
|
// src/version.ts
|
|
11709
11865
|
init_esm_shims();
|
|
11710
|
-
var CLI_VERSION = "1.1.
|
|
11866
|
+
var CLI_VERSION = "1.1.2";
|
|
11711
11867
|
|
|
11712
11868
|
// src/index.ts
|
|
11713
11869
|
program.name("wardrobe").description("Wardrobe configurator CLI").version(CLI_VERSION);
|
package/package.json
CHANGED
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lahat-group/cli",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "CLI + Claude Skill to build, validate, price, and save wardrobe designs.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
7
|
-
"bin": {
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
"bin": {
|
|
8
|
+
"wardrobe": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"skill"
|
|
13
|
+
],
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=18"
|
|
16
|
+
},
|
|
10
17
|
"repository": {
|
|
11
18
|
"type": "git",
|
|
12
19
|
"url": "git+https://github.com/shahar-abra/wardrobe-configurator.git",
|
|
13
20
|
"directory": "tools/cli"
|
|
14
21
|
},
|
|
15
|
-
"publishConfig": {
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
16
25
|
"scripts": {
|
|
17
26
|
"build": "tsup",
|
|
18
27
|
"prepublishOnly": "npm run build",
|