base-paint 0.3.1 → 0.3.3
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 +94 -1
- package/dist/blocks.d.ts +160 -6
- package/dist/blocks.d.ts.map +1 -1
- package/dist/blocks.js +1212 -27
- package/dist/blocks.js.map +1 -1
- package/dist/charts.d.ts +6 -4
- package/dist/charts.d.ts.map +1 -1
- package/dist/charts.js +426 -67
- package/dist/charts.js.map +1 -1
- package/dist/controls.d.ts +20 -5
- package/dist/controls.d.ts.map +1 -1
- package/dist/controls.js +242 -34
- package/dist/controls.js.map +1 -1
- package/dist/font.d.ts +3 -3
- package/dist/font.js +3 -3
- package/dist/help.d.ts +3 -3
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +32 -15
- package/dist/help.js.map +1 -1
- package/dist/helpShell.d.ts.map +1 -1
- package/dist/helpShell.js +2 -2
- package/dist/helpShell.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/injector.d.ts +1 -1
- package/dist/output/saveHtml.d.ts +37 -2
- package/dist/output/saveHtml.d.ts.map +1 -1
- package/dist/output/saveHtml.js +125 -15
- package/dist/output/saveHtml.js.map +1 -1
- package/dist/pageShapes.d.ts +117 -0
- package/dist/pageShapes.d.ts.map +1 -0
- package/dist/pageShapes.js +366 -0
- package/dist/pageShapes.js.map +1 -0
- package/dist/pageUi.d.ts +37 -0
- package/dist/pageUi.d.ts.map +1 -0
- package/dist/pageUi.js +237 -0
- package/dist/pageUi.js.map +1 -0
- package/dist/spec/charts.d.ts +16 -3
- package/dist/spec/charts.d.ts.map +1 -1
- package/dist/spec/charts.js +1 -1
- package/dist/spec/charts.js.map +1 -1
- package/dist/spec/controls.d.ts +30 -5
- package/dist/spec/controls.d.ts.map +1 -1
- package/dist/spec/controls.js +16 -3
- package/dist/spec/controls.js.map +1 -1
- package/dist/spec/help.d.ts +34 -6
- package/dist/spec/help.d.ts.map +1 -1
- package/dist/spec/help.js +21 -4
- package/dist/spec/help.js.map +1 -1
- package/dist/spec/index.d.ts +6 -3
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +27 -2
- package/dist/spec/index.js.map +1 -1
- package/dist/style.d.ts.map +1 -1
- package/dist/style.js +279 -47
- package/dist/style.js.map +1 -1
- package/dist/text.d.ts.map +1 -1
- package/dist/text.js +7 -2
- package/dist/text.js.map +1 -1
- package/package.json +1 -1
package/dist/helpShell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpShell.js","sourceRoot":"","sources":["../src/helpShell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,4DAA4D;AAC5D,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAiB;IAE9B,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAW,
|
|
1
|
+
{"version":3,"file":"helpShell.js","sourceRoot":"","sources":["../src/helpShell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,4DAA4D;AAC5D,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAiB;IAE9B,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAW,83iBAA83iB,CAAC;AAEx6iB,mFAAmF;AACnF,MAAM,CAAC,MAAM,iBAAiB,GAAW,+zUAA+zU,GAAG,kMAAkM,GAAG,84IAA84I,GAAG,mrEAAmrE,GAAG,oEAAoE,GAAG,k+oEAAk+oE,CAAC;AAEjqrF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,qDAA8D,CAAC;AAEnG,2CAA2C;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAyB,CAAC;AAE/D,kCAAkC;AAClC,SAAS,eAAe,CAAC,CAAS;IAChC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9G,CAAC;AAED;;;;;;;mBAOmB;AACnB,MAAM,UAAU,eAAe,CAAC,IAA+D;IAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC/D,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,mBAAmB,CAAC,IAAmB;IACrD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,iBAAiB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,iBAAiB,CAAC;AAC/F,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -24,7 +24,15 @@ export { buildDataText, buildLogText } from './text.js';
|
|
|
24
24
|
* `ChartError` **不在此导出**——与 `TemplateError`/`ControlsError` 同口径(冻结面无该运行时条目,
|
|
25
25
|
* 调用方按 `name`/`code` 判定)。 */
|
|
26
26
|
export { buildChartsHelpersJs, charts } from './charts.js';
|
|
27
|
-
/** #78 HELP
|
|
28
|
-
* `HelpSchemaError
|
|
27
|
+
/** #78 HELP模板(契约 §3.5.3/§6.5):数据页分型,走 `fillTemplate`,`#88` 直接复用 `HelpShellInput`。
|
|
28
|
+
* `HelpSchemaError`/内置help模板 **不在此导出**(同口径;模板可经 `HelpShellInput.template` 覆盖)。 */
|
|
29
29
|
export { renderHelpShell } from './help.js';
|
|
30
|
+
/** #525 页面级两层(只追加,不动上面任何一条 export):**移动端配方**(断点/触摸区/安全区/
|
|
31
|
+
* 窄屏表格行为/页内定位)与**页面级形状件**(事实条/图片与 GIF 容器/时间轴条/媒体占位件)。
|
|
32
|
+
* 与 `blocks.js` 的 12 区块样式区分住:这两层是「整页怎么摆」,不参与区块组合;
|
|
33
|
+
* 是否启用由整页装配的 `pageUi` 位决定,不启用则产出物逐字节不变。 */
|
|
34
|
+
export { PAGE_UI_CLASS, PAGE_UI_VIEWPORT, pageUiCss } from './pageUi.js';
|
|
35
|
+
export type { PageUiCssInput } from './pageUi.js';
|
|
36
|
+
export { MEDIA_RATIOS, pageShapeCss, renderFactStrip, renderMediaFigure, renderMediaPlaceholder, renderTimelineRows, } from './pageShapes.js';
|
|
37
|
+
export type { FactItemInput, FactStripInput, FactTone, MediaFigureInput, MediaPlaceholderInput, MediaRatio, TimelineRowInput, TimelineRowsInput, } from './pageShapes.js';
|
|
30
38
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnG,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClI,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjH,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACvG,sEAAsE;AACtE,cAAc,iBAAiB,CAAC;AAChC;+DAC+D;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C;qEACqE;AACrE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB;;8BAE8B;AAC9B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACxD;;;8BAG8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3D;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnG,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClI,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjH,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACvG,sEAAsE;AACtE,cAAc,iBAAiB,CAAC;AAChC;+DAC+D;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C;qEACqE;AACrE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB;;8BAE8B;AAC9B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACxD;;;8BAG8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3D;mFACmF;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C;;;4CAG4C;AAC5C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,qBAAqB,EACrB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,13 @@ export { buildDataText, buildLogText } from './text.js';
|
|
|
20
20
|
* `ChartError` **不在此导出**——与 `TemplateError`/`ControlsError` 同口径(冻结面无该运行时条目,
|
|
21
21
|
* 调用方按 `name`/`code` 判定)。 */
|
|
22
22
|
export { buildChartsHelpersJs, charts } from './charts.js';
|
|
23
|
-
/** #78 HELP
|
|
24
|
-
* `HelpSchemaError
|
|
23
|
+
/** #78 HELP模板(契约 §3.5.3/§6.5):数据页分型,走 `fillTemplate`,`#88` 直接复用 `HelpShellInput`。
|
|
24
|
+
* `HelpSchemaError`/内置help模板 **不在此导出**(同口径;模板可经 `HelpShellInput.template` 覆盖)。 */
|
|
25
25
|
export { renderHelpShell } from './help.js';
|
|
26
|
+
/** #525 页面级两层(只追加,不动上面任何一条 export):**移动端配方**(断点/触摸区/安全区/
|
|
27
|
+
* 窄屏表格行为/页内定位)与**页面级形状件**(事实条/图片与 GIF 容器/时间轴条/媒体占位件)。
|
|
28
|
+
* 与 `blocks.js` 的 12 区块样式区分住:这两层是「整页怎么摆」,不参与区块组合;
|
|
29
|
+
* 是否启用由整页装配的 `pageUi` 位决定,不启用则产出物逐字节不变。 */
|
|
30
|
+
export { PAGE_UI_CLASS, PAGE_UI_VIEWPORT, pageUiCss } from './pageUi.js';
|
|
31
|
+
export { MEDIA_RATIOS, pageShapeCss, renderFactStrip, renderMediaFigure, renderMediaPlaceholder, renderTimelineRows, } from './pageShapes.js';
|
|
26
32
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnG,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAElI,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEjH,sEAAsE;AACtE,cAAc,iBAAiB,CAAC;AAChC;+DAC+D;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C;qEACqE;AACrE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB;;8BAE8B;AAC9B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACxD;;;8BAG8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnG,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAElI,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEjH,sEAAsE;AACtE,cAAc,iBAAiB,CAAC;AAChC;+DAC+D;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C;qEACqE;AACrE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB;;8BAE8B;AAC9B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACxD;;;8BAG8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3D;mFACmF;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C;;;4CAG4C;AAC5C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
|
package/dist/injector.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
*
|
|
3
3
|
* better-sidebar 槽位注册只许住这里:link-core/combos 禁止自装配
|
|
4
4
|
*(tooling/check-boundaries.mjs 可执行断言)。host 无关设计——
|
|
5
|
-
* 以 SlotsPort 注入真实服务,B
|
|
5
|
+
* 以 SlotsPort 注入真实服务,B 实施实测时接线,单测用假端口。
|
|
6
6
|
* 语义抄 matt 实证:幂等(disposer 非空即跳过)+ 有界重试(1s×10)+
|
|
7
7
|
* 卸载清理(ctx.effect 同构),成功后无轮询;openTab 走 path seed 内容型打开。
|
|
8
8
|
*/
|
|
@@ -1,7 +1,17 @@
|
|
|
1
|
-
/** 撞名策略(四态;只表态「撞名怎么办」,**不改** `stem`/`file`
|
|
1
|
+
/** 撞名策略(四态;只表态「撞名怎么办」,**不改** `stem`/`file` 怎么解释。三支 `reuse` 见件头)。
|
|
2
|
+
*
|
|
3
|
+
* `reuse` 的三支都「有就不新建」:`byDay`(当天已有)/`byContent`(内容相同)/`{byAge: 毫秒}`(不超龄)。 */
|
|
2
4
|
export type HtmlOnExists = 'succession' | 'overwrite' | 'fail' | {
|
|
3
|
-
readonly reuse: 'byDay' | 'byContent'
|
|
5
|
+
readonly reuse: 'byDay' | 'byContent' | {
|
|
6
|
+
readonly byAge: number;
|
|
7
|
+
};
|
|
4
8
|
};
|
|
9
|
+
/** **HELP 产物的缺省复用窗口**:一天(小时数)——「24 小时内只产出 1 个」。
|
|
10
|
+
*
|
|
11
|
+
* 维护者 2026-09-12 原话:「该方法内需要提供过期时间,比如 1 天内直接返回一份,不会再创建新的。又或者 3 天
|
|
12
|
+
* 这种参数。」⇒ **缺省就是一天**;要别的窗口由调用方显式给(见 `reuseWindowOfHours`)。
|
|
13
|
+
* 与 `byAge` 同源,单位换算只有一处(本件)。 */
|
|
14
|
+
export declare const HELP_REUSE_DEFAULT_HOURS = 24;
|
|
5
15
|
/** 落点**意图**(给「按通式落一份」的调用者):`dir` 落哪个目录、`stem` 文件名**主体**(不含扩展名)。
|
|
6
16
|
*
|
|
7
17
|
* 扩展名、时间戳、同秒递补都由本件钉死——调用者只声明「落哪、叫什么」。要**确切文件名**的调用者
|
|
@@ -16,6 +26,31 @@ export interface HtmlReceipt {
|
|
|
16
26
|
readonly path: string;
|
|
17
27
|
readonly bytes: number;
|
|
18
28
|
}
|
|
29
|
+
/** 复用窗口的**参数面**(`reuseHours`)→ 毫秒(`onExists:{reuse:{byAge}}`)。
|
|
30
|
+
*
|
|
31
|
+
* 唯一出口,五家技能命令行(卡路里/记账/备忘录/作息/大厨)都走这里——「几小时=多少毫秒」与
|
|
32
|
+
* 「坏参怎么判」不许各抄一份(铁律二)。
|
|
33
|
+
* 口径(#245):
|
|
34
|
+
* - `undefined`/空串 ⇒ **缺省**:有 `defaultHours` 时用它(各技能缺省= `HELP_REUSE_DEFAULT_HOURS`
|
|
35
|
+
* =一天),没有就返回 `0`(=「每次都落新的」);
|
|
36
|
+
* - `0` ⇒ 同上「每次都落新的」——**显式要一份最新的**;
|
|
37
|
+
* - 正的有限数 ⇒ 该窗口的毫秒数(3 天=`72`)/数字串按数算(JSON 与 argv 两路同口径);
|
|
38
|
+
* - 其余(负数/`NaN`/非数/非空的非数字串)⇒ 抛 `RangeError`「reuseHours 非法…」
|
|
39
|
+
* (**坏参阻断,不静默当 0**;各技能出口把它归到「参数错」那一档退出码)。
|
|
40
|
+
*/
|
|
41
|
+
export declare function reuseWindowOfHours(value: unknown, defaultHours?: number): number;
|
|
42
|
+
/** 造一个「按本家口径收拾坏参」的换算器:五家技能出口(卡路里/记账/备忘录/作息/大厨)都这么接——
|
|
43
|
+
*
|
|
44
|
+
* ```ts
|
|
45
|
+
* const windowOf = helpReuseWindowOf((m) => fail(2, m)); // 出口的「参数错」那一档
|
|
46
|
+
* const windowMs = windowOf(params);
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* 为什么要这个工厂:五家原先的写法是「`try { reuseWindowOfHours(…) } catch { fail(2, …) }`」五份逐字
|
|
50
|
+
* 相同(只有「翻成哪家错误」不同)——那正是仓规铁律二禁止的「同一件事五份实现」。这里只做一件事:
|
|
51
|
+
* 把 `RangeError` 交给你给的处理器(各家自己决定翻成 `fail(2)` 还是别家错误类型),其余错误原样穿过
|
|
52
|
+
* (不吞非预期异常)。 */
|
|
53
|
+
export declare function helpReuseWindowOf(onBadParam: (message: string) => never): (params: Record<string, unknown>) => number;
|
|
19
54
|
/** 落一份 HTML 产物(**唯一落盘点**,对外唯一函数)。见件头:两个名字口子/四态/回执口径。
|
|
20
55
|
*
|
|
21
56
|
* `stem`(主体)与 `file`(确切文件名)**只给一个**;`onExists` 只表态撞名怎么办。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveHtml.d.ts","sourceRoot":"","sources":["../../src/output/saveHtml.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"saveHtml.d.ts","sourceRoot":"","sources":["../../src/output/saveHtml.ts"],"names":[],"mappings":"AAsDA;;8EAE8E;AAC9E,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,WAAW,GACX,MAAM,GACN;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE3E;;;;iCAIiC;AACjC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;+BAG+B;AAC/B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAeD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAWhF;AAED;;;;;;;;;;iBAUiB;AACjB,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,GACrC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAS7C;AA6LD;;6DAE6D;AAC7D,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB,GAAG,WAAW,CAqCd"}
|
package/dist/output/saveHtml.js
CHANGED
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
* 的半步,与 `base-paint` 同族;出口走子路径 `./save-html`,**不从包根开**(包根受 `spec/index.ts` 的
|
|
13
13
|
* 契约面锁死,且带 `fs` 的件不该牵连只要渲染的消费者)。
|
|
14
14
|
*
|
|
15
|
-
*
|
|
15
|
+
* 对外两个函数:`saveHtmlFile`(落盘)与 `reuseWindowOfHours`(**窗口参数的唯一定义地**,见下)+ 一个默认窗口
|
|
16
|
+
* 常量(+ 三个类型)。#245 起「几小时=多少毫秒」也有唯一定义地——五家技能出口都从 `--params` 的
|
|
17
|
+
* `reuseHours` 走它,不许各抄一份转换与校验(铁律二)。**本件自己的判断**:扩展名 `.html`/时间戳格式
|
|
16
18
|
* `YYYYMMDD_HHMMSS`(本地时间)/同秒递补规则/绝不静默覆盖/回执形状/`bytes` 按 UTF-8 真实字节算——
|
|
17
19
|
* 若把这些也做成参数,这里就只剩 `fs.writeFile` 包一层(铁律五点名的「白占一层的转发包装」)。
|
|
18
20
|
* `dir`/`stem`/`file`/`html`/`onExists` 由调用者给,那就是各家的自定义。
|
|
@@ -29,12 +31,18 @@
|
|
|
29
31
|
* - `overwrite`:名字照 `stem`/`file` 给的落(**不带时间戳、不递补**),已存在就逐字覆写
|
|
30
32
|
* ——记账/卡路里 `--output`/`--html` 的既有口径(用户逐字指定的落点就是这个语义);
|
|
31
33
|
* - `fail`:名字同 `overwrite`(不带时间戳、不递补),撞名即抛(`code:'EEXIST'`),不改写已有那份;
|
|
32
|
-
* - `{reuse:'byDay'}`/`{reuse:'byContent'}
|
|
33
|
-
*
|
|
34
|
-
*
|
|
34
|
+
* - `{reuse:'byDay'}`/`{reuse:'byContent'}`/`{reuse:{byAge:ms}}`:返回**已有那份**,不新建、不改写。
|
|
35
|
+
* `byDay`=当天已有同一主体的一份(取当天最新的);`byContent`=内容哈希相同;
|
|
36
|
+
* **`byAge`=已有那份的落盘时刻距现在比 `byAge` 毫秒更近(取最新的那一份)——判据严格小于**:`{byAge: 86_400_000}`
|
|
37
|
+
* 就是「一天内直接返回同一份」,`{byAge: 0}` 就是「永远不命中=每次都落新的」(判据 `<=` 会让同秒重跑失效)。
|
|
38
|
+
* 判据**一律不按调用者给的名字**(时间戳到秒,两次跑几乎不可能同名),
|
|
39
|
+
* 而是按本件自己产出的名字(`<主体>_<YYYYMMDD_HHMMSS>[_N].html`)扫目录;`byAge` 读名字里的时间戳。
|
|
40
|
+
* **未命中则与 `succession` 同路落一份新的**(带时间戳、绝不覆盖)——落不带戳的名字会让「自己落的
|
|
41
|
+
* 自己下次查不中」,等于没做复用。这三支只认 `stem`(不认 `file`:逐字落点与「按通式扫目录」自相矛盾)。
|
|
42
|
+
* - 时间戳在**一次调用里只算一次**(`byAge` 的判据与落盘名同源,不跨秒错位)。
|
|
35
43
|
*
|
|
36
|
-
* ⇒ `stem`/`file`
|
|
37
|
-
* `
|
|
44
|
+
* ⇒ `stem`/`file` 与四态的组合:`succession` + `stem` 是通式默认路;`overwrite`/`fail` + `file` 是逐字落点路;
|
|
45
|
+
* `reuse`(三支)+ `stem` 是「有就不新建」路;`succession` + `file`/`reuse` + `file` 都不许(`EINVAL`)。
|
|
38
46
|
*
|
|
39
47
|
* 不做原子写(先写 `.tmp` 再改名):HELP 是一次性产物,风险低,不值得加这层。
|
|
40
48
|
* 落点**目录建不动**(`mkdirSync` 失败)与「候选已存在」是两类错误,前者原样抛、不进递补循环
|
|
@@ -43,6 +51,12 @@
|
|
|
43
51
|
import { createHash } from 'node:crypto';
|
|
44
52
|
import { mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
|
|
45
53
|
import { dirname, join, resolve } from 'node:path';
|
|
54
|
+
/** **HELP 产物的缺省复用窗口**:一天(小时数)——「24 小时内只产出 1 个」。
|
|
55
|
+
*
|
|
56
|
+
* 维护者 2026-09-12 原话:「该方法内需要提供过期时间,比如 1 天内直接返回一份,不会再创建新的。又或者 3 天
|
|
57
|
+
* 这种参数。」⇒ **缺省就是一天**;要别的窗口由调用方显式给(见 `reuseWindowOfHours`)。
|
|
58
|
+
* 与 `byAge` 同源,单位换算只有一处(本件)。 */
|
|
59
|
+
export const HELP_REUSE_DEFAULT_HOURS = 24;
|
|
46
60
|
/** 产物扩展名(本件自己钉死:走 `stem` 由本件补 `.html`;走 `file` 的调用者自带扩展名)。 */
|
|
47
61
|
const HTML_EXT = '.html';
|
|
48
62
|
/** 主体长度上限(按 **Unicode 码点**):Windows 单段 255 上限下给时间戳与递补段留足余量。 */
|
|
@@ -54,6 +68,54 @@ const SUCCESSION_LIMIT = 1000;
|
|
|
54
68
|
function err(code, message) {
|
|
55
69
|
return Object.assign(new Error(message), { code });
|
|
56
70
|
}
|
|
71
|
+
/** 复用窗口的**参数面**(`reuseHours`)→ 毫秒(`onExists:{reuse:{byAge}}`)。
|
|
72
|
+
*
|
|
73
|
+
* 唯一出口,五家技能命令行(卡路里/记账/备忘录/作息/大厨)都走这里——「几小时=多少毫秒」与
|
|
74
|
+
* 「坏参怎么判」不许各抄一份(铁律二)。
|
|
75
|
+
* 口径(#245):
|
|
76
|
+
* - `undefined`/空串 ⇒ **缺省**:有 `defaultHours` 时用它(各技能缺省= `HELP_REUSE_DEFAULT_HOURS`
|
|
77
|
+
* =一天),没有就返回 `0`(=「每次都落新的」);
|
|
78
|
+
* - `0` ⇒ 同上「每次都落新的」——**显式要一份最新的**;
|
|
79
|
+
* - 正的有限数 ⇒ 该窗口的毫秒数(3 天=`72`)/数字串按数算(JSON 与 argv 两路同口径);
|
|
80
|
+
* - 其余(负数/`NaN`/非数/非空的非数字串)⇒ 抛 `RangeError`「reuseHours 非法…」
|
|
81
|
+
* (**坏参阻断,不静默当 0**;各技能出口把它归到「参数错」那一档退出码)。
|
|
82
|
+
*/
|
|
83
|
+
export function reuseWindowOfHours(value, defaultHours) {
|
|
84
|
+
const raw = typeof value === 'string' && value.trim() === '' ? undefined : value;
|
|
85
|
+
if (raw === undefined)
|
|
86
|
+
return (defaultHours ?? 0) * 3_600_000;
|
|
87
|
+
if (typeof raw !== 'number' && typeof raw !== 'string') {
|
|
88
|
+
throw new RangeError('[base-paint] reuseHours 非法(' + JSON.stringify(value) + '):须为非负小时数');
|
|
89
|
+
}
|
|
90
|
+
const hours = Number(raw);
|
|
91
|
+
if (!Number.isFinite(hours) || hours < 0) {
|
|
92
|
+
throw new RangeError('[base-paint] reuseHours 非法(' + JSON.stringify(value) + '):须为非负小时数');
|
|
93
|
+
}
|
|
94
|
+
return hours * 3_600_000;
|
|
95
|
+
}
|
|
96
|
+
/** 造一个「按本家口径收拾坏参」的换算器:五家技能出口(卡路里/记账/备忘录/作息/大厨)都这么接——
|
|
97
|
+
*
|
|
98
|
+
* ```ts
|
|
99
|
+
* const windowOf = helpReuseWindowOf((m) => fail(2, m)); // 出口的「参数错」那一档
|
|
100
|
+
* const windowMs = windowOf(params);
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* 为什么要这个工厂:五家原先的写法是「`try { reuseWindowOfHours(…) } catch { fail(2, …) }`」五份逐字
|
|
104
|
+
* 相同(只有「翻成哪家错误」不同)——那正是仓规铁律二禁止的「同一件事五份实现」。这里只做一件事:
|
|
105
|
+
* 把 `RangeError` 交给你给的处理器(各家自己决定翻成 `fail(2)` 还是别家错误类型),其余错误原样穿过
|
|
106
|
+
* (不吞非预期异常)。 */
|
|
107
|
+
export function helpReuseWindowOf(onBadParam) {
|
|
108
|
+
return (params) => {
|
|
109
|
+
try {
|
|
110
|
+
return reuseWindowOfHours(params.reuseHours, HELP_REUSE_DEFAULT_HOURS);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
if (e instanceof RangeError)
|
|
114
|
+
onBadParam(e.message);
|
|
115
|
+
throw e;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
57
119
|
/** 去结尾的点与空格(Windows 会把它们吃掉,落盘名与回执名会不一致)。
|
|
58
120
|
* 只用于**主体**——`file` 是逐字落点,含扩展名,结尾的 `.` 属调用者本意,不动。 */
|
|
59
121
|
function stripTail(s) {
|
|
@@ -96,7 +158,7 @@ function formatStamp(now) {
|
|
|
96
158
|
*
|
|
97
159
|
* `withStamp` = 「要不要时间戳」:**只有** `succession` 要——`file` 是「逐字落点」,与 `succession` 同时给
|
|
98
160
|
* 自相矛盾(既有时间戳又逐字?),阻断而**不是**静默挑一个。 */
|
|
99
|
-
function resolveName(input, withStamp) {
|
|
161
|
+
function resolveName(input, withStamp, now) {
|
|
100
162
|
if (input.file !== undefined) {
|
|
101
163
|
if (input.stem !== undefined) {
|
|
102
164
|
throw err('EINVAL', '[base-paint] saveHtmlFile `stem` 与 `file` 只能给一个'
|
|
@@ -113,7 +175,7 @@ function resolveName(input, withStamp) {
|
|
|
113
175
|
throw err('EINVAL', '[base-paint] saveHtmlFile 缺落点名(`stem` 或 `file` 至少给一个)。');
|
|
114
176
|
}
|
|
115
177
|
const stem = sanitizeStem(input.stem);
|
|
116
|
-
return { name: withStamp ? stem + '_' + formatStamp(
|
|
178
|
+
return { name: withStamp ? stem + '_' + formatStamp(now) + HTML_EXT : stem + HTML_EXT, stem };
|
|
117
179
|
}
|
|
118
180
|
/** 下一独占候选:`〈主体〉_<stamp>[_N].html` 的 `_N` 递增;无 `_N` 则 `_2`(#128 口径,照抄旧件原样)。 */
|
|
119
181
|
function nextCandidate(currentAbs) {
|
|
@@ -151,10 +213,11 @@ function receiptOf(absPath, expected) {
|
|
|
151
213
|
}
|
|
152
214
|
return { mode: 'file', path: absPath, bytes: actual.length };
|
|
153
215
|
}
|
|
154
|
-
/** 本件自己产出的名字(防把无关文件当复用对象):`<主体>_<YYYYMMDD_HHMMSS>[_N].html`。
|
|
216
|
+
/** 本件自己产出的名字(防把无关文件当复用对象):`<主体>_<YYYYMMDD_HHMMSS>[_N].html`。
|
|
217
|
+
* ⚠️ 组 1 **必须是那个时间戳**——`ownStampOf` 靠它取落盘时刻(改这里要同步改 `ownStampOf`)。 */
|
|
155
218
|
function ownNameRe(stem) {
|
|
156
219
|
const esc = stem.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
157
|
-
return new RegExp('^' + esc + '_\\d{8}_\\d{6}(?:_\\d+)?' + HTML_EXT.replace('.', '\\.') + '$');
|
|
220
|
+
return new RegExp('^' + esc + '_(\\d{8}_\\d{6})(?:_\\d+)?' + HTML_EXT.replace('.', '\\.') + '$');
|
|
158
221
|
}
|
|
159
222
|
/** 目录内的候选名(目录不存在=还没落过,视为空)。 */
|
|
160
223
|
function readNames(dirAbs) {
|
|
@@ -173,6 +236,47 @@ function reuseByDay(dirAbs, stem, now) {
|
|
|
173
236
|
const last = hits[hits.length - 1];
|
|
174
237
|
return last === undefined ? null : join(dirAbs, last);
|
|
175
238
|
}
|
|
239
|
+
/** 本件自己产出的名字里的落盘时刻(`<主体>_<YYYYMMDD_HHMMSS>[_N].html` → 那个时刻;读不出=`null`)。
|
|
240
|
+
* 按**名字里的时间戳**判,不看文件系统 mtime——mtime 会被复制/同步/touch 改掉,名字是落盘时钉死的。 */
|
|
241
|
+
function ownStampOf(name, stem) {
|
|
242
|
+
const m = ownNameRe(stem).exec(name);
|
|
243
|
+
if (!m)
|
|
244
|
+
return null;
|
|
245
|
+
const d = m[1];
|
|
246
|
+
const t = new Date(Number(d.slice(0, 4)), Number(d.slice(4, 6)) - 1, Number(d.slice(6, 8)), Number(d.slice(9, 11)), Number(d.slice(11, 13)), Number(d.slice(13, 15)));
|
|
247
|
+
return Number.isNaN(t.getTime()) ? null : t;
|
|
248
|
+
}
|
|
249
|
+
/** `reuse:{byAge:ms}` 判据:**已有那份不超龄**就返回它(取最新的那一份)——「一天内不再新建」用它。
|
|
250
|
+
* 超龄(或名字读不出时刻)的那一份**不算命中**,与未命中同路落一份新的。
|
|
251
|
+
*
|
|
252
|
+
* ⚠️ 判据是**严格区间** `0 ≤ now − at < ms`:
|
|
253
|
+
* - `byAge:0` ⇒ **永远不命中**=每次都落一份新的(「要一份最新的」走这条)。落盘时刻是**秒级**的
|
|
254
|
+
* (无毫秒),同一秒内重跑 `now − at` 恰为 0 ⇒ 写成 `<=` 会把「本秒刚落的这一份」当命中,
|
|
255
|
+
* 「每次都落新的」当场失效(#245 施工期实测踩到,用例已锁这条边界);
|
|
256
|
+
* - `now − at < 0`(**落盘名的时间戳比现在晚**)**不算命中**。正常单机跑不会出现,但时钟回拨/
|
|
257
|
+
* 虚拟机时钟与文件时间不同步时会出现(#245 施工期实测:本机 `new Date()` 比文件名里的秒**晚**
|
|
258
|
+
* 几百毫秒,`delta` 一度为 −298 —— `delta < ms` 会把未来的那份当命中,与「过期窗口」的意图相反)。
|
|
259
|
+
* 这种将来时刻的名字跳过继续看更旧的候选。 */
|
|
260
|
+
function reuseByAge(dirAbs, stem, now, ms) {
|
|
261
|
+
if (!Number.isFinite(ms) || ms < 0) {
|
|
262
|
+
throw err('EINVAL', '[base-paint] saveHtmlFile `reuse.byAge` 须为非负毫秒数,实得:' + String(ms));
|
|
263
|
+
}
|
|
264
|
+
// 名字含时间戳 ⇒ 字典序即时间序(`byDay` 同此理)。
|
|
265
|
+
const hits = readNames(dirAbs).filter((n) => ownNameRe(stem).test(n)).sort();
|
|
266
|
+
for (let i = hits.length - 1; i >= 0; i--) {
|
|
267
|
+
const n = hits[i];
|
|
268
|
+
const at = ownStampOf(n, stem);
|
|
269
|
+
if (at === null)
|
|
270
|
+
continue;
|
|
271
|
+
const age = now.getTime() - at.getTime();
|
|
272
|
+
if (age < 0)
|
|
273
|
+
continue; // 将来时刻的名字:跳过,继续看更旧的候选
|
|
274
|
+
if (age < ms)
|
|
275
|
+
return join(dirAbs, n);
|
|
276
|
+
break; // 最新的一份都超龄 ⇒ 更旧的必然也超龄,不必再扫
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
176
280
|
/** `reuse:'byContent'` 判据:内容哈希相同就返回已有那份(不按名字——按名字等于没做)。 */
|
|
177
281
|
function reuseByContent(dirAbs, stem, html) {
|
|
178
282
|
const want = createHash('sha256').update(html, 'utf8').digest('hex');
|
|
@@ -195,7 +299,11 @@ function reuseByContent(dirAbs, stem, html) {
|
|
|
195
299
|
export function saveHtmlFile(input) {
|
|
196
300
|
const dirAbs = resolve(input.dir);
|
|
197
301
|
const onExists = input.onExists ?? 'succession';
|
|
198
|
-
const
|
|
302
|
+
const reuse = typeof onExists === 'object' ? onExists.reuse : null;
|
|
303
|
+
// `succession` 与三支 `reuse` 都按通式算名字(要时间戳);`overwrite`/`fail` 是逐字落点。
|
|
304
|
+
const stamped = onExists === 'succession' || reuse !== null;
|
|
305
|
+
const now = new Date(); // 一次调用只算一次:`byAge` 的判据与落盘名同源,不跨秒错位
|
|
306
|
+
const { name, stem } = resolveName(input, stamped, now);
|
|
199
307
|
// 目录一次性递归创建:**建不动**(`EEXIST`=被同名文件占位/`ENOTDIR`…)与「候选已存在」是两类错误,
|
|
200
308
|
// 前者原样抛给调用方走回执,不混进下面的递补循环。
|
|
201
309
|
mkdirSync(dirAbs, { recursive: true });
|
|
@@ -204,10 +312,12 @@ export function saveHtmlFile(input) {
|
|
|
204
312
|
writeFileSync(abs, input.html, 'utf8');
|
|
205
313
|
return receiptOf(abs, input.html);
|
|
206
314
|
}
|
|
207
|
-
if (
|
|
208
|
-
const hit =
|
|
209
|
-
? reuseByDay(dirAbs, stem,
|
|
210
|
-
:
|
|
315
|
+
if (reuse !== null) {
|
|
316
|
+
const hit = reuse === 'byDay'
|
|
317
|
+
? reuseByDay(dirAbs, stem, now)
|
|
318
|
+
: reuse === 'byContent'
|
|
319
|
+
? reuseByContent(dirAbs, stem, input.html)
|
|
320
|
+
: reuseByAge(dirAbs, stem, now, reuse.byAge);
|
|
211
321
|
if (hit !== null)
|
|
212
322
|
return receiptOf(hit); // 复用:不新建、不覆盖;`bytes` =已有那份的实际字节数
|
|
213
323
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveHtml.js","sourceRoot":"","sources":["../../src/output/saveHtml.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"saveHtml.js","sourceRoot":"","sources":["../../src/output/saveHtml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/** #525 · 页面级形状件三件:**事实条**/**图片与 GIF 容器**/**时间轴条**,
|
|
2
|
+
* 外加挂在图片容器上的**占位件**(`renderMediaPlaceholder`,#525 追加窄席位)。
|
|
3
|
+
*
|
|
4
|
+
* 谁在用(写得出哪两个在用):**卡路里**的结果型页面装配(本票样板页 `.scratch/t525/` 的
|
|
5
|
+
* `查身材照` 目标形态先用;#526 读侧/#527 过程与结果/#528 回执三票照抄)与
|
|
6
|
+
* `src/shared/pageKit.ts` 的薄转出。
|
|
7
|
+
*
|
|
8
|
+
* 为什么要这三件(用户裁定第 5 条「一个内容要用 `;`/`·` 分割,就代表该处需要 UI 设计」):
|
|
9
|
+
* · **事实条**:一行 N 件事(拍摄时间/距今天数/标签/文件名)此前被压成一串 `·`;
|
|
10
|
+
* 现在是一排「标签+值」的格子,由版式承担分隔,文本里一个分隔符都没有。
|
|
11
|
+
* · **图片与 GIF 容器**:此前是裸 `<figure>` + 内联样式(`max-height:75vh` 定不住比例,
|
|
12
|
+
* 图没显出来时留一条黑底占位条与卡片撞色);现在容器自带**明确宽高比**+`max-width:100%`
|
|
13
|
+
* +`object-fit`,没有图时出人话占位,不出黑条。
|
|
14
|
+
* · **时间轴条**:一串「时间 + 做了什么」此前也是 `·` 串;现在左侧一条轴线+圆点,
|
|
15
|
+
* 时间与正文分两槽。
|
|
16
|
+
* · **占位件**:为什么追加——一页里「找不到文件/太大没进这一页」的那几格,此前是**另一套小卡**
|
|
17
|
+
* (自己一套内边距与居中),与真图格子的尺寸/圆角/图注位对不上;现在占位格与真图格**同规格**
|
|
18
|
+
* (同比例容器/同圆角/同外边距/同图注槽),换卡不换格子。
|
|
19
|
+
*
|
|
20
|
+
* 样式与产出器同文件(本件是**页面级**形状,不进 `blocks.ts` 的 12 个区块样式区;理由与
|
|
21
|
+
* `pageUi.ts` 同,见该件件头)。类名走既有 `ilife-block-<name>` 命名空间,不新造前缀。
|
|
22
|
+
* 色值与圆角只用冻结 token 与圆角闭集 `{8,14,20,999}`,不新增。
|
|
23
|
+
*/
|
|
24
|
+
/** 语气三态(闭集);不给=中性(`--fg`)。取自同仓状态徽章的语义色,不发明新色值。 */
|
|
25
|
+
export type FactTone = 'ok' | 'warn' | 'danger';
|
|
26
|
+
export interface FactItemInput {
|
|
27
|
+
/** 这格说的是什么(人话短标签,如「拍摄」「标签」)。 */
|
|
28
|
+
readonly label: string;
|
|
29
|
+
/** 这格的值(已是给人看的样子;数字口径由调用方定)。 */
|
|
30
|
+
readonly value: string;
|
|
31
|
+
readonly tone?: FactTone;
|
|
32
|
+
}
|
|
33
|
+
export interface FactStripInput {
|
|
34
|
+
/** 一条事实一行;0 条=空串(与「没内容不留空块」同口径)。 */
|
|
35
|
+
readonly items: readonly FactItemInput[];
|
|
36
|
+
/** 版面根的附加类名(空格分隔,同 `blocks.ts` 的 `optExtraClass` 口径)。 */
|
|
37
|
+
readonly extraClass?: string;
|
|
38
|
+
}
|
|
39
|
+
/** 事实条:一行 N 件事的呈现形状(替掉 `A · B · C` 那种串)。空数组出不了一个字。 */
|
|
40
|
+
export declare function renderFactStrip(input: FactStripInput): string;
|
|
41
|
+
/** 容器宽高比闭集:`natural`=按图自身比例(不设比,只兜 `max-width`)。
|
|
42
|
+
* `4-5` 是 #525 追加窄席位补的**竖版人像档**——照片画廊的格位本来就是 `4/5`,占位件要与真图同规格,
|
|
43
|
+
* 比例集里就得有这一档(否则占位卡只能拿 `3-4` 凑,与真图卡差一截)。 */
|
|
44
|
+
export declare const MEDIA_RATIOS: readonly ["natural", "1-1", "3-4", "4-5", "4-3", "9-16", "16-9"];
|
|
45
|
+
export type MediaRatio = (typeof MEDIA_RATIOS)[number];
|
|
46
|
+
export interface MediaFigureInput {
|
|
47
|
+
/** 图源(`data:` 内嵌串或文件名)。给了 `placeholder` 时本项可省。 */
|
|
48
|
+
readonly src?: string;
|
|
49
|
+
/** 替代文本(无障碍与图挂掉时的第一句话)。 */
|
|
50
|
+
readonly alt: string;
|
|
51
|
+
readonly ratio: MediaRatio;
|
|
52
|
+
/** 图在框里的摆法:`contain`=整张都看得见(人像类默认),`cover`=铺满裁切。 */
|
|
53
|
+
readonly fit?: 'contain' | 'cover';
|
|
54
|
+
/** 图注(一行人话)。 */
|
|
55
|
+
readonly caption?: string;
|
|
56
|
+
/** 图注下的一句补充(口径、来源之类)。 */
|
|
57
|
+
readonly note?: string;
|
|
58
|
+
/** **没有图可显时的整句人话**(如「原图 3.0 MB,超过页面能带的 1 MB,请按文件名自己打开看」)。
|
|
59
|
+
* 给了它且没给 `src` ⇒ 框里出这句话,不出黑底占位条。 */
|
|
60
|
+
readonly placeholder?: string;
|
|
61
|
+
/** 版面锚点(页内导航指过来用);不给=不带 id。 */
|
|
62
|
+
readonly id?: string;
|
|
63
|
+
}
|
|
64
|
+
/** 图片/GIF 容器:比例、`max-width`、`object-fit` 三件都在这里说清,调用方不再写内联样式。
|
|
65
|
+
* 没给 `src` 而给 `placeholder` 时,框仍按同一个 `ratio` 定尺寸,框里是那句人话(转义后当纯文本放)。 */
|
|
66
|
+
export declare function renderMediaFigure(input: MediaFigureInput): string;
|
|
67
|
+
/** 图片/GIF **占位件**的入参。与 `MediaFigureInput` 同槽位,只是框里装的是「为什么没显」的人话。 */
|
|
68
|
+
export interface MediaPlaceholderInput {
|
|
69
|
+
/** 替代文本(无障碍,与 `MediaFigureInput.alt` 同槽位)。占位件也占**同一个内容槽**,故同样必填。 */
|
|
70
|
+
readonly alt: string;
|
|
71
|
+
/** **与同一处的真图同值**——这正是本件存在的理由,见下方不变量。 */
|
|
72
|
+
readonly ratio: MediaRatio;
|
|
73
|
+
/** 框里第一句人话,说清为什么没显(如「找不到文件:2026-06-09_003.jpg」)。 */
|
|
74
|
+
readonly reason: string;
|
|
75
|
+
/** 第二句人话:下一步怎么办(可省;不给=本行不出)。 */
|
|
76
|
+
readonly next?: string;
|
|
77
|
+
/** 图注槽(不给=与真图卡一样只靠容器的固定外边距撑开,不补空白)。 */
|
|
78
|
+
readonly caption?: string;
|
|
79
|
+
/** 图注下的一句补充(口径、来源之类),与 `MediaFigureInput.note` 同槽位。 */
|
|
80
|
+
readonly note?: string;
|
|
81
|
+
/** 摆法与真图同槽位;占位件内容居中,本项只为签名与真图对齐。 */
|
|
82
|
+
readonly fit?: 'contain' | 'cover';
|
|
83
|
+
/** 版面锚点(页内导航指过来用);不给=不带 id。 */
|
|
84
|
+
readonly id?: string;
|
|
85
|
+
}
|
|
86
|
+
/** 图片/GIF 的**占位件**:框里没显出的那一格,规格必须与真图那一格逐项相同。
|
|
87
|
+
*
|
|
88
|
+
* **不变量(写死在这一件里,改它先改 `renderMediaFigure`)**:与 `renderMediaFigure` **同规格** ——
|
|
89
|
+
* 同一个宽高比容器(`<div class="ilife-block-media-frame …">` + 本件要求的同一个 `ratio`)、
|
|
90
|
+
* 同一个圆角(14px)、同一条外边距(`figure` 的 `margin: 16px 0`)、同一个图注槽
|
|
91
|
+
* (`figcaption.ilife-block-media-caption`)与补充槽(`.ilife-block-media-note`)。
|
|
92
|
+
* **做法**:本件**不另写一套框**,整页交给 `renderMediaFigure` 装配——调用方就算把真图卡换成占位卡,
|
|
93
|
+
* 格子尺寸、圆角、外边距、图注位一处都不会变。缺的只是框里那点内容:`reason` 一句 +(可选)`next` 一句。
|
|
94
|
+
*
|
|
95
|
+
* **不新增颜色**:框底用 `--soft`、框线用 `--line`(都来自 `.ilife-block-media-frame` 既有规则),
|
|
96
|
+
* 两句人话只用既有语义词 `--fg2`(主句)/`--fg3`(下一步);不新造色值、不新造类名前缀。 */
|
|
97
|
+
export declare function renderMediaPlaceholder(input: MediaPlaceholderInput): string;
|
|
98
|
+
export interface TimelineRowInput {
|
|
99
|
+
/** 时间槽(人话串,如「5 月 30 日」)。 */
|
|
100
|
+
readonly time: string;
|
|
101
|
+
/** 主文(这一条发生了什么)。 */
|
|
102
|
+
readonly main: string;
|
|
103
|
+
/** 补充说明(可省)。 */
|
|
104
|
+
readonly note?: string;
|
|
105
|
+
}
|
|
106
|
+
export interface TimelineRowsInput {
|
|
107
|
+
readonly rows: readonly TimelineRowInput[];
|
|
108
|
+
/** 版面根的附加类名(空格分隔)。 */
|
|
109
|
+
readonly extraClass?: string;
|
|
110
|
+
}
|
|
111
|
+
/** 时间轴条:一串「时间 + 做了什么」的呈现形状。0 条=空串。 */
|
|
112
|
+
export declare function renderTimelineRows(input: TimelineRowsInput): string;
|
|
113
|
+
/** 形状件的样式唯一产出者(①②③ 三支 + ②b 占位件)。恒返回非空 CSS 文本。 */
|
|
114
|
+
export declare function pageShapeCss(input?: {
|
|
115
|
+
readonly prefix?: string;
|
|
116
|
+
}): string;
|
|
117
|
+
//# sourceMappingURL=pageShapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageShapes.d.ts","sourceRoot":"","sources":["../src/pageShapes.ts"],"names":[],"mappings":"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"}
|