@microteia/console 2.10.0 → 2.18.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.
@@ -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) e o `build`, que agora compila apenas `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: 'microteia-functions',
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'],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microteia/console",
3
- "version": "2.10.0",
3
+ "version": "2.18.0",
4
4
  "description": "Install and update Microteia in a Firebase project you own.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",