@semacode/cli 1.5.2 → 1.5.4
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 +3 -1
- package/dist/drift.js +97 -0
- package/dist/drift.js.map +1 -1
- package/dist/projeto.js +23 -4
- package/dist/projeto.js.map +1 -1
- package/docs/cli.md +1 -1
- package/docs/persistencia-vendor-first.md +1 -1
- package/node_modules/@sema/gerador-css/package.json +1 -1
- package/node_modules/@sema/gerador-dart/package.json +1 -1
- package/node_modules/@sema/gerador-html/package.json +1 -1
- package/node_modules/@sema/gerador-javascript/package.json +1 -1
- package/node_modules/@sema/gerador-lua/package.json +1 -1
- package/node_modules/@sema/gerador-python/dist/index.js +3 -54
- package/node_modules/@sema/gerador-python/dist/index.js.map +1 -1
- package/node_modules/@sema/gerador-python/package.json +1 -1
- package/node_modules/@sema/gerador-typescript/dist/index.js +7 -20
- package/node_modules/@sema/gerador-typescript/dist/index.js.map +1 -1
- package/node_modules/@sema/gerador-typescript/package.json +1 -1
- package/node_modules/@sema/nucleo/package.json +1 -1
- package/node_modules/@sema/padroes/dist/index.d.ts +2 -0
- package/node_modules/@sema/padroes/dist/index.js +124 -18
- package/node_modules/@sema/padroes/dist/index.js.map +1 -1
- package/node_modules/@sema/padroes/package.json +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -58,7 +58,9 @@ sema drift ./contratos-importados --json
|
|
|
58
58
|
|
|
59
59
|
## Persistencia vendor-first
|
|
60
60
|
|
|
61
|
-
A CLI 1.5.
|
|
61
|
+
A CLI 1.5.4 entende blocos `database` e recursos de persistencia no IR, no formatador, no semantico, na importacao, no drift, no impact map, na renomeacao semantica assistida e no `verificar`. O objetivo nao e esconder diferencas entre bancos, e sim capturar essas diferencas no contrato.
|
|
62
|
+
|
|
63
|
+
Nesta linha, o `drift` tambem passa a resolver melhor metodos JS/TS browser-side definidos via `Object.assign(...prototype...)` e a entrada padrao da CLI para de tropeçar em `exemplos/` quando o projeto real ja tem `contratos/`, `sema/` ou arquivos `.sema` na raiz.
|
|
62
64
|
|
|
63
65
|
Cobertura publica:
|
|
64
66
|
|
package/dist/drift.js
CHANGED
|
@@ -202,6 +202,7 @@ function resolverRaizesExplicitasConfiguradas(contexto) {
|
|
|
202
202
|
}
|
|
203
203
|
function resolverRaizesIgnoradasPermitidas(contexto, segmentosIgnorados) {
|
|
204
204
|
return [...new Set([
|
|
205
|
+
path.resolve(contexto.baseProjeto),
|
|
205
206
|
resolverRaizEscopoReal(contexto),
|
|
206
207
|
...resolverRaizesExplicitasConfiguradas(contexto),
|
|
207
208
|
])]
|
|
@@ -1054,6 +1055,81 @@ function registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nome, no
|
|
|
1054
1055
|
});
|
|
1055
1056
|
}
|
|
1056
1057
|
}
|
|
1058
|
+
function desembrulharExpressaoTypeScript(expr) {
|
|
1059
|
+
let atual = expr;
|
|
1060
|
+
while (true) {
|
|
1061
|
+
if (ts.isParenthesizedExpression(atual) || ts.isAsExpression(atual) || ts.isSatisfiesExpression(atual) || ts.isTypeAssertionExpression(atual)) {
|
|
1062
|
+
atual = atual.expression;
|
|
1063
|
+
continue;
|
|
1064
|
+
}
|
|
1065
|
+
if (ts.isAwaitExpression(atual)) {
|
|
1066
|
+
atual = atual.expression;
|
|
1067
|
+
continue;
|
|
1068
|
+
}
|
|
1069
|
+
return atual;
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
function extrairNomePropriedadeTypeScript(nome, sourceFile) {
|
|
1073
|
+
if (ts.isIdentifier(nome) || ts.isStringLiteralLike(nome) || ts.isNumericLiteral(nome)) {
|
|
1074
|
+
return nome.text;
|
|
1075
|
+
}
|
|
1076
|
+
if (ts.isComputedPropertyName(nome) && ts.isStringLiteralLike(nome.expression)) {
|
|
1077
|
+
return nome.expression.text;
|
|
1078
|
+
}
|
|
1079
|
+
const texto = nome.getText(sourceFile).trim();
|
|
1080
|
+
return texto.length > 0 ? texto : undefined;
|
|
1081
|
+
}
|
|
1082
|
+
function extrairNomeClassePrototypeTypeScript(expr, sourceFile) {
|
|
1083
|
+
const alvo = desembrulharExpressaoTypeScript(expr);
|
|
1084
|
+
if (ts.isPropertyAccessExpression(alvo) && alvo.name.text === "prototype") {
|
|
1085
|
+
return alvo.expression.getText(sourceFile).trim() || undefined;
|
|
1086
|
+
}
|
|
1087
|
+
return undefined;
|
|
1088
|
+
}
|
|
1089
|
+
function registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse) {
|
|
1090
|
+
if (!nomeMetodo) {
|
|
1091
|
+
return;
|
|
1092
|
+
}
|
|
1093
|
+
if (nomeClasse) {
|
|
1094
|
+
registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse);
|
|
1095
|
+
}
|
|
1096
|
+
registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nomeMetodo);
|
|
1097
|
+
}
|
|
1098
|
+
function registrarMetodosObjectAssignTypeScript(simbolos, basesSimbolicas, arquivo, objeto, sourceFile, nomeClasse) {
|
|
1099
|
+
for (const propriedade of objeto.properties) {
|
|
1100
|
+
if (ts.isMethodDeclaration(propriedade) && propriedade.name) {
|
|
1101
|
+
const nomeMetodo = extrairNomePropriedadeTypeScript(propriedade.name, sourceFile);
|
|
1102
|
+
if (nomeMetodo) {
|
|
1103
|
+
registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse);
|
|
1104
|
+
}
|
|
1105
|
+
continue;
|
|
1106
|
+
}
|
|
1107
|
+
if (!ts.isPropertyAssignment(propriedade)) {
|
|
1108
|
+
continue;
|
|
1109
|
+
}
|
|
1110
|
+
const nomeMetodo = extrairNomePropriedadeTypeScript(propriedade.name, sourceFile);
|
|
1111
|
+
const valor = desembrulharExpressaoTypeScript(propriedade.initializer);
|
|
1112
|
+
if (nomeMetodo && (ts.isFunctionExpression(valor) || ts.isArrowFunction(valor))) {
|
|
1113
|
+
registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse);
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
function registrarAtribuicaoPrototypeTypeScript(simbolos, basesSimbolicas, arquivo, sourceFile, esquerda, direita) {
|
|
1118
|
+
const alvo = desembrulharExpressaoTypeScript(esquerda);
|
|
1119
|
+
const valor = desembrulharExpressaoTypeScript(direita);
|
|
1120
|
+
if (!ts.isPropertyAccessExpression(alvo) || !ts.isPropertyAccessExpression(alvo.expression)) {
|
|
1121
|
+
return;
|
|
1122
|
+
}
|
|
1123
|
+
if (alvo.expression.name.text !== "prototype") {
|
|
1124
|
+
return;
|
|
1125
|
+
}
|
|
1126
|
+
if (!ts.isFunctionExpression(valor) && !ts.isArrowFunction(valor)) {
|
|
1127
|
+
return;
|
|
1128
|
+
}
|
|
1129
|
+
const nomeClasse = alvo.expression.expression.getText(sourceFile).trim();
|
|
1130
|
+
const nomeMetodo = alvo.name.getText(sourceFile).trim();
|
|
1131
|
+
registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse || undefined);
|
|
1132
|
+
}
|
|
1057
1133
|
function normalizarRelacaoConsumer(relacaoArquivo) {
|
|
1058
1134
|
return relacaoArquivo.replace(/\\/g, "/");
|
|
1059
1135
|
}
|
|
@@ -1541,6 +1617,27 @@ async function indexarTypeScript(diretorios) {
|
|
|
1541
1617
|
}
|
|
1542
1618
|
}
|
|
1543
1619
|
if (!ts.isClassDeclaration(node) || !node.name) {
|
|
1620
|
+
if (ts.isExpressionStatement(node)) {
|
|
1621
|
+
const expr = desembrulharExpressaoTypeScript(node.expression);
|
|
1622
|
+
if (ts.isCallExpression(expr)
|
|
1623
|
+
&& ts.isPropertyAccessExpression(expr.expression)
|
|
1624
|
+
&& ts.isIdentifier(expr.expression.expression)
|
|
1625
|
+
&& expr.expression.expression.text === "Object"
|
|
1626
|
+
&& expr.expression.name.text === "assign") {
|
|
1627
|
+
const nomeClasse = expr.arguments[0]
|
|
1628
|
+
? extrairNomeClassePrototypeTypeScript(expr.arguments[0], sourceFile)
|
|
1629
|
+
: undefined;
|
|
1630
|
+
for (const argumento of expr.arguments.slice(1)) {
|
|
1631
|
+
const valor = desembrulharExpressaoTypeScript(argumento);
|
|
1632
|
+
if (ts.isObjectLiteralExpression(valor)) {
|
|
1633
|
+
registrarMetodosObjectAssignTypeScript(simbolos, basesSimbolicas, arquivo, valor, sourceFile, nomeClasse);
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
else if (ts.isBinaryExpression(expr) && expr.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
|
|
1638
|
+
registrarAtribuicaoPrototypeTypeScript(simbolos, basesSimbolicas, arquivo, sourceFile, expr.left, expr.right);
|
|
1639
|
+
}
|
|
1640
|
+
}
|
|
1544
1641
|
continue;
|
|
1545
1642
|
}
|
|
1546
1643
|
const controllerDecorator = lerDecorator(node, ["Controller"]);
|