@rubydogjp/openkk-sqlite-adapter 26.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 (82) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapter.d.ts +4 -0
  3. package/dist/adapter.d.ts.map +1 -0
  4. package/dist/adapter.js +21 -0
  5. package/dist/adapter.js.map +1 -0
  6. package/dist/closing-store.d.ts +5 -0
  7. package/dist/closing-store.d.ts.map +1 -0
  8. package/dist/closing-store.js +113 -0
  9. package/dist/closing-store.js.map +1 -0
  10. package/dist/entry-store.d.ts +6 -0
  11. package/dist/entry-store.d.ts.map +1 -0
  12. package/dist/entry-store.js +266 -0
  13. package/dist/entry-store.js.map +1 -0
  14. package/dist/fiscal-period-guard.d.ts +6 -0
  15. package/dist/fiscal-period-guard.d.ts.map +1 -0
  16. package/dist/fiscal-period-guard.js +34 -0
  17. package/dist/fiscal-period-guard.js.map +1 -0
  18. package/dist/fiscal-period-record.d.ts +5 -0
  19. package/dist/fiscal-period-record.d.ts.map +1 -0
  20. package/dist/fiscal-period-record.js +32 -0
  21. package/dist/fiscal-period-record.js.map +1 -0
  22. package/dist/fiscal-period-store.d.ts +4 -0
  23. package/dist/fiscal-period-store.d.ts.map +1 -0
  24. package/dist/fiscal-period-store.js +364 -0
  25. package/dist/fiscal-period-store.js.map +1 -0
  26. package/dist/fiscal-period-transition.d.ts +4 -0
  27. package/dist/fiscal-period-transition.d.ts.map +1 -0
  28. package/dist/fiscal-period-transition.js +30 -0
  29. package/dist/fiscal-period-transition.js.map +1 -0
  30. package/dist/fixed-asset-store.d.ts +4 -0
  31. package/dist/fixed-asset-store.d.ts.map +1 -0
  32. package/dist/fixed-asset-store.js +142 -0
  33. package/dist/fixed-asset-store.js.map +1 -0
  34. package/dist/index.d.ts +5 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +4 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/master-data-store.d.ts +3 -0
  39. package/dist/master-data-store.d.ts.map +1 -0
  40. package/dist/master-data-store.js +39 -0
  41. package/dist/master-data-store.js.map +1 -0
  42. package/dist/migrate.d.ts +6 -0
  43. package/dist/migrate.d.ts.map +1 -0
  44. package/dist/migrate.js +53 -0
  45. package/dist/migrate.js.map +1 -0
  46. package/dist/opening-store.d.ts +7 -0
  47. package/dist/opening-store.d.ts.map +1 -0
  48. package/dist/opening-store.js +150 -0
  49. package/dist/opening-store.js.map +1 -0
  50. package/dist/persistence-codec.d.ts +9 -0
  51. package/dist/persistence-codec.d.ts.map +1 -0
  52. package/dist/persistence-codec.js +210 -0
  53. package/dist/persistence-codec.js.map +1 -0
  54. package/dist/record-validation.d.ts +11 -0
  55. package/dist/record-validation.d.ts.map +1 -0
  56. package/dist/record-validation.js +75 -0
  57. package/dist/record-validation.js.map +1 -0
  58. package/dist/runtime.d.ts +3 -0
  59. package/dist/runtime.d.ts.map +1 -0
  60. package/dist/runtime.js +7 -0
  61. package/dist/runtime.js.map +1 -0
  62. package/dist/schema.d.ts +7 -0
  63. package/dist/schema.d.ts.map +1 -0
  64. package/dist/schema.js +688 -0
  65. package/dist/schema.js.map +1 -0
  66. package/dist/seed-store.d.ts +4 -0
  67. package/dist/seed-store.d.ts.map +1 -0
  68. package/dist/seed-store.js +174 -0
  69. package/dist/seed-store.js.map +1 -0
  70. package/dist/sql-db.d.ts +9 -0
  71. package/dist/sql-db.d.ts.map +1 -0
  72. package/dist/sql-db.js +2 -0
  73. package/dist/sql-db.js.map +1 -0
  74. package/dist/table-types.d.ts +27 -0
  75. package/dist/table-types.d.ts.map +1 -0
  76. package/dist/table-types.js +2 -0
  77. package/dist/table-types.js.map +1 -0
  78. package/dist/transaction.d.ts +4 -0
  79. package/dist/transaction.d.ts.map +1 -0
  80. package/dist/transaction.js +21 -0
  81. package/dist/transaction.js.map +1 -0
  82. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAKA,MAAM,YAAY,GAAoB;IACpC,OAAO,EAAE,CAAC;IACV,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCN,CAAC,IAAI,EAAE;CACP,CAAC;AAEF,MAAM,YAAY,GAAoB;IACpC,OAAO,EAAE,CAAC;IACV,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgTN,CAAC,IAAI,EAAE;CACP,CAAC;AAEF,MAAM,YAAY,GAAoB;IACpC,OAAO,EAAE,CAAC;IACV,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;CAyBN,CAAC,IAAI,EAAE;CACP,CAAC;AAEF,MAAM,YAAY,GAAoB;IACpC,OAAO,EAAE,CAAC;IACV,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsSN,CAAC,IAAI,EAAE;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GACzB,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,OAAO,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DbSnapshot } from "@rubydogjp/openkk-server-ports";
