@forge/migrations 3.1.1-next.1-experimental-e03cc85 → 3.2.0-next.2

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/CHANGELOG.md CHANGED
@@ -1,16 +1,10 @@
1
1
  # @forge/migrations
2
2
 
3
- ## 3.1.1-next.1-experimental-e03cc85
3
+ ## 3.2.0-next.2
4
4
 
5
- ### Patch Changes
6
-
7
- - 0b5d453: Compile workspace packages with module/moduleResolution nodenext. Packages still emit CommonJS, aligned with the CLI’s Node 22+ runtime.
8
-
9
- Drop package-root TypeScript paths aliases in favour of package.json exports and barrel files. @forge/kvs now exports QueryBuilderOptions from the package root. @forge/manifest publishes a types-only @forge/manifest/schema subpath.
5
+ ### Minor Changes
10
6
 
11
- - Updated dependencies [0b5d453]
12
- - Updated dependencies [34b9985]
13
- - @forge/api@8.2.1-next.1-experimental-e03cc85
7
+ - 8d110da: Added `migration.getConfluenceMacroIndexIterator(transferId, { rowIndex })`, which iterates the Confluence macro index NDJSON file one parsed row at a time, beginning on the given row.
14
8
 
15
9
  ## 3.1.1-next.1
16
10
 
package/README.md CHANGED
@@ -52,6 +52,28 @@ Returns a signed download URL for the transfer's Confluence macro index. The app
52
52
  getConfluenceMacroIndexUrl: (transferId: string) => Promise<ConfluenceMacroIndexUrlResponse>;
