@yaoxiu/marketing-dsl 2.6.0 → 2.7.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/dist/index.cjs CHANGED
@@ -2315,12 +2315,15 @@ function formatIssues(issues) {
2315
2315
 
2316
2316
  // src/host-capabilities.ts
2317
2317
  var HOST_SOURCE_NAMES = ["userStatistics", "listRenewTiers"];
2318
- var HOST_HANDLER_NAMES = [];
2318
+ var HOST_HANDLER_NAMES = ["dismissToday", "dismissForever"];
2319
2319
  var HOST_SOURCE_LABELS = {
2320
2320
  userStatistics: "\u7528\u6237\u6570\u636E\u7EDF\u8BA1\uFF08\u7D2F\u8BA1\u642C\u5BB6\u6570 / \u6B21\u6570\u4F59\u989D / AI \u4F18\u5316\u6B21\u6570\u7B49\uFF0C\u6241\u5E73\u5BF9\u8C61\uFF0C\u5B57\u6BB5\u540D\u4E3A\u540E\u7AEF snake_case\uFF09",
2321
2321
  listRenewTiers: "\u7EED\u8D39\u4EF7\u683C\u6863\u4F4D\u5217\u8868\uFF08\u6708\u4ED8/\u5B63\u4ED8/\u534A\u5E74/\u5E74\u4ED8\uFF0C\u542B\u4E0B\u5355\u5730\u5740\uFF09"
2322
2322
  };
2323
- var HOST_HANDLER_LABELS = {};
2323
+ var HOST_HANDLER_LABELS = {
2324
+ dismissToday: "\u4ECA\u65E5\u4E0D\u518D\u63D0\u793A\uFF1A\u628A\u8FD9\u6761\u7269\u6599\u6807\u8BB0\u4E3A\u300C\u4ECA\u5929\u4E0D\u518D\u5C55\u793A\u300D\uFF08\u524D\u7AEF\u672C\u5730\u8BB0\u5F55\uFF0C\u6309\u767B\u5F55\u8D26\u53F7\u9694\u79BB\uFF0C\u8DE8\u8BBE\u5907\u4E0D\u540C\u6B65\uFF1B\u53EA\u5199\u6807\u8BB0\u4E0D\u5173\u95ED\uFF0C\u8981\u5173\u5F97\u81EA\u5DF1\u518D\u914D\u4E00\u4E2A close\uFF09",
2325
+ dismissForever: "\u4E0D\u518D\u63D0\u793A\uFF1A\u628A\u8FD9\u6761\u7269\u6599\u6807\u8BB0\u4E3A\u300C\u6C38\u4E45\u4E0D\u518D\u5C55\u793A\u300D\uFF08\u524D\u7AEF\u672C\u5730\u8BB0\u5F55\uFF0C\u6309\u767B\u5F55\u8D26\u53F7\u9694\u79BB\uFF0C\u8DE8\u8BBE\u5907\u4E0D\u540C\u6B65\uFF1B\u53EA\u5199\u6807\u8BB0\u4E0D\u5173\u95ED\uFF0C\u8981\u5173\u5F97\u81EA\u5DF1\u518D\u914D\u4E00\u4E2A close\uFF09"
2326
+ };
2324
2327
  function isRegisteredHostSource(name) {
2325
2328
  return HOST_SOURCE_NAMES.indexOf(name) > -1;
2326
2329
  }
package/dist/index.d.cts CHANGED
@@ -144,7 +144,8 @@ declare function validateUserFields(dsl: unknown, allowed: string[]): FieldIssue
144
144
  * 它是「**前台宿主实际注册了什么**」的事实记录,**不是** core 的能力声明。
145
145
  * core 本身对数据源名一无所知:运行时只认宿主创建 runtime 时传进来的 `sources` /
146
146
  * `handlers` 对象,查不到名字就抛 `unknown-source`、整份物料静默白屏
147
- * (不报错、什么都不画,投到线上才发现)。
147
+ * (不报错、什么都不画,投到线上才发现);`call` 查不到 handler 则抛 `unknown-handler`,
148
+ * 该动作静默失效(物料照常显示,但按钮点了没反应)。
148
149
  *
149
150
  * 【为什么放在 core 里】
150
151
  * 因为前台(move-front,注册表在 `components-business/marketing/sources.ts`)与
@@ -172,11 +173,14 @@ type HostSourceName = (typeof HOST_SOURCE_NAMES)[number];
172
173
  /**
173
174
  * 前台已注册的**宿主方法名**(DSL 里 `{ type: 'call', name: 'xxx' }` 的 `name`)。
174
175
  *
175
- * 当前**确实一个都没注册**,空名单是真实状态、不是占位:
176
- * 运营在 DSL 里写任何 `call` 都会白屏,后台据此照常告警。
176
+ * 当前两个都是「不再提示」类的本地记账:写一条本地标记,让这条物料下次不再进坑位。
177
+ * **标记与关闭是两回事**——handler 只写标记、不关闭,这一次关不关由运营在
178
+ * `sequence` 里自己配 `close` 决定(也因此留出了「勾选框」式交互的可能)。
179
+ *
180
+ * 用 `as const` 是为了推导出 {@link HostHandlerName} 联合类型,供前台约束注册表。
177
181
  */
178
- declare const HOST_HANDLER_NAMES: readonly string[];
179
- /** 宿主方法名的联合类型(当前名单为空,故为 `never`) */
182
+ declare const HOST_HANDLER_NAMES: readonly ["dismissToday", "dismissForever"];
183
+ /** 宿主方法名的联合类型,前台注册表以它为键,漏注册一个就编译不过 */
180
184
  type HostHandlerName = (typeof HOST_HANDLER_NAMES)[number];
181
185
  /**
182
186
  * 数据源的中文含义。后台告警文案、运营看的能力清单共用一份,避免说明各写各的。
@@ -184,8 +188,12 @@ type HostHandlerName = (typeof HOST_HANDLER_NAMES)[number];
184
188
  * 键必须覆盖 {@link HOST_SOURCE_NAMES} 的全部名字(有单测钉死)。
185
189
  */
186
190
  declare const HOST_SOURCE_LABELS: Record<HostSourceName, string>;
187
- /** 宿主方法的中文含义,键覆盖 {@link HOST_HANDLER_NAMES}(当前为空对象) */
188
- declare const HOST_HANDLER_LABELS: Record<string, string>;
191
+ /**
192
+ * 宿主方法的中文含义。后台告警文案、运营看的能力清单共用一份。
193
+ *
194
+ * 键必须覆盖 {@link HOST_HANDLER_NAMES} 的全部名字(有单测钉死)。
195
+ */
196
+ declare const HOST_HANDLER_LABELS: Record<HostHandlerName, string>;
189
197
  /**
190
198
  * 判断一个数据源名是否已被前台注册。
191
199
  *
@@ -197,7 +205,7 @@ declare function isRegisteredHostSource(name: string): boolean;
197
205
  * 判断一个宿主方法名是否已被前台注册。
198
206
  *
199
207
  * @param name 待判断的名字,通常来自 DSL 里 `call` 动作的 `name`
200
- * @returns 已注册返回 true;当前名单为空,所以恒为 false
208
+ * @returns 已注册返回 true;未注册意味着该动作执行时会抛 `unknown-handler`,调用方应告警
201
209
  */
202
210
  declare function isRegisteredHostHandler(name: string): boolean;
203
211
 
package/dist/index.d.ts CHANGED
@@ -144,7 +144,8 @@ declare function validateUserFields(dsl: unknown, allowed: string[]): FieldIssue
144
144
  * 它是「**前台宿主实际注册了什么**」的事实记录,**不是** core 的能力声明。
145
145
  * core 本身对数据源名一无所知:运行时只认宿主创建 runtime 时传进来的 `sources` /
146
146
  * `handlers` 对象,查不到名字就抛 `unknown-source`、整份物料静默白屏
147
- * (不报错、什么都不画,投到线上才发现)。
147
+ * (不报错、什么都不画,投到线上才发现);`call` 查不到 handler 则抛 `unknown-handler`,
148
+ * 该动作静默失效(物料照常显示,但按钮点了没反应)。
148
149
  *
149
150
  * 【为什么放在 core 里】
150
151
  * 因为前台(move-front,注册表在 `components-business/marketing/sources.ts`)与
@@ -172,11 +173,14 @@ type HostSourceName = (typeof HOST_SOURCE_NAMES)[number];
172
173
  /**
173
174
  * 前台已注册的**宿主方法名**(DSL 里 `{ type: 'call', name: 'xxx' }` 的 `name`)。
174
175
  *
175
- * 当前**确实一个都没注册**,空名单是真实状态、不是占位:
176
- * 运营在 DSL 里写任何 `call` 都会白屏,后台据此照常告警。
176
+ * 当前两个都是「不再提示」类的本地记账:写一条本地标记,让这条物料下次不再进坑位。
177
+ * **标记与关闭是两回事**——handler 只写标记、不关闭,这一次关不关由运营在
178
+ * `sequence` 里自己配 `close` 决定(也因此留出了「勾选框」式交互的可能)。
179
+ *
180
+ * 用 `as const` 是为了推导出 {@link HostHandlerName} 联合类型,供前台约束注册表。
177
181
  */
178
- declare const HOST_HANDLER_NAMES: readonly string[];
179
- /** 宿主方法名的联合类型(当前名单为空,故为 `never`) */
182
+ declare const HOST_HANDLER_NAMES: readonly ["dismissToday", "dismissForever"];
183
+ /** 宿主方法名的联合类型,前台注册表以它为键,漏注册一个就编译不过 */
180
184
  type HostHandlerName = (typeof HOST_HANDLER_NAMES)[number];
181
185
  /**
182
186
  * 数据源的中文含义。后台告警文案、运营看的能力清单共用一份,避免说明各写各的。
@@ -184,8 +188,12 @@ type HostHandlerName = (typeof HOST_HANDLER_NAMES)[number];
184
188
  * 键必须覆盖 {@link HOST_SOURCE_NAMES} 的全部名字(有单测钉死)。
185
189
  */
186
190
  declare const HOST_SOURCE_LABELS: Record<HostSourceName, string>;
187
- /** 宿主方法的中文含义,键覆盖 {@link HOST_HANDLER_NAMES}(当前为空对象) */
188
- declare const HOST_HANDLER_LABELS: Record<string, string>;
191
+ /**
192
+ * 宿主方法的中文含义。后台告警文案、运营看的能力清单共用一份。
193
+ *
194
+ * 键必须覆盖 {@link HOST_HANDLER_NAMES} 的全部名字(有单测钉死)。
195
+ */
196
+ declare const HOST_HANDLER_LABELS: Record<HostHandlerName, string>;
189
197
  /**
190
198
  * 判断一个数据源名是否已被前台注册。
191
199
  *
@@ -197,7 +205,7 @@ declare function isRegisteredHostSource(name: string): boolean;
197
205
  * 判断一个宿主方法名是否已被前台注册。
198
206
  *
199
207
  * @param name 待判断的名字,通常来自 DSL 里 `call` 动作的 `name`
200
- * @returns 已注册返回 true;当前名单为空,所以恒为 false
208
+ * @returns 已注册返回 true;未注册意味着该动作执行时会抛 `unknown-handler`,调用方应告警
201
209
  */
202
210
  declare function isRegisteredHostHandler(name: string): boolean;
203
211
 
package/dist/index.js CHANGED
@@ -871,12 +871,15 @@ function createRuntime(dsl, options = {}) {
871
871
 
872
872
  // src/host-capabilities.ts
873
873
  var HOST_SOURCE_NAMES = ["userStatistics", "listRenewTiers"];
874
- var HOST_HANDLER_NAMES = [];
874
+ var HOST_HANDLER_NAMES = ["dismissToday", "dismissForever"];
875
875
  var HOST_SOURCE_LABELS = {
876
876
  userStatistics: "\u7528\u6237\u6570\u636E\u7EDF\u8BA1\uFF08\u7D2F\u8BA1\u642C\u5BB6\u6570 / \u6B21\u6570\u4F59\u989D / AI \u4F18\u5316\u6B21\u6570\u7B49\uFF0C\u6241\u5E73\u5BF9\u8C61\uFF0C\u5B57\u6BB5\u540D\u4E3A\u540E\u7AEF snake_case\uFF09",
877
877
  listRenewTiers: "\u7EED\u8D39\u4EF7\u683C\u6863\u4F4D\u5217\u8868\uFF08\u6708\u4ED8/\u5B63\u4ED8/\u534A\u5E74/\u5E74\u4ED8\uFF0C\u542B\u4E0B\u5355\u5730\u5740\uFF09"
878
878
  };
879
- var HOST_HANDLER_LABELS = {};
879
+ var HOST_HANDLER_LABELS = {
880
+ dismissToday: "\u4ECA\u65E5\u4E0D\u518D\u63D0\u793A\uFF1A\u628A\u8FD9\u6761\u7269\u6599\u6807\u8BB0\u4E3A\u300C\u4ECA\u5929\u4E0D\u518D\u5C55\u793A\u300D\uFF08\u524D\u7AEF\u672C\u5730\u8BB0\u5F55\uFF0C\u6309\u767B\u5F55\u8D26\u53F7\u9694\u79BB\uFF0C\u8DE8\u8BBE\u5907\u4E0D\u540C\u6B65\uFF1B\u53EA\u5199\u6807\u8BB0\u4E0D\u5173\u95ED\uFF0C\u8981\u5173\u5F97\u81EA\u5DF1\u518D\u914D\u4E00\u4E2A close\uFF09",
881
+ dismissForever: "\u4E0D\u518D\u63D0\u793A\uFF1A\u628A\u8FD9\u6761\u7269\u6599\u6807\u8BB0\u4E3A\u300C\u6C38\u4E45\u4E0D\u518D\u5C55\u793A\u300D\uFF08\u524D\u7AEF\u672C\u5730\u8BB0\u5F55\uFF0C\u6309\u767B\u5F55\u8D26\u53F7\u9694\u79BB\uFF0C\u8DE8\u8BBE\u5907\u4E0D\u540C\u6B65\uFF1B\u53EA\u5199\u6807\u8BB0\u4E0D\u5173\u95ED\uFF0C\u8981\u5173\u5F97\u81EA\u5DF1\u518D\u914D\u4E00\u4E2A close\uFF09"
882
+ };
880
883
  function isRegisteredHostSource(name) {
881
884
  return HOST_SOURCE_NAMES.indexOf(name) > -1;
882
885
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaoxiu/marketing-dsl",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "type": "module",
5
5
  "description": "营销弹窗 DSL 解释器核心,纯逻辑无框架依赖",
6
6
  "license": "MIT",