omc-core 0.4.36 → 0.4.38
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/capability-shape.js +154 -0
- package/dist/childtable-sheet201-contract.js +1 -1
- package/dist/field-probe-runner-contract.js +1 -1
- package/dist/field-probe-schema.js +19 -0
- package/dist/form-scaffold-contract.js +126 -0
- package/dist/formula-controls-contract.js +1 -1
- package/dist/index.js +7 -0
- package/dist/json-column.js +68 -0
- package/dist/list-view-wire.js +101 -0
- package/dist/refusal.js +9 -0
- package/dist/relation-shape.js +25 -0
- package/dist/wire-facts.js +88 -0
- package/dist/zip.js +156 -0
- package/package.json +14 -3
- package/dist/master-plan-approval.js +0 -443
- package/dist/ticket08-test-model-mutation.js +0 -901
- package/dist/ticket09-test-field-mutation.js +0 -1026
- package/dist/ticket10-test-field-publish.js +0 -886
- package/dist/ticket11-test-form-draft.js +0 -1014
- package/dist/ticket12-test-form-publish.js +0 -917
- package/dist/ticket20-test-data-rule.js +0 -780
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudPivot 平台 wire 事实(真机实证):规则状态/动态源键/模型互删码/运行面查询提交契约与算子表。
|
|
3
|
+
* 原居 omc-cli 契约文件;C1 拆分后真 lane 与假平台(@stalfh233/omc-fake-platform)共同取用——一张表喂两个适配器。
|
|
4
|
+
*/
|
|
5
|
+
export const RULE_STATUS = Object.freeze({ enabled: "ENABLE", disabled: "DISABLED" });
|
|
6
|
+
export const DYNAMIC_CONDITION_SOURCE_KEY = "currentSchemaDataItem";
|
|
7
|
+
export const DYNAMIC_ACTION_SOURCE_KEY = "currentDataItemValue";
|
|
8
|
+
export const MODEL_REFERENCED_DELETE_ERRCODE = 50000;
|
|
9
|
+
/**
|
|
10
|
+
* M2 runtime-data wire facts (live-proven). The submit chain, the replayToken
|
|
11
|
+
* gate, the three-layer queryCondition, and the propertyType injection are the
|
|
12
|
+
* single source for the handler, the arg schemas, and the fake.
|
|
13
|
+
*/
|
|
14
|
+
export const RUNTIME_DATA_WIRE = Object.freeze({
|
|
15
|
+
queryConditionShape: "List<List<List<FilterModel>>>(level 1 AND across groups, level 2 OR across and-groups, level 3 AND across leaves)",
|
|
16
|
+
dslShape: "or>and>叶子",
|
|
17
|
+
queryBodyCanon: "filters:[], queryVersion:1, queryCode=schemaCode, showTotal",
|
|
18
|
+
typeCastErrcode: 10009,
|
|
19
|
+
emptyModelErrcode: 301005,
|
|
20
|
+
absenceErrcode: 304001,
|
|
21
|
+
formTypeNoWorkflow: "2",
|
|
22
|
+
formTypeWorkflow: "1",
|
|
23
|
+
replayTokenEndpoint: "/api/api/runtime/form/getReplayToken",
|
|
24
|
+
replayTokenErrcode: 100005,
|
|
25
|
+
approvalNpeErrcode: 50000,
|
|
26
|
+
workflowStartDuplicateErrcode: 40000,
|
|
27
|
+
submitChain: "submit 自持久化(ticket 18 源码证据):form/submit 持久化 bizObject.data——formType=2 submitBizSheet→saveBizObject(置 COMPLETED,mergeObject 合并);formType=1 workItem→SubmitDataChangeHandlerImpl.updateBizObject;payload {id,schemaCode,sheetCode,ownerId?,data}+actionCode:\"submit\",owner 服务端以库内行回填,data 剥 engine 键(sequenceStatus/sequenceNo)",
|
|
28
|
+
submitInPlace: "无流程且 bizObjectId 有值时先 form/load 预检(缺席 304001 拒绝),再以预检行+formData 合成最小对象直提 runtime/form/submit(submit 自持久化,无预 save/构建 load);submit 返回 objectId 必须仍是目标 id,否则拒绝;仅无 workflowCode/workItemId/workflowInstanceId 的无 id 便捷链先 form/save 建稿再直提(新建记录);带 workItemId 或 workflowInstanceId 而缺 bizObjectId 时 fail-closed 拒绝(submit-biz-object-id-required);workflowCode + 既有无实例 bizObjectId 在 8.6.26 无 REST 就地面(见 workflowStartCreateOnly),持续拒绝并指向 workflowDraftSave 两段式",
|
|
29
|
+
workflowDraftSave: "门户暂存形状(ticket 13):POST runtime/form/save 顶层带 workflowCode(无 workflowInstanceId/workItemId)→ FormRuntimeController.saveWorkflow→startWorkflow(finishStart=FALSE):同 id 建 DRAFT 行 + DRAFT 流程实例 + 发起 workItem,FormSaveVO 返回 {objectId,workflowInstanceId,workItem:{id}};必须先 GET getReplayToken(isStartWf 分支 verifyReplay,否则 100005),且 data 显式 sequenceStatus:\"DRAFT\"(createAndGetBizObject 空缺省按 PROCESSING 建实例);提交该草稿 = form/submit formType=1 + workItemId + workflowInstanceId + bizObject.id(submitWorkflowByInstanceIdAndItemId),同 id 就地 PROCESSING,绝不走 workflowCode 分支",
|
|
30
|
+
workflowStartCreateOnly: "form/submit formType=1 + workflowCode(无 workItemId)→ submitWorkflowByWorkflowCode→startWorkflowInstance(create)→BizObjectFacadeImpl.createAndGetBizObject 纯 INSERT(BizObjectInsertModel 无存在性检查)→ 既有 id 必 40000 Duplicate entry(TID 771f64ee 全栈:ExecutorBase INSERT→BizObjectServiceImplCompanion:275→40000);8.6.26 唯一 load+update 型就地发起是 WorkflowInstanceFacade 5 参重载(908 行,facade 层供二开扩展消费),无 REST 面",
|
|
31
|
+
sheetResolution: "explicit caller arg > default-form sheetCode from bizsheet/get > schemaCode fallback",
|
|
32
|
+
updateBranch: "POST runtime/form/save 更新既有记录:目标 id 必须放进 bizObject.data[\"id\"](平台 BizObjectModel.getId() 读 data 的 id 键;顶层 bizObject.id 会被忽略并退化为新建);命中既有记录时 FormRuntimeController.saveBizSheet→BizObjectFacadeImpl.updateBizObject,未命中则 createBizObject 插入",
|
|
33
|
+
updateStatusRule: "既有记录的 DRAFT/COMPLETED 状态在未显式传 sequenceStatus 时原样保留(saveBizSheet 分支),COMPLETED 记录可直接 update,无需流程",
|
|
34
|
+
updateMergeRule: "updateBizObject.mergeObject 以库内旧值打底、以本次 data 覆盖 → 部分字段(patch)更新,未传字段保持不变",
|
|
35
|
+
childRowStatusNote: "子表行(CHILD_TABLE(8))在 form-save 路径按每行 `rowStatus` 分派(BizObjectUpdateModel.convertBizObjectOpItem):Added=插入 / Modified=更新 / Deleted=删除;**缺失或其它值=immutable(静默忽略)**。门户前端会为改动行标 `rowStatus:\"Modified\"`;手拼载荷漏了它,子表改动不落库、但写仍返回 errcode 0(真机 2026-10-08:data.update 改子表行无 rowStatus,process_name/计划时间读回全不变)。OMC 自动补:带自身 id 的行→\"Modified\",无 id 的行→\"Added\",显式 rowStatus 原样保留。",
|
|
36
|
+
updateAbsentGuard: "平台对\"带 id 但库内不存在\"不报错而是静默插入(createBizObject),故 data.update 先 form/load 预检,命中缺席则以 304001 拒绝,绝不静默转新增",
|
|
37
|
+
projectionHint: "所选列在默认视图未配置(值可能存在但列表投影为 null);先用 listview.configure 配置列,或用 data.load 读单条权威值",
|
|
38
|
+
formulaFieldNote: "计算字段(FORMULA / 表单「计算」控件、子表计算规则)**不在服务端 API 路径回填/重算**:门户是**前端**算好再提交,API save/update/submit 都不会替它算(真机 2026-09-25:子表计算规则字段落库仍 null;纯主表表达式会算)。OMC 的定位是「字段配好即默认它在前台会算」——**写测试数据时应在 formData 里显式带上预算好的计算值**(让数据与预期自洽),**不要指望平台在 API 保存时替它算,也不要用 API 回读值去断言公式/计算是否正确**。**这类纯前台行为最终由人工在前台(配表单→填表)确认。** 另:带**子表计算字段**的模型,API data.save/data.update 可能因服务端重算(CalculateHandler→FormulaProcessor)NPE 而 50000(真机 2026-10-07,前台路径正常)——此类模型请改用门户录入或避开该字段,别据此判定配置错误。",
|
|
39
|
+
});
|
|
40
|
+
function encodeScalar(value) {
|
|
41
|
+
if (value === null || value === undefined)
|
|
42
|
+
return "";
|
|
43
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean")
|
|
44
|
+
return String(value);
|
|
45
|
+
if (value instanceof Date)
|
|
46
|
+
return value.toISOString();
|
|
47
|
+
return JSON.stringify(value);
|
|
48
|
+
}
|
|
49
|
+
function encodeList(value) {
|
|
50
|
+
if (Array.isArray(value))
|
|
51
|
+
return value.map(encodeScalar).join(";");
|
|
52
|
+
if (typeof value === "string")
|
|
53
|
+
return value;
|
|
54
|
+
return encodeScalar(value);
|
|
55
|
+
}
|
|
56
|
+
const numeric = (value) => Number(value);
|
|
57
|
+
function betweenBounds(expected) {
|
|
58
|
+
const [low, high] = expected.split(";").map(Number);
|
|
59
|
+
return [low ?? 0, high ?? 0];
|
|
60
|
+
}
|
|
61
|
+
export const RUNTIME_QUERY_OPERATORS = Object.freeze({
|
|
62
|
+
Eq: { encode: encodeScalar, matches: (actual, expected) => String(actual ?? "") === expected },
|
|
63
|
+
NotEq: { encode: encodeScalar, matches: (actual, expected) => String(actual ?? "") !== expected },
|
|
64
|
+
Gt: { encode: encodeScalar, matches: (actual, expected) => numeric(actual) > numeric(expected) },
|
|
65
|
+
Lt: { encode: encodeScalar, matches: (actual, expected) => numeric(actual) < numeric(expected) },
|
|
66
|
+
Gte: { encode: encodeScalar, matches: (actual, expected) => numeric(actual) >= numeric(expected) },
|
|
67
|
+
Lte: { encode: encodeScalar, matches: (actual, expected) => numeric(actual) <= numeric(expected) },
|
|
68
|
+
Like: { encode: encodeScalar, matches: (actual, expected) => String(actual ?? "").includes(expected) },
|
|
69
|
+
NotLike: { encode: encodeScalar, matches: (actual, expected) => !String(actual ?? "").includes(expected) },
|
|
70
|
+
In: { encode: encodeList, matches: (actual, expected) => expected.split(";").includes(String(actual ?? "")) },
|
|
71
|
+
NotIn: { encode: encodeList, matches: (actual, expected) => !expected.split(";").includes(String(actual ?? "")) },
|
|
72
|
+
Between: { encode: encodeList, matches: (actual, expected) => { const [low, high] = betweenBounds(expected); return numeric(actual) >= low && numeric(actual) <= high; } },
|
|
73
|
+
NotBetween: { encode: encodeList, matches: (actual, expected) => { const [low, high] = betweenBounds(expected); return !(numeric(actual) >= low && numeric(actual) <= high); } },
|
|
74
|
+
IsNull: { encode: () => "", matches: (actual) => actual === null || actual === undefined },
|
|
75
|
+
IsNotNull: { encode: () => "", matches: (actual) => actual !== null && actual !== undefined },
|
|
76
|
+
});
|
|
77
|
+
export const ENGINE_OWNED_KEYS = Object.freeze(["sequenceStatus", "2147483647_sequenceNo"]);
|
|
78
|
+
export const SUBMIT_STATUS_TRANSITIONS = Object.freeze({
|
|
79
|
+
/** Start submit / start-item finish moves the row DRAFT -> PROCESSING. */
|
|
80
|
+
workflowStart: "PROCESSING",
|
|
81
|
+
/** Approval submit with agree!==false completes the row. */
|
|
82
|
+
approvalAgree: "COMPLETED",
|
|
83
|
+
/** Approval submit with agree===false cancels the row. */
|
|
84
|
+
approvalReject: "CANCELED",
|
|
85
|
+
/** formType=2 submitBizSheet -> saveBizObject completes in place. */
|
|
86
|
+
inPlaceSubmit: "COMPLETED",
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=wire-facts.js.map
|
package/dist/zip.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { inflateRawSync } from "node:zlib";
|
|
2
|
+
/**
|
|
3
|
+
* Ticket 106 — a minimal, dependency-free ZIP reader/writer for the bizservice
|
|
4
|
+
* IE package face.
|
|
5
|
+
*
|
|
6
|
+
* The platform export answers a ZIP with manifest.json + version.md
|
|
7
|
+
* (BizServiceIEController.java:124-138). Java's ZipOutputStream typically
|
|
8
|
+
* writes local headers with zeroed sizes plus a trailing data descriptor
|
|
9
|
+
* (general-purpose bit 3), so the READER resolves entries through the central
|
|
10
|
+
* directory (whose sizes/CRCs are authoritative) and only uses each local
|
|
11
|
+
* header to locate the data offset. The WRITER emits stored (method 0)
|
|
12
|
+
* entries — real zips for fake routes and tests; the platform reader accepts
|
|
13
|
+
* both stored and deflated entries.
|
|
14
|
+
*/
|
|
15
|
+
const EOCD_SIGNATURE = 0x06054b50;
|
|
16
|
+
const CENTRAL_SIGNATURE = 0x02014b50;
|
|
17
|
+
const LOCAL_SIGNATURE = 0x04034b50;
|
|
18
|
+
const EOCD_SCAN_LIMIT = 65_557; // fixed EOCD (22) + max comment (65_535)
|
|
19
|
+
export class ZipFormatError extends Error {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = "ZipFormatError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** CRC-32 (IEEE 802.3), table-driven. */
|
|
26
|
+
const CRC_TABLE = (() => {
|
|
27
|
+
const table = new Array(256);
|
|
28
|
+
for (let n = 0; n < 256; n += 1) {
|
|
29
|
+
let c = n;
|
|
30
|
+
for (let k = 0; k < 8; k += 1)
|
|
31
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
32
|
+
table[n] = c >>> 0;
|
|
33
|
+
}
|
|
34
|
+
return table;
|
|
35
|
+
})();
|
|
36
|
+
function crc32(buffer) {
|
|
37
|
+
let crc = 0xffffffff;
|
|
38
|
+
for (const byte of buffer)
|
|
39
|
+
crc = CRC_TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8);
|
|
40
|
+
return (crc ^ 0xffffffff) >>> 0;
|
|
41
|
+
}
|
|
42
|
+
/** Locate the End Of Central Directory record; returns its byte offset. */
|
|
43
|
+
function locateEocd(buffer) {
|
|
44
|
+
const start = Math.max(0, buffer.length - EOCD_SCAN_LIMIT);
|
|
45
|
+
for (let offset = buffer.length - 22; offset >= start; offset -= 1) {
|
|
46
|
+
if (buffer.readUInt32LE(offset) === EOCD_SIGNATURE) {
|
|
47
|
+
const commentLength = buffer.readUInt16LE(offset + 20);
|
|
48
|
+
if (offset + 22 + commentLength === buffer.length)
|
|
49
|
+
return offset;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
throw new ZipFormatError("no end-of-central-directory record found");
|
|
53
|
+
}
|
|
54
|
+
/** Read every central-directory entry as name → decompressed Buffer. */
|
|
55
|
+
export function readZipEntries(buffer) {
|
|
56
|
+
const eocd = locateEocd(buffer);
|
|
57
|
+
const entryCount = buffer.readUInt16LE(eocd + 10);
|
|
58
|
+
let cursor = buffer.readUInt32LE(eocd + 16);
|
|
59
|
+
const entries = new Map();
|
|
60
|
+
for (let index = 0; index < entryCount; index += 1) {
|
|
61
|
+
if (cursor + 46 > buffer.length || buffer.readUInt32LE(cursor) !== CENTRAL_SIGNATURE)
|
|
62
|
+
throw new ZipFormatError(`central directory entry ${index} is malformed`);
|
|
63
|
+
const method = buffer.readUInt16LE(cursor + 10);
|
|
64
|
+
const compressedSize = buffer.readUInt32LE(cursor + 20);
|
|
65
|
+
const nameLength = buffer.readUInt16LE(cursor + 28);
|
|
66
|
+
const extraLength = buffer.readUInt16LE(cursor + 30);
|
|
67
|
+
const commentLength = buffer.readUInt16LE(cursor + 32);
|
|
68
|
+
const localOffset = buffer.readUInt32LE(cursor + 42);
|
|
69
|
+
const name = buffer.subarray(cursor + 46, cursor + 46 + nameLength).toString("utf8");
|
|
70
|
+
// The local header carries its OWN name/extra lengths (they may differ
|
|
71
|
+
// from the central copies); the data starts right after them.
|
|
72
|
+
if (localOffset + 30 > buffer.length || buffer.readUInt32LE(localOffset) !== LOCAL_SIGNATURE)
|
|
73
|
+
throw new ZipFormatError(`local header for "${name}" is malformed`);
|
|
74
|
+
const localNameLength = buffer.readUInt16LE(localOffset + 26);
|
|
75
|
+
const localExtraLength = buffer.readUInt16LE(localOffset + 28);
|
|
76
|
+
const dataStart = localOffset + 30 + localNameLength + localExtraLength;
|
|
77
|
+
const data = buffer.subarray(dataStart, dataStart + compressedSize);
|
|
78
|
+
if (method === 0)
|
|
79
|
+
entries.set(name, Buffer.from(data));
|
|
80
|
+
else if (method === 8)
|
|
81
|
+
entries.set(name, inflateRawSync(data));
|
|
82
|
+
else
|
|
83
|
+
throw new ZipFormatError(`entry "${name}" uses unsupported compression method ${method}`);
|
|
84
|
+
cursor += 46 + nameLength + extraLength + commentLength;
|
|
85
|
+
}
|
|
86
|
+
return entries;
|
|
87
|
+
}
|
|
88
|
+
/** Build a stored-entry ZIP (method 0, UTF-8 names flagged via bit 11). */
|
|
89
|
+
export function buildZip(files) {
|
|
90
|
+
const chunks = [];
|
|
91
|
+
const central = [];
|
|
92
|
+
let offset = 0;
|
|
93
|
+
for (const file of files) {
|
|
94
|
+
const nameBytes = Buffer.from(file.name, "utf8");
|
|
95
|
+
const crc = crc32(file.data);
|
|
96
|
+
const local = Buffer.alloc(30);
|
|
97
|
+
local.writeUInt32LE(LOCAL_SIGNATURE, 0);
|
|
98
|
+
local.writeUInt16LE(0x0800, 6); // UTF-8 name flag
|
|
99
|
+
local.writeUInt16LE(0, 8); // stored
|
|
100
|
+
local.writeUInt16LE(0, 10); // time
|
|
101
|
+
local.writeUInt16LE(0x2100, 12); // date (1996-01-01, deterministic)
|
|
102
|
+
local.writeUInt32LE(crc, 14);
|
|
103
|
+
local.writeUInt32LE(file.data.length, 18);
|
|
104
|
+
local.writeUInt32LE(file.data.length, 22);
|
|
105
|
+
local.writeUInt16LE(nameBytes.length, 26);
|
|
106
|
+
local.writeUInt16LE(0, 28);
|
|
107
|
+
chunks.push(local, nameBytes, file.data);
|
|
108
|
+
const entry = Buffer.alloc(46);
|
|
109
|
+
entry.writeUInt32LE(CENTRAL_SIGNATURE, 0);
|
|
110
|
+
entry.writeUInt16LE(0x031e, 4); // made by UNIX/ZIP 3.0
|
|
111
|
+
entry.writeUInt16LE(0x0014, 6); // extract by DOS/ZIP 2.0
|
|
112
|
+
entry.writeUInt16LE(0x0800, 8);
|
|
113
|
+
entry.writeUInt16LE(0, 10);
|
|
114
|
+
entry.writeUInt16LE(0, 12);
|
|
115
|
+
entry.writeUInt16LE(0x2100, 14);
|
|
116
|
+
entry.writeUInt32LE(crc, 16);
|
|
117
|
+
entry.writeUInt32LE(file.data.length, 20);
|
|
118
|
+
entry.writeUInt32LE(file.data.length, 24);
|
|
119
|
+
entry.writeUInt16LE(nameBytes.length, 28);
|
|
120
|
+
entry.writeUInt16LE(0, 30);
|
|
121
|
+
entry.writeUInt16LE(0, 32);
|
|
122
|
+
entry.writeUInt16LE(0, 34);
|
|
123
|
+
entry.writeUInt16LE(0, 36);
|
|
124
|
+
entry.writeUInt32LE(0, 38);
|
|
125
|
+
entry.writeUInt32LE(offset, 42);
|
|
126
|
+
central.push(entry, nameBytes);
|
|
127
|
+
offset += 30 + nameBytes.length + file.data.length;
|
|
128
|
+
}
|
|
129
|
+
const centralBuffer = Buffer.concat(central);
|
|
130
|
+
const eocd = Buffer.alloc(22);
|
|
131
|
+
eocd.writeUInt32LE(EOCD_SIGNATURE, 0);
|
|
132
|
+
eocd.writeUInt16LE(0, 4);
|
|
133
|
+
eocd.writeUInt16LE(0, 6);
|
|
134
|
+
eocd.writeUInt16LE(files.length, 8);
|
|
135
|
+
eocd.writeUInt16LE(files.length, 10);
|
|
136
|
+
eocd.writeUInt32LE(centralBuffer.length, 12);
|
|
137
|
+
eocd.writeUInt32LE(offset, 16);
|
|
138
|
+
eocd.writeUInt16LE(0, 20);
|
|
139
|
+
return Buffer.concat([...chunks, centralBuffer, eocd]);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolve an entry by BASENAME: the platform export compresses the staging
|
|
143
|
+
* DIRECTORY, so entries carry a `bizService-<uuid>/` prefix
|
|
144
|
+
* (live 2026-09-15: bizService-59d72d4a…/manifest.json).
|
|
145
|
+
*/
|
|
146
|
+
export function zipEntryByBasename(entries, basename) {
|
|
147
|
+
const direct = entries.get(basename);
|
|
148
|
+
if (direct !== undefined)
|
|
149
|
+
return direct;
|
|
150
|
+
const suffix = `/${basename}`;
|
|
151
|
+
for (const [name, data] of entries)
|
|
152
|
+
if (name.endsWith(suffix))
|
|
153
|
+
return data;
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=zip.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omc-core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.38",
|
|
4
4
|
"description": "Shared OMC capability kernel: capability contracts, governance, and decoders. Zero DSH dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -12,7 +12,17 @@
|
|
|
12
12
|
"!dist/**/*.d.ts.map"
|
|
13
13
|
],
|
|
14
14
|
"exports": {
|
|
15
|
-
".":
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./zip": "./dist/zip.js",
|
|
20
|
+
"./capability-shape": "./dist/capability-shape.js",
|
|
21
|
+
"./json-column": "./dist/json-column.js",
|
|
22
|
+
"./refusal": "./dist/refusal.js",
|
|
23
|
+
"./wire-facts": "./dist/wire-facts.js",
|
|
24
|
+
"./relation-shape": "./dist/relation-shape.js",
|
|
25
|
+
"./list-view-wire": "./dist/list-view-wire.js",
|
|
16
26
|
"./package.json": "./package.json"
|
|
17
27
|
},
|
|
18
28
|
"scripts": {
|
|
@@ -34,5 +44,6 @@
|
|
|
34
44
|
"type": "git",
|
|
35
45
|
"url": "https://gitlab.h3yun.com/fuwenbin/oh-my-cpagents.git",
|
|
36
46
|
"directory": "packages/omc-core"
|
|
37
|
-
}
|
|
47
|
+
},
|
|
48
|
+
"types": "./dist/index.d.ts"
|
|
38
49
|
}
|