@microteia/console 2.10.0 → 2.19.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/CONSOLE-VERSIONS.md +57 -0
- package/README.md +1 -1
- package/lib/console/appliedFunctions.d.ts +114 -0
- package/lib/console/appliedFunctions.js +123 -0
- package/lib/console/backendResidue.d.ts +55 -0
- package/lib/console/backendResidue.js +53 -0
- package/lib/console/customFunctions.d.ts +51 -1
- package/lib/console/customFunctions.js +93 -1
- package/lib/console/deploy.js +31 -7
- package/lib/console/environment.d.ts +7 -6
- package/lib/console/firestoreRest.d.ts +27 -0
- package/lib/console/firestoreRest.js +23 -0
- package/lib/console/functionGate.d.ts +228 -0
- package/lib/console/functionGate.js +437 -0
- package/lib/console/provision.d.ts +26 -13
- package/lib/console/provision.js +393 -58
- package/lib/kernel/backendShape.d.ts +27 -0
- package/lib/kernel/backendShape.js +38 -0
- package/lib/shared/paths.d.ts +1 -1
- package/lib/shared/paths.js +1 -1
- package/lib/vendor/packageTemplates.d.ts +12 -1
- package/lib/vendor/packageTemplates.js +42 -2
- package/package.json +1 -1
|
@@ -54,6 +54,33 @@ export declare const baselineIndexesOf: (rootIndexes: FirestoreIndexSpec[], clai
|
|
|
54
54
|
* no `provision`, contra o que veio do banco do escritório, que é dado e não código.
|
|
55
55
|
*/
|
|
56
56
|
export declare const functionClaimProblems: (claims: BackendClaim[], packagedFunctions: string[]) => string[];
|
|
57
|
+
/**
|
|
58
|
+
* Reivindicar uma function que a PLATAFORMA sobe sempre.
|
|
59
|
+
*
|
|
60
|
+
* É conferência de PROVISIONAMENTO, não de empacotamento, e a assimetria é da própria definição: no
|
|
61
|
+
* `pack` a baseline é DERIVADA (`todas − reivindicadas`), então reivindicar é o que tira o nome dela e
|
|
62
|
+
* a pergunta não existe. Do lado de quem instala a baseline já está decidida e viaja no manifesto, e
|
|
63
|
+
* aí a reivindicação de um nome dela é uma contradição com duas consequências, nenhuma visível: o
|
|
64
|
+
* `deploy` sobe a function de qualquer jeito, e a desinstalação da extensão faz `--prune` apagar um
|
|
65
|
+
* gatilho do produto num escritório que não fez nada.
|
|
66
|
+
*/
|
|
67
|
+
export declare const baselineClaimProblems: (claims: BackendClaim[], baselineFunctions: string[]) => string[];
|
|
68
|
+
/**
|
|
69
|
+
* Reivindicar uma function COMUM do escritório — a que mora em `functions/`, ao lado do
|
|
70
|
+
* `microteia.yaml`.
|
|
71
|
+
*
|
|
72
|
+
* É o mesmo defeito de reivindicar uma function da plataforma, com o mesmo par de consequências
|
|
73
|
+
* invisíveis, e por isso é conferido no mesmo lugar. A comum não tem dono por construção: ela é o lugar
|
|
74
|
+
* de quem serve várias extensões, nenhuma pode declará-la (duas reivindicando o mesmo nome é recusa), e
|
|
75
|
+
* o `deploy` a sobe SEMPRE. Reivindicá-la, então, não muda nada enquanto a extensão está instalada — e
|
|
76
|
+
* no dia em que ela sai, a function vira órfã, `--prune` a apaga, e o `deploy` seguinte a repõe. As
|
|
77
|
+
* outras extensões que dependiam dela perdem o backend numa janela que nada explica, e a fonte continua
|
|
78
|
+
* intacta em `functions/`, sem nada na árvore que sequer sugira o que aconteceu.
|
|
79
|
+
*
|
|
80
|
+
* A assimetria com o `pack` é a mesma de `baselineClaimProblems`: o pacote do kernel não sabe o que o
|
|
81
|
+
* escritório vai escrever em `functions/`, então a pergunta só existe do lado de quem instala.
|
|
82
|
+
*/
|
|
83
|
+
export declare const sharedClaimProblems: (claims: BackendClaim[], sharedFunctions: string[]) => string[];
|
|
57
84
|
/**
|
|
58
85
|
* Índice reivindicado que não existe na raiz. É conferência de EMPACOTAMENTO, não de provisionamento:
|
|
59
86
|
* a raiz é o que roda em `microteia-dev` e `curatino`, então uma declaração que não esteja lá deixaria
|
|
@@ -61,6 +61,44 @@ export const functionClaimProblems = (claims, packagedFunctions) => {
|
|
|
61
61
|
}
|
|
62
62
|
return problems;
|
|
63
63
|
};
|
|
64
|
+
/**
|
|
65
|
+
* Reivindicar uma function que a PLATAFORMA sobe sempre.
|
|
66
|
+
*
|
|
67
|
+
* É conferência de PROVISIONAMENTO, não de empacotamento, e a assimetria é da própria definição: no
|
|
68
|
+
* `pack` a baseline é DERIVADA (`todas − reivindicadas`), então reivindicar é o que tira o nome dela e
|
|
69
|
+
* a pergunta não existe. Do lado de quem instala a baseline já está decidida e viaja no manifesto, e
|
|
70
|
+
* aí a reivindicação de um nome dela é uma contradição com duas consequências, nenhuma visível: o
|
|
71
|
+
* `deploy` sobe a function de qualquer jeito, e a desinstalação da extensão faz `--prune` apagar um
|
|
72
|
+
* gatilho do produto num escritório que não fez nada.
|
|
73
|
+
*/
|
|
74
|
+
export const baselineClaimProblems = (claims, baselineFunctions) => {
|
|
75
|
+
const baseline = new Set(baselineFunctions);
|
|
76
|
+
return claims.flatMap((claim) => (claim.backend.functions ?? [])
|
|
77
|
+
.filter((name) => baseline.has(name))
|
|
78
|
+
.map((name) => `${claim.pluginId} claims function "${name}", which the platform itself deploys`));
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Reivindicar uma function COMUM do escritório — a que mora em `functions/`, ao lado do
|
|
82
|
+
* `microteia.yaml`.
|
|
83
|
+
*
|
|
84
|
+
* É o mesmo defeito de reivindicar uma function da plataforma, com o mesmo par de consequências
|
|
85
|
+
* invisíveis, e por isso é conferido no mesmo lugar. A comum não tem dono por construção: ela é o lugar
|
|
86
|
+
* de quem serve várias extensões, nenhuma pode declará-la (duas reivindicando o mesmo nome é recusa), e
|
|
87
|
+
* o `deploy` a sobe SEMPRE. Reivindicá-la, então, não muda nada enquanto a extensão está instalada — e
|
|
88
|
+
* no dia em que ela sai, a function vira órfã, `--prune` a apaga, e o `deploy` seguinte a repõe. As
|
|
89
|
+
* outras extensões que dependiam dela perdem o backend numa janela que nada explica, e a fonte continua
|
|
90
|
+
* intacta em `functions/`, sem nada na árvore que sequer sugira o que aconteceu.
|
|
91
|
+
*
|
|
92
|
+
* A assimetria com o `pack` é a mesma de `baselineClaimProblems`: o pacote do kernel não sabe o que o
|
|
93
|
+
* escritório vai escrever em `functions/`, então a pergunta só existe do lado de quem instala.
|
|
94
|
+
*/
|
|
95
|
+
export const sharedClaimProblems = (claims, sharedFunctions) => {
|
|
96
|
+
const shared = new Set(sharedFunctions);
|
|
97
|
+
return claims.flatMap((claim) => (claim.backend.functions ?? [])
|
|
98
|
+
.filter((name) => shared.has(name))
|
|
99
|
+
.map((name) => `${claim.pluginId} claims function "${name}", which is a shared function of this `
|
|
100
|
+
+ 'installation'));
|
|
101
|
+
};
|
|
64
102
|
/**
|
|
65
103
|
* Índice reivindicado que não existe na raiz. É conferência de EMPACOTAMENTO, não de provisionamento:
|
|
66
104
|
* a raiz é o que roda em `microteia-dev` e `curatino`, então uma declaração que não esteja lá deixaria
|
package/lib/shared/paths.d.ts
CHANGED
|
@@ -87,4 +87,4 @@ export declare const consoleRoot: string;
|
|
|
87
87
|
* de código nunca chegou a quem instala. Este bloco fica sendo o que ele já era antes de crescer: a
|
|
88
88
|
* política de semver da ferramenta, mais o registro do que motivou as versões até a `2.5.0`.
|
|
89
89
|
*/
|
|
90
|
-
export declare const CLI_VERSION = "2.
|
|
90
|
+
export declare const CLI_VERSION = "2.19.0";
|
package/lib/shared/paths.js
CHANGED
|
@@ -94,4 +94,4 @@ export const consoleRoot = resolve(here, '..', '..');
|
|
|
94
94
|
* de código nunca chegou a quem instala. Este bloco fica sendo o que ele já era antes de crescer: a
|
|
95
95
|
* política de semver da ferramenta, mais o registro do que motivou as versões até a `2.5.0`.
|
|
96
96
|
*/
|
|
97
|
-
export const CLI_VERSION = '2.
|
|
97
|
+
export const CLI_VERSION = '2.19.0';
|
|
@@ -16,10 +16,21 @@ export interface HostingConfig {
|
|
|
16
16
|
headers: unknown[];
|
|
17
17
|
}
|
|
18
18
|
export declare const packageFirebaseJson: (hosting: HostingConfig) => string;
|
|
19
|
+
/**
|
|
20
|
+
* O nome do pacote de functions da instalação, e o subcaminho da superfície curada que a Cloud Function
|
|
21
|
+
* do ESCRITÓRIO importa dele: `import { forInstalledExtension } from 'microteia-functions/office'`.
|
|
22
|
+
*
|
|
23
|
+
* O nome é parte do contrato de autoria a partir do momento em que alguém o escreve num import, e por
|
|
24
|
+
* isso ele deixou de ser uma string solta aqui dentro.
|
|
25
|
+
*/
|
|
26
|
+
export declare const FUNCTIONS_PACKAGE_NAME = "microteia-functions";
|
|
27
|
+
export declare const OFFICE_SUBPATH = "office";
|
|
28
|
+
export declare const OFFICE_MODULE = "microteia-functions/office";
|
|
19
29
|
/**
|
|
20
30
|
* As dependências são copiadas INTACTAS do `functions/package.json` do repositório, para que o
|
|
21
31
|
* `package-lock.json` que viaja junto continue válido. O que muda é só o entrypoint (passa a ser o
|
|
22
|
-
* `index.js` que soma kernel e custom)
|
|
32
|
+
* `index.js` que soma kernel e custom), o `build`, que agora compila apenas `custom/`, e o `exports`,
|
|
33
|
+
* que abre a superfície curada para o `custom/` sem custar uma dependência.
|
|
23
34
|
*/
|
|
24
35
|
/**
|
|
25
36
|
* A `version` não é enfeite: sem ela o npm não consegue formar `nome@versão` e todo aviso dele sobre
|
|
@@ -24,10 +24,21 @@ export const packageFirebaseJson = (hosting) => JSON.stringify({
|
|
|
24
24
|
headers: hosting.headers,
|
|
25
25
|
},
|
|
26
26
|
}, null, 2) + '\n';
|
|
27
|
+
/**
|
|
28
|
+
* O nome do pacote de functions da instalação, e o subcaminho da superfície curada que a Cloud Function
|
|
29
|
+
* do ESCRITÓRIO importa dele: `import { forInstalledExtension } from 'microteia-functions/office'`.
|
|
30
|
+
*
|
|
31
|
+
* O nome é parte do contrato de autoria a partir do momento em que alguém o escreve num import, e por
|
|
32
|
+
* isso ele deixou de ser uma string solta aqui dentro.
|
|
33
|
+
*/
|
|
34
|
+
export const FUNCTIONS_PACKAGE_NAME = 'microteia-functions';
|
|
35
|
+
export const OFFICE_SUBPATH = 'office';
|
|
36
|
+
export const OFFICE_MODULE = `${FUNCTIONS_PACKAGE_NAME}/${OFFICE_SUBPATH}`;
|
|
27
37
|
/**
|
|
28
38
|
* As dependências são copiadas INTACTAS do `functions/package.json` do repositório, para que o
|
|
29
39
|
* `package-lock.json` que viaja junto continue válido. O que muda é só o entrypoint (passa a ser o
|
|
30
|
-
* `index.js` que soma kernel e custom)
|
|
40
|
+
* `index.js` que soma kernel e custom), o `build`, que agora compila apenas `custom/`, e o `exports`,
|
|
41
|
+
* que abre a superfície curada para o `custom/` sem custar uma dependência.
|
|
31
42
|
*/
|
|
32
43
|
/**
|
|
33
44
|
* A `version` não é enfeite: sem ela o npm não consegue formar `nome@versão` e todo aviso dele sobre
|
|
@@ -40,10 +51,29 @@ export const packageFirebaseJson = (hosting) => JSON.stringify({
|
|
|
40
51
|
* o Firebase — o preço errado pela linha de saída.
|
|
41
52
|
*/
|
|
42
53
|
export const packageFunctionsPackageJson = (source, version) => JSON.stringify({
|
|
43
|
-
name:
|
|
54
|
+
name: FUNCTIONS_PACKAGE_NAME,
|
|
44
55
|
version,
|
|
45
56
|
private: true,
|
|
46
57
|
main: 'index.js',
|
|
58
|
+
/**
|
|
59
|
+
* O `exports` está aqui por UMA razão, e ela não é organização: é ele que faz a auto-referência de
|
|
60
|
+
* pacote funcionar. Sem ele, uma Cloud Function do escritório em `custom/` não tem como importar nada
|
|
61
|
+
* da plataforma — não há `node_modules` que a contenha, e um caminho relativo dependeria de onde o
|
|
62
|
+
* arquivo foi montado, que é justamente o que muda entre escrever e deployar.
|
|
63
|
+
*
|
|
64
|
+
* Com ele, `require('${FUNCTIONS_PACKAGE_NAME}/office')` resolve de dentro do próprio pacote. É por
|
|
65
|
+
* isso que não há dependência nova nem alteração no `package-lock.json` que viaja ao lado.
|
|
66
|
+
*
|
|
67
|
+
* O `.` continua sendo o `index.js`: é ele que o Firebase carrega, e restringir os subcaminhos sem
|
|
68
|
+
* declará-lo tiraria a plataforma do ar inteira.
|
|
69
|
+
*/
|
|
70
|
+
exports: {
|
|
71
|
+
'.': './index.js',
|
|
72
|
+
[`./${OFFICE_SUBPATH}`]: {
|
|
73
|
+
types: `./lib/${OFFICE_SUBPATH}/index.d.ts`,
|
|
74
|
+
default: `./lib/${OFFICE_SUBPATH}/index.js`,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
47
77
|
engines: source.engines ?? { node: '22' },
|
|
48
78
|
scripts: {
|
|
49
79
|
build: 'tsc -p custom/tsconfig.json',
|
|
@@ -74,6 +104,16 @@ export const packageCustomTsconfig = () => JSON.stringify({
|
|
|
74
104
|
compilerOptions: {
|
|
75
105
|
module: 'commonjs',
|
|
76
106
|
moduleResolution: 'node',
|
|
107
|
+
/**
|
|
108
|
+
* O `paths` só resolve TIPO; o `require` emitido continua sendo `microteia-functions/office`, e é o
|
|
109
|
+
* `exports` do pacote que o resolve em execução. Os dois lados são necessários porque o
|
|
110
|
+
* `moduleResolution: 'node'` é anterior ao `exports` e não o lê — e trocá-lo por `node16` mudaria,
|
|
111
|
+
* de quebra, como TODO import do escritório resolve.
|
|
112
|
+
*
|
|
113
|
+
* Sem `baseUrl` de propósito: o `paths` relativo ao tsconfig basta desde o TypeScript 4.1, e um
|
|
114
|
+
* `baseUrl` faria qualquer arquivo de `src/` virar um módulo de nome curto por acidente.
|
|
115
|
+
*/
|
|
116
|
+
paths: { [OFFICE_MODULE]: [`../lib/${OFFICE_SUBPATH}/index.d.ts`] },
|
|
77
117
|
target: 'es2022',
|
|
78
118
|
lib: ['ES2022'],
|
|
79
119
|
types: ['node'],
|