cosmemilton-acbr-node 0.1.1 → 0.2.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.
Files changed (52) hide show
  1. package/LICENSE +502 -502
  2. package/NOTICE +8 -8
  3. package/README.md +137 -106
  4. package/acbr.config.json +16 -16
  5. package/acbr.lock.json +0 -0
  6. package/dist/cli.js +1345 -973
  7. package/dist/cli.js.map +4 -4
  8. package/dist/contract.json +1 -0
  9. package/dist/index.cjs +36 -11
  10. package/dist/index.cjs.map +2 -2
  11. package/dist/index.js +36 -11
  12. package/dist/index.js.map +2 -2
  13. package/dist/runtime.cjs +36 -11
  14. package/dist/runtime.cjs.map +2 -2
  15. package/dist/runtime.js +36 -11
  16. package/dist/runtime.js.map +2 -2
  17. package/dist/types/generated/acbr/index.d.ts +3 -2
  18. package/dist/types/generated/acbr/models.d.ts +0 -0
  19. package/dist/types/src/cli.d.ts +4 -2
  20. package/dist/types/src/config.d.ts +0 -0
  21. package/dist/types/src/contract-help.d.ts +53 -0
  22. package/dist/types/src/diagnostics.d.ts +2 -0
  23. package/dist/types/src/generator.d.ts +2 -0
  24. package/dist/types/src/index.d.ts +3 -2
  25. package/dist/types/src/native-build.d.ts +1 -0
  26. package/dist/types/src/offline-check.d.ts +0 -0
  27. package/dist/types/src/offline-fixture.d.ts +0 -0
  28. package/dist/types/src/runtime.d.ts +1 -0
  29. package/dist/types/src/source.d.ts +0 -0
  30. package/dist/types/src/types.d.ts +4 -2
  31. package/docs/API.md +26 -0
  32. package/docs/ARQUITETURA.md +19 -15
  33. package/docs/CI.md +60 -60
  34. package/docs/CLI.md +52 -32
  35. package/docs/DEPENDENCIAS-NATIVAS.md +93 -93
  36. package/docs/VALIDACAO.md +67 -67
  37. package/docs/examples/recuperar-xml.mjs +54 -0
  38. package/docs/licenses/fpc/COPYING.FPC +25 -25
  39. package/docs/licenses/fpc/COPYING.GPL.txt +340 -340
  40. package/docs/licenses/fpc/COPYING.LGPL.txt +504 -504
  41. package/docs/licenses/fpc/ORIGIN.json +21 -21
  42. package/docs/licenses/lazarus/COPYING.LGPL.txt +481 -481
  43. package/docs/licenses/lazarus/COPYING.modifiedLGPL.txt +26 -26
  44. package/docs/licenses/lazarus/COPYING.txt +46 -46
  45. package/docs/licenses/lazarus/ORIGIN.json +1 -1
  46. package/native/NativeMotor.pas +55 -3
  47. package/native/NativeProtocol.pas +3 -2
  48. package/native/NativeRecovery.pas +274 -0
  49. package/native/generated/AcbrModels.pas +0 -0
  50. package/package.json +76 -74
  51. package/scripts/build-native-deps.mjs +237 -237
  52. package/tools/extract-model.lpr +119 -119