2
+ import type { SqlDb } from "./sql-db.js";
3
+ export declare function seedStores(db: SqlDb, seed: DbSnapshot): Promise<void>;
4
+ //# sourceMappingURL=seed-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-store.d.ts","sourceRoot":"","sources":["../src/seed-store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,UAAU,EAEX,MAAM,gCAAgC,CAAC;AAexC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,wBAAsB,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E"}
@@ -0,0 +1,174 @@
1
+ import { assertUniqueIds, requireObject, serverValidationError, } from "@rubydogjp/openkk-server-domain";
2
+ import { insertEntryLines } from "./entry-store.js";
3
+ import { replaceOpening } from "./opening-store.js";
4
+ import { serializeFiscalPeriodDbData, serializeFixedAssetDbData, } from "./persistence-codec.js";
5
+ import { assertDbClosingYear, assertDbImportedClosingState, assertDbOpeningForPeriod, assertDbStoredEntryRecord, assertDbStoredFixedAssetRecord, } from "./record-validation.js";
6
+ import { nowMs } from "./runtime.js";
7
+ import { runInTransaction } from "./transaction.js";
8
+ export async function seedStores(db, seed) {
9
+ const now = nowMs();
10
+ const preparedSeed = prepareAndValidateSeed(seed);
11
+ await runInTransaction(db, async () => {
12
+ await seedStoresInner(db, preparedSeed, now);
13
+ });
14
+ }
15
+ function prepareAndValidateSeed(seed) {
16
+ const value = requireObject(seed, "Seed");
17
+ if (!Array.isArray(value.fiscalPeriods) ||
18
+ !Array.isArray(value.entries) ||
19
+ !Array.isArray(value.fixedAssets) ||
20
+ !Array.isArray(value.preClosings) ||
21
+ !Array.isArray(value.closings)) {
22
+ throw serverValidationError("Seed collections must be arrays", null);
23
+ }
24
+ const fiscalPeriods = value.fiscalPeriods.map((record) => {
25
+ if (record.opening == null) {
26
+ throw serverValidationError(`Seed fiscal period requires opening data: ${String(record.id)}`, null);
27
+ }
28
+ assertDbOpeningForPeriod(record.opening, record);
29
+ serializeFiscalPeriodDbData(record);
30
+ return record;
31
+ });
32
+ const periodsById = new Map();
33
+ const activePeriodsByUser = new Map();
34
+ for (const record of fiscalPeriods) {
35
+ if (periodsById.has(record.id)) {
36
+ throw serverValidationError(`Seed contains duplicate fiscal period id: ${record.id}`, null);
37
+ }
38
+ periodsById.set(record.id, record);
39
+ if (record.archiveStatus !== "active")
40
+ continue;
41
+ const activePeriods = activePeriodsByUser.get(record.userId) ?? [];
42
+ const overlap = activePeriods.find((existing) => record.startDate <= existing.endDate &&
43
+ record.endDate >= existing.startDate);
44
+ if (overlap != null) {
45
+ throw serverValidationError(`Seed fiscal period ${record.id} overlaps active fiscal period ${overlap.id}`, null);
46
+ }
47
+ activePeriods.push(record);
48
+ activePeriodsByUser.set(record.userId, activePeriods);
49
+ }
50
+ const entryLocalIds = new Set();
51
+ for (const entry of value.entries) {
52
+ const period = requireSeedFiscalPeriod(periodsById, entry.fiscalPeriodId);
53
+ assertDbStoredEntryRecord(entry, period);
54
+ assertSeedOwner(entry, period);
55
+ if (entry.localId == null)
56
+ continue;
57
+ const scopedLocalId = `${entry.fiscalPeriodId}\u0000${entry.localId}`;
58
+ if (entryLocalIds.has(scopedLocalId)) {
59
+ throw serverValidationError(`Seed contains duplicate entry localId: ${entry.localId}`, null);
60
+ }
61
+ entryLocalIds.add(scopedLocalId);
62
+ }
63
+ assertUniqueIds(value.entries, "Seed entry", null);
64
+ for (const asset of value.fixedAssets) {
65
+ const period = requireSeedFiscalPeriod(periodsById, asset.fiscalPeriodId);
66
+ assertDbStoredFixedAssetRecord(asset, period);
67
+ assertSeedOwner(asset, period);
68
+ serializeFixedAssetDbData(asset);
69
+ }
70
+ assertUniqueIds(value.fixedAssets, "Seed fixed asset", null);
71
+ const preClosingsByPeriod = groupSeedClosingRows(periodsById, value.preClosings, "pre-closing");
72
+ const closingsByPeriod = groupSeedClosingRows(periodsById, value.closings, "closing");
73
+ for (const period of periodsById.values()) {
74
+ const preClosings = preClosingsByPeriod.get(period.id) ?? [];
75
+ const closings = closingsByPeriod.get(period.id) ?? [];
76
+ if (period.archiveStatus === "purged") {
77
+ const hasArchivedData = value.entries.some((entry) => entry.fiscalPeriodId === period.id) ||
78
+ value.fixedAssets.some((asset) => asset.fiscalPeriodId === period.id) ||
79
+ preClosings.length > 0 ||
80
+ closings.length > 0 ||
81
+ period.opening.balanceLines.length > 0 ||
82
+ period.opening.journals.length > 0;
83
+ if (hasArchivedData) {
84
+ throw serverValidationError(`Seed archived fiscal period ${period.id} contains purged data`, null);
85
+ }
86
+ continue;
87
+ }
88
+ assertDbImportedClosingState(period, preClosings, closings);
89
+ }
90
+ return {
91
+ fiscalPeriods,
92
+ entries: value.entries,
93
+ fixedAssets: value.fixedAssets,
94
+ preClosings: value.preClosings,
95
+ closings: value.closings,
96
+ };
97
+ }
98
+ function requireSeedFiscalPeriod(periodsById, fiscalPeriodId) {
99
+ const period = periodsById.get(fiscalPeriodId);
100
+ if (period == null) {
101
+ throw serverValidationError(`Seed fiscal period not found: ${String(fiscalPeriodId)}`, null);
102
+ }
103
+ return period;
104
+ }
105
+ function assertSeedOwner(record, period) {
106
+ if (record.userId !== period.userId) {
107
+ throw serverValidationError(`Seed record owner does not match fiscal period ${period.id}: ${record.id}`, null);
108
+ }
109
+ }
110
+ function groupSeedClosingRows(periodsById, rows, label) {
111
+ const grouped = new Map();
112
+ for (const row of rows) {
113
+ const period = requireSeedFiscalPeriod(periodsById, row.fiscalPeriodId);
114
+ assertDbClosingYear(period, row.year);
115
+ const periodRows = grouped.get(period.id) ?? [];
116
+ if (periodRows.some((existing) => existing.year === row.year)) {
117
+ throw serverValidationError(`Seed contains duplicate ${label} marker for ${period.id}`, null);
118
+ }
119
+ periodRows.push({ year: row.year });
120
+ grouped.set(period.id, periodRows);
121
+ }
122
+ return grouped;
123
+ }
124
+ async function seedStoresInner(db, seed, now) {
125
+ for (const record of seed.fiscalPeriods) {
126
+ const serializedRecord = serializeFiscalPeriodDbData(record);
127
+ await db.exec({
128
+ sql: `INSERT INTO fiscal_periods(id, user_id, data, created_at, updated_at) VALUES(?, ?, ?, ?, ?)`,
129
+ bind: [record.id, record.userId, serializedRecord, now, now],
130
+ });
131
+ await replaceOpening(db, record.id, record.opening);
132
+ }
133
+ for (const entry of seed.entries) {
134
+ await db.exec({
135
+ sql: `INSERT INTO entries(id, fiscal_period_id, date, local_id, description, business_rate, created_at, updated_at) VALUES(?, ?, ?, ?, ?, ?, ?, ?)`,
136
+ bind: [
137
+ entry.id,
138
+ entry.fiscalPeriodId,
139
+ entry.date,
140
+ entry.localId,
141
+ entry.description,
142
+ entry.businessRate,
143
+ now,
144
+ now,
145
+ ],
146
+ });
147
+ await insertEntryLines(db, entry);
148
+ }
149
+ for (const asset of seed.fixedAssets) {
150
+ await db.exec({
151
+ sql: `INSERT INTO fixed_assets(id, fiscal_period_id, data, created_at, updated_at) VALUES(?, ?, ?, ?, ?)`,
152
+ bind: [
153
+ asset.id,
154
+ asset.fiscalPeriodId,
155
+ serializeFixedAssetDbData(asset),
156
+ now,
157
+ now,
158
+ ],
159
+ });
160
+ }
161
+ for (const preClosing of seed.preClosings) {
162
+ await db.exec({
163
+ sql: `INSERT INTO pre_closings(fiscal_period_id, year) VALUES(?, ?)`,
164
+ bind: [preClosing.fiscalPeriodId, preClosing.year],
165
+ });
166
+ }
167
+ for (const closing of seed.closings) {
168
+ await db.exec({
169
+ sql: `INSERT INTO closings(fiscal_period_id, year) VALUES(?, ?)`,
170
+ bind: [closing.fiscalPeriodId, closing.year],
171
+ });
172
+ }
173
+ }
174
+ //# sourceMappingURL=seed-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-store.js","sourceRoot":"","sources":["../src/seed-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface SqlDb {
2
+ exec(arg: string | {
3
+ sql: string;
4
+ bind?: unknown[];
5
+ returnValue?: string;
6
+ rowMode?: string;
7
+ }): Promise<unknown>;
8
+ }
9
+ //# sourceMappingURL=sql-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-db.d.ts","sourceRoot":"","sources":["../src/sql-db.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,IAAI,CACF,GAAG,EACC,MAAM,GACN;QACE,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GACJ,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB"}
package/dist/sql-db.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sql-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-db.js","sourceRoot":"","sources":["../src/sql-db.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import type { FiscalPeriodDbArchiveStatus, FiscalPeriodDbPhase, FixedAssetDbStatus } from "@rubydogjp/openkk-server-ports";
2
+ export type FiscalPeriodDbData = {
3
+ id: string;
4
+ name: string;
5
+ startDate: string;
6
+ endDate: string;
7
+ phase: FiscalPeriodDbPhase;
8
+ archiveStatus: FiscalPeriodDbArchiveStatus;
9
+ archivedAt: string | null;
10
+ openingBalancesCompleted: boolean;
11
+ documentsReceivedCompleted: boolean;
12
+ };
13
+ export type FixedAssetDbData = {
14
+ id: string;
15
+ fiscalPeriodId: string;
16
+ name: string;
17
+ acquisitionDate: string;
18
+ acquisitionCost: number;
19
+ usefulLife: number;
20
+ depreciationMethod: "straight_line";
21
+ businessRate: number;
22
+ status: FixedAssetDbStatus;
23
+ disposalDate: string | null;
24
+ disposalPrice: number | null;
25
+ bookAccountId: string;
26
+ };
27
+ //# sourceMappingURL=table-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-types.d.ts","sourceRoot":"","sources":["../src/table-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,aAAa,EAAE,2BAA2B,CAAC;IAC3C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wBAAwB,EAAE,OAAO,CAAC;IAClC,0BAA0B,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,eAAe,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=table-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-types.js","sourceRoot":"","sources":["../src/table-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { SqlDb } from "./sql-db.js";
2
+ export declare function runInTransaction<Result>(db: SqlDb, operation: () => Promise<Result>): Promise<Result>;
3
+ export declare function transactionRollbackError(operationError: unknown, rollbackError: unknown): AggregateError;
4
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,wBAAsB,gBAAgB,CAAC,MAAM,EAC3C,EAAE,EAAE,KAAK,EACT,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,OAAO,EACvB,aAAa,EAAE,OAAO,GACrB,cAAc,CAMhB"}
@@ -0,0 +1,21 @@
1
+ export async function runInTransaction(db, operation) {
2
+ await db.exec("BEGIN");
3
+ try {
4
+ const result = await operation();
5
+ await db.exec("COMMIT");
6
+ return result;
7
+ }
8
+ catch (operationError) {
9
+ try {
10
+ await db.exec("ROLLBACK");
11
+ }
12
+ catch (rollbackError) {
13
+ throw transactionRollbackError(operationError, rollbackError);
14
+ }
15
+ throw operationError;
16
+ }
17
+ }
18
+ export function transactionRollbackError(operationError, rollbackError) {
19
+ return new AggregateError([operationError, rollbackError], "SQLite operation failed and its transaction could not be rolled back", { cause: operationError });
20
+ }
21
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAS,EACT,SAAgC;IAEhC,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACvB,MAAM,wBAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,cAAc,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,cAAuB,EACvB,aAAsB;IAEtB,OAAO,IAAI,cAAc,CACvB,CAAC,cAAc,EAAE,aAAa,CAAC,EAC/B,sEAAsE,EACtE,EAAE,KAAK,EAAE,cAAc,EAAE,CAC1B,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@rubydogjp/openkk-sqlite-adapter",
3
+ "version": "26.2.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
12
+ },
13
+ "scripts": {
14
+ "lint": "tsc -p tsconfig.json --noEmit",
15
+ "build": "tsc -p tsconfig.build.json"
16
+ },
17
+ "dependencies": {
18
+ "@rubydogjp/openkk-server-domain": "^26.2.0",
19
+ "@rubydogjp/openkk-server-ports": "^26.2.0"
20
+ },
21
+ "devDependencies": {
22
+ "typescript": "^5.8.3"
23
+ },
24
+ "description": "オープン会計 shared SQLite implementation of OpenkkDbPort",
25
+ "license": "MIT",
26
+ "author": "rbdog <rbdog@rubydog.jp>",
27
+ "homepage": "https://github.com/rubydogjp/openkk#readme",
28
+ "bugs": {
29
+ "url": "https://github.com/rubydogjp/openkk/issues"
30
+ },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "git+https://github.com/rubydogjp/openkk.git",
34
+ "directory": "packages/sqlite-adapter"
35
+ },
36
+ "files": [
37
+ "dist"
38
+ ],
39
+ "publishConfig": {
40
+ "access": "public"
41
+ }
42
+ }