53
53
  ```
54
54
 
55
+ ### Iterate Confluence macro index rows
56
+
57
+ Downloads the transfer's Confluence macro index (an NDJSON file) and returns an iterator that yields one parsed row per call to `next()`, beginning on `rowIndex` (default `0`).
58
+
59
+ ```typescript
60
+ getConfluenceMacroIndexIterator: (
61
+ transferId: string,
62
+ options?: { rowIndex?: number }
63
+ ) => AsyncIterableIterator<{ macroname: string; contentIds: string[] }>;
64
+ ```
65
+
66
+ Keep track of the index of the row you are processing so that you can resume from it if processing is interrupted:
67
+
68
+ ```typescript
69
+ let rowIndex = 0; // e.g. restored from where you last left off
70
+
71
+ for await (const row of migration.getConfluenceMacroIndexIterator(transferId, { rowIndex })) {
72
+ console.log(rowIndex, row.macroname, row.contentIds.length);
73
+ rowIndex++;
74
+ }
75
+ ```
76
+
55
77
  ### Retrieve Containers
56
78
 
57
79
  Returns a set of containers with a specified `containerType`.
package/out/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { migration, MigrationAPIError } from './migration';
2
2
  export { migration, MigrationAPIError };
3
- export type { ConfluenceMacroIndexUrlResponse } from './migration/migration-adaptor';
3
+ export type { ConfluenceMacroIndexRow, ConfluenceMacroIndexRowsOptions, ConfluenceMacroIndexUrlResponse } from './migration/migration-adaptor';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;AACxC,YAAY,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;AACxC,YAAY,EACV,uBAAuB,EACvB,+BAA+B,EAC/B,+BAA+B,EAChC,MAAM,+BAA+B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Migration } from './migration';
2
- import { AppDataIteratorOptions, AppDataPageOptions, ContainerType } from './migration-adaptor';
2
+ import { AppDataIteratorOptions, AppDataPageOptions, ConfluenceMacroIndexRowsOptions, ContainerType } from './migration-adaptor';
3
3
  import { DefaultQueryBuilder } from './query-api';
4
4
  export declare const getMigrationInstance: (adapter: Migration) => {
5
5
  getMappingById: (transferId: string, namespace: string, keys: Array<string>) => Promise<import("./migration-adaptor").MappingResponse>;
@@ -11,6 +11,7 @@ export declare const getMigrationInstance: (adapter: Migration) => {
11
11
  getAppDataIterator: (transferId: string, options?: AppDataIteratorOptions) => AsyncIterableIterator<import("./migration-adaptor").FileMetadata>;
12
12
  getAppDataPayload: (s3Key: string) => Promise<import("packages/forge-api/out").Response>;
13
13
  getConfluenceMacroIndexUrl: (transferId: string) => Promise<import("./migration-adaptor").ConfluenceMacroIndexUrlResponse>;
14
+ getConfluenceMacroIndexIterator: (transferId: string, options?: ConfluenceMacroIndexRowsOptions) => AsyncIterableIterator<import("./migration-adaptor").ConfluenceMacroIndexRow>;
14
15
  getMappings: (transferId: string, namespace: string) => DefaultQueryBuilder;
15
16
  getContainers: (transferId: string, containerType: ContainerType) => DefaultQueryBuilder;
16
17
  };
@@ -24,6 +25,7 @@ export declare const migration: {
24
25
  getAppDataIterator: (transferId: string, options?: AppDataIteratorOptions) => AsyncIterableIterator<import("./migration-adaptor").FileMetadata>;
25
26
  getAppDataPayload: (s3Key: string) => Promise<import("packages/forge-api/out").Response>;
26
27
  getConfluenceMacroIndexUrl: (transferId: string) => Promise<import("./migration-adaptor").ConfluenceMacroIndexUrlResponse>;
28
+ getConfluenceMacroIndexIterator: (transferId: string, options?: ConfluenceMacroIndexRowsOptions) => AsyncIterableIterator<import("./migration-adaptor").ConfluenceMacroIndexRow>;
27
29
  getMappings: (transferId: string, namespace: string) => DefaultQueryBuilder;
28
30
  getContainers: (transferId: string, containerType: ContainerType) => DefaultQueryBuilder;
29
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,oBAAoB,GAAI,SAAS,SAAS;iCAEtB,MAAM,aAAa,MAAM,QAAQ,KAAK,CAAC,MAAM,CAAC;mCAE5C,MAAM,aAAa,MAAM;gCAC5B,MAAM,aAAa,MAAM;yBAChC,MAAM,cAAc,MAAM;iCAClB,MAAM;iCACN,MAAM,YAAY,kBAAkB;qCAChC,MAAM,YAAY,sBAAsB;+BAE9C,MAAM;6CACQ,MAAM;8BACrB,MAAM,aAAa,MAAM;gCAEvB,MAAM,iBAAiB,aAAa;CAGnE,CAAC;AAEF,eAAO,MAAM,SAAS;iCACS,MAAM,aAAa,MAAM,QAAQ,KAAK,CAAC,MAAM,CAAC;mCAE5C,MAAM,aAAa,MAAM;gCAE5B,MAAM,aAAa,MAAM;yBAEhC,MAAM,cAAc,MAAM;iCAElB,MAAM;iCACN,MAAM,YAAY,kBAAkB;qCAEhC,MAAM,YAAY,sBAAsB;+BAE9C,MAAM;6CACQ,MAAM;8BAErB,MAAM,aAAa,MAAM;gCAEvB,MAAM,iBAAiB,aAAa;CAEjE,CAAC;AAEF,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,+BAA+B,EAC/B,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,oBAAoB,GAAI,SAAS,SAAS;iCAEtB,MAAM,aAAa,MAAM,QAAQ,KAAK,CAAC,MAAM,CAAC;mCAE5C,MAAM,aAAa,MAAM;gCAC5B,MAAM,aAAa,MAAM;yBAChC,MAAM,cAAc,MAAM;iCAClB,MAAM;iCACN,MAAM,YAAY,kBAAkB;qCAChC,MAAM,YAAY,sBAAsB;+BAE9C,MAAM;6CACQ,MAAM;kDACD,MAAM,YAAY,+BAA+B;8BAErE,MAAM,aAAa,MAAM;gCAEvB,MAAM,iBAAiB,aAAa;CAGnE,CAAC;AAEF,eAAO,MAAM,SAAS;iCACS,MAAM,aAAa,MAAM,QAAQ,KAAK,CAAC,MAAM,CAAC;mCAE5C,MAAM,aAAa,MAAM;gCAE5B,MAAM,aAAa,MAAM;yBAEhC,MAAM,cAAc,MAAM;iCAElB,MAAM;iCACN,MAAM,YAAY,kBAAkB;qCAEhC,MAAM,YAAY,sBAAsB;+BAE9C,MAAM;6CACQ,MAAM;kDAED,MAAM,YAAY,+BAA+B;8BAErE,MAAM,aAAa,MAAM;gCAEvB,MAAM,iBAAiB,aAAa;CAEjE,CAAC;AAEF,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
@@ -14,6 +14,7 @@ const getMigrationInstance = (adapter) => {
14
14
  getAppDataIterator: (transferId, options) => adapter.getAppDataIterator(transferId, options),
15
15
  getAppDataPayload: (s3Key) => adapter.getAppDataPayload(s3Key),
16
16
  getConfluenceMacroIndexUrl: (transferId) => adapter.getConfluenceMacroIndexUrl(transferId),
17
+ getConfluenceMacroIndexIterator: (transferId, options) => adapter.getConfluenceMacroIndexIterator(transferId, options),
17
18
  getMappings: (transferId, namespace) => new query_api_1.DefaultQueryBuilder(adapter, { transferId: transferId, namespace: namespace }),
18
19
  getContainers: (transferId, containerType) => new query_api_1.DefaultQueryBuilder(adapter, { transferId: transferId, containerType: containerType })
19
20
  };
@@ -29,6 +30,7 @@ exports.migration = {
29
30
  getAppDataIterator: (transferId, options) => (0, exports.getMigrationInstance)(new migration_1.Migration()).getAppDataIterator(transferId, options),
30
31
  getAppDataPayload: (s3Key) => (0, exports.getMigrationInstance)(new migration_1.Migration()).getAppDataPayload(s3Key),
31
32
  getConfluenceMacroIndexUrl: (transferId) => (0, exports.getMigrationInstance)(new migration_1.Migration()).getConfluenceMacroIndexUrl(transferId),
33
+ getConfluenceMacroIndexIterator: (transferId, options) => (0, exports.getMigrationInstance)(new migration_1.Migration()).getConfluenceMacroIndexIterator(transferId, options),
32
34
  getMappings: (transferId, namespace) => (0, exports.getMigrationInstance)(new migration_1.Migration()).getMappings(transferId, namespace),
33
35
  getContainers: (transferId, containerType) => (0, exports.getMigrationInstance)(new migration_1.Migration()).getContainers(transferId, containerType)
34
36
  };
@@ -6,6 +6,7 @@ export interface MigrationAdapter {
6
6
  getAppDataIterator(transferId: string, options?: AppDataIteratorOptions): AsyncIterableIterator<FileMetadata>;
7
7
  getAppDataPayload(s3Key: string): Promise<APIResponse>;
8
8
  getConfluenceMacroIndexUrl(transferId: string): Promise<ConfluenceMacroIndexUrlResponse>;
9
+ getConfluenceMacroIndexIterator(transferId: string, options?: ConfluenceMacroIndexRowsOptions): AsyncIterableIterator<ConfluenceMacroIndexRow>;
9
10
  messageProcessed(transferId: string, messageId: string): Promise<void>;
10
11
  messageFailed(transferId: string, messageId: string): Promise<void>;
11
12
  addLog(transferId: string, logMessage: string): Promise<void>;
@@ -40,6 +41,13 @@ export interface AppDataPayloadResponse {
40
41
  export interface ConfluenceMacroIndexUrlResponse {
41
42
  url: string;
42
43
  }
44
+ export interface ConfluenceMacroIndexRow {
45
+ macroname: string;
46
+ contentIds: string[];
47
+ }
48
+ export interface ConfluenceMacroIndexRowsOptions {
49
+ rowIndex?: number;
50
+ }
43
51
  export interface PaginationMappingResponse {
44
52
  meta: PaginationResponseMeta;
45
53
  items: Map<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"migration-adaptor.d.ts","sourceRoot":"","sources":["../../src/migration/migration-adaptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migration-adaptor.d.ts","sourceRoot":"","sources":["../../src/migration/migration-adaptor.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { AppDataIteratorOptions, AppDataListResponse, AppDataPageOptions, ConfluenceMacroIndexUrlResponse, FileMetadata, FileMetadataPageResponse, MappingResponse, MigrationAdapter, ListOptions, ListResults } from './migration-adaptor';
1
+ import { AppDataIteratorOptions, AppDataListResponse, AppDataPageOptions, ConfluenceMacroIndexRow, ConfluenceMacroIndexRowsOptions, ConfluenceMacroIndexUrlResponse, FileMetadata, FileMetadataPageResponse, MappingResponse, MigrationAdapter, ListOptions, ListResults } from './migration-adaptor';
2
2
  import { APIResponse } from '@forge/api';
3
3
  export declare class Migration implements MigrationAdapter {
4
4
  private readonly basePath;
@@ -8,6 +8,7 @@ export declare class Migration implements MigrationAdapter {
8
8
  getAppDataIterator(transferId: string, { pageSize }?: AppDataIteratorOptions): AsyncIterableIterator<FileMetadata>;
9
9
  getAppDataPayload: (key: string) => Promise<APIResponse>;
10
10
  getConfluenceMacroIndexUrl: (transferId: string) => Promise<ConfluenceMacroIndexUrlResponse>;
11
+ getConfluenceMacroIndexIterator(transferId: string, { rowIndex }?: ConfluenceMacroIndexRowsOptions): AsyncIterableIterator<ConfluenceMacroIndexRow>;
11
12
  messageProcessed: (transferId: string, messageId: string) => Promise<void>;
12
13
  messageFailed: (transferId: string, messageId: string) => Promise<void>;
13
14
  addLog: (transferId: string, logMessage: string) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/migration/migration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,+BAA+B,EAC/B,YAAY,EACZ,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,WAAW,EAIZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC,qBAAa,SAAU,YAAW,gBAAgB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEtD,cAAc,GAAU,YAAY,MAAM,EAAE,WAAW,MAAM,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,eAAe,CAAC,CAG3G;IAEF,cAAc,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAGvE;IAEF,cAAc,GAAU,YAAY,MAAM,EAAE,UAAS,kBAAuB,KAAG,OAAO,CAAC,wBAAwB,CAAC,CAY9G;IAEK,kBAAkB,CACvB,UAAU,EAAE,MAAM,EAClB,EAAE,QAAQ,EAAE,GAAE,sBAA2B,GACxC,qBAAqB,CAAC,YAAY,CAAC;IAWtC,iBAAiB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,WAAW,CAAC,CAE3D;IAEF,0BAA0B,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,+BAA+B,CAAC,CAG/F;IAEF,gBAAgB,GAAU,YAAY,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAO7E;IAEF,aAAa,GAAU,YAAY,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;IAEF,MAAM,GAAU,YAAY,MAAM,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAMpE;IAEF,WAAW,GACT,YAAY,MAAM,EAClB,YAAY,MAAM,EAClB,aAAa,MAAM,EACnB,WAAW,MAAM,KAChB,OAAO,CAAC,WAAW,CAAC,CAuBrB;IAEF,aAAa,GACX,YAAY,MAAM,EAClB,gBAAgB,MAAM,EACtB,aAAa,MAAM,EACnB,WAAW,MAAM,KAChB,OAAO,CAAC,WAAW,CAAC,CAsBrB;IAEF,IAAI,GAAU,SAAS,WAAW,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,WAAW,CAAC,CAI1E;CACH"}
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/migration/migration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,+BAA+B,EAC/B,+BAA+B,EAC/B,YAAY,EACZ,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,WAAW,EAIZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,qBAAa,SAAU,YAAW,gBAAgB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEtD,cAAc,GAAU,YAAY,MAAM,EAAE,WAAW,MAAM,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,eAAe,CAAC,CAG3G;IAEF,cAAc,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAGvE;IAEF,cAAc,GAAU,YAAY,MAAM,EAAE,UAAS,kBAAuB,KAAG,OAAO,CAAC,wBAAwB,CAAC,CAY9G;IAEK,kBAAkB,CACvB,UAAU,EAAE,MAAM,EAClB,EAAE,QAAQ,EAAE,GAAE,sBAA2B,GACxC,qBAAqB,CAAC,YAAY,CAAC;IAWtC,iBAAiB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,WAAW,CAAC,CAE3D;IAEF,0BAA0B,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,+BAA+B,CAAC,CAG/F;IAEK,+BAA+B,CACpC,UAAU,EAAE,MAAM,EAClB,EAAE,QAAY,EAAE,GAAE,+BAAoC,GACrD,qBAAqB,CAAC,uBAAuB,CAAC;IAUjD,gBAAgB,GAAU,YAAY,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAO7E;IAEF,aAAa,GAAU,YAAY,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;IAEF,MAAM,GAAU,YAAY,MAAM,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAMpE;IAEF,WAAW,GACT,YAAY,MAAM,EAClB,YAAY,MAAM,EAClB,aAAa,MAAM,EACnB,WAAW,MAAM,KAChB,OAAO,CAAC,WAAW,CAAC,CAuBrB;IAEF,aAAa,GACX,YAAY,MAAM,EAClB,gBAAgB,MAAM,EACtB,aAAa,MAAM,EACnB,WAAW,MAAM,KAChB,OAAO,CAAC,WAAW,CAAC,CAsBrB;IAEF,IAAI,GAAU,SAAS,WAAW,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,WAAW,CAAC,CAI1E;CACH"}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Migration = void 0;
4
+ const errors_1 = require("./errors");
5
+ const ndjson_reader_1 = require("./ndjson-reader");
4
6
  const utils_1 = require("./utils");
5
7
  class Migration {
6
8
  basePath = '/app/migration/forge/v1';
@@ -42,6 +44,14 @@ class Migration {
42
44
  const result = await (0, utils_1.invokePOSTApi)(`${this.basePath}/confluenceMacroIndex/${transferId}`, null);
43
45
  return (0, utils_1.getResponseBody)(result);
44
46
  };
47
+ async *getConfluenceMacroIndexIterator(transferId, { rowIndex = 0 } = {}) {
48
+ (0, ndjson_reader_1.assertValidStartRow)(rowIndex);
49
+ const response = await (0, utils_1.invokeGETApi)(`${this.basePath}/confluenceMacroIndex/download/${transferId}`);
50
+ if (response.status !== 200) {
51
+ throw errors_1.APIError.forStatus(response.status, response.statusText);
52
+ }
53
+ yield* (0, ndjson_reader_1.readNdjson)(await response.text(), { startRow: rowIndex });
54
+ }
45
55
  messageProcessed = async (transferId, messageId) => {
46
56
  const request = {
47
57
  status: 'SUCCESS',
@@ -0,0 +1,6 @@
1
+ export interface NdjsonReadOptions {
2
+ startRow?: number;
3
+ }
4
+ export declare function assertValidStartRow(startRow: number): void;
5
+ export declare function readNdjson<T = unknown>(body: string, { startRow }?: NdjsonReadOptions): Generator<T, void, undefined>;
6
+ //# sourceMappingURL=ndjson-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ndjson-reader.d.ts","sourceRoot":"","sources":["../../src/migration/ndjson-reader.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAK1D;AAMD,wBAAiB,UAAU,CAAC,CAAC,GAAG,OAAO,EACrC,IAAI,EAAE,MAAM,EACZ,EAAE,QAAY,EAAE,GAAE,iBAAsB,GACvC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAmB/B"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertValidStartRow = assertValidStartRow;
4
+ exports.readNdjson = readNdjson;
5
+ const errors_1 = require("./errors");
6
+ function assertValidStartRow(startRow) {
7
+ if (!Number.isInteger(startRow) || startRow < 0) {
8
+ throw errors_1.APIError.forUnexpected('rowIndex must be a non-negative integer');
9
+ }
10
+ }
11
+ function* readNdjson(body, { startRow = 0 } = {}) {
12
+ assertValidStartRow(startRow);
13
+ let row = 0;
14
+ for (const line of body.split('\n')) {
15
+ if (line.trim() === '') {
16
+ continue;
17
+ }
18
+ if (row++ < startRow) {
19
+ continue;
20
+ }
21
+ let parsed;
22
+ try {
23
+ parsed = JSON.parse(line);
24
+ }
25
+ catch {
26
+ throw errors_1.APIError.forUnexpected(`Row ${row - 1} was not valid JSON: ${line}`);
27
+ }
28
+ yield parsed;
29
+ }
30
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/migrations",
3
- "version": "3.1.1-next.1-experimental-e03cc85",
3
+ "version": "3.2.0-next.2",
4
4
  "description": "App migration methods for Forge app",
5
5
  "main": "out/index.js",
6
6
  "scripts": {
@@ -19,7 +19,7 @@
19
19
  "typescript": "5.9.2"
20
20
  },
21
21
  "dependencies": {
22
- "@forge/api": "8.2.1-next.1-experimental-e03cc85"
22
+ "@forge/api": "8.2.1-next.1"
23
23
  },
24
24
  "publishConfig": {
25
25
  "registry": "https://packages.atlassian.com/api/npm/npm-public/"