kg-ssot 4.12.0 → 4.13.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/README.md +1 -1
- package/kg.mjs +8 -1
- package/package.json +1 -1
- package/spec/release.json +7 -2
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ verdict(texto, { format: 'json' }); // .kg.json
|
|
|
42
42
|
`external_edges`. Os schemas ficam em `kg-ssot/spec/*`.
|
|
43
43
|
|
|
44
44
|
Desde a 4.10.0, este leitor também mede os avisos SHOULD, com os mesmos códigos do leitor de referência em todos os
|
|
45
|
-
casos da suíte. Desde a 4.11.0, as três construções raras do YAML em que ele divergia da referência (a tag `!` sem
|
|
45
|
+
casos da suíte, e desde a 4.13.0 trata o `\r` como quebra de linha, como a referência. Desde a 4.11.0, as três construções raras do YAML em que ele divergia da referência (a tag `!` sem
|
|
46
46
|
nome, o `!!timestamp` com texto que não é data e o tab fora de aspas) reprovam nos dois, com casos na suíte. A linha de cada ocorrência e as dicas de correção continuam só no leitor de referência em Python.
|
|
47
47
|
|
|
48
48
|
## TypeScript e CommonJS
|
package/kg.mjs
CHANGED
|
@@ -256,6 +256,10 @@ function strictTokenError(tokens) {
|
|
|
256
256
|
if (t.type === 'tag' && (t.source === '!' || t.source === '!<!>')) return true;
|
|
257
257
|
if ((t.type === 'single-quoted-scalar' || t.type === 'double-quoted-scalar')
|
|
258
258
|
&& t.source.split(/\r\n|\r|\n/).slice(1).some((line) => /^[ \t]*/.exec(line)[0].includes('\t'))) return true;
|
|
259
|
+
// o texto entre aspas que não fecha no próprio token: o yaml corta o escalar na quebra e lê o resto como outra
|
|
260
|
+
// coisa (aspa '' ou \" no fim da linha); o perfil recusa, como a referência
|
|
261
|
+
if (t.type === 'single-quoted-scalar' && !/^'(?:[^']|'')*'$/.test(t.source)) return true;
|
|
262
|
+
if (t.type === 'double-quoted-scalar' && !/^"(?:[^"\\]|\\[\s\S])*"$/.test(t.source)) return true;
|
|
259
263
|
}
|
|
260
264
|
for (const v of Object.values(t)) if (v !== null && typeof v === 'object') stack.push(v);
|
|
261
265
|
}
|
|
@@ -265,8 +269,11 @@ function strictTokenError(tokens) {
|
|
|
265
269
|
/** O parse do .kg.yaml no perfil do contrato: { doc, unquotedDate } ou { code: 'parse.*' }. */
|
|
266
270
|
export function parseYaml(text) {
|
|
267
271
|
let docs;
|
|
272
|
+
// O \r\n e o \r sozinho viram \n antes do parse, como na especificação do YAML e no leitor de referência (decisão
|
|
273
|
+
// de contrato de 2026-10-20): sem isso, o \r ficava como caractere dentro das aspas, e o CRLF entre aspas reprovava.
|
|
274
|
+
const src = text.includes('\r') ? text.replace(/\r\n?/g, '\n') : text;
|
|
268
275
|
try {
|
|
269
|
-
const tokens = Array.from(new Parser().parse(
|
|
276
|
+
const tokens = Array.from(new Parser().parse(src));
|
|
270
277
|
if (strictTokenError(tokens)) return { code: 'parse.yaml-error' };
|
|
271
278
|
docs = Array.from(new Composer({
|
|
272
279
|
version: '1.2', schema: 'core', uniqueKeys: false, merge: false, maxAliasCount: -1,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kg-ssot",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.13.0",
|
|
4
4
|
"description": "Leitor JS do contrato do grafo de conhecimento verificável KG-SSOT (.kg.yaml e .kg.json): validador pré-compilado, sem eval, para Node e React Native/Expo.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"knowledge-graph",
|
package/spec/release.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "4.
|
|
3
|
-
"tag": "kg-ssot-v4.
|
|
2
|
+
"version": "4.13.0",
|
|
3
|
+
"tag": "kg-ssot-v4.13.0",
|
|
4
4
|
"contract": {
|
|
5
5
|
"must": "spec/kg-contract-v4.schema.json",
|
|
6
6
|
"should": "spec/kg-contract-v4.should.schema.json"
|
|
@@ -28,6 +28,11 @@
|
|
|
28
28
|
"tools/kg_prov_export.py",
|
|
29
29
|
"tools/kg_store.py",
|
|
30
30
|
"tools/kg_mcp.py",
|
|
31
|
+
"tools/kg_migrate.py",
|
|
32
|
+
"spec/kg-migrate-profile.schema.json",
|
|
33
|
+
"spec/migrate-examples/",
|
|
34
|
+
"tools/test_kg_migrate.py",
|
|
35
|
+
"tools/fixtures/migrate/",
|
|
31
36
|
"tools/requirements.txt",
|
|
32
37
|
"packaging/python/",
|
|
33
38
|
"packaging/npm/",
|