@yaoxiu/marketing-dsl 2.2.1 → 2.3.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 +21 -0
- package/dist/index.d.cts +65 -1
- package/dist/index.d.ts +65 -1
- package/dist/index.js +16 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1882,12 +1882,31 @@ function formatIssues(issues) {
|
|
|
1882
1882
|
return issues.map((item) => item.path ? `${item.path}: ${item.message}` : item.message).join("\n");
|
|
1883
1883
|
}
|
|
1884
1884
|
|
|
1885
|
+
// src/host-capabilities.ts
|
|
1886
|
+
var HOST_SOURCE_NAMES = ["shopAchievements", "listRenewTiers"];
|
|
1887
|
+
var HOST_HANDLER_NAMES = [];
|
|
1888
|
+
var HOST_SOURCE_LABELS = {
|
|
1889
|
+
shopAchievements: "\u5E97\u94FA\u6210\u679C\u7EDF\u8BA1\uFF08\u5DF2\u4E0A\u67B6/\u8FD0\u884C\u4E2D/\u767D\u5E95\u56FE\u7B49\u683C\u5B50\u6570\u7EC4\uFF09",
|
|
1890
|
+
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"
|
|
1891
|
+
};
|
|
1892
|
+
var HOST_HANDLER_LABELS = {};
|
|
1893
|
+
function isRegisteredHostSource(name) {
|
|
1894
|
+
return HOST_SOURCE_NAMES.indexOf(name) > -1;
|
|
1895
|
+
}
|
|
1896
|
+
function isRegisteredHostHandler(name) {
|
|
1897
|
+
return HOST_HANDLER_NAMES.indexOf(name) > -1;
|
|
1898
|
+
}
|
|
1899
|
+
|
|
1885
1900
|
exports.ACTION_TYPES = ACTION_TYPES;
|
|
1886
1901
|
exports.ALLOWED_STYLE_KEYS = ALLOWED_STYLE_KEYS;
|
|
1887
1902
|
exports.BANNER_MIN_ASPECT_RATIO = BANNER_MIN_ASPECT_RATIO;
|
|
1888
1903
|
exports.CLOSE_POSITIONS = CLOSE_POSITIONS;
|
|
1889
1904
|
exports.DEFAULT_USER_FIELDS = DEFAULT_USER_FIELDS;
|
|
1890
1905
|
exports.DSL_VERSION = DSL_VERSION;
|
|
1906
|
+
exports.HOST_HANDLER_LABELS = HOST_HANDLER_LABELS;
|
|
1907
|
+
exports.HOST_HANDLER_NAMES = HOST_HANDLER_NAMES;
|
|
1908
|
+
exports.HOST_SOURCE_LABELS = HOST_SOURCE_LABELS;
|
|
1909
|
+
exports.HOST_SOURCE_NAMES = HOST_SOURCE_NAMES;
|
|
1891
1910
|
exports.NODE_TYPES = NODE_TYPES;
|
|
1892
1911
|
exports.SINGLE_VIEW_NAME = SINGLE_VIEW_NAME;
|
|
1893
1912
|
exports.TRACK_EVENT_PATTERN = TRACK_EVENT_PATTERN;
|
|
@@ -1901,6 +1920,8 @@ exports.formatParts = formatParts;
|
|
|
1901
1920
|
exports.interpolate = interpolate;
|
|
1902
1921
|
exports.interpolateDeep = interpolateDeep;
|
|
1903
1922
|
exports.isLength = isLength;
|
|
1923
|
+
exports.isRegisteredHostHandler = isRegisteredHostHandler;
|
|
1924
|
+
exports.isRegisteredHostSource = isRegisteredHostSource;
|
|
1904
1925
|
exports.isValidEndTime = isValidEndTime;
|
|
1905
1926
|
exports.normalizeViews = normalizeViews;
|
|
1906
1927
|
exports.parseEndTime = parseEndTime;
|
package/dist/index.d.cts
CHANGED
|
@@ -137,6 +137,70 @@ declare const USER_FIELD_LABELS: Record<string, string>;
|
|
|
137
137
|
*/
|
|
138
138
|
declare function validateUserFields(dsl: unknown, allowed: string[]): FieldIssue[];
|
|
139
139
|
|
|
140
|
+
/**
|
|
141
|
+
* 宿主已注册的能力清单(数据源 `$source` / 宿主方法 `call`)。
|
|
142
|
+
*
|
|
143
|
+
* 【这份清单是什么】
|
|
144
|
+
* 它是「**前台宿主实际注册了什么**」的事实记录,**不是** core 的能力声明。
|
|
145
|
+
* core 本身对数据源名一无所知:运行时只认宿主创建 runtime 时传进来的 `sources` /
|
|
146
|
+
* `handlers` 对象,查不到名字就抛 `unknown-source`、整份物料静默白屏
|
|
147
|
+
* (不报错、什么都不画,投到线上才发现)。
|
|
148
|
+
*
|
|
149
|
+
* 【为什么放在 core 里】
|
|
150
|
+
* 因为前台(move-front,注册表在 `components-business/marketing/sources.ts`)与
|
|
151
|
+
* 后台投放编辑器(moveback-front,保存前要检出「DSL 用到、但前台没注册」的能力并告警)
|
|
152
|
+
* 必须共用同一份名单,而这两个仓库唯一的共同依赖就是本包。
|
|
153
|
+
* 与 `DEFAULT_USER_FIELDS`(「宿主提供哪些 user 字段」的白名单)的处境一模一样,
|
|
154
|
+
* 组织方式也照它办:名单 + 中文含义同文件,从主入口导出。
|
|
155
|
+
*
|
|
156
|
+
* 【维护约定,两条都是硬性的】
|
|
157
|
+
* 1. **只增不改**:名字一旦进清单就是对运营的契约,DSL 里写死的就是这个名字。
|
|
158
|
+
* 改名 = 线上已投放的物料静默白屏。实现随便换,名字不许动。
|
|
159
|
+
* 2. **前台增减数据源 / 宿主方法时,必须同步改本文件并发版**(minor),
|
|
160
|
+
* 否则后台的告警会误报(前台已注册却报「未注册」)或漏报(前台没注册却不告警)。
|
|
161
|
+
* 前台注册表的返回类型由本文件的名单推导,漏注册编译期就会失败;
|
|
162
|
+
* 「清单删了名字但注册表还留着」由前台的运行时单测兜住。
|
|
163
|
+
*/
|
|
164
|
+
/**
|
|
165
|
+
* 前台已注册的**数据源名**(DSL 里 `data: { x: { $source: 'name' } }` 的 `name`)。
|
|
166
|
+
*
|
|
167
|
+
* 用 `as const` 是为了推导出 {@link HostSourceName} 联合类型,供前台约束注册表。
|
|
168
|
+
*/
|
|
169
|
+
declare const HOST_SOURCE_NAMES: readonly ["shopAchievements", "listRenewTiers"];
|
|
170
|
+
/** 数据源名的联合类型,前台注册表以它为键,漏注册一个就编译不过 */
|
|
171
|
+
type HostSourceName = (typeof HOST_SOURCE_NAMES)[number];
|
|
172
|
+
/**
|
|
173
|
+
* 前台已注册的**宿主方法名**(DSL 里 `{ type: 'call', name: 'xxx' }` 的 `name`)。
|
|
174
|
+
*
|
|
175
|
+
* 当前**确实一个都没注册**,空名单是真实状态、不是占位:
|
|
176
|
+
* 运营在 DSL 里写任何 `call` 都会白屏,后台据此照常告警。
|
|
177
|
+
*/
|
|
178
|
+
declare const HOST_HANDLER_NAMES: readonly string[];
|
|
179
|
+
/** 宿主方法名的联合类型(当前名单为空,故为 `never`) */
|
|
180
|
+
type HostHandlerName = (typeof HOST_HANDLER_NAMES)[number];
|
|
181
|
+
/**
|
|
182
|
+
* 数据源的中文含义。后台告警文案、运营看的能力清单共用一份,避免说明各写各的。
|
|
183
|
+
*
|
|
184
|
+
* 键必须覆盖 {@link HOST_SOURCE_NAMES} 的全部名字(有单测钉死)。
|
|
185
|
+
*/
|
|
186
|
+
declare const HOST_SOURCE_LABELS: Record<HostSourceName, string>;
|
|
187
|
+
/** 宿主方法的中文含义,键覆盖 {@link HOST_HANDLER_NAMES}(当前为空对象) */
|
|
188
|
+
declare const HOST_HANDLER_LABELS: Record<string, string>;
|
|
189
|
+
/**
|
|
190
|
+
* 判断一个数据源名是否已被前台注册。
|
|
191
|
+
*
|
|
192
|
+
* @param name 待判断的名字,通常来自 DSL 里的 `$source`
|
|
193
|
+
* @returns 已注册返回 true;未注册意味着渲染时会白屏,调用方应告警
|
|
194
|
+
*/
|
|
195
|
+
declare function isRegisteredHostSource(name: string): boolean;
|
|
196
|
+
/**
|
|
197
|
+
* 判断一个宿主方法名是否已被前台注册。
|
|
198
|
+
*
|
|
199
|
+
* @param name 待判断的名字,通常来自 DSL 里 `call` 动作的 `name`
|
|
200
|
+
* @returns 已注册返回 true;当前名单为空,所以恒为 false
|
|
201
|
+
*/
|
|
202
|
+
declare function isRegisteredHostHandler(name: string): boolean;
|
|
203
|
+
|
|
140
204
|
/**
|
|
141
205
|
* 视图归一化。
|
|
142
206
|
*
|
|
@@ -248,4 +312,4 @@ declare function computeParts(endTime: number, now?: number): CountdownParts;
|
|
|
248
312
|
/** 不给 children 时退化成一行文本,占位符 {d} {h} {hAll} {m} {s} {cs} */
|
|
249
313
|
declare function formatParts(parts: CountdownParts, format?: string): string;
|
|
250
314
|
|
|
251
|
-
export { ACTION_TYPES, ALLOWED_STYLE_KEYS, BANNER_MIN_ASPECT_RATIO, CLOSE_POSITIONS, type CountdownParts, type CountdownPrecision, CssStyle, DEFAULT_USER_FIELDS, DSL_VERSION, Dsl, type DslRuntime, DslStyle, DslView, type Issue, NODE_TYPES, type NormalizedViews, RenderTree, RuntimeOptions, SINGLE_VIEW_NAME, TRACK_EVENT_PATTERN, USER_FIELD_LABELS, type ValidateOptions, type ValidateResult, check, computeParts, createRuntime, evaluate, formatIssues, formatParts, interpolate, interpolateDeep, isLength, isValidEndTime, normalizeViews, parseEndTime, safeImageUrl, safeUrl, toCssStyle, toLength, validate, validateUserFields };
|
|
315
|
+
export { ACTION_TYPES, ALLOWED_STYLE_KEYS, BANNER_MIN_ASPECT_RATIO, CLOSE_POSITIONS, type CountdownParts, type CountdownPrecision, CssStyle, DEFAULT_USER_FIELDS, DSL_VERSION, Dsl, type DslRuntime, DslStyle, DslView, HOST_HANDLER_LABELS, HOST_HANDLER_NAMES, HOST_SOURCE_LABELS, HOST_SOURCE_NAMES, type HostHandlerName, type HostSourceName, type Issue, NODE_TYPES, type NormalizedViews, RenderTree, RuntimeOptions, SINGLE_VIEW_NAME, TRACK_EVENT_PATTERN, USER_FIELD_LABELS, type ValidateOptions, type ValidateResult, check, computeParts, createRuntime, evaluate, formatIssues, formatParts, interpolate, interpolateDeep, isLength, isRegisteredHostHandler, isRegisteredHostSource, isValidEndTime, normalizeViews, parseEndTime, safeImageUrl, safeUrl, toCssStyle, toLength, validate, validateUserFields };
|
package/dist/index.d.ts
CHANGED
|
@@ -137,6 +137,70 @@ declare const USER_FIELD_LABELS: Record<string, string>;
|
|
|
137
137
|
*/
|
|
138
138
|
declare function validateUserFields(dsl: unknown, allowed: string[]): FieldIssue[];
|
|
139
139
|
|
|
140
|
+
/**
|
|
141
|
+
* 宿主已注册的能力清单(数据源 `$source` / 宿主方法 `call`)。
|
|
142
|
+
*
|
|
143
|
+
* 【这份清单是什么】
|
|
144
|
+
* 它是「**前台宿主实际注册了什么**」的事实记录,**不是** core 的能力声明。
|
|
145
|
+
* core 本身对数据源名一无所知:运行时只认宿主创建 runtime 时传进来的 `sources` /
|
|
146
|
+
* `handlers` 对象,查不到名字就抛 `unknown-source`、整份物料静默白屏
|
|
147
|
+
* (不报错、什么都不画,投到线上才发现)。
|
|
148
|
+
*
|
|
149
|
+
* 【为什么放在 core 里】
|
|
150
|
+
* 因为前台(move-front,注册表在 `components-business/marketing/sources.ts`)与
|
|
151
|
+
* 后台投放编辑器(moveback-front,保存前要检出「DSL 用到、但前台没注册」的能力并告警)
|
|
152
|
+
* 必须共用同一份名单,而这两个仓库唯一的共同依赖就是本包。
|
|
153
|
+
* 与 `DEFAULT_USER_FIELDS`(「宿主提供哪些 user 字段」的白名单)的处境一模一样,
|
|
154
|
+
* 组织方式也照它办:名单 + 中文含义同文件,从主入口导出。
|
|
155
|
+
*
|
|
156
|
+
* 【维护约定,两条都是硬性的】
|
|
157
|
+
* 1. **只增不改**:名字一旦进清单就是对运营的契约,DSL 里写死的就是这个名字。
|
|
158
|
+
* 改名 = 线上已投放的物料静默白屏。实现随便换,名字不许动。
|
|
159
|
+
* 2. **前台增减数据源 / 宿主方法时,必须同步改本文件并发版**(minor),
|
|
160
|
+
* 否则后台的告警会误报(前台已注册却报「未注册」)或漏报(前台没注册却不告警)。
|
|
161
|
+
* 前台注册表的返回类型由本文件的名单推导,漏注册编译期就会失败;
|
|
162
|
+
* 「清单删了名字但注册表还留着」由前台的运行时单测兜住。
|
|
163
|
+
*/
|
|
164
|
+
/**
|
|
165
|
+
* 前台已注册的**数据源名**(DSL 里 `data: { x: { $source: 'name' } }` 的 `name`)。
|
|
166
|
+
*
|
|
167
|
+
* 用 `as const` 是为了推导出 {@link HostSourceName} 联合类型,供前台约束注册表。
|
|
168
|
+
*/
|
|
169
|
+
declare const HOST_SOURCE_NAMES: readonly ["shopAchievements", "listRenewTiers"];
|
|
170
|
+
/** 数据源名的联合类型,前台注册表以它为键,漏注册一个就编译不过 */
|
|
171
|
+
type HostSourceName = (typeof HOST_SOURCE_NAMES)[number];
|
|
172
|
+
/**
|
|
173
|
+
* 前台已注册的**宿主方法名**(DSL 里 `{ type: 'call', name: 'xxx' }` 的 `name`)。
|
|
174
|
+
*
|
|
175
|
+
* 当前**确实一个都没注册**,空名单是真实状态、不是占位:
|
|
176
|
+
* 运营在 DSL 里写任何 `call` 都会白屏,后台据此照常告警。
|
|
177
|
+
*/
|
|
178
|
+
declare const HOST_HANDLER_NAMES: readonly string[];
|
|
179
|
+
/** 宿主方法名的联合类型(当前名单为空,故为 `never`) */
|
|
180
|
+
type HostHandlerName = (typeof HOST_HANDLER_NAMES)[number];
|
|
181
|
+
/**
|
|
182
|
+
* 数据源的中文含义。后台告警文案、运营看的能力清单共用一份,避免说明各写各的。
|
|
183
|
+
*
|
|
184
|
+
* 键必须覆盖 {@link HOST_SOURCE_NAMES} 的全部名字(有单测钉死)。
|
|
185
|
+
*/
|
|
186
|
+
declare const HOST_SOURCE_LABELS: Record<HostSourceName, string>;
|
|
187
|
+
/** 宿主方法的中文含义,键覆盖 {@link HOST_HANDLER_NAMES}(当前为空对象) */
|
|
188
|
+
declare const HOST_HANDLER_LABELS: Record<string, string>;
|
|
189
|
+
/**
|
|
190
|
+
* 判断一个数据源名是否已被前台注册。
|
|
191
|
+
*
|
|
192
|
+
* @param name 待判断的名字,通常来自 DSL 里的 `$source`
|
|
193
|
+
* @returns 已注册返回 true;未注册意味着渲染时会白屏,调用方应告警
|
|
194
|
+
*/
|
|
195
|
+
declare function isRegisteredHostSource(name: string): boolean;
|
|
196
|
+
/**
|
|
197
|
+
* 判断一个宿主方法名是否已被前台注册。
|
|
198
|
+
*
|
|
199
|
+
* @param name 待判断的名字,通常来自 DSL 里 `call` 动作的 `name`
|
|
200
|
+
* @returns 已注册返回 true;当前名单为空,所以恒为 false
|
|
201
|
+
*/
|
|
202
|
+
declare function isRegisteredHostHandler(name: string): boolean;
|
|
203
|
+
|
|
140
204
|
/**
|
|
141
205
|
* 视图归一化。
|
|
142
206
|
*
|
|
@@ -248,4 +312,4 @@ declare function computeParts(endTime: number, now?: number): CountdownParts;
|
|
|
248
312
|
/** 不给 children 时退化成一行文本,占位符 {d} {h} {hAll} {m} {s} {cs} */
|
|
249
313
|
declare function formatParts(parts: CountdownParts, format?: string): string;
|
|
250
314
|
|
|
251
|
-
export { ACTION_TYPES, ALLOWED_STYLE_KEYS, BANNER_MIN_ASPECT_RATIO, CLOSE_POSITIONS, type CountdownParts, type CountdownPrecision, CssStyle, DEFAULT_USER_FIELDS, DSL_VERSION, Dsl, type DslRuntime, DslStyle, DslView, type Issue, NODE_TYPES, type NormalizedViews, RenderTree, RuntimeOptions, SINGLE_VIEW_NAME, TRACK_EVENT_PATTERN, USER_FIELD_LABELS, type ValidateOptions, type ValidateResult, check, computeParts, createRuntime, evaluate, formatIssues, formatParts, interpolate, interpolateDeep, isLength, isValidEndTime, normalizeViews, parseEndTime, safeImageUrl, safeUrl, toCssStyle, toLength, validate, validateUserFields };
|
|
315
|
+
export { ACTION_TYPES, ALLOWED_STYLE_KEYS, BANNER_MIN_ASPECT_RATIO, CLOSE_POSITIONS, type CountdownParts, type CountdownPrecision, CssStyle, DEFAULT_USER_FIELDS, DSL_VERSION, Dsl, type DslRuntime, DslStyle, DslView, HOST_HANDLER_LABELS, HOST_HANDLER_NAMES, HOST_SOURCE_LABELS, HOST_SOURCE_NAMES, type HostHandlerName, type HostSourceName, type Issue, NODE_TYPES, type NormalizedViews, RenderTree, RuntimeOptions, SINGLE_VIEW_NAME, TRACK_EVENT_PATTERN, USER_FIELD_LABELS, type ValidateOptions, type ValidateResult, check, computeParts, createRuntime, evaluate, formatIssues, formatParts, interpolate, interpolateDeep, isLength, isRegisteredHostHandler, isRegisteredHostSource, isValidEndTime, normalizeViews, parseEndTime, safeImageUrl, safeUrl, toCssStyle, toLength, validate, validateUserFields };
|
package/dist/index.js
CHANGED
|
@@ -774,4 +774,19 @@ function createRuntime(dsl, options = {}) {
|
|
|
774
774
|
};
|
|
775
775
|
}
|
|
776
776
|
|
|
777
|
-
|
|
777
|
+
// src/host-capabilities.ts
|
|
778
|
+
var HOST_SOURCE_NAMES = ["shopAchievements", "listRenewTiers"];
|
|
779
|
+
var HOST_HANDLER_NAMES = [];
|
|
780
|
+
var HOST_SOURCE_LABELS = {
|
|
781
|
+
shopAchievements: "\u5E97\u94FA\u6210\u679C\u7EDF\u8BA1\uFF08\u5DF2\u4E0A\u67B6/\u8FD0\u884C\u4E2D/\u767D\u5E95\u56FE\u7B49\u683C\u5B50\u6570\u7EC4\uFF09",
|
|
782
|
+
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"
|
|
783
|
+
};
|
|
784
|
+
var HOST_HANDLER_LABELS = {};
|
|
785
|
+
function isRegisteredHostSource(name) {
|
|
786
|
+
return HOST_SOURCE_NAMES.indexOf(name) > -1;
|
|
787
|
+
}
|
|
788
|
+
function isRegisteredHostHandler(name) {
|
|
789
|
+
return HOST_HANDLER_NAMES.indexOf(name) > -1;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
export { HOST_HANDLER_LABELS, HOST_HANDLER_NAMES, HOST_SOURCE_LABELS, HOST_SOURCE_NAMES, createRuntime, isRegisteredHostHandler, isRegisteredHostSource, safeImageUrl, safeUrl };
|