package/NOTICE CHANGED
@@ -1,8 +1,8 @@
1
- ACBr Node — integração Node.js/Free Pascal para os componentes ACBr.
2
- Copyright 2026 Cosmemilton e colaboradores.
3
-
4
- Este projeto usa os fontes públicos do Projeto ACBr, sob LGPL 2.1 ou posterior.
5
- Os avisos originais das unidades e as licenças das dependências são preservados.
6
- Fontes: https://svn.code.sf.net/p/acbr/code/trunk2
7
- A revisão exata, hashes e materiais de reconstrução acompanham cada runtime.
8
- Não é um pacote oficial do Projeto ACBr. Não depende de Delphi nem dos binários ACBr Pro.
1
+ ACBr Node — integração Node.js/Free Pascal para os componentes ACBr.
2
+ Copyright 2026 Cosmemilton e colaboradores.
3
+
4
+ Este projeto usa os fontes públicos do Projeto ACBr, sob LGPL 2.1 ou posterior.
5
+ Os avisos originais das unidades e as licenças das dependências são preservados.
6
+ Fontes: https://svn.code.sf.net/p/acbr/code/trunk2
7
+ A revisão exata, hashes e materiais de reconstrução acompanham cada runtime.
8
+ Não é um pacote oficial do Projeto ACBr. Não depende de Delphi nem dos binários ACBr Pro.
package/README.md CHANGED
@@ -1,106 +1,137 @@
1
- # cosmemilton-acbr-node
2
-
3
- NF-e (55) e NFC-e (65) no Node.js, com modelos TypeScript gerados dos fontes públicos do ACBr e motor compilado com Free Pascal/Lazarus. Projeto independente; não é um produto oficial do ACBr. Não depende de Delphi nem dos binários ACBr Pro.
4
-
5
- Documentação e exemplos: **[miltonjunior.dev.br/acbr-node](https://miltonjunior.dev.br/acbr-node/)**. Código e problemas: [GitHub](https://github.com/cosmemilton/acbr-node).
6
-
7
- Requisitos de execução: Node.js 22.12 ou superior e Linux x64 Ubuntu 24.04/glibc ou Windows x64. A primeira versão usa certificado A1. Compiladores são necessários apenas para reconstruir o motor ou acompanhar uma revisão própria do ACBr.
8
-
9
- ## Instalação e uso
10
-
11
- ```bash
12
- npm install cosmemilton-acbr-node
13
- ```
14
-
15
- O npm instala o runtime opcional da sua plataforma. Não use `--omit=optional` na instalação final. Também é possível informar `runtimeDirectory` para um motor próprio.
16
-
17
- Para instalar tarballs revisados em um projeto separado, informe o SDK e o runtime da plataforma:
18
-
19
- ```bash
20
- npm install --offline --ignore-scripts --no-audit --no-fund \
21
- /caminho/cosmemilton-acbr-node-0.1.0.tgz \
22
- /caminho/cosmemilton-acbr-node-linux-x64-0.1.0.tgz
23
- ```
24
-
25
- No Windows, selecione `cosmemilton-acbr-node-win32-x64-0.1.0.tgz`.
26
-
27
- ```ts
28
- import { readFile, writeFile } from 'node:fs/promises';
29
- import { criarEmissor, TNFe, type TNFeInput } from 'cosmemilton-acbr-node';
30
- import { nota } from './nota.js'; // nota: TNFeInput, com dados fiscais completos
31
-
32
- const senha = process.env.NFE_A1_SENHA;
33
- if (senha === undefined) throw new Error('Configure NFE_A1_SENHA');
34
-
35
- const emissor = criarEmissor({
36
- cnpj: '11222333000181',
37
- uf: 'CE',
38
- modelo: 55,
39
- ambiente: 2,
40
- certificado: { pfx: await readFile('./certificado.pfx'), senha },
41
- // Para NFC-e: modelo: 65, csc: { id: '000001', valor: 'seu CSC' }
42
- });
43
-
44
- try {
45
- const gerado = await emissor.gerarXml(new TNFe(nota satisfies TNFeInput));
46
- if (!gerado.sucesso || !gerado.xmlBase64) throw new Error(gerado.codigo);
47
- const xml = Buffer.from(gerado.xmlBase64, 'base64').toString('utf8');
48
- const assinado = await emissor.assinar(xml);
49
- if (!assinado.sucesso || !assinado.xmlBase64) throw new Error(assinado.codigo);
50
- const xmlAssinado = Buffer.from(assinado.xmlBase64, 'base64').toString('utf8');
51
- const validado = await emissor.validar(xmlAssinado);
52
- if (!validado.sucesso) throw new Error(validado.codigo);
53
- await writeFile('./nota-assinada.xml', Buffer.from(assinado.xmlBase64, 'base64'));
54
- // Transmissão explícita: await emissor.transmitir(xmlAssinado).
55
- } finally {
56
- await emissor.fechar();
57
- }
58
- ```
59
-
60
- A biblioteca também aceita XML pronto em `assinar`, `validar` e `transmitir`. As operações fiscais são `consultar`, `cancelar`, `cartaCorrecao` (somente modelo 55) e `inutilizar`. [API e protocolo](docs/API.md).
61
-
62
- ## Modelos e atualizações explícitas
63
-
64
- Nomes, grupos e enums espelham o ACBr. Construtores recebem objetos; coleções são arrays tipados e oferecem `New()`. Valores decimais são strings, preservando escala e evitando conversão binária pelo JavaScript. Datas são strings ISO civis, por exemplo `2026-10-08T12:30:00`; o ACBr aplica o fuso da UF na escrita do XML. Campos omitidos preservam os padrões do componente. Assinatura, protocolo e informações suplementares produzidas pelo motor não são entradas editáveis.
65
-
66
- A versão 0.1.0 acompanha a revisão SVN **48590**, com **204 tipos gerados** e contrato `e5a497cefe8e0e350a30da5cc04e88b35c38a98535893d52f878890260d1346d`. Revisão, inventário e hashes estão em `acbr.lock.json`; cliente e motor recusam contratos diferentes. Não há atualização automática dos fontes ao instalar.
67
-
68
- ```bash
69
- npx acbr-node init --revision 48590
70
- npx acbr-node source update --revision 48590
71
- npx acbr-node generate
72
- npx acbr-node build
73
- npx acbr-node check
74
- npx acbr-node doctor
75
- ```
76
-
77
- Use `npx cosmemilton-acbr-node init` sem instalação prévia. O comando `generate` produz `generated/acbr/models.ts` e `generated/acbr/index.ts`, além do carregador Pascal. Em uma aplicação com revisão própria, importe `criarEmissor` de `./generated/acbr/index.js` e indique o diretório do runtime compilado.
78
-
79
- O relatório `.acbr/generated/changes.json` registra adições, remoções e alterações de tipos. Tipos desconhecidos interrompem a geração. Breaking changes do ACBr exigem acompanhamento, testes e versionamento do adaptador. TortoiseSVN é opcional; a CLI usa SVN. [Fluxo completo da CLI](docs/CLI.md).
80
-
81
- ## Reconstrução e validação
82
-
83
- ```bash
84
- npm install
85
- npm run acbr -- source update --revision 48590
86
- npm run acbr -- generate
87
- npm run acbr -- build
88
- npm run build
89
- npm test
90
- ACBR_NATIVE_TEST=1 npm run test:native
91
- npm run pack:runtimes -- --all
92
- ```
93
-
94
- Consulte [arquitetura](docs/ARQUITETURA.md), [dependências nativas](docs/DEPENDENCIAS-NATIVAS.md) e [estado da validação](docs/VALIDACAO.md). Os runtimes incluem schemas, serviços, licenças, fontes correspondentes do ACBr e receita de reconstrução. O consumo dos tarballs com runtime não executa Free Pascal, Lazarus ou geração de código.
95
-
96
- Linux e Windows passaram **52 testes do motor/TLS/SOAP local em cada plataforma**. TypeScript e build passaram; a suíte Node/CLI/gerador/auditoria passou 32 testes, com quatro suítes nativas opt-in ignoradas nessa execução e verificadas separadamente.
97
-
98
- A instalação externa passou em ESM e CommonJS com Node 24.15.0 e 22.12.0 no Linux, e Node 22.12.0 no Windows, dois emitentes sintéticos e modelos 55/65, com compiladores fora do `PATH` e bibliotecas do runtime auditadas. Um consumidor externo completou o fluxo de fontes/geração/build em revisão própria 48589. A geração também foi executada nativamente no Windows, produzindo contrato e arquivos idênticos ao Linux.
99
-
100
- Docker e CI remota de reconstrução dos motores não foram executados. A automação de publicação audita os tarballs já validados. Os detalhes e limites estão em [Validação](docs/VALIDACAO.md).
101
-
102
- DANFE, impressão, A3, outros documentos e cálculos comerciais ficam para etapas posteriores. O preenchimento tributário continua sendo responsabilidade da aplicação. A homologação fiscal real é separada dos testes de implementação; os testes deste projeto usam dados sintéticos e serviços locais e não transmitem à SEFAZ.
103
-
104
- ## Licença e fontes
105
-
106
- LGPL-2.1-or-later. Veja [LICENSE](LICENSE), [NOTICE](NOTICE) e as licenças incluídas nos runtimes. Fontes de referência: [ACBr público](https://projetoacbr.com.br/fontes/), [SVN oficial](https://svn.code.sf.net/p/acbr/code/trunk2/) e [FCL-passrc](https://www.freepascal.org/daily/packages/fcl-passrc/index.html).
1
+ # cosmemilton-acbr-node
2
+
3
+ NF-e (55) e NFC-e (65) no Node.js, com modelos TypeScript gerados dos fontes públicos do ACBr e motor compilado com Free Pascal/Lazarus. Projeto independente; não é um produto oficial do ACBr. Não depende de Delphi nem dos binários ACBr Pro.
4
+
5
+ Documentação e exemplos: **[miltonjunior.dev.br/acbr-node](https://miltonjunior.dev.br/acbr-node/)**. Código e problemas: [GitHub](https://github.com/cosmemilton/acbr-node).
6
+
7
+ Requisitos de execução: Node.js 22.12 ou superior e Linux x64 Ubuntu 24.04/glibc ou Windows x64. A primeira versão usa certificado A1. Compiladores são necessários apenas para reconstruir o motor ou acompanhar uma revisão própria do ACBr.
8
+
9
+ ## Instalação e uso
10
+
11
+ ```bash
12
+ npm install cosmemilton-acbr-node
13
+ ```
14
+
15
+ O npm instala o runtime opcional da sua plataforma. Não use `--omit=optional` na instalação final. Também é possível informar `runtimeDirectory` para um motor próprio.
16
+
17
+ Esta documentação descreve a versão 0.2.0, que adiciona `recuperarXml` e mantém o help TAG introduzido na 0.1.2. A disponibilidade da 0.2.0 no npm só é anunciada após a confirmação dessa versão no registry.
18
+
19
+ Para instalar tarballs revisados em um projeto separado, informe o SDK e o runtime da plataforma:
20
+
21
+ ```bash
22
+ npm install --offline --ignore-scripts --no-audit --no-fund \
23
+ /caminho/cosmemilton-acbr-node-0.2.0.tgz \
24
+ /caminho/cosmemilton-acbr-node-linux-x64-0.2.0.tgz
25
+ ```
26
+
27
+ No Windows, selecione `cosmemilton-acbr-node-win32-x64-0.2.0.tgz`.
28
+
29
+ ```ts
30
+ import { writeFile } from 'node:fs/promises';
31
+ import { criarEmissor, TNFe, type TNFeInput } from 'cosmemilton-acbr-node';
32
+ import { nota } from './nota.js'; // nota: TNFeInput, com dados fiscais completos
33
+ import { lerA1Privado } from './credencial-local.js'; // função da aplicação
34
+
35
+ // A aplicação lê o PFX e pede a senha de forma oculta, sem argv, env ou logs.
36
+ const certificado = await lerA1Privado(); // { pfx: Uint8Array, senha: string }
37
+
38
+ const emissor = criarEmissor({
39
+ cnpj: '11222333000181',
40
+ uf: 'CE',
41
+ modelo: 55,
42
+ ambiente: 2,
43
+ certificado,
44
+ // Para NFC-e: modelo: 65, csc: { id: '000001', valor: 'seu CSC' }
45
+ });
46
+
47
+ try {
48
+ const gerado = await emissor.gerarXml(new TNFe(nota satisfies TNFeInput));
49
+ if (!gerado.sucesso || !gerado.xmlBase64) throw new Error(gerado.codigo);
50
+ const xml = Buffer.from(gerado.xmlBase64, 'base64').toString('utf8');
51
+ const assinado = await emissor.assinar(xml);
52
+ if (!assinado.sucesso || !assinado.xmlBase64) throw new Error(assinado.codigo);
53
+ const xmlAssinado = Buffer.from(assinado.xmlBase64, 'base64').toString('utf8');
54
+ const validado = await emissor.validar(xmlAssinado);
55
+ if (!validado.sucesso) throw new Error(validado.codigo);
56
+ await writeFile('./nota-assinada.xml', Buffer.from(assinado.xmlBase64, 'base64'));
57
+ // Transmissão explícita: await emissor.transmitir(xmlAssinado).
58
+ } finally {
59
+ try { await emissor.fechar(); }
60
+ finally { certificado.pfx.fill(0); certificado.senha = ''; }
61
+ }
62
+ ```
63
+
64
+ A biblioteca também aceita XML pronto em `assinar`, `validar`, `transmitir` e `recuperarXml`. As operações fiscais incluem `consultar`, `recuperarXml`, `cancelar`, `cartaCorrecao` (somente modelo 55) e `inutilizar`. `lerA1Privado` acima pertence à aplicação, não ao SDK. [API e protocolo](docs/API.md).
65
+
66
+ ## Recuperar o XML autorizado
67
+
68
+ `consultar({ chave })` continua devolvendo o XML de resposta da consulta em `xmlBase64`, normalmente `retConsSitNFe`. Para obter o processo completo a partir de uma NF-e já assinada e preservada, use `recuperarXml(xmlAssinado, opcoes?)`. O argumento `opcoes` pode ser omitido e aceita somente `signal?: AbortSignal`:
69
+
70
+ ```ts
71
+ const controlador = new AbortController();
72
+ const opcoes = { signal: controlador.signal };
73
+ // A interface pode chamar controlador.abort() para solicitar cancelamento.
74
+ const resultado = await emissor.recuperarXml(xmlAssinado, opcoes);
75
+ if (resultado.sucesso === true && resultado.estado === 'XML_RECUPERADO'
76
+ && resultado.cStat === 100 && resultado.xmlBase64) {
77
+ const xmlProcessado = Buffer.from(resultado.xmlBase64, 'base64');
78
+ // A aplicação decide onde guardar um arquivo NOVO; o original é preservado.
79
+ await writeFile(arquivoProcessadoPrivado, xmlProcessado, { flag: 'wx', mode: 0o600 });
80
+ }
81
+ ```
82
+
83
+ O sinal solicita o cancelamento da operação do SDK, sem cancelar a autorização fiscal. A consulta pode já ter sido enviada quando o sinal é acionado. Sem essa opção, chame `emissor.recuperarXml(xmlAssinado)`.
84
+
85
+ Essa operação faz uma consulta externa pela chave extraída do XML, com A1. O motor confere a assinatura da NFe original, seu schema, sua identidade e seu ambiente; só devolve `nfeProc` depois de confirmar `cStat=100`, protocolo correlacionado e `digVal` presente e exatamente igual ao `DigestValue` assinado. Não assina novamente, não emite, não transmite a nota nem grava arquivos fiscais automaticamente. A NFe e sua assinatura original são preservadas, e essa assinatura é verificada antes e depois da composição do processo; o arquivo original continua sob controle da aplicação.
86
+
87
+ Limitação da versão 0.2.0: se o `protNFe` recebido contiver uma assinatura XMLDSig (`ds:Signature`), a recuperação é recusada com `RECUPERACAO_NAO_COMPROVADA`, sem `xmlBase64` ou `protocolo`, mesmo com `cStat=100`. Esta versão não oferece verificação independente dessa assinatura adicional da SEFAZ. Nos protocolos aceitos, os dados vêm da resposta real da consulta e a prova por `digVal` continua obrigatória.
88
+
89
+ Sem digest, com divergência ou com outro status, inclusive `150` e `217`, a recuperação não retorna XML processado nem protocolo. Confira o diagnóstico; não repita nem emita uma nova nota automaticamente para obter o arquivo. `envioIniciado=false` nessa operação não significa ausência de rede: a consulta externa ocorreu sem transmissão de nota ou evento.
90
+
91
+ Atualize o pacote principal e o runtime da sua plataforma juntos. O manifesto do motor precisa anunciar `capabilities: ['recuperarXml']`; um runtime antigo é recusado com `RUNTIME_SEM_CAPACIDADE` antes de iniciar o processo. Veja o [contrato completo](docs/API.md#consulta-e-recuperação-do-xml) e o [exemplo de integração por arquivo](docs/examples/recuperar-xml.mjs), que não executa nenhuma operação ao ser importado. Os testes usam XML e A1 sintéticos com serviço SOAP local, sem SEFAZ real.
92
+
93
+ ## Modelos e atualizações explícitas
94
+
95
+ Nomes, grupos e enums espelham o ACBr. Construtores recebem objetos; coleções são arrays tipados e oferecem `New()`. Valores decimais são strings, preservando escala e evitando conversão binária pelo JavaScript. Datas são strings ISO civis, por exemplo `2026-10-08T12:30:00`; o ACBr aplica o fuso da UF na escrita do XML. Campos omitidos preservam os padrões do componente. Assinatura, protocolo e informações suplementares produzidas pelo motor não são entradas editáveis.
96
+
97
+ A versão 0.2.0 mantém a revisão SVN **48590**, com **204 tipos gerados** e contrato `e5a497cefe8e0e350a30da5cc04e88b35c38a98535893d52f878890260d1346d`. Revisão, inventário e hashes estão em `acbr.lock.json`; cliente e motor recusam contratos diferentes. Não há atualização automática dos fontes ao instalar.
98
+
99
+ ```bash
100
+ npx acbr-node init --revision 48590
101
+ npx acbr-node source update --revision 48590
102
+ npx acbr-node generate
103
+ npx acbr-node build
104
+ npx acbr-node check
105
+ npx acbr-node doctor
106
+ ```
107
+
108
+ Use `npx cosmemilton-acbr-node init` sem instalação prévia. O comando `generate` produz `generated/acbr/models.ts` e `generated/acbr/index.ts`, além do carregador Pascal. Em uma aplicação com revisão própria, importe `criarEmissor` de `./generated/acbr/index.js` e indique o diretório do runtime compilado.
109
+
110
+ O relatório `.acbr/generated/changes.json` registra adições, remoções e alterações de tipos. Tipos desconhecidos interrompem a geração. Breaking changes do ACBr exigem acompanhamento, testes e versionamento do adaptador. TortoiseSVN é opcional; a CLI usa SVN. [Fluxo completo da CLI](docs/CLI.md).
111
+
112
+ ## Reconstrução e validação
113
+
114
+ ```bash
115
+ npm install
116
+ npm run acbr -- source update --revision 48590
117
+ npm run acbr -- generate
118
+ npm run acbr -- build
119
+ npm run build
120
+ npm test
121
+ ACBR_NATIVE_TEST=1 npm run test:native
122
+ npm run pack:runtimes -- --all
123
+ ```
124
+
125
+ Consulte [arquitetura](docs/ARQUITETURA.md), [dependências nativas](docs/DEPENDENCIAS-NATIVAS.md) e [estado da validação](docs/VALIDACAO.md). Os runtimes incluem schemas, serviços, licenças, fontes correspondentes do ACBr e receita de reconstrução. O consumo dos tarballs com runtime não executa Free Pascal, Lazarus ou geração de código.
126
+
127
+ Linux e Windows passaram **52 testes do motor/TLS/SOAP local em cada plataforma**. TypeScript e build passaram; a suíte Node/CLI/gerador/auditoria passou 32 testes, com quatro suítes nativas opt-in ignoradas nessa execução e verificadas separadamente.
128
+
129
+ A instalação externa passou em ESM e CommonJS com Node 24.15.0 e 22.12.0 no Linux, e Node 22.12.0 no Windows, dois emitentes sintéticos e modelos 55/65, com compiladores fora do `PATH` e bibliotecas do runtime auditadas. Um consumidor externo completou o fluxo de fontes/geração/build em revisão própria 48589. A geração também foi executada nativamente no Windows, produzindo contrato e arquivos idênticos ao Linux.
130
+
131
+ Docker e CI remota de reconstrução dos motores não foram executados. A automação de publicação audita os tarballs já validados. Os detalhes e limites estão em [Validação](docs/VALIDACAO.md).
132
+
133
+ DANFE, impressão, A3, outros documentos e cálculos comerciais ficam para etapas posteriores. O preenchimento tributário continua sendo responsabilidade da aplicação. A homologação fiscal real é separada dos testes de implementação; os testes deste projeto usam dados sintéticos e serviços locais e não transmitem à SEFAZ.
134
+
135
+ ## Licença e fontes
136
+
137
+ LGPL-2.1-or-later. Veja [LICENSE](LICENSE), [NOTICE](NOTICE) e as licenças incluídas nos runtimes. Fontes de referência: [ACBr público](https://projetoacbr.com.br/fontes/), [SVN oficial](https://svn.code.sf.net/p/acbr/code/trunk2/) e [FCL-passrc](https://www.freepascal.org/daily/packages/fcl-passrc/index.html).
package/acbr.config.json CHANGED
@@ -1,16 +1,16 @@
1
- {
2
- "formatVersion": 1,
3
- "source": {
4
- "url": "https://svn.code.sf.net/p/acbr/code/trunk2",
5
- "revision": 48590,
6
- "directory": ".acbr/source"
7
- },
8
- "generator": {
9
- "outputDir": "."
10
- },
11
- "native": {
12
- "project": "native/acbr-worker.lpr",
13
- "outputDir": ".acbr/runtime",
14
- "fpc": "fpc"
15
- }
16
- }
1
+ {
2
+ "formatVersion": 1,
3
+ "source": {
4
+ "url": "https://svn.code.sf.net/p/acbr/code/trunk2",
5
+ "revision": 48590,
6
+ "directory": ".acbr/source"
7
+ },
8
+ "generator": {
9
+ "outputDir": "."
10
+ },
11
+ "native": {
12
+ "project": "native/acbr-worker.lpr",
13
+ "outputDir": ".acbr/runtime",
14
+ "fpc": "fpc"
15
+ }
16
+ }
package/acbr.lock.json CHANGED
File without changes